Как я могу получить результат веса с помощью nodeJS

У меня проблема, я пытаюсь получить вес от Scale с NodeJS и модуля npm "Serialport" в Windows.

У меня проблема в том, что не имеет значения команда, которую я отправил в Scale, она не возвращает никаких данных.

Я уже скомпилировал серийный порт модуля для проекта, который я делаю на nwJS, и у меня есть следующий код:

    var SerialPort = require('serialport');

            var port = new SerialPort('COM4', {
                parser: SerialPort.parsers.readline('W\n'),
                baudRate: 9600,
                dataBits: 7,
                stopBits: 1,
                parity: 'even',
                bufferSize: 1024
            });

function write() {
            port.open(function(err) {
                console.log("Writing serial data: ");
                port.on('data', function(data) {
                    console.log('Data: ' + data);
                });
                port.write(resultString, function(err, res) {
                    if (err) {
                        console.log(err);
                    }
                    port.close();
                });
            });
        }
    port.on('error', function(err) {
                console.log('Error: ', err.message);
            })
            setTimeout(write, 1000);

Примечание: синтаксический анализатор W\n - это строка, в которой весы должны отправлять вес. Я проверил это с другим приложением под названием coolterm

Спасибо за любую помощь.

2 ответа

Решение

Скорее всего, проблема связана с настройкой парсера. Вместо парсера ReadLine:

 parser: SerialPort.parsers.readline('W\n'),

Попробуйте парсер разделителя:

var weight_parser = port.pipe(new Delimiter({delimiter: new Buffer('W\n')}));
...
parser: weight_parser,
...
parser.on('data', console.log);

Если это не сработает, для устранения неполадок попробуйте парсер ByteLength, чтобы увидеть, запускается ли событие "data" или нет.

В моем случае

1) I am using hapi JS 
2) Using latest serialport package version - 6.2.2 
3) Using Essae weighing machine connected to the port '/dev/ttyUSB0'

Приведенный ниже код работает отлично и дает правильный результат после стабилизации веса элемента (не изменяется).

"use strict";
const serialport = require('serialport');
const Readline = require('@serialport/parser-readline')

const getweight = {
  auth:false,
  handler: function(req, res)
  {
    const port = new serialport('/dev/ttyUSB0')
    const parser = port.pipe(new Readline({ delimiter: '\r\n' }))
    parser.on('data', function(w)
    {
      port.close();
      return res({
        weight: w.replace(/[^\d\.]*/g, '').trim()
      });
    });
  }
};

exports.routes = [
  {
    method: 'get',
    path: '/getweight',
    config: getweight,
  },
];
Другие вопросы по тегам