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 并列总线,大幅简化硬件设计。内置 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

需要这些元器件或设计支持?

傑聯特科技提供元器件、规格书与工程技术支持。

立即询价