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

2.报文格式

主站询问报文格式
byte[0]byte[1]byte[2] byte[3]byte[4] byte[5]byte[n] byte[n+1]
站号功能码起始地址寄存器数量/线圈个数校验码
从站响应报文格式
byte[0]byte[1]byte[2] byte[3] byte[4]...byte[n] byte[n+1]
站号功能码响应字节个数数据校验码

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

3.功能码01报文解析

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

主站询问报文格式
byte[0] byte[1]byte[2] byte[3]byte[4] byte[5]byte[6] byte[7]
010100 0000 0ABC 0D
站号1功能码01起始地址010个线圈数量校验码

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

Tx:000005-01 01 02 30 00 AD FC

从站响应报文格式
byte[0] byte[1]byte[2] byte[3] byte[4]byte[5] byte[6]
01010230 00AD FC
站号1功能码012个字节长度2个字节开关量校验码

从站响应数据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

主站询问报文格式
byte[0] byte[1]byte[2] byte[3]byte[4] byte[5]byte[6] byte[7]
010300 0000 0AC5 CD
站号1功能码03起始地址010个寄存器数量校验码

主站向从站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

从站响应报文格式
byte[0] byte[1]byte[2] byte[3] byte[4]...byte[23] byte[24]
01031400 00 00 17 00 00 00 2D 00 00 00 00 00 11 00 00 00 00 00 0071 BF
站号1功能码0320个字节长度20个字节寄存器数据校验码

从站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

主站询问报文格式
byte[0] byte[1]byte[2] byte[3]byte[4] byte[5]byte[6]byte[7] byte[8]..byte[27] byte[28]
011000 0000 0A1400 01 00 02 00 03 00 04 00 05 00 06 00 07 00 08 00 09 00 0A5C 8F
站号1功能码10起始地址010个寄存器数量20个字节长度批量写入的20字节数据校验码

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

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

从站响应报文格式
byte[0] byte[1]byte[2] byte[3]  byte[4] byte[5]byte[6] byte[7]
011000 0000 0A40 0E
站号1功能码10起始地址0写入寄存器的个数校验码

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

5.功能码04报文解析

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

主站询问报文格式
byte[0] byte[1]byte[2] byte[3]byte[4] byte[5]byte[6] byte[7]
010400 0000 0A70 0D
站号1功能码04起始地址010个保持寄存器数量校验码

主站向从站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

从站响应报文格式
byte[0] byte[1]byte[2] byte[3] byte[4]..byte[23] byte[24]
01041400 00 00 04 00 00 00 08 00 05 00 00 00 09 00 00 00 00 00 0040 C4
站号1功能码0420个字节的数据读取的20字节数据校验码

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

6.功能码02报文解析

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

主站询问报文格式
byte[0] byte[1]byte[2] byte[3]byte[4] byte[5]byte[6] byte[7]
010200 0000 0AF8 0D
站号1功能码02起始地址010个离散量校验码

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

Tx:000001-01 02 02 56 01 47 D8

从站响应报文格式
byte[0] byte[1]byte[2] byte[3] byte[4]byte[5] byte[6]
01020256 0147 D8
站号1功能码02字节长度响应的数据校验码

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

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