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

Javascript 如何使用Node.js中的XBee API解决校验和不匹配错误,javascript,node.js,xbee,Javascript,Node.js,Xbee,(on)使用API库作为协调器API,每一分钟将数据作为ZigBee路由器发送到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

(on)使用API库作为协调器API,每一分钟将数据作为ZigBee路由器发送到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);
});
是否可以打印(到标准输出)发送的每个帧的十六进制转储,以及校验和帧,以便您可以看到哪个帧标记有错误?你能用某种方式监控串行线路,看看你到底在发送什么吗?XBee模块如何连接到主机?它是否使用可能会遇到噪音的长串行电缆

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


您可能不应该硬编码每个数据包上的帧ID相同——这可能是问题的原因,如果它们都使用相同的ID,您将不知道哪个帧有校验和错误。错误帧包括一个用于生成错误的帧ID的字段。

我和您有相同的问题。我的问题是,在XBee协调器模块的配置中,我将API模式(参数AP)设置为2(带转义的API)。在node.js代码中,我将API模式设置为1,正如您在代码中所做的那样。必须将两者中的API模式设置为相同,否则解析器将抛出错误,因此修复方法是将代码更改为API 2或将模块的配置更改为API 1


我知道我有点晚了,但我想我会回答的,以防其他人和我有同样的问题

如果您的代码配置与xbee模块配置不匹配,则会发生这种情况,只要确保您在这两种情况下都配置了相同的API模式,则必须调用serialport解析器并将数据传递给xbee解析器:

serialport.on('data',函数(data){
xbeeAPI.parseRaw(数据);
});


然后,您可以按照自己的方式处理接收到的帧

xbeeAPI.on(“frame_对象”,函数(frame){…};