Modbus RTU协议解析

发布时间 2023-11-29 15:15:54作者: 乐 乐——1128

1.Modbus RTU一般是通过RS485/RS232物理接口采用的数据通信协议。

2.报文格式

主站询问报文格式

 根据功能码的不同报文格式略有差别,主站询问格式前6个字节固定不变“1字节站号+1字节功能码+2字节起始地址+2字节寄存器/线圈数量+...+2字节校验码”,从站响应格式前3个字节固定不变“1字节站号+1字节功能码+1字节长度+...+2字节校验码”

3.功能码01报文解析

Rx:000004-01 01 00 00 00 0A BC 0D

从站号1的起始地址0处读取连续10个线圈的开关量

Tx:000005-01 01 02 30 00 AD FC

 


从站响应数据30 00,转为二进制为0011 0000/0000 0000,2字节分别逆序排列0000 1100/0000 0000,因此返回的10个开关量数据为00001100

4.功能码03报文解析

Rx:000000-01 03 00 00 00 0A C5 CD

 


主站向从站1号的起始地址0请求读取连续10个寄存器的数据

Tx:000001-01 03 14 00 00 00 17 00 00 00 2D 00 00 00 00 00 11 00 00 00 00 00 00 71 BF


从站1号响应20个字节的数据,00 00 00 17 00 00 00 2D 00 00 00 00 00 11 00 00 00 00 00 00,对应10进制:0 23 0 45 0 0 17 0 0 0

4.功能码10报文解析

Rx:000002-01 10 00 00 00 0A 14 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00 08 00 09 00 0A 5C 8F

主站向从站1号的起始地址0处开始连续的10个寄存器,批量写入20个字节的数据

Tx:000003-01 10 00 00 00 0A 40 0E


从站1号响应报文,与询问报文前6个字节保持一致。

5.功能码04报文解析

Rx:000004-01 04 00 00 00 0A 70 0D


主站向从站1号的起始地址0处开始读取连续10个保持寄存器的值

Tx:000005-01 04 14 00 00 00 04 00 00 00 08 00 05 00 00 00 09 00 00 00 00 00 00 40 C4


从站响应20个字节的数据,对应10进制:0 4 0 8 5 0 9 0 0 0

6.功能码02报文解析

Rx:000000-01 02 00 00 00 0A F8 0D


主站向从站1号的起始地址0出开始请求读取10个离散量

Tx:000001-01 02 02 56 01 47 D8


从站响应2个字节数据56 01,翻译为二进制 0101 0110/0000 0001,字节分别逆序排列0110101010