Appearance
Modbus RTU 协议说明
1. 简介
Modbus RTU 是一种工业通信协议,主要用于工业设备之间的数据交换。它就像设备间的"共同语言",让不同厂家的设备能够相互通信。
1.1 主要特点
- 结构简单,易于实现
- 可靠性高
- 广泛应用于工业自动化
- 支持多种物理层(如RS-485、RS-232等)
2. 工作原理
2.1 通信方式
- 采用主从架构
- 一个主设备可以控制多个从设备
- 每个从设备都有唯一的地址(1-247)
2.2 数据传输
数据包格式: 地址(1字节) | 功能码(1字节) | 数据 | CRC校验(2字节)
CRC (循环冗余校验) 是 Modbus RTU 协议中用于错误检测的重要机制。
- 采用 CRC-16 算法(多项式:x16 + x15 + x2 + 1)
- 初始值:0xFFFF
- 计算范围:从地址字节到数据字节的所有字节
- 低字节在前,高字节在后
CRC计算工具:
注:实际应用中建议使用编程库进行CRC计算,以确保准确性和效率。
2.3 常用功能码 (十进制)
功能码 | 功能描述 | 示例(16进制) | 说明 |
---|---|---|---|
01 | 读取线圈状态 | 01 01 00 00 00 0A 3D CC | 读取从站01的起始地址0000处的10个线圈状态 |
02 | 读取输入状态 | 01 02 00 00 00 08 79 CC | 读取从站01的起始地址0000处的8个输入状态 |
03 | 读取保持寄存器 | 01 03 00 00 00 02 C4 0B | 读取从站01的起始地址0000处的2个保持寄存器 |
04 | 读取输入寄存器 | 01 04 00 00 00 01 31 CA | 读取从站01的起始地址0000处的1个输入寄存器 |
05 | 写单个线圈 | 01 05 00 00 FF 00 8C 3A | 将从站01的0000地址线圈置为ON |
06 | 写单个寄存器 | 01 06 00 01 00 03 98 0B | 将从站01的0001地址寄存器写入数值0003 |
15 | 写多个线圈 | 01 0F 00 00 00 02 01 03 9E 9F | 将从站01的起始地址0000处的2个线圈写入值(03) |
16 | 写多个寄存器 | 01 10 00 00 00 02 04 00 0A 00 0B C7 B2 | 将从站01的起始地址0000处的2个寄存器写入值(000A,000B) |
3. 实际应用案例
3.1 温湿度采集案例
场景:读取温湿度传感器的数据
- 通信参数:
- 波特率: 9600
- 数据位: 8
- 停止位: 1
- 校验位: 无
- 从站地址: 01
- 读取温度值(保持寄存器地址0x00) 请求报文:
01 03 00 00 00 01 84 0A
- 01: 从站地址
- 03: 功能码(读保持寄存器)
- 00 00: 起始地址
- 00 01: 寄存器数量
- 84 0A: CRC校验
响应报文:
01 03 02 00 64 B9 AF
- 01: 从站地址
- 03: 功能码
- 02: 字节数
- 00 64: 数据(100,表示10.0℃)
- B9 AF: CRC校验
3.2 常见问题处理
- 通信失败:
- 检查接线是否正确
- 验证通信参数设置
- 确认设备地址是否正确
- 数据异常:
- 检查功能码是否正确
- 验证寄存器地址范围
- 确认数据格式转换是否正确
4. 调试工具推荐
- Modbus Poll: 用于模拟主站
- Modbus Slave: 用于模拟从站
- ModScan: 功能全面的调试工具
注:以上工具都提供试用版本,商业使用需购买许可证。
5. 注意事项
IMPORTANT Modbus RTU 没有内置加密机制,建议在可信网络中使用,必要时增加额外的安全措施。