一. 目錄
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' 一樣