2014-11-25 38 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.

我知道我有點晚了,但是我想我會回答,以防別人遇到同樣的麻煩!