1. Modbus TCP 概述:协议起源、OSI模型定位、与Modbus RTU/ASCII的区别

1.1 协议起源:一个“老古董”为何至今活跃?

说起Modbus,很多年轻工程师可能会觉得这是上个世纪的东西。没错,它诞生于1979年,比我还大几岁。当时Modicon公司(没错,就是后来被施耐德收购的那家)为了给自己的PLC之间通信,搞出了这个协议。

你可能会问:一个40多年前的协议,现在还在用?

我刚开始做自动化项目时也有这个疑问。直到我在一个水处理项目中,看到现场几十台设备全是Modbus通信,从PLC到变频器、从温控表到流量计,清一色支持Modbus。那一刻我明白了——简单、开放、可靠,这三个词就是Modbus的生命力所在。

Modbus TCP是Modbus协议在以太网上的“变种”。说白了,就是把原来串口上跑的Modbus帧,原封不动地塞进TCP/IP包里。嗯,就是这么直接。

核心要点:Modbus TCP = Modbus应用层协议 + TCP/IP传输层。它保留了Modbus的报文结构,只是换了个“运输方式”。

1.2 OSI模型定位:它到底在网络的哪一层?

很多初学者搞不清Modbus TCP在OSI七层模型中的位置。我习惯这样理解:

  • 物理层和数据链路层:以太网(IEEE 802.3)
  • 网络层:IP协议
  • 传输层:TCP协议(端口502)
  • 应用层:Modbus应用协议

你看,Modbus TCP实际上跨越了传输层和应用层。它依赖TCP保证数据可靠到达,自己只负责“数据怎么解读”。

我曾经遇到一个现场问题:设备之间偶尔通信超时,排查了半天,最后发现是TCP窗口设置不合理。所以记住,Modbus TCP的稳定性,很大程度上取决于底层TCP/IP的配置

避坑指南:Modbus TCP默认端口是502。我曾经见过有人把端口改成其他值,结果防火墙一拦,设备全连不上。嗯,除非你有特殊需求,否则别改端口。

下面这张图可以帮你快速理解Modbus TCP在协议栈中的位置:

OSI七层模型 7. 应用层 6. 表示层 5. 会话层 4. 传输层 (TCP) 3. 网络层 (IP) 2. 数据链路层 1. 物理层 Modbus TCP 应用层 + 传输层 关键点 端口: 502 基于TCP连接

1.3 与Modbus RTU/ASCII的区别:三个“兄弟”怎么选?

Modbus家族有三个主要成员:RTU、ASCII和TCP。很多工程师问我:到底该用哪个?

我的回答是:看你的物理层和距离需求

特性 Modbus RTU Modbus ASCII Modbus TCP
物理层 RS-232/RS-485 RS-232/RS-485 以太网
数据格式 二进制(紧凑) ASCII字符(可读) 二进制(TCP帧内)
传输效率 低(约RTU的一半)
最大距离 约1200米(RS-485) 约1200米(RS-485) 100米(网线),可扩展
节点数 最多247个 最多247个 理论上无限制
校验方式 CRC16 LRC TCP校验和
典型应用 工业现场总线 老旧设备/调试 工厂以太网/上位机

说说我的实际经验:

  • Modbus RTU:我最常用的。在一条RS-485总线上挂十几个设备,成本低、稳定。但要注意终端电阻和接地,我吃过亏。
  • Modbus ASCII:说实话,现在很少用了。只有在调试阶段,或者某些老设备只支持ASCII时才会碰到。它的优点是报文可读,但效率太低。
  • Modbus TCP:如果你要连接上位机、SCADA系统,或者设备分布在较大范围,TCP是首选。不需要考虑地址冲突,直接IP寻址。

重要提醒:Modbus RTU和Modbus TCP的报文结构不同。RTU有CRC校验,TCP没有(由TCP层保证)。如果你用网关做协议转换,一定要确认网关是否正确处理了校验和超时机制。

1.4 报文结构对比:一眼看出区别

我们来看看三种协议的报文格式。我习惯用“帧”来理解:

Modbus RTU帧:

| 地址(1B) | 功能码(1B) | 数据(NB) | CRC16(2B) |

Modbus ASCII帧:

| ':'(1B) | 地址(2B) | 功能码(2B) | 数据(2NB) | LRC(2B) | CRLF(2B) |

Modbus TCP帧:

| 事务标识(2B) | 协议标识(2B) | 长度(2B) | 单元标识(1B) | 功能码(1B) | 数据(NB) |

看到区别了吗?TCP帧多了个MBAP头(事务标识、协议标识、长度),但没有CRC。为什么?因为TCP/IP协议栈已经保证了数据完整性,不需要再算一遍CRC。

个人经验:刚开始学Modbus TCP时,我总纠结“没有CRC会不会丢数据”。后来做了个测试:在100Mbps的工业以太网上连续跑24小时,零丢包。TCP的重传机制比CRC靠谱多了。

1.5 什么时候选Modbus TCP?

我总结了三个场景,你遇到任何一个,都可以优先考虑Modbus TCP:

  1. 需要高速通信:比如PLC和上位机之间频繁交换数据,串口的速度(通常115200bps)不够用。
  2. 设备分布范围广:一个车间到另一个车间,距离超过几百米。用网线加交换机,比拉RS-485线方便得多。
  3. 需要和IT系统对接:比如MES系统要采集设备数据,直接走以太网,不用额外转换。

但如果你只是控制几个变频器,距离又近,用Modbus RTU更经济。别为了“先进”而盲目上TCP,成本会翻倍。

好了,这一章就到这里。Modbus TCP的起源、定位和区别,你应该心里有数了。下一章我们直接上手抓包分析,看看报文到底长什么样。


公众号:蓝海资料掘金营,微信deep3321