MODBUS-RTU資料幀格式、報文例項
MODBUS-RTU報文模型
裝置地址 | 功能程式碼 | 資料格式 | CRC校驗L | CRC校驗H |
---|---|---|---|---|
8bit | 8bit | N*8bit | 8bit | 8bit |
一個報文就是一幀資料,一個數據幀就一個報文: 指的是一串完整的指令資料,就像上面的一串資料。
主機對從機寫資料操作
如果微控制器接收到一個報文那麼就對報文進行解析執行相應的處理
0x01 | 06 | 00 01 | 00 17 | 98 04 |
---|---|---|---|---|
從機地址 | 功能號 | 資料地址 | 資料 | CRC校驗 |
主機對從機讀資料操作
0x01 | 03 | 00 01 | 00 01 | D5 CA |
---|---|---|---|---|
從機地址 | 功能號 | 資料地址 | 讀取資料個數 | CRC校驗 |
微控制器接收到這串資料根據資料計算CRC校驗判斷資料是否正確,如果判斷資料無誤,則結果是:返回資訊給主機,返回的資訊也是有格式的:
從機對主機返回內容
0x01 | 03 | 02 | 00 17 | F8 4A |
---|---|---|---|---|
從機地址 | 功能號 | 資料位元組個數 | 兩個位元組資料 | CRC校驗 |
這樣MODBUS主機就完成了一次對從機資料的讀操作,實現了通訊。
MODBUS-RTU常用功能碼
資料型別 |
讀功能碼 |
寫功能碼 |
物件型別 |
離散量輸入 |
02 |
|
單個位 |
線圈狀態 |
01 |
05,15 |
單個位 |
輸入暫存器 |
04 |
|
16位字 |
保持暫存器 |
03 |
06,16 |
16位字 |
暫存器起始地址(起始資料地址)
資料型別 |
引數地址,暫存器編號 |
離散量輸入 |
00001~0FFFF |
線圈狀態 |
10001~1FFFF |
輸入暫存器 |
30001~3FFFF |
保持暫存器 |
40001~4FFFF |
舉例:
Modbus協議中暫存器地址從1開始,而實際儲存中地址從0開始。假如要讀取暫存器編號為40005(4為塊編號,5為modbus中暫存器地址)的暫存器的資料,則應把00
04放入報文的地址域。暫存器定義,又名碼錶或者資訊點表,應由廠家提供的。
暫存器編號 |
屬性 |
定義 |
係數 |
備註 |
40001 |
RO |
A相電壓 |
|
從40048中讀取電壓係數 |
40002 |
RO |
B相電壓 |
|
如要讀A相電壓,則應將0x00 0x00放入暫存器起始地址域中。
報文例項
1、讀40005、40006兩個暫存器,假設從機地址為1
下行報文:01 03 00 04 00 02 85 ca
從機地址 |
功能碼 |
暫存器起始地址 |
讀取暫存器個數 |
CRC校驗 |
01 |
03 |
00 04 |
00 02 |
85 ca |
上行報文:01 03 04 00 00 00 00 21 33
從機地址 |
功能碼 |
返回位元組個數 |
暫存器40005資料 |
暫存器40006資料 |
CRC校驗 |
01 |
03 |
04 |
00 00 |
00 00 |
21 33 |
2、向40005暫存器中寫入0x12,0x34,假設從機地址為1
下行報文:01 06 00 04 00 01 12 34 4a b0
從機地址 |
功能碼 |
暫存器起始地址 |
讀取暫存器個數 |
要寫入的資料 |
CRC校驗 |
01 |
03 |
00 04 |
00 01 |
12 34 |
85 ca |
上行報文:01 06 00 04 00 01 12 34 4a b0
從機地址 |
功能碼 |
暫存器起始地址 |
讀取暫存器個數 |
寫入的資料 |
CRC校驗 |
01 |
03 |
00 04 |
00 01 |
12 34 |
85 ca |
轉載自:https://blog.csdn.net/ouyangxin95/article/details/78169380