以下是引用qqmushui在2017/10/17 21:44:18的发言:
大家好,请问一下,关于Modbus TCP的协议标识符是如何定义的,除了全0为modbus协议外,还有没有其他的协议?
以读4x区寄存器为例:
客户端发送:
00 01 00 00 00 06 01 03 12 34 00 02
其中:
00 01为事务处理标识符的高8位和低8位
00 00为协议标识符,一般固定为00 00
00 06为长度,指的是从它后面开始到Modbus TCP报文结束的字节计数
01为单元标识符
03为功能码
12 34为预读的寄存器起始地址的高8位和低8位
00 02为预读的寄存器个数的高8位和低8位
服务器返回:
00 01 00 00 00 07 01 03 04 11 11 22 22
00 01为事务处理标识符的高8位和低8位
00 00为协议标识符,一般固定为00 00
00 07为长度,指的是从它后面开始到Modbus TCP报文结束的字节计数
01为单元标识符
03为功能码
04为字节计数,读2个寄存器,所以为4个字节
11 11为寄存器地址为1234的值
22 22为寄存器地址为1235的值
Modbus TCP报文和Modbus RTU报文有相似之处,把Modbus RTU中的CRC校验取掉,同时加上了事务处理标识符、协议标识符、长度等!