Modbus TCP協議說明


協議幀

事物處理標識|  協議標識|       長度|  從機地址| 功能碼| 數據     
    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
  1. 寄存器首地址(占兩個字節),表示此次操作從哪個寄存器開始
  2. 寫個數占(兩個字節),表示批量操作多少個寄存器。例如首地址為0x0014,寫個數為0x0002,則表示同時寫0x0014和0x0015兩個寄存器。
  3. 長度(占一個字節),表示該字節后還有多少字節。
  4. 值表示要寫入的值。如果功能碼是位操作,則值需要被拆成位賦值。例如寫首地址為0x0014,寫個數為0x0002。寫字節為0x01,值為0x02。由於0x02用位表示為00000010,賦值后寄存器的結果為0x0014為0,0x0015為1。

寫響應數據幀:

寄存器首地址|寫個數
     0x0014|0x0001
  1. 寄存器首地址(占兩個字節),表示此次操作從哪個寄存器開始
  2. 寫個數(占兩個字節),表示此次操作了多少個寄存器。

讀請求數據幀

寄存器首地址|讀個數
     0x0014|0x0001
  1. 寄存器首地址(占兩個字節),表示此次操作從哪個寄存器開始讀
  2. 讀個數(占兩個字節),表示要求讀多少個寄存器。

讀響應數據幀

讀狀態|讀取值
  0x01|0x01
  1. 讀狀態表示讀操作是否成功。0x01表示成功,0x02表示失敗。
  2. 讀取值表示讀操作獲取的值。如果功能碼是位操作,那么讀取的值也需要按位解析。例如從0x0014開始讀取兩個寄存器值。假設讀到的值為0x03,那么表示0x0014和0x0015的值均為1。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM