西门子 S7-1500、三菱 FX5U 如何通过 MQTT、OPC UA 接入阿里云、AWS 与自建 MES
从 PLC 数据点到云端数据库的完整工程思路
技术专题|适用于设备联网、数据采集、远程监控与制造执行系统对接
工厂希望把设备运行状态、产量、能耗、报警和工艺参数上传到阿里云、AWS 或自建 MES。项目讨论时最常听到的一句话是:“PLC 有以太网口,直接用 MQTT 或 OPC UA 上传不就行了吗?”
真正实施时,却经常卡在证书、协议支持、数据格式、断网补传和安全边界上。PLC 的以太网口只是物理与网络基础;能否作为 MQTT 客户端、能否提供 OPC UA Server、是否需要许可证或扩展模块,还要看具体 CPU、固件与项目配置。
因此,这类项目首先要做的不是选择云品牌,而是确定数据从控制层到信息层究竟走哪条路径。本文以西门子 S7-1500 和三菱 MELSEC iQ-F FX5U 为例,讲清直接通信、工业网关和边缘平台三种方案,以及 MQTT、OPC UA 各自应该放在哪一段。
MQTT 更像一套轻量的“消息投递系统”。设备把消息发布到 Topic,云端或其他应用订阅相应 Topic。它非常适合跨网络上传状态、事件和周期数据。
OPC UA 更像一套工业数据访问与建模标准。它不仅传数值,还能表达变量名称、数据类型、层级关系、时间戳、质量状态和访问权限,因此特别适合 PLC、SCADA、边缘服务器与 MES 在工厂内网中交换结构化数据。
|
比较项 |
MQTT |
OPC UA |
工程判断 |
|
典型模式 |
发布/订阅 |
客户端/服务器;也有 PubSub |
云上报优先看 MQTT,厂内语义互联优先看 OPC UA |
|
数据组织 |
Topic + Payload |
节点、类型、属性与层级 |
OPC UA 的数据语义更完整 |
|
跨公网 |
轻量,较常见 |
通常不建议直接暴露 Server |
OPC UA 宜留在内网或经安全边缘层 |
|
安全重点 |
TLS、客户端身份、Topic 权限 |
证书信任、加密策略、用户权限 |
两者都不能只靠账号密码 |
|
断网处理 |
QoS 不等于历史数据补传 |
通常由采集端或应用处理 |
需要另做本地队列与去重 |
PLC 程序读取内部变量,组装 Payload,建立 TLS 连接并向 Broker 发布数据。西门子提供面向 S7-1200/S7-1500 的 LMQTT 通信库;三菱 iQ-F 可通过支持 MQTT 的 FX5-ENET 以太网模块实现 Broker 连接、发布与订阅。是否可用仍需逐项核对 CPU、模块、固件/序列号及工程软件版本。
优点是链路短、设备数量少时成本低;缺点是证书维护、JSON 组包、重连、缓存和错误诊断都会占用 PLC 工程工作量。控制逻辑复杂或上传点位较多时,不应把 PLC 变成“小型服务器”。
S7-1500 可按具体型号和许可条件配置 OPC UA Server,把需要发布的 PLC 标签组织到服务器接口中;MES、SCADA 或边缘采集软件作为 OPC UA Client 订阅。FX5U/FX5UC 则可通过 FX5-OPC 模块提供 OPC UA Server,三菱官方列出的服务器规范为 OPC UA 1.03、Micro Embedded Device Server Profile,并对 CPU 版本与模块数量有明确条件。
这条路线适合工厂内网:变量结构清楚、客户端软件选择多、调试时可直接浏览节点。若最终还要上云,可由边缘服务器把 OPC UA 数据转换成 MQTT,而不是让云端直接访问 PLC。
网关通过 S7 协议、SLMP/MC 协议、Modbus TCP 或 OPC UA 读取 PLC,再完成协议转换、数据清洗、缓存、TLS 认证和 MQTT 上传。这通常是多品牌、多设备项目中最稳妥的方案。它还能把“控制网络”与“互联网”隔开,避免每台 PLC 单独保存云端密钥。
代价是增加一个设备或软件层,需要管理网关配置、版本和备份。但一旦设备数量增长,集中维护通常比在几十台 PLC 中复制通信程序更容易。
1. 先确认能力边界:核对 CPU 型号、固件、TIA Portal 版本及 OPC UA 许可。不要因为同属 S7-1500 系列,就默认每台 CPU 的连接数、节点数与性能完全一样。
2. OPC UA 路线:在 PLC 中建立专用发布数据区,例如 UDT 或 DB;只暴露 MES 需要的变量。配置 Server 接口、安全策略、证书和用户权限;在 OPC UA Client 中导入并信任证书后,再建立订阅。
3. MQTT 路线:使用经过验证的 MQTT 客户端库;明确 Broker 地址、端口、Client ID、Keep Alive、QoS、TLS 与重连状态机。大字符串拼接和高频发布可能增加循环时间,应做节流和分包。
4. 控制逻辑隔离:数据采集失败不能阻塞主控制程序。通信块应有独立状态机和超时;生产控制变量先复制到发布缓冲区,再由通信任务异步发送。
FX5U 自带以太网可以完成多种工业通信,但不能据此直接推断它已经具备所有 MQTT 或 OPC UA 功能。三菱官方资料显示,MQTT 可通过 FX5-ENET 实现;OPC UA 则使用 FX5-OPC 模块。模块兼容性、CPU 版本、FX5UC 所需转换接口以及特定序列号条件都应在采购前确认。
如果已有第三方工业网关,FX5U 可继续使用成熟的 SLMP/MC 或 Modbus TCP 方式向网关提供数据,由网关处理 MQTT 与 TLS。这样能显著减少 PLC 内的字符串、证书和重连程序。
建立连续的数据寄存器区或标签映射表,固定设备号、地址、数据类型、倍率和读写属性。MES 侧不要直接靠“D100 是温度、D102 是产量”这种口头约定长期维护。
云端下发指令应先进入命令缓冲区,经权限、模式、范围和联锁校验后再作用于设备。任何远程写入都不能绕过现场急停、安全回路与 PLC 联锁。
阿里云 IoT Platform 通过 MQTT 长连接接收设备上报,并可把数据转发到数据库、消息队列、函数计算等服务。设备身份通常围绕产品、设备与密钥体系建立;连接参数、签名与 Topic 权限必须按实例和官方规则生成,不能把普通公共 Broker 的配置直接照搬。
AWS IoT Core 支持 MQTT over TLS,常见设备身份方式是 X.509 客户端证书。除 Broker 地址和证书外,还需要 IoT Policy 明确允许 connect、publish、subscribe 和 receive 的资源范围。连接成功但发布失败,往往不是网络问题,而是策略没有授权对应 Topic。
MES 并不一定原生支持 MQTT 或 OPC UA。若 MES 只提供 REST API、数据库接口或消息队列,可在中间层完成协议转换。推荐让 MES 接收规范化后的业务数据,例如“设备状态变化”“一件产品完成”“某报警发生”,而不是毫无筛选地保存 PLC 每一个扫描周期的原始寄存器。
Topic 要稳定、可授权、可扩展。不要把中文设备名称、人员信息或会频繁变化的工艺描述塞进 Topic。一个简单结构可以是:
factory/{factoryId}/{lineId}/{deviceId}/telemetry
factory/{factoryId}/{lineId}/{deviceId}/event
factory/{factoryId}/{lineId}/{deviceId}/command
factory/{factoryId}/{lineId}/{deviceId}/command_reply
遥测 Payload 示例:
{
"schemaVersion": 1,
"deviceId": "press_01",
"timestamp": "2026-09-05T08:30:00.125Z",
"sequence": 582143,
"values": {
"runState": 1,
"cycleCount": 18425,
"motorCurrent_A": 12.6,
"temperature_C": 47.8
},
"quality": "good"
}
timestamp 用于还原事件时间,sequence 用于发现丢包和去重,schemaVersion 用于将来升级格式,quality 用于区分真实值、替代值和通信异常值。单位最好放在字段名、点表或统一数据字典中,不要同一字段今天传摄氏度、明天传华氏度。
MQTT QoS 0 表示尽力而为;QoS 1 可能重复到达;QoS 2 开销更高,而且具体云服务的支持范围需查平台文档。即使使用 QoS 1,也不能把它等同于“断网数小时后历史数据自动补传”。
可靠方案应在 PLC、网关或边缘服务器中建立持久化队列:每条记录带唯一编号;发送成功并收到应用层确认后再删除;重连后按时间顺序补传;服务器按 deviceId + sequence 或 eventId 去重。实时状态可以覆盖旧值,但产量、批次完成、质量结果与报警事件通常不能简单覆盖。
|
数据类型 |
建议思路 |
示例 |
|
设备状态 |
变化上传 + 低频心跳 |
运行、停止、故障 |
|
慢变量 |
1~10 秒周期或越限上传 |
温度、压力、能耗 |
|
生产事件 |
事件发生立即上传 |
工件完成、批次切换 |
|
报警 |
发生/恢复分别记录 |
报警码、开始与结束时间 |
|
高速波形 |
本地采集后批量或文件上传 |
振动、伺服曲线 |
采样频率、上传频率和数据库保存频率是三件不同的事。PLC 可以 10 ms 采样用于控制,但未必需要每 10 ms 上传云端。应根据业务价值、带宽、PLC 负载、Broker 限制和数据库成本共同确定。
· PLC、OPC UA Server 或工程端口不要直接暴露到公网。
· 设备网络与办公网、互联网之间设置防火墙、VLAN 或工业隔离边界。
· MQTT 使用 TLS;证书、私钥和设备密钥不要写入公开程序或多人共享文档。
· 每台设备使用独立身份,权限限制到自己的 Topic,避免“一个密钥控制全厂”。
· OPC UA 使用受信证书、安全策略与最小读写权限,关闭不需要的匿名访问。
· 远程命令采用白名单、范围校验、超时、回执与审计;关键动作需要现场允许条件。
· 建立证书到期、设备离线、连续认证失败和异常发布频率告警。
1. 确定业务目标:先选 10~30 个真正会被使用的数据点。
2. 制作点表:名称、PLC 地址、类型、倍率、单位、读写权限、变化条件。
3. 选择链路:单机试点可直连;多品牌、多设备优先评估网关或边缘平台。
4. 建立测试 Broker 或 OPC UA Client,先完成局域网通信。
5. 统一 Topic、JSON、时间戳、设备编号与版本规则。
6. 加入 TLS、证书、最小权限和密钥更新方案。
7. 模拟断网、Broker 重启、证书错误、重复消息和 PLC 重启。
8. 验证 PLC 扫描周期、通信负载、云端吞吐和数据库成本。
9. 再接 MES 看板、报警通知、OEE 或能耗分析。
10. 完成备份、运维手册、点表版本和验收记录后再规模复制。
|
现象 |
优先检查 |
|
TCP 能通,MQTT 连不上 |
检查 TLS 版本、根证书、系统时间、Client ID、用户名/签名及端口。 |
|
MQTT 已连接但不能发布 |
检查 Topic 拼写、大小写、云端策略与发布权限。 |
|
OPC UA 能发现服务器但会话失败 |
检查客户端是否信任服务器证书,服务器是否信任客户端证书,以及安全策略是否匹配。 |
|
数据偶尔重复 |
QoS 1 本身允许重复;应用端必须按序号或事件 ID 去重。 |
|
断网后产量少了一段 |
只设置 QoS 没有历史缓存,或发送成功前已经删除本地记录。 |
|
PLC 扫描周期突然变长 |
组包、TLS 或通信块调用过于频繁;应降低频率、分批处理或移到网关。 |
|
MES 数字错位或放大 10 倍 |
点表的数据类型、字节序、倍率或单位不一致。 |
PLC 数据接入云端或 MES,并不是简单打开一个协议开关。稳定的系统必须同时处理设备能力、协议选择、数据模型、断网恢复、安全权限与长期运维。
单台 S7-1500、小规模试点,可以评估 PLC 直接 MQTT 或 OPC UA;FX5U 若配置对应模块也可实现相应功能。到了多品牌、多产线、要求历史补传的项目,工业网关或边缘平台通常更合适。
最重要的原则是:PLC 负责可靠控制,边缘层负责连接与缓冲,云平台或 MES 负责业务应用。三层职责分清,系统才会真正接得上、跑得稳、后期改得动。
说明:不同地区、产品版本、固件、许可证及云服务实例的能力可能变化。正式选型与实施时,应以项目所用型号的最新官方手册和服务控制台说明为准。