Sparkplug B — IIoT 标准(基于 MQTT)
Sparkplug B 是由 Eclipse Tahu / Cirrus Link 定义的 IIoT(工业物联网)消息传输标准。它在 MQTT broker 之上叠加了标准 topic 结构与 Google Protobuf payload,使各厂商设备之间能够互操作。PlantPulse Edge 订阅 broker 上的 Sparkplug topic,自动缓存 metric,并通过标签 read() 立即对外提供。
注册表单输入项
| 输入栏 | 填写内容 | 示例 |
|---|---|---|
| IP 地址 | MQTT broker | 192.168.10.50 |
| 端口 | MQTT broker port | 1883(明文)/ 8883(TLS,后续支持) |
| Group ID (group-id) | Sparkplug Group — 以工厂/厂区为单位 | FactoryA、Plant01 |
| Edge Node ID (edge-node-id) | 单个节点或 +(所有节点) | +(默认)、edge-01 |
| Keep Alive (keep-alive) | MQTT keep-alive 秒数 | 60(默认) |
| Connect Timeout (connect-timeout) | MQTT 连接超时(ms) | 5000(默认) |
请先确认发送端(Eclipse Tahu / Ignition / Cirrus Link MQTT Engine 等)使用哪个 group / edge ID 发送 NBIRTH,然后填入相同的值。设为 edge-node-id=+ 时,将一次性订阅该组内的所有节点。
标签的 PLC 地址表示法
Sparkplug 的 metric 标识符仅使用 group 之后的部分(group 由驱动选项单独指定)。
| 表示法 | 含义 |
|---|---|
edge1/Temperature | Edge node edge1 的 node 级 metric Temperature |
edge1/motor1/RPM | Edge node edge1 下属 device motor1 的 metric RPM |
edge1/dev2/Status | 例:设备状态 boolean |
Sparkplug 发送端在 NBIRTH/DBIRTH 时会同时发布 metric 名称与 alias(数字)。之后的 NDATA/DDATA 仅发送 alias,以减小 payload 体积。PlantPulse 驱动会自动维护 alias↔名称映射,因此用户始终只需输入名称即可。
数据类型自动识别
Sparkplug B Payload 会为每个 metric 明确指定 datatype(Int8/16/32/64、UInt8/16/32/64、Float、Double、Boolean、String、DateTime、Bytes 等)。驱动会根据 wire 上的 datatype 转换为相应类型并以 String 缓存,因此请按下表匹配标签的 data_type。
| Sparkplug datatype | 推荐 data_type |
|---|---|
| Int8 / Int16 / Int32 / UInt8 / UInt16 / UInt32 | Integer |
| Int64 / UInt64 / DateTime | Long |
| Float | Float |
| Double | Double |
| Boolean | Boolean |
| String / Text / UUID | String |
写入(NCMD / DCMD)
PlantPulse 的 write 会自动分流为 NCMD/DCMD。
edge1/SetPoint(segment 2)→ NCMD publish(node 级命令)edge1/dev1/SetPoint(segment 3+)→ DCMD publish(device 级命令)
当前阶段所有命令值均以 String datatype 发布。由于发送端(Tahu / Ignition)已知 metric 的 datatype,通常会自动完成转换。
参考链接
- Eclipse Tahu —
<https://eclipse.dev/tahu/> - Sparkplug Spec v3.0 —
<https://sparkplug.eclipse.org/specification/> - Cirrus Link MQTT Engine —
<https://www.cirrus-link.com/mqtt-engine/>