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);
});
答案 0 :(得分:1)
是否可以打印(到stdout)发送的每个帧的十六进制转储,以及校验和帧,以便您可以看到哪个帧被标记为错误?您能否以某种方式监控串行线以查看您实际发送的内容? XBee模块如何连接到主机?它是否使用可能遇到噪音的长串行电缆?
您是否总是在10个数据包之后收到错误,或者它是否有变化?如果将波特率更改为9600或115200,错误率是否保持不变,变得更频繁或消失?
你可能不应该硬编码每个数据包上的帧ID相同 - 它可能导致问题,并且你不知道哪个帧有校验和错误,如果他们&# 39;全部使用相同的ID。错误帧包括生成错误的帧ID的字段。
答案 1 :(得分:0)
我和你有同样的问题。我的问题是在XBee协调器模块的配置中,我将API模式(参数AP)设置为2(带有转义的API)。在node.js代码中,我将API模式设置为1,就像在代码中一样。必须将API模式设置为相同,否则解析器将抛出错误,因此修复方法是将代码更改为API 2或将模块的配置更改为API 1.
我知道的有点晚了,但我想我会回答以防其他人遇到同样的问题!
答案 2 :(得分:0)
如果代码配置和xbee模块配置不匹配,则会发生这种情况,只需确保两种情况下都配置了相同的API模式,然后必须调用serialport解析器并将数据传递给xbee解析器:
serialport.on('data', function (data) {
xbeeAPI.parseRaw(data);
});
然后您可以按照想要的方式处理收到的帧
xbeeAPI.on("frame_object", function(frame) { ... };