4. MQTT Transmission模块介绍
MQTT Transmission 是 Ignition 中负责“把数据主动推出去”的模块。它与 MQTT Engine(负责订阅、接收)方向相反:Engine 把外部 MQTT 消息引入 Ignition,而 Transmission 把 Ignition 内部的标签数据、历史数据、报警事件等发布到 MQTT Broker。理解这个模块的关键,是分清它内部几个层次的角色——谁负责调度、谁负责连接、谁负责取数、谁负责配置。
一、模块功能:Transmission 到底做什么
MQTT Transmission 模块的核心职责,是把 Ignition 侧的数据以 MQTT 主题的形式发布出去。它支持的主要能力包括:
- 标签数据发布:将指定 Tag Provider 中的标签值、质量、时间戳按主题发布,支持变化上报(on-change)与周期上报。
- Sparkplug B 支持:遵循 Sparkplug B 规范,发布 BIRTH、DATA、DEATH 等消息,让 SCADA/云平台能识别设备上下线状态。
- 历史与事件转发:可将历史数据、报警事件等以消息形式推送,供外部系统消费。
- 多 Broker 连接:可同时向多个 MQTT Server 发布,适应本地边缘 + 云端双通道场景。
- 主题命名空间管理:通过 Group ID、Edge Node ID、Device ID 组织主题层级,避免主题冲突。
简单说,Transmission 解决的是“数据怎么出去、以什么格式出去、出去后别人怎么认”的问题。
二、核心组件与数据流
Transmission 模块内部由若干组件协同工作,下图展示了从 Ignition 标签到 MQTT Broker 的完整数据流与组件关系:
从图中可以看到,数据从 Tag Provider 出发,经 Transmission Engine 调度,由 Transmitter 编码并发布到 Broker,最终被订阅方消费。配置入口则统一管理这条链路上的所有参数。
三、Transmission Engine 与 Transmitter 的分工
很多初学者会把 Transmission Engine 和 Transmitter 混为一谈,其实两者职责清晰:
| 对比项 | Transmission Engine | Transmitter |
|---|---|---|
| 角色定位 | 模块级总调度器 | 具体发布通道 |
| 主要职责 | 管理 Transmitter 生命周期、BIRTH/DEATH 消息、状态监控 | 连接 Broker、读取标签、编码消息、发布主题 |
| 配置位置 | Transmission → Transmission Engine 设置 | Transmission → Transmitters 列表 |
| 数量关系 | 通常一个 Gateway 一个 Engine | 可配置多个,对应不同 Broker 或数据集 |
| 关键参数 | Base Topic、Group ID、Edge Node ID | Broker URL、Tag Provider、发布模式、主题模板 |
四、Tag Provider 与配置入口
Tag Provider 是 Transmission 的数据来源。在 Transmitter 配置中,必须明确指定从哪个 Tag Provider 读取标签。Ignition 默认提供 default Provider,工程中也可能存在多个自定义 Provider。选择错误的 Provider,会导致发布出去的数据为空或与预期不符。
配置入口位于 Ignition Gateway 的 Web 管理界面:Config → Transmission → Transmission Engine / Transmitters。典型配置流程如下:
- 进入 Gateway Web UI,打开 Config 菜单下的 Transmission 页面。
- 先配置 Transmission Engine:设置 Base Topic、Group ID、Edge Node ID 等全局参数。
- 新增 Transmitter:填写 Broker 地址、端口、客户端 ID、认证信息。
- 指定 Tag Provider 与要发布的标签路径或标签组。
- 设置发布模式(变化上报 / 周期上报)与主题模板。
- 保存并启用,观察 Transmitter 状态是否为 Connected。
# Transmitter 关键配置示例(概念示意)
Broker URL : tcp://192.168.1.100:1883
Client ID : ign-transmitter-01
Tag Provider : default
Publish Mode : On Change
Base Topic : spBv1.0/PlantA
Edge Node ID : Line1
Device ID : PLC01
五、案例场景:一条产线数据上云
假设某工厂需要把 Line1 产线的 PLC01 设备数据发布到云端 MQTT Broker。配置思路是:Transmission Engine 设置 Group ID 为 PlantA、Edge Node ID 为 Line1;新建一个 Transmitter 指向云端 Broker,Tag Provider 选择 default,发布模式设为 On Change;主题模板使用 Sparkplug B 规范格式。这样云端订阅 spBv1.0/PlantA/DDATA/Line1/PLC01 即可收到该设备的实时数据,同时通过 BIRTH/DEATH 消息判断设备在线状态。
六、常见误区与复盘
误区二:Tag Provider 选错,发布出去的数据为空,却误以为是 Broker 连接问题。
误区三:多个 Transmitter 使用相同 Client ID 连接同一 Broker,造成互相踢下线,状态反复断开。
误区四:把 Transmission 与 MQTT Engine 的配置入口混淆,在错误页面反复查找发布设置。
复盘建议:排查发布问题时,按“Tag Provider → Transmission Engine → Transmitter → Broker → 订阅方”的顺序逐段验证。先确认标签有值,再确认 Engine 参数正确,然后检查 Transmitter 连接状态,最后用 MQTT 客户端订阅主题验证消息是否真正到达。这样能把问题定位到具体组件,而不是盲目重启模块。
掌握 Transmission Engine、Transmitter、Tag Provider 与配置入口这四者的关系,是后续进行 Sparkplug B 主题设计、多 Broker 发布和边缘上云实践的基础。