1. <del id="sqmd4"></del>
      <object id="sqmd4"></object>
      1. <object id="sqmd4"></object>
          加入收藏 在線留言 聯系我們
          關注微信
          手機掃一掃 立刻聯系商家
          全國服務熱線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