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

时间:2014-11-25 13:38:21

标签: javascript node.js xbee

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);
});

3 个答案:

答案 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) { ... };