1、Modbus协议概述:Modbus的起源与发展、Modbus在楼宇自控中的地位、RTU与TCP模式的区别

1.1 Modbus的起源与发展

说起Modbus,得回到1979年。那时候我还没入行,但这个故事在圈子里流传很广。

Modbus是Modicon公司发明的。当时他们做PLC,发现不同设备之间没法通信。于是搞了个简单的串行协议。说白了,就是让PLC和现场设备能说上话。

这个协议有个特点——开放。Modicon没把它捂在手里,而是公开了。这在当时挺少见的。你想想看,一个公司愿意把自己的通信协议拿出来共享,这格局就不一样。

后来Modbus经历了几个关键节点:

  • 1979年:Modicon发布Modbus串行协议,基于RS-232/RS-485
  • 1999年:施耐德电气(收购了Modicon)推出Modbus TCP/IP
  • 2004年:Modbus组织正式成立,协议成为行业标准
  • 2007年:成为国家标准GB/T 19582

我记得刚入行那会儿,师傅跟我说:「搞楼宇自控,Modbus是基本功。」当时还不理解,后来才明白这句话的分量。

1.2 Modbus在楼宇自控中的地位

楼宇自控系统里,设备五花八门。空调、照明、电梯、给排水、消防……每个厂家都有自己的通信协议。这就麻烦了。

Modbus为什么能站住脚?我总结了几点:

  • 开放免费:不用交授权费,谁都能用
  • 简单可靠:报文结构清晰,调试起来不费劲
  • 硬件成本低:串口芯片几块钱,网口也便宜
  • 兼容性好:几乎所有楼宇设备都支持Modbus

我在一个大型商业综合体项目中遇到过这种情况:冷机是约克的,水泵是格兰富的,风机是国产的。三个厂家,三种协议。最后怎么解决的?全部走Modbus转BACnet网关。你看,Modbus成了「通用语言」。

核心观点:在楼宇自控领域,Modbus不是最先进的协议,但绝对是最通用的协议。它就像英语——不一定最优雅,但大家都会说。

1.3 RTU与TCP模式的区别

这是很多新手容易搞混的地方。我刚开始也犯过糊涂,后来在项目里踩了坑才彻底弄明白。

1.3.1 物理层不同

对比项 Modbus RTU Modbus TCP
物理接口 RS-232 / RS-485 以太网(RJ45)
传输介质 双绞线 网线 / 光纤
最大距离 RS-232:15米;RS-485:1200米 100米(交换机级联可延长)
节点数量 最多247个(RS-485) 理论上无限制

1.3.2 报文结构不同

这是最核心的区别。RTU报文有CRC校验,TCP报文没有。为什么?

因为TCP/IP协议栈底层已经做了校验。RTU跑在串行线上,没有这层保障,所以自己加了个CRC。

来看个实际例子:

// Modbus RTU报文(读取保持寄存器)
01 03 00 00 00 02 C4 0B
│  │  │     │     │
│  │  │     │     └── CRC校验(2字节)
│  │  │     └──────── 数据长度(2个寄存器)
│  │  └────────────── 起始地址(0x0000)
│  └───────────────── 功能码(03:读保持寄存器)
└──────────────────── 设备地址(01)

// Modbus TCP报文(相同功能)
00 01 00 00 00 06 01 03 00 00 00 02
│     │     │     │  │  │     │
│     │     │     │  │  │     └── 数据长度
│     │     │     │  │  └──────── 起始地址
│     │     │     │  └─────────── 功能码
│     │     │     └────────────── 设备地址
│     │     └──────────────────── 协议数据单元长度(6字节)
│     └────────────────────────── 协议标识符(0x0000)
└──────────────────────────────── 事务处理标识符

嗯,这里要注意:TCP报文多了个MBAP头(7字节)。这个头用来标识事务、协议、长度等信息。

1.3.3 通信方式不同

  • RTU模式:主从架构,一问一答。主机发请求,从机回复。不能主动上报。
  • TCP模式:客户端-服务器架构。可以多个客户端同时访问一个服务器。

我曾经在一个项目中,用RTU接了30多个设备。结果发现轮询一遍要3秒多。后来换成TCP,速度直接提升到毫秒级。这就是区别。

实战建议:如果设备距离近(100米以内)、数量少(10个以内),用RTU就够了。如果设备分散、数量多、要求实时性高,果断上TCP。

1.3.4 波特率与速度

RTU的波特率常见的有9600、19200、38400、115200。我一般用38400,平衡了速度和稳定性。

TCP就没这个限制了。百兆、千兆以太网,速度完全不是一个量级。

但别以为TCP就一定快。网络拥堵、交换机延迟、防火墙过滤,这些都会影响实际速度。我在一个项目中就遇到过,TCP因为网络风暴反而比RTU还慢。后来加了VLAN隔离才解决。

避坑指南:我曾经在选型时忽略了RTU的「响应超时」设置。结果设备多了,总有几个响应慢的,导致整个系统卡死。后来统一设置了500ms超时,并加了重试机制,问题才解决。

1.4 小结

Modbus从1979年走到今天,40多年了。在楼宇自控这个圈子里,它就像老黄牛——不花哨,但可靠。

RTU和TCP的选择,说白了就是看现场条件。距离远、设备多、要求高,选TCP。成本敏感、环境简单、设备少,选RTU。

我个人习惯是:新项目优先考虑TCP,改造项目看情况保留RTU。毕竟现在网线比串口线好找多了,不是吗?

下一章,我们聊聊Modbus的地址模型和功能码。这东西搞明白了,调试设备就顺手多了。