Modbus 详解:一文带你轻松理解工业通信协议(入门必读)
前言
在学习 STM32、PLC、RS485、工业传感器或者智能电子鼻时,相信大家一定听过 Modbus 这个词。
很多初学者第一次接触时都会有这样的疑问:
Modbus 到底是什么?为什么工业设备几乎都在用它?
其实,Modbus 并没有想象中那么复杂。
本文将用最简单、最容易理解的方式,带大家彻底弄懂 Modbus,包括它的工作原理、通信方式、数据格式以及实际应用。
阅读完本文,你将能够理解:
-
什么是 Modbus?
-
Modbus 为什么如此流行?
-
Master(主站)和 Slave(从站)是什么?
-
什么是寄存器(Register)?
-
Modbus RTU 和 Modbus TCP 有什么区别?
-
Modbus 在 STM32 和智能电子鼻中的应用。
建议先收藏本文,再慢慢阅读。
一、什么是 Modbus?
Modbus 是一种工业通信协议(Communication Protocol),由 Modicon 公司于 1979 年提出(现属于施耐德电气)。
它最大的作用就是:
让不同厂家的工业设备能够按照统一的规则进行通信。
例如:
-
PLC
-
STM32
-
Arduino
-
气体传感器
-
温湿度模块
-
电表
-
变频器
-
工控机
-
上位机软件
只要都支持 Modbus,它们之间就可以互相交换数据。
二、为什么需要 Modbus?
举一个生活中的例子。
假设有三位外国人:
-
中国人说中文
-
美国人说英语
-
日本人说日语
如果没有共同语言,他们几乎无法交流。
工业设备也是一样。
例如:
A 厂家的温湿度模块发送:
Temp=25
B 厂家的模块发送:
Temperature=25℃
C 厂家甚至发送:
0x0019
不同厂家各说各的话,设备根本无法互相理解。
于是,工业领域制定了一套统一的通信规范:
Modbus。
只要大家都按照 Modbus 协议发送数据,不同厂家的设备就能顺利通信。
三、Modbus 是如何工作的?
Modbus 采用的是一种非常经典的通信模式:
Master(主站)
│
发送请求
│
▼
Slave(从站)
│
返回数据
整个过程可以理解成老师点名。
老师:
张三!
学生:
到!
老师:
李四!
学生:
到!
老师不点名,学生不会主动回答。
Modbus 也是一样。
主站负责发问,从站负责回答。
四、Master(主站)和 Slave(从站)
很多人刚开始学习 Modbus 时,都会被 Master 和 Slave 这两个概念绕晕。
其实非常简单。
Master(主站)
负责主动发送命令。
例如:
-
PLC
-
STM32
-
工控机
-
LabVIEW
-
Python 上位机
-
Qt 软件
例如:
请告诉我当前 NO₂ 浓度是多少?
Slave(从站)
负责等待命令,然后回复数据。
例如:
-
NO₂ 传感器
-
VOC 传感器
-
温湿度模块
-
电表
-
智能电子鼻采集节点
例如:
当前浓度:18 ppm
整个通信过程始终遵循:
一问一答。
五、Modbus 数据是如何存储的?
设备内部通常都有很多数据。
例如:
-
温度
-
湿度
-
NO₂
-
SO₂
-
NH₃
这些数据放在哪里?
答案就是:
寄存器(Register)。
可以把寄存器理解成一个一个的小抽屉。
例如:
抽屉0001
里面存放:
NO₂浓度
抽屉0002
里面存放:
VOC浓度
抽屉0003
里面存放:
温度
抽屉0004
里面存放:
湿度
所以:
读取寄存器0003
实际上就是:
读取温度
是不是非常容易理解?
六、设备地址(Address)
如果一条 RS485 总线上连接了很多设备,该如何区分?
答案就是:
设备地址。
例如:
| 设备 | 地址 |
|---|---|
| NO₂传感器 | 1 |
| VOC传感器 | 2 |
| 温湿度模块 | 3 |
主站发送:
读取地址1的数据
只有地址为 1 的设备会响应。
其他设备都会保持沉默。
七、功能码(Function Code)
除了知道找谁,还需要告诉设备:
我要做什么?
这就是功能码(Function Code)。
最常见的几个功能码如下:
| 功能码 | 作用 |
|---|---|
| 01 | 读取线圈(Coils) |
| 02 | 读取离散输入 |
| 03 | 读取保持寄存器 |
| 04 | 读取输入寄存器 |
| 05 | 写单个线圈 |
| 06 | 写单个寄存器 |
| 15 | 写多个线圈 |
| 16 | 写多个寄存器 |
其中:
03(Read Holding Registers)是工业现场使用最多的功能码。
八、一次完整的 Modbus 通信
假设读取 NO₂ 浓度。
主站发送:
从机地址+功能码+寄存器起始地址+寄存器数量+CRC校验
01 03 00 01 00 01 CRC
每一部分分别代表:
| 字段 | 说明 |
|---|---|
| 01 | 设备地址 |
| 03 | 读取保持寄存器 |
| 0001 | 寄存器地址 |
| 0001 | 读取1个寄存器 |
| CRC | 校验码 |
设备收到后,返回:
从机地址+功能码+字节数+数据+CRC校验(一个寄存器对应2字节)
01 03 02 00 64 CRC
每一部分分别代表:
| 字段 | 说明 |
|---|---|
| 01 | 设备地址 |
| 03 | 读取保持寄存器 |
| 02 | 字节数(表示后面数据占2个字节) |
| 00 64 | 数据(2个字节) |
| CRC | 校验码 |
其中:
0064
转换成十进制就是:
100
如果该寄存器定义的是 NO₂ 浓度,那么最终表示:
NO₂ = 100 ppm
整个过程通常只需要几毫秒。
九、Modbus 三种通信方式
1、Modbus RTU(最常见)
通信介质:
RS485
特点:
-
二进制传输
-
速度快
-
抗干扰能力强
-
工业现场应用最广
例如:
PLC
│
RS485
│
STM32
│
电子鼻
2、Modbus ASCII
通信内容全部采用 ASCII 字符,例如:
:010300010001F8
优点:
-
数据直观
-
方便调试
缺点:
-
通信效率较低
-
目前已较少使用
3、Modbus TCP
基于以太网通信。
连接方式:
电脑
│
交换机
│
PLC
│
电子鼻
特点:
-
通信速度快
-
网络覆盖范围广
-
适用于工业互联网和远程监控
十、RTU 与 TCP 如何选择?
| 对比项 | Modbus RTU | Modbus TCP |
|---|---|---|
| 通信介质 | RS485 | 以太网 |
| 速度 | 较快 | 最快 |
| 成本 | 低 | 较高 |
| 抗干扰 | 强 | 依赖网络环境 |
| 工业现场 | ★★★★★ | ★★★★☆ |
| 工业物联网 | ★★★☆☆ | ★★★★★ |
如果只是普通工业现场采集数据,推荐 Modbus RTU。
如果需要联网、云平台或远程监控,则更适合 Modbus TCP。
十一、Modbus 在智能电子鼻中的应用
以智能电子鼻为例,可以定义如下寄存器:
| 寄存器地址 | 数据 |
|---|---|
| 40001 | NO₂ |
| 40002 | SO₂ |
| 40003 | NH₃ |
| 40004 | VOC |
| 40005 | CO |
| 40006 | H₂S |
| 40007 | 温度 |
| 40008 | 湿度 |
电脑只需依次读取这些寄存器,就能获取所有传感器数据,并绘制实时曲线、保存历史记录或上传云平台。
这也是许多工业气体检测系统和智能电子鼻产品的典型通信方案。
十二、Modbus 的优缺点
优点
1)协议简单,容易学习
2)开发成本低
3)几乎所有 PLC 都支持
4)不同厂家设备兼容性好
5)工业应用成熟,生态完善
缺点
1)采用主从通信,从站不能主动上传数据
2)原生协议没有加密和身份认证
3)数据结构简单,不适合复杂业务
4)RTU 带宽有限,不适合大数据量传输
总结
对于刚接触工业通信的开发者来说,可以记住下面这句话:
Modbus = 工业设备之间的共同语言。
它通过设备地址确定通信对象,通过功能码确定操作类型,通过寄存器存储和读取数据,再借助 RS485(RTU) 或 以太网(TCP) 完成数据传输。
对于 STM32、PLC、智能电子鼻、工业传感器等项目而言,掌握 Modbus 几乎是一项必备技能。
写在最后
如果你正在学习:
-
STM32
-
RS485
-
PLC
-
工业通信
-
智能电子鼻
-
气体传感器
-
上位机开发
欢迎关注我的专栏,后续将持续更新:
-
《RS485 通信原理详解》
-
《Modbus RTU 通信实战(STM32版)》
-
《Modbus TCP 从入门到项目实践》
如果这篇文章对你有所帮助,欢迎 点赞、收藏、关注,你的支持将是我持续创作的最大动力!
更多推荐
所有评论(0)