協議幀
事物處理標識| 協議標識| 長度| 從機地址| 功能碼| 數據
0x00 00| 0x00 00| 0x00 08| 0x01| 0x0F| 0x00 14 0x00 01 0x01 0x01
-
事物處理標識(占2字節)
區分不同報文,請求和應答的一組報文有相同的事物處理標識。每次通信之后應當自增。 -
協議標識(占2字節)
0x0000 表示ModBus TCP -
長度(占1個字節)
表示之后還有多少字節 -
從機地址(占1個字節)
表示設備地址(多個設備接一個總線) -
功能碼(占1個字節)
功能碼部分定義如下:
功能碼 | 描述 | 訪問類型 | PLC地址 | 數據類型 | 操作數量 |
---|---|---|---|---|---|
0x01 | 線圈 | 讀 | 00001-09999 | 位 | 單/多 |
0x02 | 離散輸入 | 讀 | 10001-19999 | 位 | 單/多 |
0x03 | 保持寄存器 | 讀 | 40001-49999 | 字 | 單/多 |
0x04 | 輸入寄存器 | 讀 | 30001-39999 | 字 | 單/多 |
0x05 | 線圈 | 寫 | 00001-09999 | 位 | 單 |
0x06 | 保持寄存器 | 寫 | 40001-49999 | 字 | 單 |
0x0F | 線圈 | 寫 | 00001-09999 | 位 | 多 |
0x10 | 保持寄存器 | 寫 | 40001-49999 | 字 | 多 |
-
寄存器起始地址
表示寄存器地址 -
數據部分
寫請求數據幀
寄存器首地址|寫個數|長度|值
0x0014|0x0001| 0x01|0x01
- 寄存器首地址(占兩個字節),表示此次操作從哪個寄存器開始
- 寫個數占(兩個字節),表示批量操作多少個寄存器。例如首地址為0x0014,寫個數為0x0002,則表示同時寫0x0014和0x0015兩個寄存器。
- 長度(占一個字節),表示該字節后還有多少字節。
- 值表示要寫入的值。如果功能碼是位操作,則值需要被拆成位賦值。例如寫首地址為0x0014,寫個數為0x0002。寫字節為0x01,值為0x02。由於0x02用位表示為
00000010
,賦值后寄存器的結果為0x0014為0,0x0015為1。
寫響應數據幀:
寄存器首地址|寫個數
0x0014|0x0001
- 寄存器首地址(占兩個字節),表示此次操作從哪個寄存器開始
- 寫個數(占兩個字節),表示此次操作了多少個寄存器。
讀請求數據幀
寄存器首地址|讀個數
0x0014|0x0001
- 寄存器首地址(占兩個字節),表示此次操作從哪個寄存器開始讀
- 讀個數(占兩個字節),表示要求讀多少個寄存器。
讀響應數據幀
讀狀態|讀取值
0x01|0x01
- 讀狀態表示讀操作是否成功。0x01表示成功,0x02表示失敗。
- 讀取值表示讀操作獲取的值。如果功能碼是位操作,那么讀取的值也需要按位解析。例如從0x0014開始讀取兩個寄存器值。假設讀到的值為0x03,那么表示0x0014和0x0015的值均為1。