MODBUS-RTU報文模型
設(shè)備地址 功能代碼 數(shù)據(jù)格式 CRC校驗L CRC校驗H
8bit 8bit N*8bit 8bit 8bit
一個報文就是一幀數(shù)據(jù),一個數(shù)據(jù)幀就一個報文: 指的是一串完整的指令數(shù)據(jù),就像上面的一串數(shù)據(jù)。
主機對從機寫數(shù)據(jù)操作
如果單片機接收到一個報文那么就對報文進行解析執(zhí)行相應(yīng)的處理
0x01 06 00 01 00 17 98 04
從機地址 功能號 數(shù)據(jù)地址 數(shù)據(jù) CRC校驗
主機對從機讀數(shù)據(jù)操作
0x01 03 00 01 00 01 D5 CA
從機地址 功能號 數(shù)據(jù)地址 讀取數(shù)據(jù)個數(shù) CRC校驗
單片機接收到這串數(shù)據(jù)根據(jù)數(shù)據(jù)計算CRC校驗判斷數(shù)據(jù)是否正確,如果判斷數(shù)據(jù)無誤,則結(jié)果是:返回信息給主機,返回的信息也是有格式的:
從機對主機返回內(nèi)容
0x01 03 02 00 17 F8 4A
從機地址 功能號 數(shù)據(jù)字節(jié)個數(shù) 兩個字節(jié)數(shù)據(jù) CRC校驗
這樣MODBUS主機就完成了一次對從機數(shù)據(jù)的讀操作,實現(xiàn)了通訊。
MODBUS-RTU常用功能碼
數(shù)據(jù)類型
讀功能碼
寫功能碼
對象類型
離散量輸入
02
單個位
線圈狀態(tài)
01
05,15
單個位
輸入寄存器
04
16位字
保持寄存器
03
06,16
16位字
寄存器起始地址(起始數(shù)據(jù)地址)
數(shù)據(jù)類型
參數(shù)地址,寄存器編號
離散量輸入
00001~0FFFF
線圈狀態(tài)
10001~1FFFF
輸入寄存器
30001~3FFFF
保持寄存器
40001~4FFFF
舉例:
Modbus協(xié)議中寄存器地址從1開始,而實際存儲中地址從0開始。假如要讀取寄存器編號為40005(4為塊編號,5為modbus中寄存器地址)的寄存器的數(shù)據(jù),則應(yīng)把00
04放入報文的地址域。寄存器定義,又名碼表或者信息點表,應(yīng)由廠家提供的。
寄存器編號
屬性
定義
系數(shù)
備注
40001
RO
A相電壓
從40048中讀取電壓系數(shù)
40002
RO
B相電壓
如要讀A相電壓,則應(yīng)將0x00 0x00放入寄存器起始地址域中。
報文實例
1、讀40005、40006兩個寄存器,假設(shè)從機地址為1
下行報文:01 03 00 04 00 02 85 ca
從機地址
功能碼
寄存器起始地址
讀取寄存器個數(shù)
CRC校驗
01
03
00 04
00 02
85 ca
上行報文:01 03 04 00 00 00 00 21 33
從機地址
功能碼
返回字節(jié)個數(shù)
寄存器40005數(shù)據(jù)
寄存器40006數(shù)據(jù)
CRC校驗
01
03
04
00 00
00 00
21 33
2、向40005寄存器中寫入0x12,0x34,假設(shè)從機地址為1
下行報文:01 06 00 04 00 01 12 34 4a b0
從機地址
功能碼
寄存器起始地址
讀取寄存器個數(shù)
要寫入的數(shù)據(jù)
CRC校驗
01
03
00 04
00 01
12 34
85 ca
上行報文:01 06 00 04 00 01 12 34 4a b0
從機地址
功能碼
寄存器起始地址
讀取寄存器個數(shù)
寫入的數(shù)據(jù)
CRC校驗
01
03
00 04
00 01
12 34
85 ca
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。