簡體   English   中英

如何在 Node.js 中使用 XBee API 解決校驗和不匹配錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM