『7x24小时有问必答』
副标题
: 让PLC接入云端,实现远程监控

一、MQTT的本质:工业物联网的轻量级协议

MQTT(Message Queuing Telemetry Transport)不是"另一种通信协议",是工业物联网的轻量级消息协议
[tr][td]传统方式[/td][td]MQTT方式[/td][/tr][tr][td]轮询获取数据[/td][td]发布/订阅模式[/td][/tr][tr][td]持续连接,占用带宽[/td][td]按需推送,节省带宽[/td][/tr][tr][td]点对点通信[/td][td]一对多广播[/td][/tr][tr][td]无服务质量保证[/td][td]QoS分级保障[/td][/tr]
MQTT的核心价值
轻量级:协议开销小,适合嵌入式设备
发布/订阅:解耦生产者和消费者
QoS分级:0-最多一次,1-至少一次,2-只有一次
断线重连:网络中断后自动恢复
遗嘱消息:设备离线时通知系统

二、MQTT架构

2.1 核心组件

┌─────────────┐         ┌─────────────┐         ┌─────────────┐
│   发布者    │         │   Broker    │         │   订阅者    │
│  (PLC)      │────────│  (服务器)   │────────│  (云端/SCADA)│
│             │         │             │         │             │
│  Publish    │         │  路由消息   │         │  Subscribe  │
│  Topic      │         │  QoS处理    │         │  Topic      │
└─────────────┘         └─────────────┘         └─────────────┘

2.2 核心概念

[tr][td]概念[/td][td]说明[/td][td]示例[/td][/tr][tr][td]Topic[/td][td]消息主题[/td][td]factory/line1/temperature[/td][/tr][tr][td]Publish[/td][td]发布消息[/td][td]PLC发送温度数据[/td][/tr][tr][td]Subscribe[/td][td]订阅主题[/td][td]云端订阅温度数据[/td][/tr][tr][td]QoS[/td][td]服务质量等级[/td][td]0/1/2[/td][/tr][tr][td]Keep Alive[/td][td]心跳间隔[/td][td]60秒[/td][/tr][tr][td]Will Message[/td][td]遗嘱消息[/td][td]设备离线通知[/td][/tr]

2.3 Topic设计规范

格式:{工厂}/{产线}/{设备}/{数据类型}
示例:
factory/line1/plc01/temperature    → 1号产线PLC01温度
factory/line1/plc01/status         → 1号产线PLC01状态
factory/line1/robot01/fault        → 1号产线机器人01故障
factory/line1/alert/critical       → 1号产线严重报警

三、三菱PLC作为MQTT客户端

3.1 硬件支持

[tr][td]PLC型号[/td][td]MQTT支持[/td][td]说明[/td][/tr][tr][td]iQ-R[/td][td]需通信模块[/td][td]CC-Link IE TSN + MQTT网关[/td][/tr][tr][td]iQ-F[/td][td]需通信模块[/td][td]Ethernet + MQTT网关[/td][/tr][tr][td]通用方案[/td][td]MQTT网关[/td][td]第三方MQTT网关设备[/td][/tr]

3.2 架构方案

方案1:PLC + MQTT网关
PLC ──Ethernet── MQTT网关 ──Internet── MQTT Broker
方案2:PLC + 边缘计算网关
PLC ──Ethernet── 边缘网关(运行MQTT客户端) ──Internet── Broker
方案3:PLC + 工业路由器
PLC ──Ethernet── 工业路由器(内置MQTT) ──Internet── Broker

3.3 MQTT网关配置

[tr][td]参数[/td][td]设置[/td][td]说明[/td][/tr][tr][td]Broker地址[/td][td]mqtt.example.com[/td][td]MQTT服务器地址[/td][/tr][tr][td]Broker端口[/td][td]1883/8883[/td][td]非加密/加密端口[/td][/tr][tr][td]Client ID[/td][td]plc_line1_01[/td][td]客户端唯一标识[/td][/tr][tr][td]Username[/td][td]plc_user[/td][td]认证用户名[/td][/tr][tr][td]Password[/td][td]**[/td][td]认证密码[/td][/tr][tr][td]Keep Alive[/td][td]60[/td][td]心跳间隔(秒)[/td][/tr][tr][td]Clean Session[/td][td]true[/td][td]清除会话[/td][/tr]

四、MQTT通信实战

4.1 数据发布

PLC数据 → MQTT消息
( PLC数据发布到MQTT )
VAR
( MQTT客户端变量 )
MQTT_Client: MQTT_Client_Type;
( 发布消息 )
Publish_Topic: STRING := 'factory/line1/plc01/temperature';
Publish_Message: STRING;
Publish_QoS: BYTE := 1;  ( QoS 1: 至少一次 )
( PLC数据 )
Temp_Current: REAL := 125.5;
Temp_Set: REAL := 120.0;
Motor_Status: BOOL := TRUE;
END_VAR
( 组装修复消息 )
Publish_Message := CONCAT('{"temp":', REAL_TO_STRING(Temp_Current));
Publish_Message := CONCAT(Publish_Message, ',"set":', REAL_TO_STRING(Temp_Set));
Publish_Message := CONCAT(Publish_Message, ',"status":', BOOL_TO_STRING(Motor_Status));
Publish_Message := CONCAT(Publish_Message, '}');
( 发布消息 )
MQTT_Publish(
Client := MQTT_Client,
Topic := Publish_Topic,
Message := Publish_Message,
QoS := Publish_QoS,
Retain := FALSE
);

