1. Modbus协议概述:起源、发展、应用与协议栈结构

大家好,我是老张,搞工业通信有些年头了。今天咱们聊聊Modbus——这个在工控圈里几乎无人不知的协议。

说实话,我第一次接触Modbus是在2008年,那时候刚入行,师傅扔给我一本英文手册,说「把这个搞懂,就能跟PLC聊天了」。我啃了三天,发现它其实没那么复杂。嗯,这也是Modbus能活这么久的原因——简单、可靠、不挑设备。

1.1 Modbus的起源:一个「意外」的行业标准

Modbus诞生于1979年,由Modicon公司(现在的施耐德电气)提出。当时的目的很简单:让自家的PLC能跟其他设备通信。

你想想看,那个年代还没有TCP/IP,没有以太网,工厂里全是串行线。Modbus就是在这种背景下,用一种极其简洁的方式解决了设备间的数据交换问题。

我个人觉得,Modbus最大的贡献不是技术本身,而是它第一个把「主从架构」引入工业通信。这个设计思路,后来被无数协议借鉴。

关键时间节点:

  • 1979年:Modicon发布Modbus协议,用于Modicon PLC
  • 1990年代:Modbus成为事实上的工业标准,被广泛复制
  • 2004年:Modbus-IDA组织成立,协议正式开源
  • 2007年:成为国家标准GB/T 19582
  • 至今:全球超过1000万节点在使用Modbus

1.2 发展历程:从串行线到以太网

Modbus的发展,说白了就是工业通信的进化史。

第一阶段:串行Modbus

最早的Modbus跑在RS-232和RS-485上。RS-232只能点对点,距离15米。RS-485就厉害了,能挂32个设备,距离1200米。我在一个水处理项目里,就用RS-485拉了将近一公里,照样跑得稳。

第二阶段:Modbus Plus

这是Modicon搞的私有版本,速度比串行快,但没火起来。为什么?因为不开放。你想想看,一个封闭的协议,谁会陪你玩?

第三阶段:Modbus TCP

2000年左右,以太网开始进工厂。Modbus顺势推出了TCP版本。把原来的串行帧直接塞进TCP包里,端口用502。简单粗暴,但有效。我记得第一次用Modbus TCP连西门子S7-1200,配置完就能读数据,连驱动都不用装。

我的经验:选串行还是TCP?看距离和干扰。距离远、环境恶劣,用RS-485;距离近、需要高速,用TCP。别迷信TCP一定比串行好,工业现场有时候铜线比网线靠谱。

1.3 应用领域:无处不在的「工业普通话」

Modbus的应用范围,我总结为「三个凡是」:

  • 凡是带RS-485接口的设备:变频器、温控器、智能仪表、电力仪表……十有八九支持Modbus
  • 凡是做SCADA的系统:组态王、WinCC、iFIX、LabVIEW,原生支持Modbus
  • 凡是做物联网网关的:边缘计算盒子、DTU、4G路由器,Modbus是标配

具体行业嘛,我列几个:

行业 典型应用 我踩过的坑
电力 智能电表、继电保护 电表地址默认247,跟PLC冲突过
楼宇 空调、照明、电梯 BA系统用Modbus转BACnet,延迟大
水处理 流量计、液位计、阀门 485总线不接地,数据乱跳
光伏 逆变器、汇流箱 不同厂家寄存器定义不一样

1.4 协议栈结构:拆开看看里面长什么样

Modbus的协议栈,其实就三层。跟OSI七层模型比,它简直是个「极简主义者」。

下面这张图是我自己画的,帮你理解Modbus在通信中的位置:

Modbus协议栈结构 应用层(Application Layer) Modbus应用协议:功能码 + 数据 传输层(Transport Layer) Modbus TCP:TCP/IP封装 | Modbus RTU/ASCII:串行帧 物理层(Physical Layer) RS-232 / RS-485 / 以太网 用户数据 协议封装 物理传输 Modbus不关心物理层细节,只定义应用层和传输层规则 这也是它能在各种硬件上运行的原因

说白了,Modbus只定义了「怎么问」和「怎么答」,至于「用什么线传」「传多快」,它不管。这种设计让它能轻松移植到不同硬件上。

1.5 三种变体:RTU、ASCII、TCP

Modbus有三种主流变体,我简单对比一下:

特性 Modbus RTU Modbus ASCII Modbus TCP
编码方式 二进制 ASCII字符 二进制
数据密度 高(8位/字节) 低(2字符/字节) 高(8位/字节)
校验方式 CRC-16 LRC TCP校验和
典型速率 9600~115200 bps 9600 bps 100 Mbps
应用场景 工业现场(90%以上) 老旧设备、调试 上位机、网关

避坑指南:我曾经在一个项目中,用ASCII模式跟RTU设备通信,折腾了两天没通。后来发现是校验方式不同——ASCII用LRC,RTU用CRC。这两个不兼容,千万别混用。

1.6 为什么Modbus能活40年?

有人问我,现在有OPC UA、MQTT、Profinet,Modbus是不是该淘汰了?

我的回答是:不会。原因有三:

  1. 简单到极致:一个8位单片机就能跑Modbus,成本几乎为零
  2. 开放到骨子里:协议完全公开,没有专利费,谁都能用
  3. 生态太庞大:全球数以亿计的设备支持Modbus,替换成本太高

你想想看,一个传感器卖50块钱,你让它支持Profinet?光芯片授权费就比传感器贵。但Modbus?一个串口,几行代码,搞定。

我的建议:学Modbus不要只盯着协议本身。更重要的是理解它的设计哲学——用最简单的方式解决80%的问题。这个思路,放到今天做物联网产品设计,依然适用。

好了,这一章就聊到这儿。Modbus的起源、发展、应用和协议栈结构,你应该有个整体认识了。下一章我们深入功能码,看看Modbus到底能「聊」些什么。


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