新手使用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);
                }
            })
        }
    }
posted @ 2023-10-31 09:27  麦块程序猿  阅读(531)  评论(0编辑  收藏  举报