JL
JLink Technology 傑聯特科技
詢價
Modbus RTU vs Modbus TCP 差異,與用 W5500 / DM9051 做 RTU→TCP 閘道
WIZnetDAVICOMModbusRS-485EthernetW5500DM9051硬體 TCP/IPGateway

Modbus RTU vs Modbus TCP 差異,與用 W5500 / DM9051 做 RTU→TCP 閘道

Modbus RTU 與 TCP 其實是同一套協定的兩種傳輸層:資料模型與功能碼完全相同,只差實體層、框架與校驗(RTU 用 CRC-16+序列、TCP 用 MBAP header+port 502、不做 CRC)。本文講清差異,並說明怎麼用硬體 TCP/IP 的 W5500(最省力)或 SPI MAC+PHY 的 DM9051(最有彈性)做 RTU→TCP 閘道。

JL 傑聯特科技工程團隊審校 · 更新於 2026-06-28

同一個 Modbus,兩種傳輸層

Modbus 有兩種常見形態:Modbus RTU(走 RS-485/RS-232 序列線)與 Modbus TCP(走 Ethernet)。很多人以為它們是兩套協定,其實核心是同一個:兩者的「資料模型」與「功能碼」完全相同——一樣是線圈(Coils)、離散輸入(Discrete Inputs)、輸入暫存器(Input Registers)、保持暫存器(Holding Registers)這四張表,一樣的功能碼。真正不同的只有三件事:實體層(序列 vs 乙太網)、框架(framing)、與完整性校驗。搞懂「核心相同、外殼不同」,你就會明白為什麼 RTU↔TCP 轉換不必翻譯應用層、只要換框架。

RTU(CRC-16+序列)vs TCP(MBAP+port 502)

框架差在哪?Modbus RTU 的一則訊框 = 1-byte 從站位址 + 功能碼 + 資料 + 16-bit CRC,起訖靠「至少 3.5 個字元時間」的靜默間隔界定;完整性用 CRC-16 自己把關;一條匯流排最多 247 個從站(位址 1–247,0 為廣播)。Modbus TCP 則把「位址 + CRC」換成 7-byte 的 MBAP header(交易識別碼 + 協定識別碼 + 長度 + 單元識別碼 Unit ID),跑在 TCP 的 port 502 上,而且不做 Modbus 層 CRC——因為下層的 Ethernet 訊框 CRC 與 TCP checksum/重傳已經保證完整性,再疊一層只是多餘。另外 TCP 是 client-server、支援多條同時連線,RTU 則是單主多從、共享匯流排、一次一筆。

RTU→TCP 閘道在做什麼

RTU→TCP 閘道在做什麼?它對上是 Modbus TCP server(port 502)、對下是 RS-485 主站去輪詢舊設備,中間做雙向的「換殼」:下行(SCADA→設備)收到 TCP 請求後,取出 MBAP 後面的 PDU(功能碼+資料,原封不動),把 MBAP 裡的 Unit ID 當成 RS-485 從站位址放到 RTU 訊框最前面,算上 CRC-16,送上序列匯流排;上行(設備→SCADA)拿到序列回應後,去掉尾端 CRC,用原請求的 Transaction ID 重建 MBAP,經 TCP 連線送回。重點:應用層 PDU 全程不動,閘道只換外殼 + 管理「哪個 Unit ID 對應哪台序列從站」。所以你現場一堆 RS-485 的舊 Modbus 設備,不必換掉,加一台閘道就能接進 Ethernet/SCADA。(逾時、重試、例外碼透傳等細節各家實作略有不同。)

閘道硬體三件套:為何 W5500 最省力、DM9051 最有彈性

