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字节 |