串行读取节点js

时间:2018-01-29 19:49:01

标签: javascript node.js serial-port buffer

我确实需要在串口上获得与我的计算机连接的天平的重量,但是当我从设备获取数据时它会返回一个缓冲阵列

余额的文件说回报是: [STX] [PPPPPP] [CR] PPPPPP是来自余额的重量。

这是回报:

Buffer(8) [24, 24, 0, 24, 24, 24, 152, 248]
Buffer(8) [24, 158, 0, 0, 24, 24, 24, 24]
Buffer(8) [248, 0, 120, 24, 24, 24, 24, 24]

这是我的代码:

let SerialPort = require('serialport');
let port = new SerialPort('/dev/tty.usbserial', { autoOpen: false });

SerialPort.list(function (err, ports) {
    ports.forEach(function(port) {
        console.log(port.comName);
    });
});

port.open(function (err) {
    if (err) {
        return console.log('Error opening port: ', err.message);
    }
});

// The open event is always emitted
port.on('open', function() {
    console.log('Open Port');
});

const ByteLength = SerialPort.parsers.ByteLength;
const parser = port.pipe(new ByteLength({length: 8}));
parser.on('data', function (data) {
    console.log('Data: ', data);
});

一旦我对串行阅读一无所知,我可以通过互联网获取信息的时间越长,任何人都可以解释我可以使这些数据“可读”的内容或方法吗?

有关串行设备可能有用的其他信息: 1停止位; 8位数据; 没有平等。

1 个答案:

答案 0 :(得分:0)

我几乎遇到了完全相同的问题,并且我也正在使用秤/天平来通过COM串行端口读取数据。 最终解决我的问题的是在更新节点串行端口和设备管理器中COM端口的设置时更改端口设置。

根据设备手册(Ohaus Navigator XT),它默认为2400波特,7位,无奇偶校验,无握手信号,我将设备上的COM端口在设备管理器(Windows 10)中的端口设置更改为比赛。 (使用他们的软件,我能够读取来自天平的数据,但是当我运行串行端口代码时,它们作为垃圾数据而来。)

将设备管理器中的设置更改回Windows默认值(9600波特,8位无奇偶校验,1个停止位,流控制:无),然后在更新串行端口并更改设置时匹配这些值匹配这些设置的设备将允许可读数据通过而无需在代码中进行转换。

const SerialPort = require('serialport')
const Readline = SerialPort.parsers.Readline
const port = new SerialPort('COM3', { 
    baudRate: 9600, 
    databits: 8, 
    parity: 'none', 
    stopBits: 1, 
    flowControl: false
})
const parser = new Readline()
port.pipe(parser)
parser.on('data', data => console.log(`data: ${data}`)) // data:    26.0 g

希望这会有所帮助。