对接工业物联网平台(统一命名空间)
厂内部署了 Ignition、Cogent DataHub 等 IIoT 平台,或需要按 Sparkplug B 规范建立**统一命名空间(UNS,Unified Namespace)**时,使用这一类北向应用。
与普通 MQTT 的差别
MQTT 规定了消息发往哪个主题,不规定消息的结构。由此产生三个问题:payload 的字段命名与数据类型需要收发双方事先约定,网关侧一旦调整格式,平台侧的解析随之改动;平台无法得知新接入设备有哪些点位,需要人工建模;平台也无法区分数据是新值还是陈旧值——收不到数据可能是设备停机、网关掉线,也可能是该点位本就不上报。
Sparkplug B 是建立在 MQTT 3.1.1 之上的工业物联网数据传输规范,用四个机制解决上述问题:
| 机制 | 作用 |
|---|---|
| BIRTH 消息 | 设备上线时声明自身的点位清单、数据类型和初始值,平台据此自动建模,新增设备无需在平台侧修改配置 |
| DEATH 消息 | 网关异常断开时由 Broker 通过 MQTT 遗嘱机制代发,平台立即得知该设备数据不再可信 |
| 序号与 bdSeq | 每条消息携带递增序号,平台可据此发现消息丢失并请求重新 BIRTH,保持模型与现场一致 |
| 别名(Alias) | 以短整数代替点位全名传输,点位数量大时可显著减小报文体积 |
这四项共同使 MQTT 网络具备状态感知与结构自描述能力,即统一命名空间的基础:全厂维护单一数据来源,上层各系统从该来源读写,而非两两点对点对接。
命名空间结构
EMQX Neuron 作为 Sparkplug B 的**边缘节点(Edge Node)**接入,将每个南向驱动映射为其下的一台设备:
spBv1.0 / {组 ID} / DDATA / {节点 ID} / {南向驱动名}
↑ ↑ ↑
工厂或车间 本网关 一台设备| 字段 | 来源 |
|---|---|
| 组 ID | 应用配置项,命名空间的最顶层分组,通常对应工厂或车间 |
| 节点 ID | 应用配置项,本 EMQX Neuron 实例的唯一标识 |
| {南向驱动名} | 被订阅的南向驱动节点名称,一个驱动即一台设备 |
组 Path 参数默认开启,此时采集组名作为指标名的起始路径,平台侧看到的树状结构与现场的组织结构一致。
组 ID 与节点 ID 的变更会触发重新 BIRTH,批量部署前应先确定两者的命名规则。
完整的主题清单见 Sparkplug B · 主题结构。
反控设备
上层平台通过 DCMD 命令向指定南向驱动的点位写值,NCMD 用于边缘节点级命令。目标点位须在南向驱动中配置 write 属性,见组与点位 · 点位属性。
选择应用
| 应用 | 适用情形 |
|---|---|
| Sparkplug B | 平台侧支持 Sparkplug B 规范时的首选。连接参数(服务器地址、端口、用户名密码、SSL、离线缓存)与 MQTT 应用一致,仅组 ID 与节点 ID 来自 Sparkplug B 规范本身 |
连接示例
- 集成 EMQX:上报到 EMQX 并通过编解码功能还原数据
- Ignition 连接示例
- Cogent DataHub 连接示例