Modbus 这个协议搞工业的没人不知道。从 1979 年 Modicon 公司推出到现在 40 多年了,它依然是工业现场最常用的通信协议之一。但很多新手搞不清楚 Modbus RTU 和 Modbus TCP 的区别,或者以为它们是兼容的可以直接互通——其实差得远。今天就把这两个东西讲清楚。
Modbus 本质上是一套应用层协议,定义了主从站之间怎么请求数据、怎么解析数据。但它没有规定物理层和数据链路层。所以 Modbus 可以跑在不同的物理介质上:RS-232、RS-485、以太网、光纤、甚至 GSM 网络。最常见的两种就是 Modbus RTU(跑在 RS-485 上)和 Modbus TCP(跑在以太网上)。
Modbus RTU 是最经典、最常见的版本。它跑在 RS-485 串行总线上,用差分信号传输,最大节点数 32 个(加中继可以扩到 247 个),通信距离不加中继最大 1200 米(速率越低距离越远)。通信速率从 1200 bps 到 115200 bps 都有,最常用的是 9600 bps 和 19200 bps。
Modbus RTU 的数据帧结构很简洁:一个从站地址(1 字节)、一个功能码(1 字节)、数据(0-252 字节)、CRC 校验(2 字节)。每个字节包含 11 位(1 起始位 + 8 数据位 + 1 校验位 + 1 停止位,或者无校验时是 1+8+2)。帧与帧之间需要 3.5 个字符以上的静默间隔,这是 RTU 模式的核心特征。
Modbus TCP 是 Modbus 的以太网版本,由 Schneider Automation 在 1999 年提出。它把 Modbus 帧封装进 TCP 报文里跑在以太网上,物理层和数据链路层都用标准的 100BASE-TX 以太网。通信速率是 100 Mbps 甚至 1 Gbps,比 RTU 的几十 Kbps 快几百倍。
Modbus TCP 的数据帧结构跟 RTU 差别挺大。它去掉了 CRC 校验(以太网底层已经有校验了),加了一个 MBAP 头(Modbus Application Protocol header),包含事务标识符、协议标识符、长度、单元标识符。所以 Modbus TCP 帧比 RTU 帧长一些,但能承载更多信息。
最关键的:Modbus RTU 和 Modbus TCP 不能直接互通。它们的物理层、链路层、应用层格式都不一样。需要专门的网关转换(Modbus RTU 转 Modbus TCP 网关),或者 PLC 同时支持两种接口(比如西门子 S7-1200 自带 RS-485 和以太网口,可以一个走 RTU 一个走 TCP)。
选型场景说一下吧。Modbus RTU 适合的场景:设备少(几个到几十个)、距离远(比如车间跨几百米)、干扰不强(室内控制柜内部)、成本敏感(RTU 硬件便宜,几块钱一个接口)、对速率要求不高(每秒几次读写足够)。典型应用:智能电表、水表、气表、变频器、温控器、PLC 分布式 I/O。
Modbus TCP 适合的场景:设备多、需要高速通信、要和 IT 系统集成、跟 PLC 主流交换机一起部署、方便远程诊断和维护。典型应用:工厂 MES 系统数据采集、HMI 触摸屏通信、多 PLC 联动、智能工厂上位机监控。
Modbus RTU 调试常见问题。通信不上:检查波特率、数据位、停止位、校验位主从站是否一致(最常见的坑);检查 RS-485 线 A、B 是否接反(很多接线端子 A、B 标反了);检查终端电阻(120Ω)是否在总线两端加上;检查地址是否冲突。通信上但数据乱:检查 CRC 校验是否正确(接线不好导致位错误);检查功能码是否匹配主从;检查寄存器地址映射(每个设备的地址定义可能不一样,要看手册)。
Modbus TCP 调试相对简单。用 Wireshark 抓包能看到完整的 MBAP 帧,调试效率高很多。常见问题:IP 地址冲突或者不在同一网段;防火墙阻挡了 502 端口(Modbus TCP 默认端口);主站连接数超限(Modbus TCP 默认一个主站一个连接,老 PLC 主站连接数有限)。
Modbus 的优势在于简单和开放。功能码就那么几个(01 读线圈、02 读离散输入、03 读保持寄存器、04 读输入寄存器、05 写单个线圈、06 写单个寄存器、15 写多个线圈、16 写多个寄存器),所有厂家都遵守,所以不同品牌的设备可以互通。但简单也是它的缺点——没有数据类型、没有安全机制、没有非加密、没有传输确认(依赖应用层自己处理)。现代工厂如果对安全性和确定性要求高,应该用更现代的协议(Profinet、EtherCAT、OPC UA)。
未来 Modbus 不会消失,但会逐步退出关键控制场景。Modbus TCP 还会长期存在,特别是在 IT/OT 融合的场景里,作为简单的数据采集协议。Modbus RTU 则会被逐步替换成更现代的现场总线。但对于大量低成本分布式设备(仪表、传感器),Modbus RTU 凭借极低的硬件成本和广泛的兼容性,依然会有市场。
新手学习建议:先学 Modbus RTU,因为它最简单、最能理解 Modbus 的核心机制。然后学 Modbus TCP,理解封装机制。再了解 Modbus 在不同厂家的具体实现(西门子、三菱、施耐德、AB 的 Modbus 实现细节都有差异)。最后可以了解一下 Modbus 的安全扩展(Modbus Security)和基于 TCP 的扩展协议(Modbus Plus)。打牢基础,遇到具体项目上手就快。
上一篇:Profibus 和 Profinet 有什么区别?一文看懂现场总线到工业以太网
下一篇:没有了