4. MQTT Transmission模块介绍

MQTT Transmission 是 Ignition 中负责“把数据主动推出去”的模块。它与 MQTT Engine(负责订阅、接收)方向相反:Engine 把外部 MQTT 消息引入 Ignition,而 Transmission 把 Ignition 内部的标签数据、历史数据、报警事件等发布到 MQTT Broker。理解这个模块的关键,是分清它内部几个层次的角色——谁负责调度、谁负责连接、谁负责取数、谁负责配置。

核心记忆:Transmission Engine 是“总调度”,Transmitter 是“发布通道”,Tag Provider 是“数据来源”,配置入口是“管理界面”。四者构成一条从 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 的完整数据流与组件关系:

Ignition 内部 Tag Provider 标签数据来源 Transmission Engine 总调度 / 生命周期管理 BIRTH / DEATH 控制 Transmitter 发布通道 / 连接 Broker 主题映射 / 消息编码 读取标签 下发发布任务 MQTT Broker 消息中转服务器 Topic 命名空间 spBv1.0/Group/Node/Device 订阅方 SCADA / 云平台 / 数据库 MQTT 发布 (PUBLISH) 配置入口:Gateway Web UI 统一配置管理

从图中可以看到,数据从 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、发布模式、主题模板
记忆技巧:Engine 像“项目经理”,负责整体节奏和上下线通知;Transmitter 像“快递员”,负责把具体包裹(标签数据)送到指定地址(Broker 主题)。

四、Tag Provider 与配置入口

Tag Provider 是 Transmission 的数据来源。在 Transmitter 配置中,必须明确指定从哪个 Tag Provider 读取标签。Ignition 默认提供 default Provider,工程中也可能存在多个自定义 Provider。选择错误的 Provider,会导致发布出去的数据为空或与预期不符。

配置入口位于 Ignition Gateway 的 Web 管理界面:Config → Transmission → Transmission Engine / Transmitters。典型配置流程如下:

  1. 进入 Gateway Web UI,打开 Config 菜单下的 Transmission 页面。
  2. 先配置 Transmission Engine:设置 Base Topic、Group ID、Edge Node ID 等全局参数。
  3. 新增 Transmitter:填写 Broker 地址、端口、客户端 ID、认证信息。
  4. 指定 Tag Provider 与要发布的标签路径或标签组。
  5. 设置发布模式(变化上报 / 周期上报)与主题模板。
  6. 保存并启用,观察 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 消息判断设备在线状态。

六、常见误区与复盘

误区一:只配置了 Transmitter,却忽略了 Transmission Engine 的 Group ID / Edge Node ID,导致主题层级不完整,订阅方无法按规范解析。
误区二: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 发布和边缘上云实践的基础。