如何使用Node.js中的XBee API来解决校验和不匹配错误

Node.js (在Ubuntu上 )使用XBee API库作为ZigBee协调器API,每隔一分钟将数据作为ZigBee路由器AT发送到XBee。 10分钟没事,但之后报错:

错误:校验和不匹配

我如何解决这个问题?

var util = require('util'); var SerialPort = require('serialport').SerialPort; var xbee_api = require('xbee-api'); var C = xbee_api.constants; var xbeeAPI = new xbee_api.XBeeAPI({ api_mode: 1 }); var serialport = new SerialPort("COM19", { baudrate: 57600, parser: xbeeAPI.rawParser() }); serialport.on("open", function() { var frame_obj = { type: 0x10, // xbee_api.constants.FRAME_TYPE.ZIGBEE_TRANSMIT_REQUEST id: 0x01, // Optional, nextFrameId() is called per default destination64: "0013a200400a0127", destination16: "fffe", // Optional, "fffe" is default broadcastRadius: 0x00, // Optional, 0x00 is default options: 0x00, // Optional, 0x00 is default data: "TxData0A" // Can either be a string or byte array. }; serialport.write(xbeeAPI.buildFrame(frame_obj)); }); // All frames parsed by the XBee will be emitted here xbeeAPI.on("frame_object", function(frame) { console.log(">>", frame); }); 

是否有可能打印(至标准输出)发送的每个帧的hex转储和校验和帧,以便您可以看到哪个帧标记了错误? 你能以某种方式监视串行线路,看看你实际发送的是什么吗? XBee模块如何连接到主机? 它是否使用可能会遇到噪音的长串行电缆?

你是否总是在10个数据包之后得到错误,还是会有所不同? 如果将波特率更改为9600或115200,错误率保持不变,变得更频繁或者消失?

你可能不应该对每个数据包的帧ID进行硬编码 – 这可能会导致问题,并且你不知道哪个帧有校验和错误,如果它们都使用相同的ID。 错误帧包含产生错误的帧ID的字段。

我和你有同样的问题。 在我的情况下,问题是在XBee协调模块的configuration中,我已经设置了API模式(参数AP)为2(具有转义的API)。 在node.js代码中,我将API模式设置为1,就像您在代码中一样。 API模式必须设置为两者相同,否则parsing器将引发错误,因此修复方法是将代码更改为API 2或将模块的configuration更改为API 1。

我知道我有点迟了,但是以为我会回答,以防别人遇到同样的麻烦!