4.2 数据订阅

MQTT消息 → PLC控制
( MQTT订阅消息处理 )
VAR
( 订阅主题 )
Subscribe_Topic: STRING := 'factory/line1/plc01/control';
( 接收消息 )
Receive_Message: STRING;
Temp_Set_Recv: REAL;
Motor_Start_Recv: BOOL;
Motor_Stop_Recv: BOOL;
END_VAR
( 消息回调处理 )
PROC MQTT_OnMessage(Client, Topic, Message)
IF Topic = 'factory/line1/plc01/control' THEN
( 解析JSON消息 )
Temp_Set_Recv := JSON_GetFloat(Message, 'temp_set');
Motor_Start_Recv := JSON_GetBool(Message, 'motor_start');
Motor_Stop_Recv := JSON_GetBool(Message, 'motor_stop');
( 应用控制命令 )
IF Motor_Start_Recv THEN
Motor_Start_Cmd := TRUE;
END_IF;
IF Motor_Stop_Recv THEN
Motor_Stop_Cmd := TRUE;
END_IF;
IF Temp_Set_Recv <> 0.0 THEN
Temp_Setpoint := Temp_Set_Recv;
END_IF;
END_IF;
END_PROC

4.3 JSON消息格式

发布消息格式
{
"timestamp": 1717435200,
"device_id": "plc_line1_01",
"data": {
"temperature": 125.5,
"pressure": 2.5,
"speed": 1500,
"status": "running"
},
"alarm": {
"active": false,
"code": 0
}
}
控制命令格式
{
"command": "set_temperature",
"value": 120.0,
"timestamp": 1717435200
}

五、QoS等级详解

5.1 QoS等级对比

[tr][td]QoS[/td][td]名称[/td][td]保证[/td][td]开销[/td][td]适用场景[/td][/tr][tr][td]0[/td][td]At most once[/td][td]最多一次,可能丢失[/td][td]最小[/td][td]实时数据,允许丢失[/td][/tr][tr][td]1[/td][td]At least once[/td][td]至少一次,可能重复[/td][td]中等[/td][td]控制命令,不能丢失[/td][/tr][tr][td]2[/td][td]Exactly once[/td][td]只有一次,最可靠[/td][td]最大[/td][td]关键数据,不能重复[/td][/tr]

5.2 QoS选择决策

数据重要性?
├─ 低(温度、压力) → QoS 0
├─ 中(状态、报警) → QoS 1
└─ 高(控制命令) → QoS 2
网络稳定性?
├─ 稳定(局域网) → QoS 0/1
└─ 不稳定(广域网) → QoS 1/2
带宽限制?
├─ 充足 → QoS 2
└─ 有限 → QoS 0/1

六、深度案例分析:工厂远程监控系统

6.1 背景

某工厂有多个产线分布在各地,需要远程监控设备状态。

6.2 问题经过

[tr][td]问题[/td][td]表现[/td][td]影响[/td][/tr][tr][td]数据孤岛[/td][td]各产线独立[/td][td]无法统一监控[/td][/tr][tr][td]实时性差[/td][td]轮询延迟高[/td][td]无法及时响应[/td][/tr][tr][td]带宽占用大[/td][td]持续连接[/td][td]网络成本高[/td][/tr][tr][td]断线无感知[/td][td]无离线通知[/td][td]故障发现延迟[/td][/tr]

6.3 解决方案

MQTT远程监控架构
┌─────────────────────────────────────────────────────────┐
│                    MQTT Broker (云端)                    │
│                                                         │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐     │
│  │ 产线1 PLC   │  │ 产线2 PLC   │  │ 产线3 PLC   │     │
│  │  (MQTT客户端)│  │  (MQTT客户端)│  │  (MQTT客户端)│     │
│  └──────┬──────┘  └──────┬──────┘  └──────┬──────┘     │
│         │                │                │            │
│         ▼                ▼                ▼            │
│  ┌─────────────────────────────────────────────────┐   │
│  │              云端数据处理层                       │   │
│  │  - 数据解析  - 数据存储  - 报警检测  - 趋势分析  │   │
│  └─────────────────────────────────────────────────┘   │
│                           │                             │
│                           ▼                             │
│  ┌─────────────────────────────────────────────────┐   │
│  │              Web监控平台                          │   │
│  │  - 实时数据展示  - 历史查询  - 远程控制  - 报警  │   │
│  └─────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────┘
实施步骤
[tr][td]步骤[/td][td]操作[/td][td]说明[/td][/tr][tr][td]1[/td][td]部署MQTT Broker[/td][td]云端或本地服务器[/td][/tr][tr][td]2[/td][td]PLC配置MQTT客户端[/td][td]通过网关或边缘计算[/td][/tr][tr][td]3[/td][td]定义Topic规范[/td][td]统一命名规范[/td][/tr][tr][td]4[/td][td]配置QoS[/td][td]根据数据重要性[/td][/tr][tr][td]5[/td][td]配置遗嘱消息[/td][td]设备离线通知[/td][/tr][tr][td]6[/td][td]云端开发[/td][td]数据解析、存储、展示[/td][/tr][tr][td]7[/td][td]联调测试[/td][td]全链路验证[/td][/tr]

