|
| 1 | +将 PLC 数据接入 MQTT 是现代工业数字化的第一步。MQTT 作为轻量级的消息传输协议,凭借其在弱网环境下的可靠传输能力,对实时数据流传输的支持,以及与主流云平台、数据分析工具和 MES 系统的原生兼容性,已成为工业物联网领域的事实标准。 |
| 2 | + |
| 3 | +然而,在真实的工厂环境中,将 PLC 数据接入 MQTT 却远比想象中复杂。不同厂商的 PLC 采用不同的通信协议(如 Modbus、OPC UA、西门子 S7、Ethernet/IP 等),传统方案需要为每种协议单独编写驱动程序,部署和维护成本高昂。 |
| 4 | + |
| 5 | +**本文将分享如何通过 NeuronEX 实现零代码接入,在 10 分钟内将任意 PLC 快速连接到 MQTT。** |
| 6 | + |
| 7 | +## 为什么 PLC 到 MQTT 的转换如此困难? |
| 8 | + |
| 9 | +在深入解决方案之前,让我们先梳理一下核心问题。 |
| 10 | + |
| 11 | +### 协议碎片化 |
| 12 | + |
| 13 | +工厂车间的设备来自不同的年代和厂商: |
| 14 | + |
| 15 | +| **PLC 厂商** | **PLC 型号** | **协议** | |
| 16 | +| :----------- | :------------------------------------- | :--------------------------- | |
| 17 | +| **西门子** | S7-200/300/400, S7-1200/1500 | Siemens S7,OPC UA | |
| 18 | +| **罗克韦尔** | MicroLogix, ControlLogix, CompactLogix | Ethernet/IP | |
| 19 | +| **三菱** | FX 系列,Q系列,A 系列 | Mitsubishi 1E,Mitsubishi 3E | |
| 20 | +| **欧姆龙** | CS 系列,CJ 系列,CP 系列,NJ 系列 | Fins TCP,Fins UDP | |
| 21 | +| **倍福** | CX 系列,C 系列 | Beckhoff ADS,Modbus | |
| 22 | + |
| 23 | +每种协议都有自己的数据格式、寻址方式和通信机制。传统方案需要为每种协议开发和维护独立的驱动程序。 |
| 24 | + |
| 25 | +### 数据格式不统一 |
| 26 | + |
| 27 | +即使成功采集到数据,不同 PLC 的数据格式也千差万别: |
| 28 | + |
| 29 | +- 寄存器地址:`40001`(Modbus)vs `DB1.DBD0`(Siemens)vs `N7:0`(Allen-Bradley) |
| 30 | +- 数据类型:INT16、FLOAT、BOOL、STRING... |
| 31 | +- 字节序:大端 vs 小端 |
| 32 | + |
| 33 | +这些数据需要经过标准化处理后才能发送到 MQTT。 |
| 34 | + |
| 35 | +### 部署和维护成本高 |
| 36 | + |
| 37 | +传统接入方案往往依赖专用硬件网关,不仅初始采购成本高,还需承担后续一系列隐性支出:硬件网关的部署和调试需要专业工程师现场操作,耗时耗力;针对不同 PLC 协议的驱动适配、固件升级与故障排查,均需支付额外的技术服务费用。 |
| 38 | + |
| 39 | +## NeuronEX:无缝连接 OT 和 IT 系统 |
| 40 | + |
| 41 | +NeuronEX 是一款专为工业场景设计的工业边缘网关软件,它将协议转换、数据处理和 MQTT 发布整合到一个轻量级的软件中。 |
| 42 | + |
| 43 | +NeuronEX 支持 100 多种工业协议,从 Modbus、OPC UA 到西门子 S7。作为通用的工业数据中枢,它从各种不同的工厂资产中收集数据,并将其标准化,以便进行分析和采取行动。 |
| 44 | + |
| 45 | +**支持的完整协议列表:**[数采插件列表 | EMQX Neuron 文档](https://docs.emqx.com/zh/neuronex/latest/introduction/plugin-list/plugin-list.html) |
| 46 | + |
| 47 | +### 极致的易用性:零代码、自动化配置 |
| 48 | + |
| 49 | +NeuronEX 显著降低了 PLC 接入的技术门槛,使工程师能够专注于业务逻辑而非协议细节: |
| 50 | + |
| 51 | +**自动化的点位发现** |
| 52 | + |
| 53 | +针对 OPC UA 等现代协议,NeuronEX 支持一键扫描南向设备点位,自动识别并导入 PLC 内部的数据结构,无需手动输入寄存器地址。 |
| 54 | + |
| 55 | +**批量管理与快速迁移** |
| 56 | + |
| 57 | +支持点位和驱动的批量导入与导出功能。对于拥有成千上万个点位的大型项目,工程师可以通过 Excel/CSV 模板快速完成配置,极大地提升了部署效率。 |
| 58 | + |
| 59 | +**直观的连通性诊断** |
| 60 | + |
| 61 | +内置网络连接测试工具和驱动状态监控模块,可实时查看每个驱动的延时、发送/接收字节数及错误率,帮助运维人员在秒级定位通信故障。 |
| 62 | + |
| 63 | +**可视化监控与反控** |
| 64 | + |
| 65 | +通过 Web 界面即可实时观察采集到的数据流,并支持对 PLC 寄存器的反向写入操作,实现闭环控制。 |
| 66 | + |
| 67 | +### 卓越的并发性能:高吞吐、低延迟 |
| 68 | + |
| 69 | +NeuronEX 不仅解决了「连得上」的问题,更在高负载工业环境下确保了「传得稳」: |
| 70 | + |
| 71 | +**单节点 100,000+ 点位支持** |
| 72 | + |
| 73 | +在典型测试场景下(如西门子 S7 驱动),NeuronEX 能够同时管理 10 个驱动,每个驱动配置 10 个采集组,每秒采集 10 万个浮点型点位,满足大规模产线的数据数采需求。 |
| 74 | + |
| 75 | +**极低的资源占用** |
| 76 | + |
| 77 | +即便在处理 5 万个并发点位时,内存占用仅约 355MB,CPU 使用率保持在 25% 左右。这意味着 NeuronEX 可以轻松运行在树莓派、工业网关等各类轻量化边缘硬件上。 |
| 78 | + |
| 79 | +**毫秒级响应能力** |
| 80 | + |
| 81 | +具备毫秒级的数据下发响应时间,确保了控制指令从云端或边缘侧到 PLC 执行机构的实时性。 |
| 82 | + |
| 83 | + |
| 84 | + |
| 85 | +## 10 分钟实战:Modbus PLC 到 MQTT |
| 86 | + |
| 87 | +让我们通过一个完整的实战案例来演示整个连接流程。 |
| 88 | + |
| 89 | +### 架构概览 |
| 90 | + |
| 91 | + |
| 92 | + |
| 93 | +### 前提条件 |
| 94 | + |
| 95 | +- **PLC 或模拟器**:本例使用 Modbus TCP 模拟器(PeakHMI Slave Simulators) |
| 96 | +- **NeuronEX**:通过 Docker 快速部署 |
| 97 | +- **MQTT Broker**:使用公共 Broker `broker.emqx.io` |
| 98 | +- **MQTT 客户端**:使用 [MQTTX](https://mqttx.app/zh) 验证数据 |
| 99 | + |
| 100 | +### 步骤 1:启动 NeuronEX |
| 101 | + |
| 102 | +```shell |
| 103 | +# 拉取 Docker 镜像 |
| 104 | +docker pull emqx/neuronex:latest |
| 105 | + |
| 106 | +# 启动容器 |
| 107 | +docker run -d --name neuronex -p 8085:8085 --log-opt max-size=100m --privileged=true emqx/neuronex:latest |
| 108 | +``` |
| 109 | + |
| 110 | +访问 `http://localhost:8085` |
| 111 | + |
| 112 | +使用默认账号登录:用户名:`admin`;密码:`0000` |
| 113 | + |
| 114 | + |
| 115 | + |
| 116 | +### 步骤 2:添加南向设备(数据源) |
| 117 | + |
| 118 | +南向设备是 NeuronEX 与 PLC 之间的连接。 |
| 119 | + |
| 120 | +1. 进入「**数据采集**」→「**南向设备**」 |
| 121 | +2. 点击「**添加设备**」 |
| 122 | +3. 配置设备参数: |
| 123 | + - **名称**:`modbus-tcp-1` |
| 124 | + - **插件**:选择「Modbus TCP」 |
| 125 | + - **IP 地址**:填写模拟器的 IP(如 `192.168.1.100`) |
| 126 | + - **端口**:`502`(Modbus TCP 默认端口) |
| 127 | + - 其他参数保持默认 |
| 128 | +4. 点击「**添加设备**」 |
| 129 | + |
| 130 | + |
| 131 | + |
| 132 | +### 步骤 3:创建采集组和点位 |
| 133 | + |
| 134 | +采集组用于将数据点分组,每个组可以设置独立的采集频率。 |
| 135 | + |
| 136 | +#### 创建采集组 |
| 137 | + |
| 138 | +1. 点击刚创建的 `modbus-tcp-1` 设备卡片 |
| 139 | +2. 点击「**创建组**」 |
| 140 | +3. 配置组参数: |
| 141 | + - **组名称**:`group-1` |
| 142 | + - **采集间隔**:`1000`(毫秒,即每秒采集一次) |
| 143 | + |
| 144 | +#### 添加数据点位 |
| 145 | + |
| 146 | +1. 点击 `group-1` 组的「**点位列表**」 |
| 147 | +2. 点击「**添加点位**」 |
| 148 | +3. 配置点位参数: |
| 149 | + |
| 150 | +| 点位名称 | 属性 | 数据类型 | 地址 | 说明 | |
| 151 | +| :----------- | :--- | :------- | :------ | :--------- | |
| 152 | +| temperature | Read | FLOAT | 1!40001 | 温度传感器 | |
| 153 | +| pressure | Read | INT16 | 1!40003 | 压力传感器 | |
| 154 | +| motor_status | Read | BIT | 1!00001 | 电机状态 | |
| 155 | + |
| 156 | +**地址格式说明**: |
| 157 | + |
| 158 | +- `1!40001`:`1` 是站点号,`40001` 是保持寄存器地址 |
| 159 | +- `1!00001`:`1` 是站点号,`00001` 是线圈地址 |
| 160 | + |
| 161 | +4. 点击「**创建**」 |
| 162 | + |
| 163 | +  |
| 164 | + |
| 165 | +完成点位创建后,设备状态会自动变为「**已连接**」。 |
| 166 | + |
| 167 | +### 步骤 4:验证数据采集 |
| 168 | + |
| 169 | +1. 进入「**数据采集**」→「**数据监控**」 |
| 170 | +2. 选择南向设备:`modbus-tcp-1` |
| 171 | +3. 选择组:`group-1` |
| 172 | +4. 查看实时数据 |
| 173 | + |
| 174 | + |
| 175 | + |
| 176 | +在这里,您将看到每个点位的实时值。 |
| 177 | + |
| 178 | +### 步骤 5:配置北向应用(MQTT 发布) |
| 179 | + |
| 180 | +北向应用用于将采集到的数据发送到外部系统。 |
| 181 | + |
| 182 | +#### 创建 MQTT 应用 |
| 183 | + |
| 184 | +1. 进入「**数据采集**」→「**北向应用**」 |
| 185 | +2. 点击「**添加应用**」 |
| 186 | +3. 配置应用参数: |
| 187 | + - **名称**:`mqtt-broker` |
| 188 | + - **插件**:选择「MQTT」 |
| 189 | + |
| 190 | + |
| 191 | + |
| 192 | +#### 配置 MQTT 连接 |
| 193 | + |
| 194 | +1. 在应用配置页面填写: |
| 195 | + - **服务器地址**:`broker.emqx.io`(公共 MQTT Broker) |
| 196 | + - **服务器端口**:`1883` |
| 197 | + - **客户端 ID**:`neuron-client-001`(可选) |
| 198 | + - **用户名/密码**:留空(公共 Broker 无需认证) |
| 199 | +2. 点击「**提交**」 |
| 200 | + |
| 201 | +应用状态会变为「**运行中**」。 |
| 202 | + |
| 203 | +#### 订阅南向数据组 |
| 204 | + |
| 205 | +1. 点击 `mqtt-broker` 应用的「**添加订阅**」 |
| 206 | +2. 配置订阅参数: |
| 207 | + - **主题**:`factory/line1/modbus-tcp-1/data`(自定义主题) |
| 208 | + - **订阅南向驱动数据**:选择 `modbus-tcp-1` → `group-1` |
| 209 | + |
| 210 | +3. 点击「**提交**」 |
| 211 | + |
| 212 | +  |
| 213 | + |
| 214 | +### 步骤 6:验证 MQTT 数据 |
| 215 | + |
| 216 | +使用 MQTTX 客户端验证数据是否成功发布到 MQTT Broker。 |
| 217 | + |
| 218 | +1. 打开 MQTTX,创建新连接: |
| 219 | + - **名称**:`Test Connection` |
| 220 | + - **Host**:`broker.emqx.io` |
| 221 | + - **Port**:`1883` |
| 222 | +2. 添加订阅: |
| 223 | + - **Topic**:`factory/line1/modbus-tcp-1/data` |
| 224 | +3. 查看接收到的数据: |
| 225 | + |
| 226 | +``` |
| 227 | +{ |
| 228 | + "timestamp": 1706745600000, |
| 229 | + "node_name": "modbus-tcp-1", |
| 230 | + "group_name": "group-1", |
| 231 | + "values": { |
| 232 | + "temperature": 23.3, |
| 233 | + "pressure": 88, |
| 234 | + "motor_status": 1 |
| 235 | + } |
| 236 | +} |
| 237 | +``` |
| 238 | + |
| 239 | + |
| 240 | + |
| 241 | +**恭喜!您已经在 10 分钟内完成了从 Modbus PLC 到 MQTT 的完整数据链路。** |
| 242 | + |
| 243 | +## 进阶功能:支持更多 PLC 协议 |
| 244 | + |
| 245 | +以上示例通过 Modbus 模拟器演示了数据采集流程。实际上,NeuronEX 支持超过 100 种工业协议,且连接过程均如本文所示般简单直观。您可以在这里找到详细教程: |
| 246 | + |
| 247 | +- 西门子 S7-1200 PLC:[10 分钟快速入门:使用 NeuronEX 将西门子 S7-1200 PLC 数据接入 MQTT](https://www.emqx.com/zh/blog/connecting-siemens-s7-1200-plc-to-mqtt) |
| 248 | +- 欧姆龙 NX1P 系列 PLC:[Omron NX1P 连接示例 | Neuron 文档](https://docs.emqx.com/zh/neuron/latest/configuration/south-devices/omron-fins/example/nx1p/nx1p.html) |
| 249 | +- 西门子 S7300 系列 PLC:[Siemens S7300 PLC 连接示例 | EMQX Neuron 文档](https://docs.emqx.com/zh/neuronex/latest/configuration/south-devices/siemens-mpi/s7300.html) |
| 250 | +- 三菱 FX 系列 PLC:[FX5U 连接示例 | EMQX Neuron 文档](https://docs.emqx.com/zh/neuronex/latest/configuration/south-devices/mitsubishi-3e/fx5u.html) |
| 251 | +- 三菱 Q 系列 PLC:[Q03UDE 连接示例 | EMQX Neuron 文档](https://docs.emqx.com/zh/neuronex/latest/configuration/south-devices/mitsubishi-3e/q03ude.html) |
| 252 | +- 倍福 CX 系列 PLC:[采集 PLC 数据 | EMQX Neuron 文档](https://docs.emqx.com/zh/neuronex/latest/configuration/south-devices/ads/plc-ads/ads.html) |
| 253 | +- 汇川 Easy 系列 PLC:[Easy521 连接示例 | EMQX Neuron 文档](https://docs.emqx.com/zh/neuronex/latest/configuration/south-devices/modbus-hc-tcp/example/autoshop/autoshop-modbus.html) |
| 254 | + |
| 255 | +## 进阶功能:边缘数据处理 |
| 256 | + |
| 257 | +NeuronEX 不仅能采集和转发数据,还能在边缘端进行实时数据处理。 |
| 258 | + |
| 259 | +### 使用场景 |
| 260 | + |
| 261 | +- **数据过滤**:只上传超过阈值的数据(如温度 > 80°C) |
| 262 | +- **数据转换**:单位转换(PSI → Bar)、数值计算(+1、×0.9) |
| 263 | +- **数据聚合**:计算平均值、最大值、最小值 |
| 264 | +- **告警触发**:实时检测异常并发送告警 |
| 265 | + |
| 266 | +### 快速示例:温度超限告警 |
| 267 | + |
| 268 | +**场景**:当温度超过 80°C 时,发送告警到独立的 MQTT 主题。 |
| 269 | + |
| 270 | +#### 1. 订阅数据到数据处理模块 |
| 271 | + |
| 272 | +在「**数据采集**」→「**北向应用**」中,找到默认的 `DataProcessing` 应用,添加订阅: |
| 273 | + |
| 274 | +- 订阅 `modbus-tcp-1` → `group-1` |
| 275 | + |
| 276 | +数据会自动流入数据处理模块的 `neuronStream` 数据流。 |
| 277 | + |
| 278 | +#### 2. 创建处理规则 |
| 279 | + |
| 280 | +进入「**数据处理**」→「**规则**」,点击「**新建规则**」: |
| 281 | + |
| 282 | +**SQL 语句**: |
| 283 | + |
| 284 | +``` |
| 285 | +SELECT |
| 286 | + timestamp, |
| 287 | + node_name, |
| 288 | + values.temperature as temp |
| 289 | +FROM neuronStream |
| 290 | +WHERE values.temperature > 80 |
| 291 | +``` |
| 292 | + |
| 293 | +#### 3. 配置动作(Sink) |
| 294 | + |
| 295 | +在「**动作**」模块点击「**添加**」,选择「MQTT」: |
| 296 | + |
| 297 | +- **服务器地址**:`broker.emqx.io:1883` |
| 298 | +- **主题**:`factory/alerts/high-temperature` |
| 299 | +- **数据模板**: |
| 300 | + |
| 301 | +``` |
| 302 | +{ |
| 303 | + "alert_type": "high_temperature", |
| 304 | + "device": "{{.node_name}}", |
| 305 | + "temperature": {{.temp}}, |
| 306 | + "timestamp": {{int64 .timestamp}} |
| 307 | +} |
| 308 | +``` |
| 309 | + |
| 310 | +#### 4. 验证告警 |
| 311 | + |
| 312 | +在 MQTTX 中订阅 `factory/alerts/high-temperature`,当温度超过 80°C 时,你会收到告警消息。 |
| 313 | + |
| 314 | +## 立即开始 |
| 315 | + |
| 316 | +将 PLC 连接到 MQTT 不应该是一个复杂、昂贵且耗时的项目。NeuronEX 通过以下方式简化了整个流程: |
| 317 | + |
| 318 | +- **100+ 协议开箱即用**:无需为每种 PLC 编写驱动 |
| 319 | +- **零代码配置**:Web 界面可视化操作,10 分钟完成配置 |
| 320 | +- **轻量级部署**:Docker 容器,200MB+ 镜像,256MB 内存 |
| 321 | +- **边缘计算能力**:SQL 流计算 + AI 算法集成 |
| 322 | + |
| 323 | +立即开始您的工业数字化之旅,让数据流动起来。 |
| 324 | + |
| 325 | +### 下载安装 |
| 326 | + |
| 327 | +**Docker 部署**(推荐): |
| 328 | + |
| 329 | +```shell |
| 330 | +docker pull emqx/neuronex:latest |
| 331 | +docker run -d --name neuronex -p 8085:8085 --log-opt max-size=100m --privileged=true emqx/neuronex:latest |
| 332 | +``` |
| 333 | + |
| 334 | +**其他安装方式**: |
| 335 | + |
| 336 | +- 下载页面:[下载 EMQX Neuron](https://www.emqx.com/zh/downloads-and-install/neuronex) |
| 337 | +- 安装文档:[安装 NeuronEX | EMQX Neuron 文档](https://docs.emqx.com/zh/neuronex/latest/installation/introduction.html) |
| 338 | + |
| 339 | +### 学习资源 |
| 340 | + |
| 341 | +- **快速入门**:[快速开始 | EMQX Neuron 文档](https://docs.emqx.com/zh/neuronex/latest/quick-start/quick-start.html) |
| 342 | +- **驱动列表**:[数采插件列表 | EMQX Neuron 文档](https://docs.emqx.com/zh/neuronex/latest/introduction/plugin-list/plugin-list.html) |
| 343 | +- **最佳实践**:[最佳实践 | EMQX Neuron 文档](https://docs.emqx.com/zh/neuronex/latest/best-practise/overview.html) |
| 344 | + |
| 345 | +### 获取支持 |
| 346 | + |
| 347 | +- **技术支持**:support@emqx.io |
| 348 | +- **商务咨询**:sales@emqx.com |
| 349 | + |
| 350 | +### 免费试用 |
| 351 | + |
| 352 | +申请 30 天免费试用 License:[免费申请 NeuronEX License](https://www.emqx.com/zh/apply-licenses/neuronex) |
0 commit comments