Zum Hauptinhalt springen

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.

RichtungWasWo im Dokument beschrieben
Empfangen (Treiber)Abonniert die Sparkplug-Topics des Brokers, cacht die Metrics und liest sie als TagVorderer Teil dieses Dokuments
Senden (Übertragung)Edge veröffentlicht die gesammelten Werte als Sparkplug B„Senden“ weiter unten

Eingabewerte des Registrierungsformulars​

EingabefeldWas einzutragen istBeispiel
IP-AdresseMQTT broker192.168.10.50
PortMQTT broker port1883 (Klartext) / 8883 (TLS, künftig unterstützt)
Group ID (group-id)Sparkplug Group — Einheit pro Werk/StandortFactoryA, Plant01
Edge Node ID (edge-node-id)Einzelner Node oder + (alle Nodes)+ (Standard), edge-01
Keep Alive (keep-alive)MQTT-Keep-Alive in Sekunden60 (Standard)
Connect Timeout (connect-timeout)MQTT-Verbindungs-Timeout in ms5000 (Standard)
Group- / Edge-Node-ID müssen mit dem Publisher der Broker-Seite (NBIRTH) übereinstimmen

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).

NotationBedeutung
edge1/TemperatureNode-Level-Metric Temperature des Edge Node edge1
edge1/motor1/RPMMetric RPM des Device motor1 unter Edge Node edge1
edge1/dev2/StatusBeispiel: Boolean-Gerätestatus
Name vs. Alias

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-DatatypeEmpfohlenes data_type
Int8 / Int16 / Int32 / UInt8 / UInt16 / UInt32Integer
Int64 / UInt64 / DateTimeLong
FloatFloat
DoubleDouble
BooleanBoolean
String / Text / UUIDString

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.

🔴 Erst prüfen, wohin es geht — nicht an die Platform, sondern an den «Broker auf Edge»

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}]
PositionWas hier eingetragen wird
groupIdsparkplug.group.id — bei leerem Wert die Site-ID
edgeNodeIdsparkplug.edge.node.id — bei leerem Wert die Edge-ID
deviceIdOPC-Verbindungs-ID (opc_id) — eine Verbindung entspricht einem Device

Konfiguration​

SchlüsselStandardwertWas
sparkplug.enabletrueVeröffentlichung aktivieren
mqtt.server.host · .port127.0.0.1 · 1883Ziel-Broker der Veröffentlichung — verwendet direkt die MQTT-Konfiguration von Edge
mqtt.server.user · .password—Broker-Zugangsdaten
sparkplug.group.idSite-IDGruppe im Topic
sparkplug.edge.node.idEdge-IDNode im Topic
sparkplug.device.strategyper-opcEine OPC-Verbindung = ein Device
sparkplug.qos0MQTT-QoS
sparkplug.alias.enabletruePayload mittels Alias verkleinern
sparkplug.cmd.enablefalseEmpfang von Befehlen (NCMD/DCMD)
sparkplug.bdseq.path/data1/pp-data/sparkplugb/bdseqDatei zur Speicherung von bdSeq
device.strategy ist derzeit nur per-opc

In 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 EdgeSparkplug-Attribut
Beschreibungdocumentation
Tag-NamedisplayName — entfällt, wenn identisch mit der Tag-ID
EinheitengUnit

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​

  1. Beim Verbinden mit dem Broker wird NDEATH als Will hinterlegt — stirbt Edge plötzlich, benachrichtigt der Broker stellvertretend
  2. NBIRTH wird ausgegeben
  3. DBIRTH aller Devices wird nacheinander ausgegeben
  4. 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.

Der Konsument muss «bei jeder neuen BIRTH» die Zuordnung neu einlesen

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.

Vor dem Aktivieren zu prüfen

Ö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.

  • 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/>