加入收藏 在線留言 聯系我們
        關注微信
        手機掃一掃 立刻聯系商家
        全國服務熱線13185520415
        公司新聞
        工控協議之西門子ModbusTCP報文功能碼詳解
        發布時間: 2023-12-31 19:53 更新時間: 2024-11-22 08:00
        觀看工控協議之西門子ModbusTCP報文功能碼詳解視頻
      1. 1、01X   讀取一組邏輯線圈的當前狀態(ON/OFF)

      2. 2、0x02 讀取一組開關輸入的當前狀態(ON/OFF)

      3. 3、0x03 讀取一個或多個保持寄存器的數值

      4. 5、0x05 強置一個邏輯線圈的通斷狀態

      5.  6、0x06 寫單個保持寄存器

      6.  7、0x0f 強置多個邏輯線圈的通斷狀態

      7. 8、0x10 寫多個保持寄存器

      8. 9、0x2b 讀取設備ID


      9. 1、01X   讀取一組邏輯線圈的當前狀態(ON/OFF)

        請求:MBAP 功能碼 起始地址H 起始地址L 數量H 數量L(共12字節)

        響應:MBAP 功能碼 數據長度 數據(一個地址的數據為1位)

        發送包


        byte[0] byte[1]  00 02 為消息號,隨便指定,服務器返回的數據的前兩個字和這個一樣

        byte[2] byte[3]  00 00 為modbus標識,強制為0即可

        byte[4] byte[5]  00 06 值在06 之后所有字節的個數,大家也可以數一數哈

        byte[6]  01 為站號、隨便指定。

        byte[7]  01 為功能碼(這個是決定了要干什么事)

        byte[8] byte[9]     00 00為起始地址,比如我們我們想讀地址0的數據就為00,讀1000地址為03 E8

        byte[10] byte[11]  00 80為指定讀取數據的長度,跟地址規則一樣

        回包


        注:bit是一直到127的 因為圖片太大無法截到

        byte[0]  byte[1]  消息號,我們之前寫發送指令的時候,是多少,這里就是多少。

        byte[2]  byte[3]  同上

        byte[4]  byte[5]  指后面的字節數

        byte[6]           站號

        byte[7]           功能碼

        byte[8]           指示在byte[8]后面的字節數量 在byte[8]后面就是真實數據

        byte[9]           到結尾都是我們讀取到的數據  因為字節是8位所以是16(0-127所占了128個bit 128/8 得出16)

        列子:

        讀5個線圈狀態

        發送:00 00 00 00 00 06 01 01 00 00 00 05

        接收:00 00 00 00 00 04 01 01 01 1F

        回到頂部

        2、0x02 讀取一組開關輸入的當前狀態(ON/OFF)

        請求:MBAP 功能碼 起始地址H 起始地址L 數量H 數量L(共12字節)

        響應:MBAP 功能碼 數據長度 數據(長度:9+ceil(數量/8))

        發送包


        其實大家自己看與0x01是基本一樣的。只是多了個Bit Count這一個

        Bit Count所代表的意思就是 讀取十個數據。

        回包


        跟0x01的回包也是一樣的,可能大家伙會有些迷茫,我發包的時候是讀取十個數據回包的時候Byte Count怎么會給我回復了個2呢?

        細心的朋友可能也發現了、這兩個單詞是不一樣的~一個是Bit Count 一個是Byte Count,哈哈哈哈小小的幽默 。

        那這個Byte Count代表的是什么意思呢。還是字節有關。

        一個字節是8位、但是10個位超過了1個字節但是不滿2個字節所以占用2個字節。還有很多跟這個情況相同。

        列子:

        讀5個輸入狀態

        發送:00 00 00 00 00 06 01 02 00 00 00 05

        接收:00 00 00 00 00 04 01 02 01 15

        回到頂部

        3、0x03 讀取一個或多個保持寄存器的數值

        請求:MBAP 功能碼 起始地址H 起始地址L 寄存器數量H 寄存器數量L(共12字節)

        響應:MBAP 功能碼 數據長度 寄存器數據(長度:9+寄存器數量×2)

        發包


        這邊Modbus/TCP我就不再展開了、都是一樣的。

        這個發包也很好去理解、根據Reference這一欄還有Word Count這一欄說明是起始位置是400讀取6個保持寄存器數值。

        一通百通、Modbus在功能報文上基本都是一致的。

        回包


        大家伙可能有迷茫了 怎么會是12呢 這個可怎么計算呢

        我把這個Register這一欄專門的點開了,大家也都能看出來了吧。

        聯系方式

        • 電  話:13510737515
        • 聯系人:董海波
        • 手  機:13185520415
        • 微  信:13185520415