新手使用nodejs的SerialPort获取数据时需要注意的一个小点
onData(callback: (data: Buffer) => void): void {
if (this.serialPort != null) {
this.serialPort.on("data", (data: Buffer) => {
callback(data);
})
}
}
上面的代码相当于当串口接收到数据之后就通知callback将数据回调。虽然用串口和网口socket用了几十次,但是就是不长记性。
无论是串口通信还是网口通信,他们就像流水,它并不是一次性就把数据收集好给开发人员,需要开发人员自己收集。如果约定好通信格式是每次12Byte,则需要自己手动去收集。改造如下
private datapool:Buffer=null;
onData(callback: (data: Buffer) => void): void {
if (this.serialPort != null) {
this.serialPort.on("data", (data: Buffer) => {
// 将得到的数据先收集到一个水桶里
if(this.datapool == null){this.datapool = data;}
else {this.datapool = Buffer.concat([this.datapool,data])}
//判断是否达到可以返回的条件
if(this.datapool.length >= 12){
//从水桶里裁剪12byte的长度返回(切勿使用splice)
callback(this.dataPool.subarray(0,12));
this.dataPool = this.dataPool.subarray(12,this.dataPool.length);
}
})
}
}
(´-﹏-`;)毁灭吧,我累了