2. Modbus RTU 与 TCP/IP 对比
在厂务监控系统中,Modbus RTU 和 Modbus TCP/IP 是最主流的两种通信变体。虽然它们共享相同的应用层数据模型,但在物理层、帧结构、传输效率和适用场景上存在本质差异。理解这些差异是正确设计从站设备地址映射和调试通信链路的前提。
核心认知:RTU 是“串行总线上的二进制帧”,TCP 是“以太网上的封装帧”。两者不能直接互联,必须通过网关进行协议转换。
2.1 帧格式对比
Modbus RTU 和 TCP 的帧结构差异集中在地址域、校验方式和长度字段上。下表列出了两种帧格式的详细对比:
| 字段 | Modbus RTU | Modbus TCP/IP |
|---|---|---|
| 起始标识 | 3.5 字符静默时间 | 无(以太网帧自带前导码) |
| 地址域 | 1 字节(从站 ID:1~247) | 无(由 IP 寻址替代) |
| 功能码 | 1 字节 | 1 字节 |
| 数据域 | N 字节(最大 253 字节) | N 字节(最大 260 字节) |
| 校验 | CRC-16(2 字节,低字节在前) | 无(依赖 TCP 传输层校验) |
| 报文头 | 无 | MBAP 头(7 字节) |
| 结束标识 | 3.5 字符静默时间 | 无(TCP 流结束标记) |
关键差异:RTU 的从站地址是帧内显式字段,TCP 的从站地址被 MBAP 头中的单元标识符(Unit ID)替代,且 TCP 帧不包含 CRC,因为 TCP/IP 协议栈已保证数据完整性。
下图展示了两种帧格式的字节级结构对比:
2.2 传输效率对比
传输效率取决于帧开销、波特率(RTU)或网络带宽(TCP)。以下是基于典型配置的效率分析:
| 指标 | Modbus RTU (RS-485, 115200 bps) | Modbus TCP (100 Mbps 以太网) |
|---|---|---|
| 帧开销 | 4 字节(地址 + 功能码 + CRC) | 7 字节(MBAP 头) |
| 最大数据负载 | 253 字节 | 260 字节 |
| 单帧传输时间 | 约 2.2 ms(读取 10 个寄存器) | 约 0.1 ms(读取 10 个寄存器) |
| 总线利用率 | 约 60%~70%(含帧间隔) | 约 90%+(无帧间隔) |
| 多从站轮询周期 | 线性增加(每增加 1 个从站 + 2.2 ms) | 并发处理(几乎不增加) |
效率陷阱:RTU 的 3.5 字符帧间隔在高速率下(如 115200 bps)仅约 0.3 ms,但在低速率(如 9600 bps)下可达 3.6 ms,严重降低总线利用率。厂务系统中,若从站数量超过 20 个,建议优先考虑 TCP 或提高 RTU 波特率。
2.3 适用场景
根据厂务系统的实际需求,选择 RTU 或 TCP 的决策树如下:
2.4 网关转换原理
当厂务系统中同时存在 RTU 和 TCP 设备时,必须使用 Modbus 网关进行协议转换。网关的核心功能是“帧格式剥离与重组”。
转换过程分为以下步骤:
- TCP 接收:网关从以太网接收 TCP 帧,解析 MBAP 头,提取单元标识符(Unit ID)和 PDU(功能码 + 数据)。
- 地址映射:将 Unit ID 映射为 RTU 从站地址(1~247),同时将 MBAP 头中的事务 ID 存入内部缓存用于响应匹配。
- RTU 封装:在 PDU 前添加从站地址,后附加 CRC-16 校验,并插入 3.5 字符帧间隔。
- 串行发送:通过 RS-485 总线发送 RTU 帧,等待从站响应。
- 反向转换:收到 RTU 响应后,验证 CRC,剥离地址,添加 MBAP 头(复用缓存的事务 ID),通过 TCP 回传。
网关关键参数:响应超时(通常 100~1000 ms)、从站地址表(静态或动态映射)、串口波特率/校验位/停止位必须与 RTU 从站一致。
下图展示了网关的内部转换架构:
实战建议:在厂务项目中,推荐使用支持“透明传输”模式的网关,该模式下网关不修改 PDU 内容,仅做帧格式转换,避免因功能码或数据格式不兼容导致的通信失败。调试时,先用串口助手验证 RTU 侧通信,再用 TCP 调试工具验证网关转换后的 TCP 帧。