ModbusTCP协议分析
ModbusTCP与ModbusUDP的报文格式是一样的,它们之间的区别其实就是TCP与UDP的区别,因此下面就针对ModbusTCP的协议进行分析,ModbusTCP与ModbusRtu(ModbusASCII)之间的区别如下图:
从上图可以看出,ModbusTCP在Modbus串行通信的基础上,去除了校验(由于TCP本身就带有校验和)和设备地址(ModbusTCP弱化了设备地址,用IP地址来取代),再加上MBAP报文头(占7 bytes),下面针对MBAP进行分析说明:
域 | 长度 | 说明 | 客户机 | 服务器 |
---|---|---|---|---|
事务处理标识符 | 2字节 | Modbus请求/响应事务处理的标识 | 客户机启动 | 复制响应 |
协议标识符 | 2字节 | 0=Modbus协议 | 客户机启动 | 复制响应 |
长度 | 2字节 | 长度之后的字节总数 | 客户机启动 | 服务器启动 |
单元标识符 | 1字节 | 串行链路或其它总线的从站识别 | 客户端启动 | 复制响应 |
下面针对具体报文进行分析,Modbus协议在以太网链路上的报文格式如下所示:
事务处理标识符 | 协议标识符 | 长度 | 单元标识符 | 功能码 | 数据 |
---|---|---|---|---|---|
2 bytes | 2 bytes | 2 bytes | 1 byte | 1 byte | N bytes |
有了以上理论基础之后,下面针对各个功能码进行详细分析: