(
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, 三菱, 变量
如果你觉得这篇文章有帮助,请点个在看,分享给更多需要的人!
关注我,获取更多实用干货~
有问题欢迎评论区留言交流!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!