RS485 Modbus協議解析

    在工作中,當我們採集採用RS485主從式半雙工通訊的傳感器時,會接觸到Modbus協議。有時我們手上沒有實物,只能通過協議文檔手冊,編寫完代碼後,自己用RS485來模擬發送驗證。下面就說說如何快速組裝數值發送驗證,以及解析數值。

標準Modbus協議結構如下:

主機發送讀寄存器協議數據結構形式爲:

設備地址           1字節

讀寄存器命令   1字節

寄存器地址       2字節

讀寄存器個數   2字節

CRC校驗(低字節在前,高字節在後)   2字節

 

例(主機發送數據到傳感器):01 03 00 12 00 02 64 0E

解析:

01    表示設備地址

03    表示讀寄存器指令

00 12 表示寄存器的起始地址

00 02 表示讀取兩個寄存器

64 0E 表示CRC校驗碼

 

從機返回寄存器是數據結構形式爲:

設備地址   1字節

讀寄存器命令   1字節

讀取字節個數   N字節

XX *N   N個所讀取字節數據

CRC校驗(低字節在前,高字節在後)

 

例(傳感器發送回給主機):01 03 04 41 E6 28 F6 91 BE

解析:

01          表示設備地址

03          表示讀寄存器指令

04          表示有四個16進制數據

41 E6 28 F6  表示傳感器的有效數據

91 BE       表示CRC校驗碼

 

1.若廠家對傳感器的數據存儲採用標準單精度浮點數方式,則對於一串採集回來的16進制數據,要轉成浮點數是比較麻煩的,可以看下先用科學計數法方式存儲計算:

方式1:如解析上述的返回值41 E6 28 F6

計算 41 E6 28 F6 (採用科學計數法方式存儲計算)

轉爲二進制:01000001111001100010100011110110‬

紅色’0’:表示符號位,1爲負,0爲正

10000011:表示指數位,轉爲十進制爲2^0+2^1+2^7=131 131-127=4 說明指數位爲4

則表示爲((1.11001100010100011110110)*2^4)=11100. 1100010100011110110=

2^2+2^3+2^4. 2^-1+2^-2+..=28.77

41 E6 28 F6 轉爲十進制爲28.77

 

方式2:採用工具快速轉換,如下圖所示

有了該工具,想要自己模擬發送任意數值的modbus協議數據,也是非常方便的。

比如主機發送了01 03 00 12 00 02 64 0E 採集命令,想要模擬傳感器數值爲12.34

通過工具轉換如下:

則可組裝modbus協議數據爲01 03 04 41 45 70 A4 , 對於後面兩位crc校驗可以採用如下工具,可以得到:

可知組裝的完整mobdus協議數據爲01 03 04 41 45 70 A4 DB A1

2.若廠家對傳感器的數據處理是採用16進制轉整數方式處理,就像如下圖所示:

這種形式的16進制傳感器數據,可以採用電腦的計算器快速計算得到。

如計算00 9B

16進制模擬負值,可以採用計算器

如模擬-50,計算器輸入如下0-50

再點擊計算器上的xor

則16進制FF CE 則表示負數-50

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章