Modbus RTU 与 Modbus TCP 承载的应用层数据完全相同(相同的功能码、相同的寄存器映射、相同的数据模型),但它们通过截然不同的物理层来传输这些数据。RTU 是一种运行在 RS-485 或 RS-232 上的串行协议,而 TCP 则把 Modbus 报文封装在 Ethernet/IP 数据包内。在两者之间做选择,或用网关把其中一种桥接到另一种,最终取决于传输距离、设备数量、确定性、错误处理,以及数据需要以何种方式抵达你的 SCADA 或云平台。
相同的应用层,不同的传输方式
这两种变体都由 Modbus 组织(Modbus Organization)维护的同一份 Modbus 应用协议规范(Modbus Application Protocol Specification) 定义。一次读取或写入由一个功能码(例如 0x03 读保持寄存器、0x06 写单个寄存器)加上相应的寄存器地址和数据构成。这一部分是完全一致的,区别在于围绕它的帧封装方式。
在 Modbus RTU 中,每条报文都是一个紧凑的二进制帧:1 字节的从站地址、功能码、数据域,以及 2 字节的 CRC-16 校验和。帧边界通过总线上的静默来识别,具体是至少 3.5 个字符时间的间隔。从站地址不会大于 247,由一个主站按严格的请求/响应顺序轮询多个从站。
在 Modbus TCP 中,由于底层 TCP/IP 协议栈已经保证了有序、经过差错校验的传输,因此去掉了 CRC 和基于静默的帧定界。取而代之的是在报文前面加上一个 7 字节的 MBAP 报文头(Modbus Application Protocol header,即 Modbus 应用协议头):2 字节的事务标识符、2 字节的协议标识符(对 Modbus 而言始终为 0)、2 字节的长度字段,以及 1 字节的单元标识符(unit identifier)。正是这个单元标识符,使得一个 TCP/IP 端点(例如网关)能够寻址其后挂接的多个串行从站。
逐项对比
| 特性 | Modbus RTU | Modbus TCP |
|---|---|---|
| 物理层 | RS-485(2 线或 4 线)或 RS-232 | 以太网(10/100/1000)、TCP/IP |
| 默认端口 | 不适用(串行) | TCP 502 |
| 帧开销 | 地址 + CRC-16(额外 3 字节) | 7 字节 MBAP 报文头,无 CRC |
| 差错校验 | 帧内的 CRC-16 | 交由 TCP 校验和 + 重传处理 |
| 帧定界 | 3.5 个字符的空闲时间 | MBAP 报文头中的长度字段 |
| 寻址 | 共享总线上 1–247 的从站地址 | IP 地址 + 单元 ID |
| 拓扑 | 多点分支总线、菊花链、1 个主站 | 经交换机的星形拓扑,可有多个主站 |
| 每段最大节点数 | 32 个单位负载(采用 1/8 负载收发器时最多 256) | 受限于 IP 子网与交换机端口 |
| 最大距离 | 低波特率下可达 1200 m(依据 EIA/TIA-485-A) | 每段铜缆 100 m,经交换机/光纤可无限延伸 |
| 典型速率 | 9600 至 115200 波特 | 10/100 Mbit/s 或更高 |
| 并发事务 | 同一时刻只有一次未完成的轮询 | 通过事务 ID 流水线可并发多个 |
| 确定性 | 高(专用总线上轮询周期可预测) | 取决于网络负载与交换机行为 |
| 布线成本 | 低(单对双绞线,菊花链连接) | 较高(结构化布线、交换机) |
距离、拓扑与节点数量
RS-485 是为车间现场而生的。一对双绞线在两端正确接入 120 欧姆终端电阻后,可在较低波特率下传输达 1200 m;标准收发器呈现一个单位负载,因此总线支持 32 个节点(使用分数单位负载收发器时更多)。其代价是经典的速率与距离权衡关系:电缆越长,能够可靠维持的波特率就越低。布线故障、缺失终端电阻以及地电位差,是 RTU 间歇性错误背后的常见元凶,这也是总线设计与防护至关重要的原因。关于布线与终端电阻的细节,请参阅我们关于 RS-485 布线、终端匹配与常见故障 的指南。
Modbus TCP 运行在标准以太网之上,因此单段铜缆约限于 100 m,但交换机和光纤可让网络以星形拓扑覆盖整个厂区。你能获得更高的吞吐量,并可让多个 SCADA 客户端同时轮询同一台设备——这是单主站的 RTU 总线本身无法做到的。
差错校验与确定性
RTU 在每个帧中都嵌入了 CRC-16,因此接收设备会在应用层校验完整性并丢弃损坏的帧。TCP 去掉了该 CRC,因为传输层已经提供了校验和以及对丢失报文段的自动重传。两种方式都很稳健,但它们的失效表现不同:有噪声的 RS-485 段表现为 CRC 错误和超时,而拥塞的以太网链路则表现为延迟和 TCP 重传。
就确定性而言,专用 RTU 总线高度可预测,因为主站掌控着整个轮询周期,没有其他设备争用总线。在共享以太网上,抖动取决于流量和交换机行为,因此对于硬实时控制,工程师往往让 RTU 贴近设备运行,而用 TCP 承载监控数据。当出现超时或异常码时,我们在 Modbus 通信错误排查 一文中介绍的系统化方法,有助于把物理层故障与协议层故障区分开来。
何时用网关把 RTU 转换为 TCP
大多数实际的安装现场都是混合型的。诸如电能表、温度传感器和变频器之类的现场设备通过 RS-485 使用 RTU 通信,而监控系统、历史数据库或云平台则期望 TCP 或 MQTT。协议网关弥合了这一差距:它作为 RTU 主站轮询串行从站,并把它们重新呈现为 TCP 服务器(或发布到消息代理),将每个串行从站映射到一个单元标识符。
在以下情况下应把 RTU 转换为 TCP 或 MQTT:
- 通过现有以太网访问在物理上远离控制室的设备,而无需重新敷设串行电缆。
- 让多个客户端(SCADA、仪表盘、分析平台)并发读取同一批现场设备。
- 把缓慢、确定性的串行轮询周期与更快的监控层解耦。
- 使用 MQTT 把现场数据推送到云端或边缘平台,而非点对点轮询。
SURIOTA 的 SRT-MGATE-1210 Modbus 网关 正是扮演这一角色:它在 RS-485 一侧充当 RTU 主站,汇聚所连接的从站,并把它们桥接到 Modbus TCP 与 MQTT。这使它成为传统串行仪表与现代 工业物联网与系统集成 技术栈之间的集成点。如果你正在权衡轮询逻辑应当部署在何处,我们对 边缘网关、PLC 与 RTU 的对比涵盖了相关的架构权衡。
常见问题
Modbus TCP 只是运行在以太网上的 Modbus RTU 吗?
并非如此。应用层数据和功能码确实相同,但 Modbus TCP 用一个 7 字节的 MBAP 报文头取代了 RTU 的地址字节和 CRC-16,并依赖 TCP 进行差错校验。另有一种称为 Modbus RTU over TCP 的不同变体,它确实把完整的 RTU 帧(含 CRC)封装在 TCP 流内,这与原生的 Modbus TCP 不同,且两端必须配置一致。
一个网关能否通过单条 TCP 连接暴露多个 RTU 从站?
可以。MBAP 报文头中的单元标识符让单个 IP 端点能够把请求路由到网关后面的不同串行从站,因此 TCP 客户端可按各现场设备原有的从站 ID 对其寻址。
Modbus RTU 与 Modbus TCP 哪个更快?
Modbus TCP 通常能提供更高的原始吞吐量并支持并发事务,而专用 RTU 总线则提供更可预测的时序。对于监控数据和大量设备,TCP 更胜一筹;对于严格、确定性的本地控制回路,则往往首选 RTU。
把 RTU 桥接到 TCP 时会失去 CRC 保护吗?
CRC-16 会在网关处被剥离,因为 TCP 提供了自有的完整性校验与重传。端到端的完整性得以保留,只是保护机制从应用帧转移到了传输层。