1.Modbus RTU报文基本格式
起始应有 不小于3.5个字符的报文间隔 |
目标站号 |
功能码 |
数据 |
CRC校验码 |
1字节 |
1字节 |
N字节 |
2字节 |
2. Modbus命令
若响应错误,则返回的应答帧中“功能码”最高位置1, 比如功能码为01,若响应错误,则返回的功能码为0x81。
2.1 功能码01:读线圈(开关量输出)
请求格式:
目标站号 |
功能码 |
起始地址 高字节 |
起始地址 低字节 |
读取个数 高字节 |
读取个数 低字节 |
CRC |
1字节 |
01 |
1字节 |
1字节 |
1字节 |
1字节 |
2字节 |
正确应答格式:
站号 |
功能码 |
返回数据字节数 |
返回数据字节1 |
返回数据字节2 |
… |
CRC |
1字节 |
01 |
1字节 |
1字节 |
1字节 |
… |
2字节 |
2.2 功能码02:读输入状态(开关量输入)
请求格式:
目标站号 |
功能码 |
起始地址 高字节 |
起始地址 低字节 |
读取个数 高字节 |
读取个数 低字节 |
CRC |
1字节 |
02 |
1字节 |
1字节 |
1字节 |
1字节 |
2字节 |
正确应答格式:
站号 |
功能码 |
返回数据字节数 |
返回数据字节1 |
返回数据字节2 |
… |
CRC |
1字节 |
02 |
1字节 |
1字节 |
1字节 |
… |
2字节 |
2.3 功能码03:读保持寄存器(模拟量输出)
请求格式:
目标站号 |
功能码 |
起始地址 高字节 |
起始地址 低字节 |
读取个数 高字节 |
读取个数 低字节 |
CRC |
1字节 |
03 |
1字节 |
1字节 |
1字节 |
1字节 |
2字节 |
正确应答格式:
站号 |
功能码 |
返回数据字节数 |
寄存器1高字节 |
寄存器1低字节 |
… |
CRC |
1字节 |
03 |
1字节 |
1字节 |
1字节 |
… |
2字节 |
2.4 功能码04:读输入寄存器(模拟量输入)
请求格式:
目标站号 |
功能码 |
起始地址 高字节 |
起始地址 低字节 |
读取个数 高字节 |
读取个数 低字节 |
CRC |
1字节 |
04 |
1字节 |
1字节 |
1字节 |
1字节 |
2字节 |
正确应答格式:
站号 |
功能码 |
返回数据字节数 |
寄存器1高字节 |
寄存器1低字节 |
… |
CRC |
1字节 |
04 |
1字节 |
1字节 |
1字节 |
… |
2字节 |
2.5 功能码05:写单线圈(开关量输出)
请求格式:
目标站号 |
功能码 |
线圈地址 高字节 |
线圈地址 低字节 |
强制值 高字节 |
强制值 低字节 |
CRC校验码 |
1字节 |
05 |
1字节 |
1字节 |
1字节 |
1字节 |
2字节 |
注:强制值= 0xFF00,则置线圈为ON;强制值=0x0000,则置线圈为OFF。
应答格式:
若设置成功,原文返回
2.6 功能码06:写单保持寄存器(模拟量输出)
请求格式:
目标站号 |
功能码 |
寄存器地址 高字节 |
寄存器地址 低字节 |
强制值 高字节 |
强制值 低字节 |
CRC校验码 |
1字节 |
06 |
1字节 |
1字节 |
1字节 |
1字节 |
2字节 |
应答格式:
若设置成功,原文返回
2.7 功能码15:写多线圈(开关量输出)
请求格式:
目标 站号 |
功能码 |
起始地址 高字节 |
起始地址低字节 |
数量 高字节 |
数量 低字节 |
强制值字节数 |
强制值 第1字节 |
… |
CRC |
1字节 |
15 |
1字节 |
1字节 |
1字节 |
1字节 |
1字节 |
1字节 |
… |
2字节 |
正确应答格式:
目标站号 |
功能码 |
起始地址 高字节 |
起始地址低字节 |
数量 高字节 |
数量 低字节 |
CRC校验码 |
1字节 |
15 |
1字节 |
1字节 |
1字节 |
1字节 |
2字节 |
2.8 功能码16:写多保持寄存器(模拟量输出)
请求格式:
目标 站号 |
功能码 |
起始地址 高字节 |
起始地址低字节 |
数量 高字节 |
数量 低字节 |
强制值字节数 |
强制值1 高字节 |
强制值1 低字节 |
… |
CRC |
1字节 |
16 |
1字节 |
1字节 |
1字节 |
1字节 |
1字节 |
1字节 |
1字节 |
… |
2字节 |
正确应答格式:
目标站号 |
功能码 |
起始地址 高字节 |
起始地址低字节 |
数量 高字节 |
数量 低字节 |
CRC 校验码 |
1字节 |
16 |
1字节 |
1字节 |
1字节 |
1字节 |
2字节 |