编者:Modbus TCP 是比较普及的一种标准通信协议,协议格式简单易懂,特别适合学习底层通信协议开发。这次涛哥给大家带来一系列文章,以具体硬件为例,从原始数据着手,一步一步解密 Modbus TCP 协议。
研华 ADAM-6052 模块支持 Modbus TCP 协议,我们就以它来研究 Modbus TCP 的协议格式。
一、Modebus TCP 协议格式
先来看看文档里如何描述 Modbus TCP 协议:
一个完整的 Modebus TCP 命令由两部分组成:命令头和命令体。
命令头:由 6 个字节组成,用于响应Modbus协议格式
命令体:用于定义“目标设备”和“请求功能”
ADAM-6052 的 Modbus 地址如下:
最直观的就是抓取通讯字节流,通过实例和文档对比,达到快速理解的目的。
二、读取输出IO状态
使用 Function 01 功能码,读取线圈状态也即输出的状态。
请求读取地址 17 开始 8 个线圈的状态,使用嗅探工具抓包。
1. 请求报文
00 80 00 00 00 06 01 01 00 10 00 08
开始6个字节为命令头:
byte 0 : 事务标识符,本例为 00
byte 1 : 事务标识符,本例为 80
byte 2 : 协议标识符,通常为 00
byte 3 : 协议标识符,通常为 00
byte 4 : 后面的字节数,高字节。通常为 00,因为所有报文都小