4、Modbus TCP/IP:以太网通信基础、Modbus TCP报文格式、与Modbus RTU的区别

各位同学,咱们今天聊聊Modbus TCP/IP。说实话,这个协议在工业现场太常见了。我这些年做项目,十个里有八个都离不开它。你想想看,现在谁还愿意拉几百米的RS485线?以太网它不香吗?

4.1 以太网通信基础——别把它想得太玄乎

很多人一听到「以太网」,就觉得是搞IT的人玩的。其实没那么复杂。说白了,以太网就是一套规则,告诉设备怎么把数据打包、怎么发出去、怎么收回来。

我习惯把以太网通信比作寄快递:

  • 物理层:就是快递车和马路。网线、光纤、交换机,这些都是跑数据的路。
  • 数据链路层:相当于快递单上的地址。MAC地址就是设备的身份证,全球唯一。
  • 网络层:这是快递分拣中心。IP地址告诉数据包「你要去哪个城市」。
  • 传输层:快递员。TCP保证包裹不丢、不乱序。

嗯,这里要注意一点:Modbus TCP/IP用的是TCP端口502。这是IANA官方分配的端口号。我在项目中遇到过有人自己改了端口号,结果上位机死活连不上,查了半天才发现是端口被防火墙拦了。

小提示: 如果你在调试时发现Modbus TCP连不上,先别急着怀疑协议。用telnet或者网络调试助手,先测一下502端口通不通。很多时候是防火墙或者交换机配置的问题。

4.2 Modbus TCP报文格式——拆开看看里面长啥样

Modbus TCP的报文结构,其实比RTU简单。它去掉了RTU里的校验码,加了一个MBAP头。为什么?因为TCP/IP协议栈自己会做校验,Modbus就不用重复造轮子了。

来看一个标准的Modbus TCP请求报文:

事务标识符(2字节) | 协议标识符(2字节) | 长度(2字节) | 单元标识符(1字节) | 功能码(1字节) | 数据(n字节)

我拆开给你讲讲每个字段:

字段 字节数 说明
事务标识符 2 用来匹配请求和响应。我习惯每次请求加1,方便排查丢包
协议标识符 2 固定为0x0000,表示Modbus协议
长度 2 从单元标识符开始算起,后面所有字节的总长度
单元标识符 1 相当于RTU里的从站地址。但TCP里一般填0xFF或0x01
功能码 1 读线圈(0x01)、读寄存器(0x03)等
数据 n 具体读写的数据内容

举个例子,我要读取从站地址为1的设备的保持寄存器,起始地址0,读2个寄存器。报文长这样:

00 01 00 00 00 06 01 03 00 00 00 02

我来逐字节解释:

  • 00 01:事务ID,第1次请求
  • 00 00:协议ID,Modbus协议
  • 00 06:后面还有6个字节
  • 01:单元标识符,设备地址1
  • 03:功能码,读保持寄存器
  • 00 00:起始地址0
  • 00 02:读2个寄存器
重点: 长度字段只算「单元标识符+功能码+数据」的字节数,不包括事务标识符和协议标识符。这个坑我踩过,当年写上位机时长度算错了,设备一直不回包。

4.3 与Modbus RTU的区别——到底差在哪?

很多新手会问:Modbus TCP和RTU,到底选哪个?我直接说结论:能上TCP就别用RTU。除非你的设备太老,或者现场环境太恶劣。

它们的主要区别,我列个表你就明白了:

对比项 Modbus RTU Modbus TCP
物理层 RS232/RS485,串口通信 以太网,网线或光纤
传输距离 RS485最远1200米 100米(加交换机可无限扩展)
从站数量 最多247个 理论上无限制
报文结构 地址+功能码+数据+CRC校验 MBAP头+功能码+数据(无CRC)
通信方式 半双工,一问一答 全双工,可并发请求
速度 通常9600~115200 bps 10/100/1000 Mbps
实时性 一般,受波特率限制 高,毫秒级响应

你看,TCP在速度、距离、灵活性上全面碾压RTU。但RTU也有它的优势:成本低、抗干扰强、布线简单。我有个项目在钢厂,电磁干扰特别大,以太网交换机经常被干扰死机,最后老老实实换回了RS485。

避坑指南: 我曾经在一个项目里,用Modbus TCP去读一个老款PLC。PLC的TCP栈实现有问题,事务标识符必须从0开始递增,不能跳号。我上位机用了多线程并发请求,事务ID乱序,结果PLC直接罢工。后来改成串行请求才解决。所以,别以为TCP就比RTU高级,底层实现不好的设备照样坑你

4.4 实际应用中的选择建议

说了这么多,到底怎么选?我个人的经验是这样的:

  • 新项目、新设备:无脑上Modbus TCP。速度快、调试方便、扩展性好。
  • 老旧设备改造:看情况。如果设备只支持RTU,加个串口服务器转成TCP也行。
  • 远距离传输:超过1200米,必须用TCP加光纤或者无线网桥。
  • 强干扰环境:比如变频器旁边、电焊车间,RS485反而比以太网稳定。
  • 成本敏感:一个RS485芯片几块钱,一个以太网模块几十块,自己掂量。

最后说一句:不管用哪种协议,调试工具一定要备好。我电脑里常年装着Modbus Poll(主站模拟)和Modbus Slave(从站模拟),还有Wireshark抓包。遇到问题先抓包,看报文对不对,比瞎猜强一百倍。

好了,这一章就到这里。下一章咱们聊聊Modbus TCP在实际项目中的组网方案,包括交换机配置、IP规划、冗余设计这些实战内容。