MODBUS-RTU數(shù)據(jù)幀格式、報(bào)文實(shí)例
MODBUS-RTU報(bào)文模型
設(shè)備地址 本文引用地址:http://butianyuan.cn/article/202312/453989.htm | 功能代碼 | 數(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ī)對(duì)從機(jī)寫數(shù)據(jù)操作
如果單片機(jī)接收到一個(gè)報(bào)文那么就對(duì)報(bào)文進(jìn)行解析執(zhí)行相應(yīng)的處理
0x01 | 06 | 00 01 | 00 17 | 98 04 |
從機(jī)地址 | 功能號(hào) | 數(shù)據(jù)地址 | 數(shù)據(jù) | CRC校驗(yàn) |
主機(jī)對(duì)從機(jī)讀數(shù)據(jù)操作
0x01 | 03 | 00 01 | 00 01 | D5 CA |
從機(jī)地址 | 功能號(hào) | 數(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ī)對(duì)主機(jī)返回內(nèi)容
0x01 | 03 | 02 | 00 17 | F8 4A |
從機(jī)地址 | 功能號(hào) | 數(shù)據(jù)字節(jié)個(gè)數(shù) | 兩個(gè)字節(jié)數(shù)據(jù) | CRC校驗(yàn) |
這樣MODBUS主機(jī)就完成了一次對(duì)從機(jī)數(shù)據(jù)的讀操作,實(shí)現(xiàn)了通訊。
MODBUS-RTU常用功能碼
數(shù)據(jù)類型 | 讀功能碼 | 寫功能碼 | 對(duì)象類型 |
離散量輸入 | 02 | 單個(gè)位 | |
線圈狀態(tài) | 01 | 05,15 | 單個(gè)位 |
輸入寄存器 | 04 | 16位字 | |
保持寄存器 | 03 | 06,16 | 16位字 |
寄存器起始地址(起始數(shù)據(jù)地址)
數(shù)據(jù)類型 | 參數(shù)地址,寄存器編號(hào) |
離散量輸入 | 00001~0FFFF |
線圈狀態(tài) | 10001~1FFFF |
輸入寄存器 | 30001~3FFFF |
保持寄存器 | 40001~4FFFF |
舉例:
Modbus協(xié)議中寄存器地址從1開始,而實(shí)際存儲(chǔ)中地址從0開始。假如要讀取寄存器編號(hào)為40005(4為塊編號(hào),5為modbus中寄存器地址)的寄存器的數(shù)據(jù),則應(yīng)把00
04放入報(bào)文的地址域。寄存器定義,又名碼表或者信息點(diǎn)表,應(yīng)由廠家提供的。
寄存器編號(hào) | 屬性 | 定義 | 系數(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 |
評(píng)論