4、Modbus TCP/IP:以太网通信基础、Modbus TCP报文格式、与Modbus RTU的区别
各位同学,咱们今天聊聊Modbus TCP/IP。说实话,这个协议在工业现场太常见了。我这些年做项目,十个里有八个都离不开它。你想想看,现在谁还愿意拉几百米的RS485线?以太网它不香吗?
4.1 以太网通信基础——别把它想得太玄乎
很多人一听到「以太网」,就觉得是搞IT的人玩的。其实没那么复杂。说白了,以太网就是一套规则,告诉设备怎么把数据打包、怎么发出去、怎么收回来。
我习惯把以太网通信比作寄快递:
- 物理层:就是快递车和马路。网线、光纤、交换机,这些都是跑数据的路。
- 数据链路层:相当于快递单上的地址。MAC地址就是设备的身份证,全球唯一。
- 网络层:这是快递分拣中心。IP地址告诉数据包「你要去哪个城市」。
- 传输层:快递员。TCP保证包裹不丢、不乱序。
嗯,这里要注意一点:Modbus TCP/IP用的是TCP端口502。这是IANA官方分配的端口号。我在项目中遇到过有人自己改了端口号,结果上位机死活连不上,查了半天才发现是端口被防火墙拦了。
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:单元标识符,设备地址103:功能码,读保持寄存器00 00:起始地址000 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。
4.4 实际应用中的选择建议
说了这么多,到底怎么选?我个人的经验是这样的:
- 新项目、新设备:无脑上Modbus TCP。速度快、调试方便、扩展性好。
- 老旧设备改造:看情况。如果设备只支持RTU,加个串口服务器转成TCP也行。
- 远距离传输:超过1200米,必须用TCP加光纤或者无线网桥。
- 强干扰环境:比如变频器旁边、电焊车间,RS485反而比以太网稳定。
- 成本敏感:一个RS485芯片几块钱,一个以太网模块几十块,自己掂量。
最后说一句:不管用哪种协议,调试工具一定要备好。我电脑里常年装着Modbus Poll(主站模拟)和Modbus Slave(从站模拟),还有Wireshark抓包。遇到问题先抓包,看报文对不对,比瞎猜强一百倍。
好了,这一章就到这里。下一章咱们聊聊Modbus TCP在实际项目中的组网方案,包括交换机配置、IP规划、冗余设计这些实战内容。