【嵌入式】Modbus TCP功能码
00. 目錄
文章目錄
- 00. 目錄
 - 01. 寄存器分類
 - 02. 常用功能碼
 - 03. 讀線圈寄存器(01H)
 - 04. 讀離散輸入寄存器(02H)
 - 05. 讀保持寄存器(03H)
 - 06. 讀輸入寄存器(04H)
 - 07. 寫單個線圈寄存器(05H)
 - 08. 寫單個保持寄存器(06H)
 - 09. 寫多個線圈寄存器(0FH)
 - 10. 寫多個保持寄存器(10H)
 - 11. 附錄
 
01. 寄存器分類
Modbus寄存器分為四種,如下表所示:
 
02. 常用功能碼
Modbus中常用的功能碼有8個,可以分為位操作和字操作兩類,如下表所示:
 
03. 讀線圈寄存器(01H)
功能碼01H讀取Modbus從機中線圈寄存器的狀態,可以是單個寄存器,或者多個連續的寄存器。
發送
假設從機地址為01H,讀取的線圈寄存器的起始地址為0017H,讀取38個寄存器,指令如下所示:
讀線圈寄存器指令
 
響應
各線圈的狀態與數據內容的每個bit對應,1代表ON,0代表OFF。如果查詢的線圈數量不是8的倍數,則在最后一個字節的高位補0。
讀線圈狀態的返回結果
 
其中,第一個字節CDH對應線圈0017H到001E的狀態,轉為二進制是11001101,其中bit0對應0017H,bit7對應001E,如下表所示:
線圈0017H到001EH的狀態
 
最后一個字節為1BH,對應線圈0037H到003CH的狀態,轉為二進制是00011011,其中bit0對應0037H,bit5對應003CH,其余兩位用0填充:
線圈0037H到003CH的狀態
 
04. 讀離散輸入寄存器(02H)
功能碼02H讀取Modbus從機中離散輸入寄存器的狀態,可以是單個寄存器,或者多個連續的寄存器。
發送
假設從機地址為01H,讀取的離散輸入寄存器的起始地址為00C4H,讀取22個寄存器,指令如下所示:
讀離散輸入寄存器指令:
 
響應
各個離散輸入寄存器的狀態與數據內容的每個bit對應,1代表ON,0代表OFF。如果查詢的線圈數量不是8的倍數,則在最后一個字節的高位補0。
讀離散輸入寄存器的返回結果
 
其中,第一個字節ACH對應00C4H到00CBH寄存器的狀態,轉為二進制是10101100,其中bit0對應00C4H,bit7對應00CB,如下所示:
寄存器00C4H到00CBH的狀態
 
最后一個字節為35H,對應寄存器00D4H到00D9H的狀態,轉為二進制是00110101,其中bit0對應00D4H,bit5對應00D9H,其余兩位用0填充,
寄存器00D4H到00D9H的狀態
05. 讀保持寄存器(03H)
功能碼03H讀取Modbus從機中保持寄存器的數據,可以是單個寄存器,或者多個連續的寄存器。
發送
假設從機地址為01H,讀取的保持寄存器的起始地址為006BH,讀取3個寄存器,指令如表5.1所示:
讀保持寄存器指令:
 
響應
每個保持寄存器的長度為2個字節。保持寄存器之間,低地址寄存器先傳輸,高地址寄存器后傳輸。單個保持寄存器,高字節數據先傳輸,低字節數據后傳輸。
讀保持寄存器的返回結果
 
06. 讀輸入寄存器(04H)
功能碼04H讀取Modbus從機中輸入寄存器的數據,可以是單個寄存器,或者多個連續的寄存器。
發送
假設從機地址為01H,讀取的保持寄存器的起始地址為006BH,讀取2個寄存器,指令如下所示:
讀輸入寄存器指令:
 
響應
每個輸入寄存器的長度為2個字節。輸入寄存器之間,低地址寄存器先傳輸,高地址寄存器后傳輸。單個輸入寄存器,高字節數據先傳輸,低字節數據后傳輸。
讀輸入寄存器的返回結果
 
07. 寫單個線圈寄存器(05H)
功能碼05H寫單個線圈寄存器,FF00H請求線圈處于ON狀態,0000H請求線圈處于OFF狀態。
發送
假設從機地址為01H,線圈寄存器的地址為00ACH,使其處于ON狀態的指令如下所示:
寫單個線圈指令:
 
響應
如果寫入成功,返回發送的指令,即010500ACFF004C1B。
08. 寫單個保持寄存器(06H)
功能碼06H寫單個保持寄存器。
發送
假設從機地址為01H,保持寄存器的地址為0001H,數據位0003H,指令如下所示:
寫單個保持寄存器指令:
 
響應
如果寫入成功,返回發送的指令,即010600010003980B。
09. 寫多個線圈寄存器(0FH)
功能碼0FH寫多個線圈寄存器。如果對應的數據位為1,表示線圈狀態為ON;如果對應的數據位為0,表示線圈狀態為OFF。線圈寄存器之間,低地址寄存器先傳輸,高地址寄存器后傳輸。單個線圈寄存器,高字節數據先傳輸,低字節數據后傳輸。如果寫入的線圈寄存器的個數不是8的倍數,則在最后一個字節的高位補0。
發送
假設從機地址為01H,線圈寄存器的起始地址為0013H,寫入10個寄存器,指令如下所示:
寫入多個線圈寄存器指令
 
其中,CDH對應線圈0013H到001AH的內容,01H對應線圈001B到001CH的內容,未使用位用0填充。
此時,線圈寄存器的內容如下所示:
線圈寄存器0013H到001CH的內容
 
響應
如果寫入成功,返回寫入的寄存器數量
寫多個線圈寄存器的返回結果
 
10. 寫多個保持寄存器(10H)
功能碼10H寫多個保持寄存器,其中每個保持寄存器的長度為兩個字節。
發送
假設從機地址為01H,保持寄存器的起始地址為0001H,寫入2個寄存器,指令如下所示:
寫入多個保持寄存器指令
 
響應
如果寫入成功,返回寫入的寄存器數量,
寫多個保持寄存器的返回結果
 
11. 附錄
參考:Modbus功能碼
參考:Modbus Poll user manual
總結
以上是生活随笔為你收集整理的【嵌入式】Modbus TCP功能码的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 【Tools】Bandicam安装和卸载
 - 下一篇: 【Tools】虚拟串口工具之VSPD10