跳到主要内容

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 broker192.168.10.50
端口MQTT broker port1883(明文)/ 8883(TLS,后续支持)
Group ID (group-id)Sparkplug Group — 以工厂/厂区为单位FactoryAPlant01
Edge Node ID (edge-node-id)单个节点或 +(所有节点)+(默认)、edge-01
Keep Alive (keep-alive)MQTT keep-alive 秒数60(默认)
Connect Timeout (connect-timeout)MQTT 连接超时(ms)5000(默认)
Group / Edge Node ID 必须与 broker 侧发布方(NBIRTH)一致

请先确认发送端(Eclipse Tahu / Ignition / Cirrus Link MQTT Engine 等)使用哪个 group / edge ID 发送 NBIRTH,然后填入相同的值。设为 edge-node-id=+ 时,将一次性订阅该组内的所有节点。


标签的 PLC 地址表示法

Sparkplug 的 metric 标识符仅使用 group 之后的部分(group 由驱动选项单独指定)。

表示法含义
edge1/TemperatureEdge node edge1 的 node 级 metric Temperature
edge1/motor1/RPMEdge node edge1 下属 device motor1 的 metric RPM
edge1/dev2/Status例:设备状态 boolean
名称 vs alias

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 / UInt32Integer
Int64 / UInt64 / DateTimeLong
FloatFloat
DoubleDouble
BooleanBoolean
String / Text / UUIDString

写入(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/>