什么是 Modbus?工业网关如何采集 PLC 和仪表数据
文章目录
- 什么是 Modbus?工业网关如何采集 PLC 和仪表数据
- 一、Modbus 是什么?
- 二、为什么工业现场常用 Modbus?
- 1. 协议简单
- 2. 设备支持广泛
- 3. 适合现场数据采集
- 4. 成本较低
- 三、Modbus 的基本通信模式
- 1. 什么是主站 Master?
- 2. 什么是从站 Slave?
- 3. 主从通信流程
- 四、Modbus RTU 和 Modbus TCP 有什么区别?
- 1. Modbus RTU
- 2. Modbus TCP
- 3. Modbus RTU 和 Modbus TCP 对比
- 五、RS-485 和 RS-232 是什么?
- 1. RS-485
- 2. RS-232
- 六、Modbus 中的寄存器是什么?
- 七、Modbus 常见数据区
- 1. Coils 线圈
- 2. Discrete Inputs 离散输入
- 3. Input Registers 输入寄存器
- 4. Holding Registers 保持寄存器
- 八、Modbus 功能码是什么?
- 1. 读取保持寄存器:功能码 03
- 2. 读取输入寄存器:功能码 04
- 3. 写单个寄存器:功能码 06
- 4. 写多个寄存器:功能码 16
- 九、寄存器地址为什么容易出错?
- 1. 地址偏移问题
- 2. 功能码和地址区不匹配
- 3. 读取长度不正确
- 十、数据类型和字节序
- 1. 常见数据类型
- 2. 字节序问题
- 3. 比例系数
- 十一、工业网关如何采集 PLC 和仪表数据?
- 1. 第一步:确认设备支持的 Modbus 类型
- 2. 第二步:连接线路
- Modbus RTU 接线
- Modbus TCP 接线
- 3. 第三步:配置通信参数
- 4. 第四步:配置寄存器地址
- 5. 第五步:测试读取数据
- 6. 第六步:上传到云平台
- 十二、一个完整的工业网关采集示例
- 1. 现场设备信息
- 2. 寄存器表
- 3. 工业网关采集配置
- 4. 采集结果
- 5. 上传到云平台
- 十三、Modbus 常见故障排查
- 1. 完全通信不上
- 2. 只能读到部分数据
- 3. 读到的数据明显不对
- 4. 通信不稳定
- 5. 多设备通信时部分设备失败
- 十四、Modbus 的安全问题
- 十五、Modbus、MQTT、工业网关之间的关系
- 十六、工业物联网中的典型应用场景
- 1. 能耗监测
- 2. 环境监测
- 3. 水处理系统
- 4. 工厂设备监控
- 5. 光伏和储能系统
- 十七、学习 Modbus 的建议
- 十八、总结
- 下一篇预告
在前几篇文章中,我们已经介绍了物联网的基本概念、物联网系统的工作原理,以及 MQTT、HTTP、Modbus 等常见通信协议。
其中,MQTT更常用于设备连接云平台,适合数据上云、远程监控和消息传输;而Modbus则更多出现在工业现场,用于 PLC、仪表、电表、传感器、RTU 等设备之间的数据采集和控制。
在工业物联网系统中,经常会看到这样的架构:
PLC / 仪表 / 电表 → Modbus → 工业网关 → MQTT / HTTP → 云平台那么问题来了:
Modbus 到底是什么?
为什么工业现场经常使用 Modbus?
工业网关又是如何通过 Modbus 采集 PLC 和仪表数据的?
本文将从入门角度介绍 Modbus 的基本概念、通信方式、常见类型、寄存器、功能码,以及工业网关采集数据的基本流程。
一、Modbus 是什么?
Modbus 是一种经典的工业通信协议,最早应用于工业自动化控制领域。
简单来说,Modbus 的作用是:
让工业设备之间按照统一规则进行数据读取和控制。
在工业现场,很多设备都支持 Modbus,例如:
- PLC;
- RTU;
- 智能电表;
- 水表;
- 温控器;
- 变频器;
- 传感器;
- 压力表;
- 流量计;
- 环境监测设备;
- 工业控制器。
这些设备可能来自不同厂商,但只要它们支持 Modbus,就可以按照 Modbus 协议进行通信。
例如,工业网关可以通过 Modbus 读取电表中的电压、电流、功率等数据:
工业网关 → 读取电表寄存器 电表 → 返回电压、电流、功率数据也可以读取 PLC 中的运行状态:
工业网关 → 读取 PLC 数据区 PLC → 返回设备运行状态二、为什么工业现场常用 Modbus?
Modbus 在工业现场应用非常广泛,主要原因有以下几点。
1. 协议简单
Modbus 协议结构相对简单,容易实现,也容易调试。
对于很多工业设备来说,只需要配置:
- 从站地址;
- 通信方式;
- 波特率;
- 数据位;
- 校验位;
- 停止位;
- 寄存器地址;
- 数据类型。
就可以完成基本通信。
2. 设备支持广泛
很多工业设备默认支持 Modbus。
例如:
- 电表通常支持 Modbus RTU;
- PLC 通常支持 Modbus TCP 或 Modbus RTU;
- 变频器常见支持 Modbus RTU;
- 温湿度传感器常见支持 Modbus RTU;
- 水处理仪表、压力表、流量计也经常支持 Modbus。
因此,在工业项目中,Modbus 是非常常见的设备接入方式。
3. 适合现场数据采集
工业现场的数据通常是一些结构化的数据,例如:
- 电压;
- 电流;
- 功率;
- 温度;
- 湿度;
- 压力;
- 液位;
- 开关状态;
- 报警状态;
- 设备运行状态。
这些数据通常可以通过寄存器地址读取,非常适合使用 Modbus 协议。
4. 成本较低
Modbus RTU 通常基于 RS-485 串口通信,一条总线上可以连接多个设备,布线成本较低。
例如:
工业网关 RS-485 口 ↓ 电表 1 ↓ 电表 2 ↓ 电表 3 ↓ 温湿度传感器只要地址不冲突,多个设备可以挂在同一条 RS-485 总线上。
三、Modbus 的基本通信模式
Modbus 采用主从模式,也可以称为Master / Slave 模式。
在较新的描述中,也有说法叫:
- Client / Server;
- 主站 / 从站。
为了便于初学者理解,本文主要使用主站 Master和从站 Slave的说法。
1. 什么是主站 Master?
主站是主动发起请求的一方。
在工业物联网系统中,主站通常是:
- 工业网关;
- PLC;
- SCADA 系统;
- 上位机软件;
- 数据采集器。
主站负责主动发送请求,例如:
请告诉我寄存器 40001 的值是多少?2. 什么是从站 Slave?
从站是被动响应请求的一方。
在工业现场中,从站通常是:
- 电表;
- 水表;
- 传感器;
- 变频器;
- PLC;
- 仪表;
- RTU。
从站不会主动发送数据给主站,而是等待主站来读取或写入。
例如:
主站:请返回寄存器 40001 的值 从站:寄存器 40001 的值是 230.53. 主从通信流程
Modbus 的基本通信流程如下:
1. 主站发送请求 2. 从站接收请求 3. 从站处理请求 4. 从站返回响应 5. 主站解析数据可以简单表示为:
Modbus Master → 请求读取数据 → Modbus Slave Modbus Master ← 返回数据 ← Modbus Slave例如,工业网关读取电表数据:
工业网关 → 读取电表电压寄存器 电表 → 返回电压数值四、Modbus RTU 和 Modbus TCP 有什么区别?
Modbus 常见类型主要有两种:
- Modbus RTU;
- Modbus TCP。
它们的核心协议思想类似,但通信介质和应用场景不同。
1. Modbus RTU
Modbus RTU 通常运行在串口通信上,常见接口是:
- RS-485;
- RS-232。
其中,RS-485 在工业现场更常见。
典型结构如下:
工业网关 RS-485 接口 → Modbus RTU → 电表 / 仪表 / 传感器Modbus RTU 常见于:
- 电表;
- 水表;
- 温湿度传感器;
- 变频器;
- 压力表;
- 流量计;
- 环境监测仪;
- 工业仪表。
2. Modbus TCP
Modbus TCP 运行在以太网网络中,基于 TCP/IP 通信。
典型结构如下:
工业网关 Ethernet 接口 → Modbus TCP → PLC / 控制器 / 服务器Modbus TCP 常见于:
- PLC;
- 工业控制器;
- SCADA 系统;
- 上位机;
- 支持以太网通信的仪表;
- 工业交换机网络中的设备。
Modbus TCP 通常使用端口:
5023. Modbus RTU 和 Modbus TCP 对比
| 对比项 | Modbus RTU | Modbus TCP |
|---|---|---|
| 通信接口 | RS-485 / RS-232 | Ethernet 以太网 |
| 传输方式 | 串口通信 | TCP/IP 通信 |
| 常见设备 | 电表、仪表、传感器、变频器 | PLC、控制器、SCADA、上位机 |
| 地址方式 | 从站地址 Slave ID | IP 地址 + 端口 |
| 常见端口 | 无固定网络端口 | TCP 502 |
| 布线方式 | 总线式 | 以太网星型或网络结构 |
| 传输距离 | RS-485 可较远距离 | 取决于以太网网络 |
| 调试工具 | 串口工具、Modbus Poll 等 | Modbus TCP 工具、Wireshark 等 |
简单理解:
Modbus RTU 更偏串口现场设备;
Modbus TCP 更偏以太网工业网络。
五、RS-485 和 RS-232 是什么?
在讲 Modbus RTU 时,经常会看到 RS-485 和 RS-232。
需要注意:
RS-485、RS-232 是物理通信接口标准;
Modbus RTU 是运行在这些接口上的通信协议。
可以简单理解为:
RS-485 / RS-232:负责“电气连接和信号传输” Modbus RTU:负责“数据格式和通信规则”1. RS-485
RS-485 是工业现场非常常见的串口通信方式。
特点包括:
- 抗干扰能力较强;
- 适合较长距离传输;
- 支持多设备总线连接;
- 常用于工业仪表、电表、传感器等设备。
RS-485 常见接线方式是:
A 接 A B 接 B GND 可根据实际情况连接有些设备会标为:
D+ / D- 485+ / 485- A / B不同厂商标识可能不完全一致,接线时需要查看设备说明书。
2. RS-232
RS-232 也是一种串口通信方式。
相比 RS-485,RS-232 通常更适合点对点通信,通信距离较短。
常见于:
- 老式设备;
- 调试口;
- 单设备连接;
- 某些仪表或控制器。
六、Modbus 中的寄存器是什么?
理解 Modbus,必须理解寄存器 Register。
在 Modbus 中,设备中的数据通常存储在不同的寄存器中。
例如,一个电表可能把数据存放在如下寄存器中:
| 数据 | 寄存器地址 |
|---|---|
| 电压 | 40001 |
| 电流 | 40003 |
| 有功功率 | 40005 |
| 频率 | 40007 |
| 电能 | 40009 |
工业网关想读取电压,就需要知道电压对应的寄存器地址。
例如:
读取寄存器 40001 → 得到电压数据七、Modbus 常见数据区
Modbus 中常见的数据区包括四类:
| 数据区 | 英文名称 | 访问方式 | 常见用途 |
|---|---|---|---|
| 线圈 | Coils | 读/写 | 开关量输出 |
| 离散输入 | Discrete Inputs | 只读 | 开关量输入 |
| 输入寄存器 | Input Registers | 只读 | 模拟量输入 |
| 保持寄存器 | Holding Registers | 读/写 | 参数、测量值、控制值 |
1. Coils 线圈
Coils 通常用于表示可读写的开关量。
例如:
- 继电器开关;
- 电机启停;
- 输出点状态;
- 阀门开关。
数据通常是布尔值:
0:关闭 1:打开2. Discrete Inputs 离散输入
Discrete Inputs 通常用于只读的开关量输入。
例如:
- 按钮状态;
- 限位开关;
- 门磁状态;
- 告警输入状态。
它通常只能读取,不能写入。
3. Input Registers 输入寄存器
Input Registers 通常用于只读模拟量数据。
例如:
- 温度;
- 湿度;
- 压力;
- 液位;
- 电压;
- 电流。
主站只能读取这些数据,不能写入。
4. Holding Registers 保持寄存器
Holding Registers 是最常见的数据区之一,支持读取和写入。
常用于:
- 设备参数;
- 采集值;
- 控制参数;
- 运行状态;
- 配置项。
例如:
读取保持寄存器 → 获取电压 写入保持寄存器 → 修改设备参数在很多设备说明书中,常见的 4xxxx 地址通常就是保持寄存器。
八、Modbus 功能码是什么?
功能码 Function Code 用来表示主站想执行什么操作。
常见功能码如下:
| 功能码 | 功能 | 说明 |
|---|---|---|
| 01 | Read Coils | 读取线圈 |
| 02 | Read Discrete Inputs | 读取离散输入 |
| 03 | Read Holding Registers | 读取保持寄存器 |
| 04 | Read Input Registers | 读取输入寄存器 |
| 05 | Write Single Coil | 写单个线圈 |
| 06 | Write Single Register | 写单个保持寄存器 |
| 15 | Write Multiple Coils | 写多个线圈 |
| 16 | Write Multiple Registers | 写多个保持寄存器 |
在实际项目中,比较常用的是:
03:读取保持寄存器 04:读取输入寄存器 06:写单个寄存器 16:写多个寄存器1. 读取保持寄存器:功能码 03
例如,工业网关读取电表的电压、电流数据。
功能码:03 含义:读取 Holding Registers典型流程:
主站请求:读取从站 1 的保持寄存器 40001,读取 2 个寄存器 从站响应:返回寄存器数据2. 读取输入寄存器:功能码 04
例如,读取传感器的温度、湿度数据。
功能码:04 含义:读取 Input Registers3. 写单个寄存器:功能码 06
例如,向设备写入一个参数。
功能码:06 含义:写单个 Holding Register4. 写多个寄存器:功能码 16
例如,一次性写入多个配置参数。
功能码:16 含义:写多个 Holding Registers九、寄存器地址为什么容易出错?
在 Modbus 调试中,寄存器地址是最容易出错的地方之一。
常见问题包括:
- 设备说明书地址从 1 开始;
- 软件配置地址从 0 开始;
- 40001 是否需要减去 40001;
- 功能码选择错误;
- 数据类型选择错误;
- 字节序选择错误;
- 读取长度不正确。
1. 地址偏移问题
例如,设备说明书中写:
电压地址:40001但在某些软件或网关中,可能需要填写:
0或者:
1这是因为不同软件对地址的表示方式不同。
有的软件使用逻辑地址,例如 40001;
有的软件使用实际偏移地址,例如 0。
所以调试时需要注意说明书和配置界面的地址规则。
2. 功能码和地址区不匹配
例如,某个数据在保持寄存器 Holding Registers 中,需要使用功能码 03 读取。
如果误用了功能码 04,就可能读取失败。
例如:
正确:功能码 03 + Holding Register 错误:功能码 04 + Holding Register3. 读取长度不正确
一个 16 位整数通常占用 1 个寄存器。
但如果数据是 32 位整数或浮点数,通常需要 2 个寄存器。
例如:
| 数据类型 | 占用寄存器数量 |
|---|---|
| 16-bit Integer | 1 个寄存器 |
| 32-bit Integer | 2 个寄存器 |
| Float | 2 个寄存器 |
| Double | 4 个寄存器 |
如果读取长度不对,解析出来的数据就可能错误。
十、数据类型和字节序
Modbus 寄存器本身通常是 16 位数据。
但实际设备数据可能是:
- 16 位整数;
- 32 位整数;
- 32 位浮点数;
- 有符号整数;
- 无符号整数;
- 高低字节交换;
- 高低字交换。
因此,仅知道寄存器地址还不够,还需要知道数据类型和字节序。
1. 常见数据类型
| 数据类型 | 说明 |
|---|---|
| UInt16 | 16 位无符号整数 |
| Int16 | 16 位有符号整数 |
| UInt32 | 32 位无符号整数 |
| Int32 | 32 位有符号整数 |
| Float | 32 位浮点数 |
| Double | 64 位浮点数 |
| Boolean | 布尔值 |
例如,温度可能是:
寄存器原始值:285 比例系数:0.1 实际温度:28.5℃2. 字节序问题
字节序也叫 Endianness。
对于 32 位数据,因为需要两个寄存器,所以不同设备可能采用不同顺序。
常见顺序包括:
ABCD BADC CDAB DCBA如果字节序设置错误,可能会出现非常离谱的数据。
例如,实际温度是:
28.5但解析后可能变成:
1.23E-38或者:
999999这通常就需要检查字节序和数据类型。
3. 比例系数
很多工业设备说明书中会写比例系数。
例如:
寄存器值:2305 比例系数:0.1 实际电压:230.5 V或者:
寄存器值:285 比例系数:0.1 实际温度:28.5 ℃因此,采集数据后通常还需要进行换算。
十一、工业网关如何采集 PLC 和仪表数据?
工业网关在工业物联网系统中非常重要。
它通常位于现场设备和云平台之间,负责:
- 连接 PLC、仪表、电表、传感器;
- 通过 Modbus 采集现场数据;
- 对数据进行解析和转换;
- 将数据上传到云平台;
- 接收云平台命令;
- 下发控制指令到现场设备。
整体架构如下:
PLC / 仪表 / 电表 / 传感器 ↓ Modbus RTU / Modbus TCP ↓ 工业网关 ↓ MQTT / HTTP / HTTPS ↓ 云平台 ↓ Web 后台 / 手机 App / 数据大屏1. 第一步:确认设备支持的 Modbus 类型
首先需要确认现场设备支持哪种 Modbus。
例如:
| 设备 | 可能支持的协议 |
|---|---|
| 电表 | Modbus RTU |
| 温湿度传感器 | Modbus RTU |
| PLC | Modbus TCP / Modbus RTU |
| 变频器 | Modbus RTU |
| RTU | Modbus RTU / TCP |
| 智能仪表 | Modbus RTU / TCP |
如果设备是 RS-485 接口,通常是 Modbus RTU。
如果设备是网口,可能是 Modbus TCP。
2. 第二步:连接线路
Modbus RTU 接线
如果使用 RS-485,需要连接:
网关 A → 设备 A 网关 B → 设备 B有些设备可能标为:
485+ / 485- D+ / D- A / B如果通信不上,可以尝试检查:
- A/B 是否接反;
- 是否需要接 GND;
- 线缆是否过长;
- 是否需要终端电阻;
- 多设备地址是否冲突。
Modbus TCP 接线
如果使用 Modbus TCP,需要保证网关和 PLC 或设备在网络上能够互通。
需要确认:
- IP 地址是否正确;
- 子网掩码是否正确;
- 网关地址是否正确;
- 网络是否能 ping 通;
- TCP 502 端口是否开放;
- 防火墙是否阻断。
3. 第三步:配置通信参数
对于 Modbus RTU,需要配置串口参数。
常见参数包括:
| 参数 | 示例 |
|---|---|
| 波特率 | 9600 / 19200 / 115200 |
| 数据位 | 8 |
| 校验位 | None / Even / Odd |
| 停止位 | 1 |
| 从站地址 | 1 |
| 超时时间 | 1000 ms |
| 轮询间隔 | 1000 ms |
例如:
Baud Rate: 9600 Data Bits: 8 Parity: None Stop Bits: 1 Slave ID: 1对于 Modbus TCP,需要配置:
| 参数 | 示例 |
|---|---|
| IP 地址 | 192.168.1.100 |
| 端口 | 502 |
| Unit ID | 1 |
| 超时时间 | 1000 ms |
| 轮询间隔 | 1000 ms |
4. 第四步:配置寄存器地址
根据设备说明书配置寄存器地址。
例如,一个电表说明书中可能写:
| 数据点 | 功能码 | 寄存器地址 | 数据类型 | 比例系数 |
|---|---|---|---|---|
| 电压 | 03 | 40001 | UInt16 | 0.1 |
| 电流 | 03 | 40002 | UInt16 | 0.01 |
| 有功功率 | 03 | 40003 | Int32 | 0.1 |
| 频率 | 03 | 40005 | UInt16 | 0.01 |
在工业网关中,可以配置成数据点:
点位名称:Voltage 功能码:03 寄存器地址:40001 数据类型:UInt16 比例系数:0.1 单位:V5. 第五步:测试读取数据
配置完成后,需要测试是否能读取到数据。
如果读取成功,可能看到类似数据:
{"Voltage":230.5,"Current":12.36,"Power":2850.4,"Frequency":50.01}如果读取失败,需要检查:
- 接线是否正确;
- 串口参数是否一致;
- 从站地址是否正确;
- 功能码是否正确;
- 寄存器地址是否正确;
- 设备是否正常供电;
- 是否有多个主站同时访问;
- RS-485 总线是否存在干扰。
6. 第六步:上传到云平台
工业网关采集到数据后,可以通过 MQTT 或 HTTP 上传到云平台。
例如,使用 MQTT 上传:
Topic: factory/gateway001/dataPayload 示例:
{"gateway_id":"gateway001","timestamp":1714300000,"data":{"Voltage":230.5,"Current":12.36,"Power":2850.4,"Frequency":50.01}}云平台收到后,可以进行:
- 数据存储;
- 实时曲线展示;
- 报表统计;
- 阈值告警;
- 设备状态监控;
- 远程运维管理。
十二、一个完整的工业网关采集示例
假设现场有一台智能电表,支持 Modbus RTU。
目标是通过工业网关采集电表数据,并上传到云平台。
1. 现场设备信息
| 项目 | 内容 |
|---|---|
| 设备类型 | 智能电表 |
| 通信协议 | Modbus RTU |
| 接口 | RS-485 |
| 从站地址 | 1 |
| 波特率 | 9600 |
| 数据位 | 8 |
| 校验位 | None |
| 停止位 | 1 |
2. 寄存器表
| 数据点 | 功能码 | 地址 | 数据类型 | 比例系数 | 单位 |
|---|---|---|---|---|---|
| 电压 | 03 | 40001 | UInt16 | 0.1 | V |
| 电流 | 03 | 40002 | UInt16 | 0.01 | A |
| 功率 | 03 | 40003 | Int32 | 0.1 | W |
| 频率 | 03 | 40005 | UInt16 | 0.01 | Hz |
3. 工业网关采集配置
可以将网关配置成以下点位:
Device Name: Meter001 Protocol: Modbus RTU Slave ID: 1 Baud Rate: 9600 Data Bits: 8 Parity: None Stop Bits: 1数据点配置:
Voltage: Function Code: 03 Address: 40001 Data Type: UInt16 Scale: 0.1 Current: Function Code: 03 Address: 40002 Data Type: UInt16 Scale: 0.01 Power: Function Code: 03 Address: 40003 Data Type: Int32 Scale: 0.1 Frequency: Function Code: 03 Address: 40005 Data Type: UInt16 Scale: 0.014. 采集结果
网关采集后,可以得到如下数据:
{"Meter001.Voltage":230.5,"Meter001.Current":12.36,"Meter001.Power":2850.4,"Meter001.Frequency":50.01}5. 上传到云平台
网关可以通过 MQTT 上传:
Topic: factory/site001/meter001/dataPayload:
{"device":"Meter001","timestamp":1714300000,"values":{"Voltage":230.5,"Current":12.36,"Power":2850.4,"Frequency":50.01}}最终用户可以在云平台看到:
- 实时电压;
- 实时电流;
- 实时功率;
- 历史趋势曲线;
- 异常告警;
- 能耗报表。
十三、Modbus 常见故障排查
在实际项目中,Modbus 通信经常会遇到一些问题。
下面列出常见问题和排查方向。
1. 完全通信不上
可能原因:
- A/B 线接反;
- 串口参数不一致;
- 从站地址错误;
- 设备未上电;
- RS-485 接线松动;
- 网关串口选择错误;
- 多个设备地址冲突;
- Modbus TCP 的 IP 或端口错误。
排查建议:
1. 确认设备供电正常 2. 确认接线正确 3. 确认串口参数一致 4. 确认 Slave ID 正确 5. 使用调试工具单独测试 6. 查看网关日志2. 只能读到部分数据
可能原因:
- 某些寄存器地址错误;
- 功能码不匹配;
- 读取长度超出范围;
- 设备不支持连续读取;
- 某些寄存器需要特殊权限;
- 数据类型配置错误。
排查建议:
分段读取寄存器,先读取单个点位,再逐步增加点位数量。3. 读到的数据明显不对
例如:
实际温度:28.5℃ 读取结果:285这种情况可能是比例系数未配置。
再例如:
实际功率:1200 W 读取结果:1.34E-38这种情况可能是数据类型或字节序错误。
排查方向:
- 检查数据类型;
- 检查比例系数;
- 检查字节序;
- 检查寄存器地址是否偏移;
- 检查是否需要读取两个寄存器。
4. 通信不稳定
可能原因:
- RS-485 线缆质量差;
- 现场电磁干扰强;
- 总线过长;
- 设备太多;
- 轮询间隔太短;
- 超时时间设置不合理;
- 缺少终端电阻;
- 接地不合理。
排查建议:
- 降低波特率;
- 增加轮询间隔;
- 检查屏蔽线和接地;
- 减少单条总线设备数量;
- 必要时增加 RS-485 中继器;
- 检查终端电阻是否合理。
5. 多设备通信时部分设备失败
可能原因:
- 从站地址重复;
- 某些设备串口参数不同;
- 总线负载过高;
- 设备响应速度不同;
- 轮询超时时间太短。
排查建议:
先单独连接每个设备测试,再逐个加入总线。十四、Modbus 的安全问题
传统 Modbus 协议本身并不具备完善的安全机制。
例如:
- 没有加密;
- 没有身份认证;
- 没有权限控制;
- 容易被抓包分析;
- 不适合直接暴露在公网。
因此,在实际项目中,不建议将 Modbus TCP 设备直接暴露到互联网。
更推荐的方式是:
现场设备 → Modbus → 工业网关 → VPN / TLS / MQTT over TLS → 云平台安全建议包括:
- 不要将 Modbus TCP 502 端口直接暴露公网;
- 使用 VPN 或专线访问现场设备;
- 使用工业防火墙限制访问来源;
- 使用网关进行协议转换;
- 上云通信使用 TLS/SSL;
- 做好账号、权限和访问控制;
- 保留通信日志和操作日志。
十五、Modbus、MQTT、工业网关之间的关系
很多初学者容易混淆 Modbus 和 MQTT。
其实它们通常解决不同层面的问题。
| 协议 / 设备 | 主要作用 |
|---|---|
| Modbus | 现场设备数据采集 |
| MQTT | 数据上云和消息通信 |
| 工业网关 | 协议转换、数据采集、边缘处理、联网传输 |
典型架构如下:
现场设备层: PLC / 仪表 / 电表 / 传感器 通信采集层: Modbus RTU / Modbus TCP 边缘网关层: 工业网关采集、解析、转换、缓存 云端通信层: MQTT / HTTP / HTTPS 应用平台层: 云平台、Web 后台、手机 App、数据大屏可以用一句话理解:
Modbus 负责把现场设备数据读出来,MQTT 负责把数据上传到云平台,工业网关负责把两者连接起来。
十六、工业物联网中的典型应用场景
Modbus + 工业网关在很多工业物联网场景中都很常见。
1. 能耗监测
工业网关通过 Modbus 采集电表数据:
- 电压;
- 电流;
- 功率;
- 功率因数;
- 用电量。
然后上传到云平台,用于能耗分析和报表统计。
电表 → Modbus RTU → 工业网关 → MQTT → 能耗平台2. 环境监测
采集温湿度、压力、液位、气体浓度等数据。
温湿度传感器 / 压力传感器 → Modbus RTU → 工业网关 → 云平台3. 水处理系统
采集水泵、流量计、液位计、PH 计、阀门状态等数据。
水处理仪表 → Modbus → 工业网关 → 远程监控平台4. 工厂设备监控
采集 PLC、变频器、生产线设备数据。
PLC / 变频器 → Modbus TCP / RTU → 工业网关 → 工业互联网平台5. 光伏和储能系统
采集逆变器、电表、储能设备、环境监测仪数据。
逆变器 / 电表 / 储能设备 → Modbus → 网关 → 能源管理平台十七、学习 Modbus 的建议
对于初学者来说,学习 Modbus 可以按照以下顺序:
1. 理解主站和从站 2. 理解 Modbus RTU 和 Modbus TCP 3. 理解 RS-485 接线 4. 理解寄存器和功能码 5. 学会看设备寄存器表 6. 学会配置采集点位 7. 学会处理数据类型、比例系数和字节序 8. 学会使用调试工具测试 9. 学会排查通信问题 10. 学会通过网关上传云平台常用调试工具包括:
- Modbus Poll;
- Modbus Slave;
- QModMaster;
- ModScan;
- 串口调试助手;
- Wireshark;
- 工业网关自带诊断工具。
十八、总结
Modbus 是工业现场非常常见的通信协议,广泛应用于 PLC、仪表、电表、传感器、变频器、RTU 等设备的数据采集和控制。
本文介绍了 Modbus 的核心概念:
- Modbus 是什么:一种工业通信协议;
- 主站 Master:主动发起请求的一方;
- 从站 Slave:被动响应请求的一方;
- Modbus RTU:基于 RS-485 / RS-232 的串口通信;
- Modbus TCP:基于以太网和 TCP/IP 的通信方式;
- 寄存器:设备数据存放的位置;
- 功能码:表示读取或写入操作;
- 数据类型、比例系数、字节序:决定数据能否正确解析。
在工业物联网系统中,Modbus 通常用于现场设备采集,而工业网关负责将这些数据转换并上传到云平台。
典型结构如下:
PLC / 仪表 / 电表 / 传感器 ↓ Modbus RTU / Modbus TCP ↓ 工业网关 ↓ MQTT / HTTP / HTTPS ↓ 云平台 ↓ Web 后台 / 手机 App / 数据大屏可以简单记住:
Modbus 解决“现场设备如何通信和采集数据”的问题;
工业网关解决“如何把现场数据转换并上传云平台”的问题;
MQTT / HTTP 解决“如何把数据传输到云端应用”的问题。
掌握 Modbus 后,就能更好地理解工业物联网项目中设备接入、数据采集、网关配置和云平台监控的完整流程。
下一篇预告
在下一篇文章中,我们可以继续介绍:
《什么是工业网关?它在物联网系统中到底有什么作用》
下一篇将重点讲解:
- 工业网关是什么;
- 工业网关和普通路由器有什么区别;
- 工业网关如何连接 PLC、传感器和云平台;
- 协议转换、边缘计算、远程运维是什么意思;
- 为什么工业物联网系统离不开工业网关。