[英]How to solve a checksum mismatch error using the XBee API in Node.js
Node.js (在Ubuntu 上)使用XBee API 庫作為ZigBee協調器 API,每隔一分鍾將數據發送到 XBee 作為 ZigBee 路由器 AT。 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);
});
是否可以打印(到stdout)發送的每個幀以及校驗和幀的十六進制轉儲,以便您可以看到哪個幀標記有錯誤? 您能以某種方式監視串行線以查看實際發送的內容嗎? 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', function (data) { xbeeAPI.parseRaw(data); });
然后您可以按照所需的方式處理收到的幀
xbeeAPI.on("frame_object", function(frame) { ... };
我在使用“ND”AT 命令掃描網絡時遇到了同樣的問題,設備應該分別發送一個包含 ID、MAC 64 和 16 等的幀,在這種情況下,在接收所有設備回答時出現問題同時,特別是在使用兩個以上的設備或路由器時,會損壞緩沖區,導致xbee-api解析器無法正常工作。 所以你需要使用更高的波特率。 使用波特率 57600(選項 6)或 115200(選項 7)的 API 2 模式問題消失,對我來說工作正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.