Skip to content

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 温湿度采集案例

场景:读取温湿度传感器的数据

  1. 通信参数:
  • 波特率: 9600
  • 数据位: 8
  • 停止位: 1
  • 校验位: 无
  • 从站地址: 01
  1. 读取温度值(保持寄存器地址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 常见问题处理

  1. 通信失败:
  • 检查接线是否正确
  • 验证通信参数设置
  • 确认设备地址是否正确
  1. 数据异常:
  • 检查功能码是否正确
  • 验证寄存器地址范围
  • 确认数据格式转换是否正确

4. 调试工具推荐

注:以上工具都提供试用版本,商业使用需购买许可证。

5. 注意事项

IMPORTANT Modbus RTU 没有内置加密机制,建议在可信网络中使用,必要时增加额外的安全措施。

6. 参考资料