2014-11-25 62 views
1

Node.js(上Ubuntu)解决使用的XBee API的校验和不匹配错误使用XBee API库作为ZigBee协调API将数据发送到的XBee的ZigBee路由器每隔一分钟。 10分钟就可以了,但在此之后它报告了一个错误:如何在Node.js的

Error: Checksum Mismatch

我该如何解决这个问题?

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

回答

1

是否可以打印(到stdout)每帧的十六进制转储发送和校验框架,所以你可以看到哪些框架将被标记错误?你能以某种方式监视串行线路,看看你实际发送了什么吗? XBee模块如何连接到主机?它是否使用可能会遇到噪音的长串行电缆?

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

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

0

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

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