Sparkplug B (MQTT-basierter IIoT-Standard)
Sparkplug B ist ein von Eclipse Tahu / Cirrus Link definierter IIoT-Messaging-Standard. Er legt über einem MQTT-Broker eine feste Topic-Struktur + Protobuf-Payload an, sodass auch Geräte unterschiedlicher Hersteller sich gegenseitig lesen können.
Edge nutzt dies in zwei Richtungen — die folgenden zwei sind unterschiedliche Funktionen, verwechseln Sie sie nicht.
| Richtung | Was | Wo im Dokument beschrieben |
|---|---|---|
| Empfangen (Treiber) | Abonniert die Sparkplug-Topics des Brokers, cacht die Metrics und liest sie als Tag | Vorderer Teil dieses Dokuments |
| Senden (Übertragung) | Edge veröffentlicht die gesammelten Werte als Sparkplug B | „Senden“ weiter unten |
Eingabewerte des Registrierungsformulars
| Eingabefeld | Was einzutragen ist | Beispiel |
|---|---|---|
| IP-Adresse | MQTT broker | 192.168.10.50 |
| Port | MQTT broker port | 1883 (Klartext) / 8883 (TLS, künftig unterstützt) |
| Group ID (group-id) | Sparkplug Group — Einheit pro Werk/Standort | FactoryA, Plant01 |
| Edge Node ID (edge-node-id) | Einzelner Node oder + (alle Nodes) | + (Standard), edge-01 |
| Keep Alive (keep-alive) | MQTT-Keep-Alive in Sekunden | 60 (Standard) |
| Connect Timeout (connect-timeout) | MQTT-Verbindungs-Timeout in ms | 5000 (Standard) |
Prüfen Sie, mit welcher Group / Edge-ID die Sendeseite (Eclipse Tahu / Ignition / Cirrus Link MQTT Engine usw.) NBIRTH sendet, und tragen Sie denselben Wert ein. Bei edge-node-id=+ werden alle Nodes der Gruppe auf einmal abonniert.
PLC-Adressnotation des Tags
Der Metric-Identifikator von Sparkplug verwendet nur den Teil nach der Group (die Group wird über die Treiberoption getrennt behandelt).
| Notation | Bedeutung |
|---|---|
edge1/Temperature | Node-Level-Metric Temperature des Edge Node edge1 |
edge1/motor1/RPM | Metric RPM des Device motor1 unter Edge Node edge1 |
edge1/dev2/Status | Beispiel: Boolean-Gerätestatus |
Die Sendeseite von Sparkplug veröffentlicht bei NBIRTH/DBIRTH sowohl den Metric-Namen als auch den Alias (Zahl). Danach senden NDATA/DDATA nur noch den Alias, um die Payload-Größe zu reduzieren. Da der PlantPulse-Treiber die Alias↔Name-Zuordnung automatisch pflegt, müssen Benutzer immer nur den Namen eingeben.
Automatische Datentyperkennung
Die Sparkplug B Payload gibt für jede Metric den Datatype an (Int8/16/32/64, UInt8/16/32/64, Float, Double, Boolean, String, DateTime, Bytes usw.). Der Treiber konvertiert entsprechend dem Datatype auf der Wire in den passenden Typ und cacht ihn als String, daher sollten Sie beim data_type des Tags wie folgt zuordnen.
| Sparkplug-Datatype | Empfohlenes data_type |
|---|---|
| Int8 / Int16 / Int32 / UInt8 / UInt16 / UInt32 | Integer |
| Int64 / UInt64 / DateTime | Long |
| Float | Float |
| Double | Double |
| Boolean | Boolean |
| String / Text / UUID | String |
Schreiben (NCMD / DCMD)
Das Schreiben (write) von PlantPulse verzweigt automatisch zu NCMD/DCMD.
edge1/SetPoint(Segment 2) → NCMD-Publish (Befehl auf Node-Ebene)edge1/dev1/SetPoint(Segment 3+) → DCMD-Publish (Befehl auf Device-Ebene)
Die aktuelle Phase veröffentlicht alle Befehlswerte als String-Datatype. Da die Sendeseite (Tahu / Ignition) den Datatype der Metric kennt, erfolgt in der Regel eine automatische Konvertierung.
Senden — Edge veröffentlicht als Sparkplug B
Edge exportiert die erfassten Werte im standardisierten Sparkplug B (Protobuf)-Format. Dies ist die entgegengesetzte Richtung zum „Empfangen“ im vorderen Teil.
Ziel der Veröffentlichung ist die eigene MQTT-Konfiguration von Edge (mqtt.server.host, Standard 127.0.0.1:1883). Es handelt sich nicht um eine Funktion, die an die Platform sendet.
Denken Sie die Leserichtung so: Wenn Edge auf seinen eigenen Broker legt, empfängt die Seite, die diesen Broker abonniert (SCADA · MES · übergeordnete IIoT-Plattform), die Daten. Werte, die zur Platform hochgeladen werden, laufen über einen davon getrennten Pfad.
Topic-Format
spBv1.0/{groupId}/{type}/{edgeNodeId}[/{deviceId}]
| Position | Was hier eingetragen wird |
|---|---|
groupId | sparkplug.group.id — bei leerem Wert die Site-ID |
edgeNodeId | sparkplug.edge.node.id — bei leerem Wert die Edge-ID |
deviceId | OPC-Verbindungs-ID (opc_id) — eine Verbindung entspricht einem Device |
Konfiguration
| Schlüssel | Standardwert | Was |
|---|---|---|
sparkplug.enable | true | Veröffentlichung aktivieren |
mqtt.server.host · .port | 127.0.0.1 · 1883 | Ziel-Broker der Veröffentlichung — verwendet direkt die MQTT-Konfiguration von Edge |
mqtt.server.user · .password | — | Broker-Zugangsdaten |
sparkplug.group.id | Site-ID | Gruppe im Topic |
sparkplug.edge.node.id | Edge-ID | Node im Topic |
sparkplug.device.strategy | per-opc | Eine OPC-Verbindung = ein Device |
sparkplug.qos | 0 | MQTT-QoS |
sparkplug.alias.enable | true | Payload mittels Alias verkleinern |
sparkplug.cmd.enable | false | Empfang von Befehlen (NCMD/DCMD) |
sparkplug.bdseq.path | /data1/pp-data/sparkplugb/bdseq | Datei zur Speicherung von bdSeq |
device.strategy ist derzeit nur per-opcIn den Konfigurationskommentaren steht auch single, das ist jedoch noch nicht implementiert. Derzeit funktioniert nur per-opc.
Der Metric-Name ist die Tag-ID
🔴 Was an der Stelle des Metric-Namens steht, ist die tag_id — nicht der Tag-Name (tag_name) und auch kein Hierarchiepfad.
tag_name wird als Attribut der Metric mitgeführt.
| Bei Edge | Sparkplug-Attribut |
|---|---|
| Beschreibung | documentation |
| Tag-Name | displayName — entfällt, wenn identisch mit der Tag-ID |
| Einheit | engUnit |
Die Achse, an der die Konsumentenseite bricht, ist tag_id. Das Ändern des angezeigten Namens ist unbedenklich, aber wenn Sie die Tag-ID ändern, reißt die Zuordnung auf der Empfangsseite ab.
Lebenszyklus — beim Verbinden und beim Trennen
- Beim Verbinden mit dem Broker wird
NDEATHals Will hinterlegt — stirbt Edge plötzlich, benachrichtigt der Broker stellvertretend NBIRTHwird ausgegebenDBIRTHaller Devices wird nacheinander ausgegeben- Danach fließen die Werte über
DDATA
Erst nachdem NBIRTH und alle DBIRTH „abgeschlossen“ sind, wird die erste BIRTH als vollständig markiert — schlägt es zwischendurch fehl, bleibt sie unvollständig.
bdSeq wird in einer Datei gespeichert (Pfad siehe obige Tabelle). Startet Edge daher neu, sieht die Konsumentenseite zuerst NDEATH der vorherigen Session (altes bdSeq), dann kommt das neue NBIRTH mit erhöhtem bdSeq, gefolgt von allen DBIRTH. Fehlt die Datei oder kann sie nicht gelesen werden, beginnt es von Anfang an.
Alias — bei erneutem Verbinden ändern sich die Nummern
Bei alias.enable=true (Standard) verhält es sich wie beim Standardverhalten — bei BIRTH werden Name und Alias gemeinsam übertragen, danach sendet DDATA nur den Alias. Die Payload wird kleiner.
Alias-Nummern werden pro Session als 1, 2, 3 … vergeben. Bei erneutem Verbinden kann derselbe Tag eine andere Nummer erhalten. Hält man an der alten Zuordnung fest, hängt der Wert am falschen Tag — die Anzeige wirkt unauffällig, nur der Wert ist falsch.
Befehle empfangen — cmd.enable
Der Empfang von NCMD · DCMD ist implementiert und standardmäßig deaktiviert (sparkplug.cmd.enable=false). Da diese Funktion schrittweise freigegeben wird, ist der Standardwert deaktiviert.
Öffnen Sie das Befehls-Topic, kann jede Seite, die sich mit dem Broker verbinden kann, Befehle an Edge senden. Ob dieser Befehl bis zum Schreiben auf die Anlage durchreicht, hängt von Deployment und Konfiguration ab — prüfen Sie daher vor dem Aktivieren gemeinsam die Zugriffskontrolle des Brokers und die Schreibberechtigung.
Das „Sparkplug-Topic“ im Platform-Bildschirm ist etwas anderes
Auch im UNS-Bildschirm der Platform-Konsole werden Sparkplug-artige Topics angezeigt. Das ist eine Vorschau, die zeigt, wie Namen gebildet werden, und von der in diesem Dokument beschriebenen Sende-Funktion getrennt.
Referenzlinks
- 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/>