ModbusTCP報文協議解析

一. 目錄

ModbusTCP協議報文解析

  • 報文格式說明
  • modbus 常用功能代碼簡述
  • 功能碼詳述
二. 報文格式說明
  • 交互(通信)標識:
    2個字節 為此次通信事務處理標識符,一般每次通信之后將被要求加1以區別不同的通信數據報文。
  • 協議標識:
    2個字節 表示該條指令遵循ModbusTCP協議,一般都為00 00
  • 報文長度:
    2個字節 表示后面數據的長度,有幾個字節,高字節在前(前六位Modbus/TCP協議不同功能碼通用)
  • 設備標識 :
    1個字節 設備地址,這個可以用于局域網里面的具體的地址,如果目標機器有固定ip,這個就不起作用,直接上寫成 00
  • 功能碼:
    1個字節 功能碼在modbus協議用于表示信息幀的功能
  • 數據:
    N個字節 后面數據根據不同功能碼不同。
三. modbus 常用功能代碼簡述
常用功能代碼.png
四. 功能碼詳述
1. '01' 讀取多個線圈

請求示例報文:

Rx:00 01 00 00 00 06 FF 01 00 01 00 10

第1,2位 00 01 交互標識
第3,4位 00 00 協議標識
第5,6位 00 06 后面報文長度 有6位
第7位 FF 設備地址,發送什么,響應什么
第8位 01 功能碼
第9,10位00 01 起始地址
第11,12位 00 10查詢線圈長度,查詢16位線圈

響應示例報文:

Tx:00 01 00 00 00 05 FF 01 02 0A 02

第1,2位 00 01 交互標識
第3,4位 00 00 協議標識
第5,6位 00 05 后面報文長度 有5位
第7位 FF 設備地址,發送什么,響應什么
第8位 01 功能碼
第9位是后面數據位的長度,
第10位開始是數據位。

  • 01查詢線圈,每一個16進制數據表示8位線圈
  • 第10位0A --> 0000 1010 第二位是1,第四位是1
2. '02' 讀取多個離散量輸入

與功能碼 '01' 一樣

3. ‘03’ 讀取 多個保持寄存器

寄存器讀取與線圈的區別,響應數據,寄存器數據每兩個字節表示1位,一次請求不能超過127個地址

請求示例報文:

Rx:00 01 00 00 00 06 01 03 00 05 00 02

第1,2位 00 01 交互標識
第3,4位 00 00 協議標識
第5,6位 00 06 后面報文長度 有6位
第7位 01 設備地址,發送什么,響應什么
第8位 03 功能碼
第9,10位00 05起始地址
第11,12位 00 02查詢寄存器長度,查詢2個寄存器

響應示例報文:

Tx:00 01 00 00 00 07 01 03 04 00 22 00 00

前四位(00 01 00 00)和7,8位(01 03)同請求發送的報文
第5,6位 00 07 是后面報文長度
第9位 04 是后面數據位的長度
第10-13位 數據位(00 22 00 00)

3. 04 讀取 多個輸入寄存器

與功能碼 '03' 一樣

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容