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