閘道硬體就三件套:序列側一顆 RS-485 收發器(半雙工,要控制收發方向)、中間一顆 MCU(負責 Modbus 框架組拆、CRC 計算、Unit ID 對應,以及最吃功夫的序列時序與匯流排轉向——RTU 靠 3.5 字元靜默界定、字元間超過 1.5 字元就丟棄)、TCP 側一顆乙太網晶片提供 port 502 的 socket。乙太網晶片怎麼選是關鍵:WIZnet W5500 把整個 TCP/IP 堆疊做進矽晶(硬體 TCP/IP),MCU 只要透過 SPI 做 socket 程式設計(open/listen/recv/send),完全不用在韌體跑 TCP/IP——於是 MCU 的工作只剩 Modbus 框架 + 序列時序,程式碼極輕、RAM/Flash 需求低、即時性穩定,連低階 MCU 都能勝任(W5500 內建 32KB 緩衝、8 個 socket,可同時服務多個 SCADA client)。DAVICOM DM9051 則是 SPI 介面的 MAC+PHY(雖有 IP/TCP/UDP checksum 硬體卸載,但那不等於硬體 TCP/IP 堆疊),TCP/IP 仍要靠主機 MCU 跑軟體堆疊(如 lwIP):較吃 MCU 資源,但換來彈性,可同時跑其他需要原始 socket / 自訂協定 / 與 RTOS 整合的網路功能,不被固定堆疊框住。

怎麼選

怎麼選:現場是 RS-485 序列、要接進 Ethernet/SCADA → 做一台 RTU→TCP 閘道(舊設備、舊接線都不必動)。乙太網側若只是要一個單純、穩定的 Modbus TCP server,又想讓韌體最輕、即時性最穩、甚至用低階 MCU → 選硬體 TCP/IP 的 W5500;若你還要在同一顆上跑其他網路協定、要原始 socket 彈性、或已經有 lwIP 與 RTOS 架構 → 選 DM9051(MAC+PHY + 軟體堆疊)。RTU 與 TCP 沒有絕對誰比較好——TCP 有重傳但也有連線延遲抖動,RTU 在確定性序列時序上自有優勢,視場景而定。傑聯特科技同時是 WIZnet 與 DAVICOM 授權代理商,硬體 TCP/IP(W5500/W6100)與 SPI MAC+PHY(DM9051)兩條乙太網路線、以及搭配的 GD32 MCU 都供應;歡迎提供你的設備數量、序列/乙太網需求與即時性要求,我們協助規劃閘道架構並回覆樣品、規格書與報價。

文中提及的產品

W5500 現貨

W5500 硬體 TCP/IP Ethernet 控制器

W5500 是 WIZnet 的旗艦以太網控制器,採用獨特的硬體 TCP/IP stack,無需軟體實作 TCP/IP 協定即可直接建立網路連線。透過 SPI 介面與主控 MCU 連接,內建 32KB 收發 Buffer,支援最多 8 個 socket,是 Arduino/Raspberry Pi 生態系最廣泛採用的以太網晶片。

EthernetTCP/IPSPI
DM9051 現貨

DM9051 SPI 介面 10/100M Ethernet 控制器

DM9051 是 DAVICOM 推出的單晶片 10/100M Fast Ethernet 控制器,採用 SPI 介面,無需 8/16-bit 並列 bus,大幅簡化硬體設計。內建 16KB SRAM 收發 Buffer,支援 Full-Duplex 流控,已有 Linux kernel 原生驅動支援,適合 ARM 或 RISC-V MCU 系統的網路擴充。

EthernetSPIFast Ethernet
GD32F303 現貨

GD32F303 Arm Cortex-M4 主流 MCU

GD32F303 是 GigaDevice 主流 Arm Cortex-M4 MCU,主頻 120MHz(含 DSP/FPU/MPU),Flash 128KB~3MB、SRAM 32~96KB,具 3× 12-bit ADC、2× DAC、豐富計時器與 USB FS/CAN/SDIO。封裝 LQFP48/64/100/144,常作為 STM32F1 升級到 M4 或 STM32F303 等級的替代選擇。

MCU32-bitCortex-M4

需要這些元件或設計支援?

傑聯特科技提供元件、規格書與工程技術支援。

立即詢價