Node.js 节点serialport的自定义解析器?
输入数据,如STX(0x02)…data..ETX(0x03) 我可以通过Node.js 节点serialport的自定义解析器?,node.js,serial-port,node-serialport,Node.js,Serial Port,Node Serialport,输入数据,如STX(0x02)…data..ETX(0x03) 我可以通过字节序列解析器处理数据: var SerialPort = require('serialport'); var port = new SerialPort('/dev/tty-usbserial1', { parser: SerialPort.parsers.byteDelimiter([3]) }); port.on('data', function (data) { console.log('Data:
字节序列解析器处理数据
:
var SerialPort = require('serialport');
var port = new SerialPort('/dev/tty-usbserial1', {
parser: SerialPort.parsers.byteDelimiter([3])
});
port.on('data', function (data) {
console.log('Data: ' + data);
});
但我的实际输入数据是STX(0x02)…data..ETX(0x03)…XX(加上2个字符以验证数据)
如何获得适当的数据
谢谢 解决了
我编写自己的解析器:
var SerialPort = require('serialport');
var incommingData = new Buffer(0);
var myParser = function(emitter, buffer) {
incommingData = Buffer.concat([incommingData, buffer]);
if (incommingData.length > 3 && incommingData[incommingData.length - 3] == 3) {
emitter.emit("data", incommingData);
incommingData = new Buffer(0);
}
};
var port = new SerialPort('COM1', {parser: myParser});
port.on('data', function(data) {
console.log(data);
});
由于节点serialport的版本2或3,解析器必须继承Stream.Tansform类。在您的示例中,这将成为一个新类 创建一个名为CustomParser.js的文件:
class CustomParser extends Transform {
constructor() {
super();
this.incommingData = Buffer.alloc(0);
}
_transform(chunk, encoding, cb) {
// chunk is the incoming buffer here
this.incommingData = Buffer.concat([this.incommingData, chunk]);
if (this.incommingData.length > 3 && this.incommingData[this.incommingData.length - 3] == 3) {
this.push(this.incommingData); // this replaces emitter.emit("data", incomingData);
this.incommingData = Buffer.alloc(0);
}
cb();
}
_flush(cb) {
this.push(this.incommingData);
this.incommingData = Buffer.alloc(0);
cb();
}
}
module.exports = CustomParser;
他们使用的解析器如下所示:
var SerialPort = require('serialport');
var CustomParser = require('./CustomParser ');
var port = new SerialPort('COM1');
var customParser = new CustomParser();
port.pipe(customParser);
customParser.on('data', function(data) {
console.log(data);
});
获取:
TypeError[ERR\u INVALID\u ARG\u TYPE]:“emitter”参数必须是EventEmitter的实例。收到类型字符串('unpipe')
请参见我自己的问题