Modbus RTU 与 Modbus TCP 深度对比:从物理層は到アプリケーション層的包括的解析
关键词:Modbus RTU vs TCP、Modbus TCP メッセージ形式、Modbus RTU 串行通信、MBAP Header、Modbus 传输モード对比
Modbus protocol从 1979 年诞生至今,历经四十余年的演进,发展出了两种主流的传输モード:基于串行链路的 Modbus RTU(以及 ASCII)和基于イーサネット(イーサネット)的 Modbus TCP。虽然2つのモデル在アプリケーション層共享相同的関数コードとデータ模型,但在物理層は、フレーム形式、寻址方式、性能特性上存在显著差异。選択エラー的モード,可能导致项目工期延误甚至系统不可用。
本記事将从物理層は、データ链路层、网络层、アプリケーション層四个维度,深度对比 Modbus RTU 和 Modbus TCP 的すべての关键差异,并给出实际工程中的选型建议。
一、历史演进:从串行到イーサネット(イーサネット)
Modbus RTU 是 Modbus protocol最元の的形态,设计于 1979 year,运行在 RS-232 或 RS-485 串行バス上。在当时的工业环境中,串行通信是最经济可靠的方案。RTU モード采用紧凑的二进制编码,传输效率高,至今仍是工业现场最广泛使用的 Modbus 变体。
Modbus TCP 诞生于 1999 year,是为适应イーサネット(イーサネット)/IP 网络的快速发展而设计的。它将 Modbus 的アプリケーション層データ封装在 TCP 报文中,使其能够経由標準イーサネット(イーサネット)基础设施进行传输。Modbus TCP 保留了 Modbus RTU 的関数コードとデータ模型,但去除了 CRC verification(由 TCP 层保证データ完全性),增加了 MBAP 报头来処理 IP 网络场景。
二、物理層は对比
| 对比维度 | Modbus RTU | Modbus TCP |
|---|---|---|
| 物理介质 | RS-485(主流)/ RS-232(点对点) | Ethernet(ツイストペア/光纤) |
| トポロジ | バスの種類(菊花链) | 星型(スイッチ交換機) |
| 最大設備の数 | 32 节点(標準)/ 256(增强收发器) | 理论上无限制 |
| 通信距离 | 1200m(RS-485 @ 9600bps) | 100m(铜缆)/ 数公里(光纤) |
| 通信速率 | 1200 ~ 115200 bps | 10/100/1000 Mbps |
| 抗干渉能力 | 差動信号です,较好 | 极好(光纤下几乎零干渉) |
| 布线成本 | 低(ツイストペア) | 高(スイッチ交換機、ネットワークケーブル/光纤) |
| インストール复杂度 | 简单 | 较复杂(需 IP 設定) |
2.1 RS-485 バス的物理特性
RS-485 是 Modbus RTU 最もよく使われる物理層は標準。它采用差動信号です传输(A/B 线),抗コモンモード干渉能力强。以下是 RS-485 的关键物理参数:
- 差動電圧:逻辑 1 为 A 线电压 > B 线电压(通常 ≥ +200mV),逻辑 0 反之
- 共模电压範囲:-7V ~ +12V
- 終端抵抗:120Ω(マッチング特性インピーダンス,防止信号の反射)
- バイアス抵抗体:在バス暇なとき维持确定的逻辑ステータス,避免受信器误判
常见布线エラー:
- 将 A/B ライン·リバース——导致スレーブ受信できない。信号
- 使用星型トポロジー而非菊花链——信号の反射严重
- 忘记在バス两端追加終端抵抗——長距離通信不稳定
- 終端抵抗の値不マッチング——120Ω 是標準值
三、フレーム形式对比
3.1 Modbus RTU フレーム構造
Modbus RTU 报文以「暇なとき间 ≥ 3.5 characters」作为フレーム間隔标志。フレーム構造如下:
┌──────────┬──────────┬──────────┬──────────┬──────────┐
│ ≥3.5文字 │ address 1B │ function code 1B │ data Nbyte │ CRC 2B │ ≥3.5文字 │
└──────────┴──────────┴──────────┴──────────┴──────────┘
example(read holding registers):
3.5T 01 03 00 6B 00 03 76 87 3.5T
↑ ↑ └── data ──┘ └ CRC ┘
address Function check
RTU フレーム的关键特征:
- ないフレーム头和フレーム尾标志,完全依赖 3.5 文字暇なとき间区分フレーム边界
- CRC-16 チェックカバー整个报文
- 同一时刻バス上只能有一个マスター
- 最大フレーム長さ 256 byte(address + function code + data + CRC)
3.2 Modbus TCP フレーム構造(含 MBAP Header)
Modbus TCP 在標準的 Modbus PDU(协议データユニット)前面增加了 7 バイト的 MBAP Header(Modbus Application Protocol Header):
┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
│ Transaction identifier │ Protocol Identifier │ Length 2B │ Unit identifier │ function code 1B │ data Nbyte │
│ 2B │ 2B │ │ 1B │ │ │
└──────────┴──────────┴──────────┴──────────┴──────────┴──────────┘
←────── MBAP Header (7 bytes) ──────→ ←─ PDU ─→
Field Description:
- Transaction identifier (Transaction ID): マスター生成,用于マッチングリクエスト和レスポンス
- Protocol Identifier (Protocol ID): 固定为 0x0000,表示 Modbus protocol
- Length (Length): 后续Bytesの数(Unit identifier + function code + data)
- Unit identifier (Unit ID): 用于ゲートウェイ场景,标识下游駅からの住所
complete TCP フレームサンプル:
駅から読む。 1 保持レジスタです。 108-110(与 RTU サンプル相同操作):
TCP message:
00 01 00 00 00 06 01 03 00 6B 00 03
└─┬──┘ └─┬──┘ └─┬──┘ └┬┘ └─┬──┘ └──┬──┘
トランザクションID ProtocolID Length=6 ユニット1 function code 起址=107 Quantity=3
3.3 MBAP 报头各字段深度解析
Transaction identifier(Transaction Identifier):
这是 TCP モード下最有特色的字段。由于 TCP サポート全二重通信,マスター可以同时送信多个リクエスト(在不同 TCP 连接或同一连接的不同トランザクション中),トランザクション識別子用于将レスポンス与对应的リクエストマッチング起来。在只有一个リクエスト/レスポンス的简单场景中,通常设为 0x0001 并递增。
Protocol Identifier(Protocol Identifier):
固定为 0x0000,表示这是 Modbus protocol。这个字段的存在是为了未来可能的扩展——理论上同一个 TCP port上可以运行多种协议,协议标识符用于区分。
Length(Length):
表示后续すべてのバイト的数量,即「Unit identifier(1 byte)+ PDU(function code + data)」。TCP 层ない 3.5 文字的空闲检测机制,長さ字段是 TCP モード中解析フレーム边界的关键。
Unit identifier(Unit Identifier):
当 Modbus TCP 报文需要转发到串行链路上的 Modbus RTU デバイス时,ユニット标识符就充当 RTU 駅からの住所的角色。在直连デバイス(デバイス本身就サポート Modbus TCP)的场景中,此字段通常设为 0x01 或 0xFF。
四、寻址与通信机制对比
| 对比维度 | Modbus RTU | Modbus TCP |
|---|---|---|
| 寻址方式 | 8 位From station address (1-247) | IP address + ポート番号(デフォルト 502) |
| 通信モード | ハーフデュプレックス(同一时刻只能一方送信) | 全二重(可同时收发) |
| 并发连接 | サポートなし。(バス共享) | サポート多个 TCP connect |
| マスター数量 | 1 个(バス仲裁困难) | 多个(IP 路由天然サポート) |
| 广播サポート | サポート(address 0) | 不直接サポート(需アプリケーション層処理) |
| エラー检测 | CRC-16 | TCP checksum |
五、性能特性深度对比
5.1 通信速率分析
以一次典型的「read 10 レジスタを保持する。」操作为例,对比2つのモデル的耗时:
| 环节 | Modbus RTU (9600bps) | Modbus TCP (100Mbps) |
|---|---|---|
| リクエスト报文大小 | 8 bytes | 12 bytes(MBAP+PDU) |
| リクエスト传输时间 | 8 × 11 / 9600 ≈ 9.2ms | < 0.01ms |
| レスポンス报文大小 | 25 byte | 29 byte |
| レスポンス传输时间 | 25 × 11 / 9600 ≈ 28.6ms | < 0.01ms |
| スレーブ処理时间 | 1~10ms | 1~10ms |
| フレーム間隔 | 3.5 characters ≈ 4ms | 0 |
| 总耗时 | ≈ 42-52ms | ≈ 1-10ms |
结论:Modbus TCP 的单次通信延迟可以比 RTU モード低 5~50 倍。在需要高频データの収集的场景(如振动监测、高速计数),TCP 有明显的性能优势。
5.2 多デバイス并发通信
在 Modbus RTU モード下,由于 RS-485 是共享バス,マスター必须以ポーリング方式逐个アクセススレーブ。もし有 30 个スレーブ,每个 50ms,一轮就是 1.5 秒——这对于某些实时控制场景是无法接受的。
在 Modbus TCP モード下,マスター可以同时建立多个 TCP connect,并发地与多个スレーブ通信。这使得 TCP モード在大规模データの収集系统中具有压倒性优势。
六、Modbus ASCII モード简介
除了 RTU 和 TCP,Modbus 还有一种 ASCII 传输モード。ASCII モード将每バイト単位。编码为2つ可打印的 ASCII characters(0-9, A-F),使用 LRC check,以冒号(:)开头、回车换行(CRLF)结尾。虽然效率最低(同样データの量需要约 2 倍的Bytesの数),但 ASCII モード的报文是人类可读的,在デバッグ和教学场景中有独特优势。
ASCII モード报文サンプル(read holding registers 108,1 个):
RTU: 01 03 00 6B 00 01 [CRC]
ASCII: :0103006B0001[LRC]rn
→ 同样的 PDU,ASCII 需要 19 个文字(含フレーム头フレーム尾),RTU 只要 8 バイト単位。
七、选型决策ガイド
7.1 优先選択 Modbus RTU 的场景
- 已有 RS-485 布线:工厂现场已经铺设了 RS-485 バス,改造为イーサネット(イーサネット)成本太高
- 設備の数少(<20 个):ポーリング延迟在可接受範囲内
- 对实时性要求不高:秒级或分级的データの収集即可满足需求
- 低成本场景:デバイス本身只有 RS-485 Interface,加装イーサネット(イーサネット)モジュール增加成本
- デバイス间距大(100m~1200m):RS-485 无需中继即可カバー较ロング·ディスタンス
7.2 优先選択 Modbus TCP 的场景
- 高速データの収集:需要毫秒级甚至更快的データリフレッシュ
- 設備の数多(>30 个):ポーリング延迟已成为瓶颈
- 已有イーサネット(イーサネット)基础设施:工厂已铺设イーサネット(イーサネット)线缆
- 遠隔監視とは:需要経由互联网アクセスデバイス(可结合 VPN)
- 多マスターアクセス:多个トップマシン需要同时アクセス同一个スレーブ
- 与 IT システム統合:需要与データベースの種類、MES、ERP 等 IT 系统对接
7.3 混合架构:ゲートウェイ桥接
在实际工程中,最も一般的な的方案是混合架构——使用 Modbus TCP to RTU 的ゲートウェイデバイス,将大量 RS-485 デバイス接入イーサネット(イーサネット):
┌──────────┐ Modbus TCP ┌──────────┐ Modbus RTU ┌────┐┌────┐┌────┐
│ SCADA │◄─────────────────►│ TCP/RTU │◄───────────────►│slave1││slave2││slaveN│
│ Server │ Ethernet │ ゲートウェイ │ RS-485 バス └────┘└────┘└────┘
└──────────┘ └──────────┘
这种架构兼具了 RTU 的低デバイス成本和 TCP 的高いパフォーマンスを与灵活性,是当前産業用IoT项目的主流方案。
八、セキュリティ考量
Modbus RTU 本质上是「裸奔」的——ない任何内置的セキュリティ机制。在 RS-485 バス上,任何接入バス的デバイス都可以読み取り或修改任意报文。
Modbus TCP 同样缺乏内置セキュリティ机制,但可以経由 TLS(传输层セキュリティ)进行加密和认证。Modbus Security Protocol(使用ポート 802)正式将 TLS 封装標準化,提供:
- X.509v3 证书认证
- TLS 加密通信
- メッセージ完全性保护
在关键基础设施中,建议优先使用 Modbus Security Protocol(ポート 802)而非標準 Modbus TCP(ポート 502)。
九、common problems FAQ
Q1: Modbus RTU デバイス可以直接连接到 Modbus TCP 网络吗?
不能直接连接。需要经过 Modbus TCP/RTU ゲートウェイ进行プロトコル変換。ゲートウェイ负责追加/Remove MBAP Header,以及 CRC verification的生成和验证。
Q2: 同一个网络中能同使用するとき Modbus RTU 和 Modbus TCP 吗?
可以,経由ゲートウェイ桥接即可。ゲートウェイ一侧连接イーサネット(イーサネット)(Modbus TCP),另一侧连接 RS-485 バス(Modbus RTU)。这是工业现场最も一般的な的混合架构。
Q3: 判断の仕方一个デバイス是 Modbus RTU まだ Modbus TCP?
看物理接口:RS-232/RS-485 Interface → Modbus RTU;RJ45 イーサネット(イーサネット)接口 → Modbus TCP。但也有デバイス同时具备两种接口(如エキスパート PLC),需要表示デバイス手册確認サポート的协议。
Q4: Modbus TCP 的デフォルトポート 502 被封了怎么办?
大多数 Modbus TCP デバイスサポート修改デフォルトポート。也可以使用 VPN 在ファイアウォール之间建立セキュリティ隧道。Modbus Security Protocol使用 802 ポート作为替代。
十、总结
Modbus RTU 和 Modbus TCP ではない竞争关系,而是互补关系。RTU 在デバイス端成本低、布线简单,TCP 在网络侧速度快、扩展性好。理解两者的差异和各自適用可能なシーン,才能在工业通信系统设计中做出正确的架构决策。
一句话总结:RTU 是「现场バス」的選択,TCP 是「信息高速路」的選択,ゲートウェイ是把两者粘合在一起的桥梁。
相关阅读:Modbus 串行线通信実践ガイド | Modbus TCP/IP 网络部署与优化 | Modbus Security Protocol深度解析
Leave a Reply