Modbus RTU
Modbus RTU 是一种通用的工业标准通信协议,广泛应用于工业自动化设备(如传感器、编码器、变频器、PLC 等)。
协议概述
- 历史:1979 年由 Modicon(现施耐德电气)发明,最初用于 PLC 通信。
- 地位:工业自动化的事实标准。
- 物理层:通常基于 RS-485 或 RS-232。
- 特点:采用二进制传输,紧凑高效。
通信模式:请求-响应
Modbus 采用主从(Master-Slave)架构和请求-响应模式:
sequenceDiagram participant Host as 主机 (PC) participant Slave as 从机 (编码器) Host->>Slave: 请求 (读寄存器) Slave-->>Host: 响应 (返回数据) Host->>Slave: 请求 Slave-->>Host: 响应
特点:
- 从机被动:从机不会主动发送数据,必须由主机轮询。
- 严格顺序:一问一答,必须等待上一次响应完成才能发送下一次请求。
对比其他模式:
| 模式 | 描述 | 示例 |
|---|---|---|
| 请求-响应 | 主机问,从机答 | Modbus RTU |
| 主动推送 | 设备定时/事件触发发送 | 某些传感器串口协议 |
| 发布-订阅 | 订阅后自动接收 | MQTT, ROS |
对采样率的影响: 这就是采样率受限的根本原因 —— 每次都要完成完整的请求-响应周期(发送请求 + 设备处理 + 接收响应),即下文计算的 17 字节传输时间加上设备内部处理时间。
帧结构示例
以读取编码器数据为例,一次典型的请求/响应过程如下:
请求帧 (8 字节)
主机发送给从机的指令:
01 03 00 00 00 02 C4 0B
│ │ └──┬──┘ └──┬──┘ └──┬──┘
│ │ │ │ └─ CRC 校验 (2字节)
│ │ │ └─ 寄存器数量 (2字节)
│ │ └─ 起始地址 (2字节)
│ └─ 功能码 (1字节)
└─ 地址 (1字节)响应帧 (9 字节)
从机返回给主机的数据:
01 03 04 7F FF FD E7 D3 0D
│ │ │ └────┬────┘ └──┬──┘
│ │ │ │ └─ CRC 校验 (2字节)
│ │ │ └─ 数据 (4字节)
│ │ └─ 字节数 (1字节)
│ └─ 功能码 (1字节)
└─ 地址 (1字节)总通信量:请求 8 字节 + 响应 9 字节 = 17 字节。
通信速率与采样率计算
在波特率为 9600 bps 的情况下,通信耗时计算如下:
-
传输时间:
- 串口通信通常为 “1 起始位 + 8 数据位 + 1 停止位 ” = 10 位/字节。
- 总位数:17 字节 × 10 位 = 170 位。
- 传输耗时:。
-
采样率限制:
- 如果代码中还有
time.sleep(0.1)的间隔。 - 总周期:。
- 实际采样率:。
- 如果代码中还有
-
理论极限:
- 如果不加延时,仅考虑传输时间:。
- 提高采样率的方法:
- 减少软件层面的轮询间隔。
- 提高波特率(如从 9600 提至 115200),如果硬件支持。
Modbus 家族对比
| 变体 | 物理层 | 特点 |
|---|---|---|
| Modbus RTU | RS-485/RS-232 | 二进制,紧凑高效,工业最常用。 |
| Modbus ASCII | RS-485/RS-232 | ASCII 字符,可读性好,但效率低(数据量翻倍)。 |
| Modbus TCP | 以太网 | 基于 TCP/IP 协议,用于网络传输。 |
为什么选择 Modbus RTU
- 开放免费:无授权费,协议公开。
- 简单可靠:结构简单,易于实现。
- 硬件支持:
- RS-485 优势:抗干扰能力强,传输距离远(理论可达 1200m)。
- 总线拓扑:支持多设备挂载在同一条总线上,通过地址区分不同设备。