6.4 效果对比

[tr][td]指标[/td][td]优化前[/td][td]优化后[/td][td]提升[/td][/tr][tr][td]数据延迟[/td][td]5-10s[/td][td]<1s[/td][td]-80%[/td][/tr][tr][td]带宽占用[/td][td]持续连接[/td][td]按需推送[/td][td]-90%[/td][/tr][tr][td]断线感知[/td][td]无[/td][td]秒级[/td][td]显著改善[/td][/tr][tr][td]监控覆盖[/td][td]本地[/td][td]远程[/td][td]100%覆盖[/td][/tr][tr][td]运维成本[/td][td]高[/td][td]低[/td][td]显著降低[/td][/tr]

七、安全配置

7.1 认证方式

[tr][td]认证方式[/td][td]说明[/td][td]安全性[/td][/tr][tr][td]无认证[/td][td]开放访问[/td][td]低[/td][/tr][tr][td]用户名/密码[/td][td]基本认证[/td][td]中[/td][/tr][tr][td]客户端证书[/td][td]TLS双向认证[/td][td]高[/td][/tr]

7.2 传输加密

[tr][td]加密方式[/td][td]端口[/td][td]说明[/td][/tr][tr][td]无加密[/td][td]1883[/td][td]明文传输[/td][/tr][tr][td]TLS加密[/td][td]8883[/td][td]加密传输[/td][/tr]

7.3 访问控制

[tr][td]控制项[/td][td]说明[/td][/tr][tr][td]Topic权限[/td][td]限制可发布/订阅的Topic[/td][/tr][tr][td]客户端权限[/td][td]限制可连接的Client ID[/td][/tr][tr][td]IP白名单[/td][td]限制可连接的IP地址[/td][/tr]

八、常见问题排查

8.1 连接问题

[tr][td]问题[/td][td]可能原因[/td][td]解决方案[/td][/tr][tr][td]无法连接[/td][td]网络不通[/td][td]检查网络连通性[/td][/tr][tr][td]认证失败[/td][td]用户名密码错误[/td][td]检查认证配置[/td][/tr][tr][td]Client ID冲突[/td][td]重复的Client ID[/td][td]使用唯一Client ID[/td][/tr]

8.2 消息问题

[tr][td]问题[/td][td]可能原因[/td][td]解决方案[/td][/tr][tr][td]消息丢失[/td][td]QoS 0 + 网络不稳定[/td][td]改用QoS 1[/td][/tr][tr][td]消息重复[/td][td]QoS 1 + 网络重传[/td][td]应用层去重[/td][/tr][tr][td]消息延迟[/td][td]Broker负载高[/td][td]优化Broker性能[/td][/tr]

九、核心工具推荐

9.1 MQTT Broker

[tr][td]Broker[/td][td]特点[/td][td]适用场景[/td][/tr][tr][td]EMQX[/td][td]高性能,开源[/td][td]生产环境[/td][/tr][tr][td]Mosquitto[/td][td]轻量,开源[/td][td]测试/小规模[/td][/tr][tr][td]HiveMQ[/td][td]企业级,商业[/td][td]大型企业[/td][/tr][tr][td]AWS IoT Core[/td][td]云端托管[/td][td]AWS生态[/td][/tr]

9.2 调试工具

[tr][td]工具[/td][td]用途[/td][/tr][tr][td]MQTT.fx[/td][td]客户端调试[/td][/tr][tr][td]mosquitto_sub/pub[/td][td]命令行测试[/td][/tr][tr][td]Wireshark[/td][td]网络抓包[/td][/tr]

十、金句集锦

本文基于三菱PLC与MQTT通信实战经验整理,涵盖MQTT架构、QoS等级、安全配置、工厂远程监控案例等核心主题。
推荐阅读
三菱GX Works3 028:安全PLC编程——SIL2/SIL3安全功能实战
发布于 2026-05-27
三菱 PLC 教程 02:iQ-R 系列硬件组成
发布于 202603
NACHI 机械手教程第 4 章:编程基础
发布于 202603
KEYWORDS
PLC, plc, iQ-R, 三菱, 变量
如果你觉得这篇文章有帮助,请点个在看,分享给更多需要的人!
关注我,获取更多实用干货~
有问题欢迎评论区留言交流!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码