博客專欄

EEPW首頁 > 博客 > 工程監(jiān)測無線中繼采集儀的參數(shù)讀寫MODBUS協(xié)議

工程監(jiān)測無線中繼采集儀的參數(shù)讀寫MODBUS協(xié)議

發(fā)布人:河北穩(wěn)控科技 時間:2023-05-22 來源:工程師 發(fā)布文章

工程監(jiān)測無線中繼采集儀的參數(shù)讀寫MODBUS協(xié)議

511.png

無線中繼采集儀支持基于地址的 MODBUS 協(xié)議、自定義的 AAB/B 協(xié)議以及字符串指令集協(xié)議,使用這些通訊協(xié)議可對寄存器(參數(shù))進行訪問。


MODBUS 協(xié)議

無線中繼采集儀支持 MODBUS 的 03、 04、 06 指令碼。(1) 03(0x03) /03(0x04) 指令碼: 讀取多個連續(xù)的寄存器數(shù)據(jù),指令格式如下

MODBUS 協(xié)議.png


例:讀取地址為 129 的無線中繼采集儀寄存器值,寄存器開始地址為 0,連續(xù)讀取 10 個寄存器主機發(fā)送指令: 0x81 0x03 0x00 0x00 0x00 0x0A 0xDA 0x0D

從機返回應答: 81 03 14 00 81 00 01 00 02 00 01 00 01 00 0A 00 0A 00 01 09 60 00 07 A1 EF(下劃線為讀取到的 10 個寄存器值)讀取多個連續(xù)寄存器時, 單次讀取不要超過 32 個寄存器, 不要試圖讀取不存在的寄存器。


(2) 06(0x06) 指令碼: 修改單個寄存器的值, 指令格式如下

MODBUS 協(xié)議2.png


例:將地址為 129 的無線中繼采集儀中的寄存器 8 的值修改為 100 主機發(fā)送指令: 0x81 0x06 0x00 0x08 0x09 0x60 0x11 0xB0 從機返回應答: 0x81 0x06 0x00 0x08 0x09 0x60 0x11 0xB0

(3)校驗碼算法

CRC16-MODBUS 算法:

unsigned int crc16(unsigned char *dat, unsigned int len)

{

unsigned int crc=0xffff;

unsigned char i;

while(len!=0)

{

crc^=*dat;

for(i=0;i<8;i++)

{

if((crc&0x0001)==0)

crc=crc>>1;

else

{

crc=crc>>1;

crc^=0xa001;

}

}

len-=1;

dat++;

}

return crc;

}





*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯(lián)系工作人員刪除。




相關推薦

技術專區(qū)

關閉