日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【嵌入式】Modbus TCP功能码

發布時間:2024/4/24 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【嵌入式】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功能码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。