Digitaler Zwilling

Einen ISA-95-Digital-Twin mit der Anlagenhierarchie strukturieren

Ein Leitfaden zur Nutzung der ISA-95-Anlagenhierarchie für die Organisation von Digital-Twin-Modellen und MQTT-Topics, inklusive Sparkplug-B-Republishing, Namensregeln und Validierungsskript.

Hierarchiediagramm eines ISA-95-Digital-Twins mit den Ebenen Unternehmen, Standort, Bereich, Linie und Zelle, abgebildet auf MQTT-Topics
Probieren Sie es auf Ihrem eigenen MQTT-Broker ausHolen Sie sich im Free-Tarif einen privaten, verwalteten MQTT-Broker und starten Sie mit fertigen Codebeispielen.
Kostenlos testen Codebeispiele Keine Kreditkarte erforderlich

Ein ISA-95 digitaler Zwilling nutzt die Anlagenhierarchie aus der Norm ISA-95 (Unternehmen, Standort, Bereich, Linie, Zelle) als Rückgrat des Zwillingsmodells und des MQTT-Topic-Baums, der ihn speist. Dieser Topic-Baum ist in der Praxis ein Unified Namespace (UNS): die zentrale Echtzeit-Datenschicht eines Werks auf dem MQTT-Broker. In diesem Leitfaden erfahren Sie, wie sich die Ebenen auf Zwillingsobjekte und Topics abbilden, wie Sie einheitlich benennen, wie Sparkplug-B-Daten hineinpassen und wie Sie prüfen, ob Ihr Werk tatsächlich die Struktur veröffentlicht, die Ihr Zwilling erwartet.

Warum digitale Zwillinge eine Hierarchie brauchen

Der Zwilling einer einzelnen Maschine ist leicht zu organisieren. Der Zwilling eines Werks mit Hunderten von Maschinen oder eines Unternehmens mit mehreren Werken wird schnell zu einem Gewirr spontaner Namen, wenn es keine vereinbarte Struktur gibt. Ohne sie:

  • Erfindet jedes Team seine eigenen Namen, sodass dieselbe Presse in drei Systemen Press_07, L2-P7 und press7 heißt.
  • Brauchen Zwillings-Viewer eigenen Code für jede Datenquelle.
  • Erfordern Aggregationen wie "OEE aller Linien im Bereich Montage" manuelle Zuordnungstabellen.

ISA-95 (IEC 62264) definiert bereits eine weithin anerkannte Anlagenhierarchie für die Fertigung. Nutzen Sie sie für den Zwilling, entspricht das Modell der Denkweise der Menschen im Werk und passt zu MES- und ERP-Konzepten. Grundlagen zu Zwillingen finden Sie im Leitfaden zur Digital-Twin-Technologie.

Die Ebenen der ISA-95-Anlagenhierarchie

ISA-95-Ebene Bedeutung Beispiel Zwillingsobjekt Topic-Segment
Enterprise (Unternehmen) Das Unternehmen Acme Manufacturing Wurzel des Zwillings acme
Site (Standort) Ein physischer Standort Werk Izmir Standortzwilling mit Karte und KPIs izmir
Area (Bereich) Ein Funktionsbereich eines Standorts Zerspanung, Montage, Versorgung Bereichsansicht, Region im Hallenplan machining
Work Center / Line (Linie) Produktionslinie oder Gruppe von Prozesszellen Linie 2 Linienzwilling mit Flusstopologie line2
Work Unit / Cell (Zelle) Einzelne Maschine oder Einheit CNC 3, Roboter 1 Asset-Zwilling mit Telemetrie cnc3

Die Norm unterscheidet je nach Fertigungsart mehrere Arten von Work Centers (Produktionslinien, Prozesszellen, Produktionseinheiten, Lagerzonen). Für MQTT-Topics brauchen Sie diese Unterscheidung im Pfad selten; speichern Sie sie stattdessen als Metadaten am Zwillingsobjekt.

Verwechseln Sie die Anlagenhierarchie nicht mit den funktionalen Ebenen von ISA-95 (von Level 0, dem physischen Prozess, bis Level 4, der Unternehmensplanung). Beide tauchen in Diskussionen über "ISA-95-Ebenen" auf. Die hier beschriebene Zwillingshierarchie nutzt die Anlagenhierarchie.

Die Hierarchie auf MQTT-Topics abbilden

Das UNS-Muster veröffentlicht alle Werksdaten an einen Broker unter einem Topic-Baum, der die Anlagenhierarchie widerspiegelt. In einem deutschen Werk sähe ein Pfad etwa so aus: acme/werk-stuttgart/montage/linie-1/zelle-3/temperatur. Das folgende Beispiel nutzt englische Segmente:

<enterprise>/<site>/<area>/<line>/<cell>/<data-type>

acme/izmir/machining/line2/cnc3/telemetry
acme/izmir/machining/line2/cnc3/state
acme/izmir/machining/line2/robot1/telemetry
acme/izmir/utilities/compressors/comp1/energy

Das verleiht dem Zwilling drei nützliche Eigenschaften:

  1. Struktur aus Topics. Ein Zwillingsdienst kann seinen Objektbaum durch Parsen der Topic-Pfade aufbauen, ohne separate Konfiguration für jedes Asset.
  2. Eingrenzung per Wildcard. Ein Linienzwilling abonniert acme/izmir/machining/line2/#; eine Werksübersicht abonniert acme/izmir/+/+/+/state.
  3. Stabile Adressierung. Jeder Wert hat eine kanonische Adresse, die Dashboards, Historians und Analysewerkzeuge gemeinsam nutzen.

Mehr zu diesem Ansatz lesen Sie in MQTT Sparkplug B und der Unified Namespace.

Namensregeln, die späteren Ärger vermeiden

  • Kleinbuchstaben, Buchstaben, Ziffern und Bindestriche. Keine Leerzeichen, kein + oder #.
  • Ein Konzept pro Ebene; überspringen Sie nie eine Ebene. Gehört eine Maschine zu keiner Linie, verwenden Sie einen Platzhalter wie general.
  • Verwenden Sie stabile IDs (cnc3) in Topics und halten Sie Anzeigenamen (DMG Mori NHX 4000 #3) in den Metadaten.
  • Setzen Sie den Datentyp als letztes Segment mit einem kleinen, festen Vokabular: telemetry, state, alarm, energy, health, command.
  • Dokumentieren Sie den Baum und behandeln Sie Änderungen wie Codeänderungen, mit Review.

Wie ConnectMQ einen ISA-95 digitalen Zwilling unterstützt

ConnectMQ ist mit genau dieser Struktur im Blick gebaut. Es erkennt ISA-95- und UNS-Topics, und die Geräteansicht im Portal ordnet Geräte nach ISA-95-Ebenen, sodass Sie Unternehmen, Standort, Bereich, Linie und Zelle genau so durchsuchen können, wie es der Zwilling tun wird. Der Live-Topic-Explorer zeigt den rohen Baum und die Nachrichten zur Fehlersuche.

Viele Edge-Geräte nutzen Sparkplug B, dessen Topics einem anderen Schema folgen (spBv1.0/<group>/<message-type>/<edge-node>/<device>) und dessen Payloads Protobuf sind. ConnectMQ dekodiert Sparkplug B (Protobuf oder JSON) und veröffentlicht es erneut in ISA-95-Topics. Zum Beispiel:

spBv1.0/factory1/DDATA/line1/cnc1   ->   connectmq/factory1/production/line1/cnc1/telemetry

Ihr Zwilling kann die ISA-95-Seite abonnieren, ohne selbst Sparkplug dekodieren zu müssen, während Sparkplug-fähige SCADA-Clients weiterhin die Original-Topics nutzen. Das beseitigt eine der häufigsten Integrationshürden, wenn Sparkplug-Bestandsgeräte mit einem neuen Zwilling kombiniert werden.

Wenn Sie dieses Backbone nicht selbst betreiben wollen, übernimmt ein verwalteter MQTT-Broker Verfügbarkeit, TLS und Zugriffskontrolle, sodass sich Ihr Team auf die Hierarchie und den Zwilling konzentrieren kann.

Das Zwillingsmodell aus Topics aufbauen

Das Zwillingsmodell ist ein Baum, dessen Knoten Metadaten und Live-Werte tragen. Eine einfache JSON-Darstellung:

{
  "id": "acme/izmir/machining/line2",
  "level": "line",
  "name": "Line 2 - Housings",
  "children": [
    { "id": "acme/izmir/machining/line2/cnc3", "level": "cell", "name": "CNC 3", "type": "cnc" },
    { "id": "acme/izmir/machining/line2/robot1", "level": "cell", "name": "Loading Robot", "type": "robot" }
  ]
}

Live-Werte hängen sich aus den Topics telemetry und state an die Zellknoten. Aggregate wie Linienzustand oder Linien-OEE berechnet ein Zwillingsdienst und veröffentlicht sie auf einem Topic auf Linienebene zurück, zum Beispiel acme/izmir/machining/line2/kpi, sodass jeder Viewer dieselben Zahlen liest.

Praxis: Ihre Topic-Hierarchie validieren

Bevor Sie den Zwilling bauen, prüfen Sie, ob das, was Geräte veröffentlichen, zur Hierarchie passt. Dieses Skript abonniert ein Präfix auf dem kostenlosen öffentlichen MQTT-Broker und meldet Topics, die gegen die Regeln verstoßen. Verwenden Sie ein eindeutiges Präfix und simulierte Daten; der öffentliche MQTT-Broker ist für alle lesbar und nur für Tests und Prototypen gedacht, nicht für Produktionsdaten.

import re
import uuid

import paho.mqtt.client as mqtt

PREFIX = "connectmq/demo-isa-3e8f"  # your unique demo prefix
LEVELS = ["enterprise", "site", "area", "line", "cell", "datatype"]
DATA_TYPES = {"telemetry", "state", "alarm", "energy", "health", "command", "kpi"}
SEGMENT = re.compile(r"^[a-z0-9-]+$")
seen = set()


def check(topic):
    parts = topic[len(PREFIX) + 1 :].split("/")
    problems = []
    if len(parts) != len(LEVELS):
        problems.append(f"expected {len(LEVELS)} levels, got {len(parts)}")
    for name, seg in zip(LEVELS, parts):
        if not SEGMENT.match(seg):
            problems.append(f"{name} '{seg}' has invalid characters")
    if parts and parts[-1] not in DATA_TYPES:
        problems.append(f"unknown data type '{parts[-1]}'")
    return problems


def on_connect(client, userdata, flags, reason_code, properties):
    client.subscribe(f"{PREFIX}/#")
    print("Validating topics under", PREFIX)


def on_message(client, userdata, msg):
    if msg.topic in seen:
        return
    seen.add(msg.topic)
    problems = check(msg.topic)
    print(("OK   " if not problems else "FAIL ") + msg.topic + ("" if not problems else "  -> " + "; ".join(problems)))


client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=f"isa95-check-{uuid.uuid4().hex[:6]}")
client.on_connect = on_connect
client.on_message = on_message
client.connect("broker.connectmq.com", 1883, keepalive=30)
client.loop_forever()

Veröffentlichen Sie einige Test-Topics, um es in Aktion zu sehen:

mosquitto_pub -h broker.connectmq.com -p 1883 -i isa-pub-1 -t "connectmq/demo-isa-3e8f/acme/izmir/machining/line2/cnc3/telemetry" -m '{"rpm":8000}'
mosquitto_pub -h broker.connectmq.com -p 1883 -i isa-pub-2 -t "connectmq/demo-isa-3e8f/acme/izmir/Machining/cnc3/Telemetry" -m '{"rpm":8000}'

Das zweite Topic scheitert an der Groß-/Kleinschreibung und an der fehlenden Linienebene. Das Demo-Präfix ist bewusst zwei Ebenen tief: Der öffentliche MQTT-Broker erlaubt bis zu 8 Topic-Ebenen, und die sechsstufige Hierarchie plus ein zweistufiges Präfix passt genau hinein. Auf einem privaten Broker brauchen Sie überhaupt kein Präfix.

Checkliste für die Umsetzung

  1. Stimmen Sie Namen für Unternehmen, Standort und Bereich mit Betrieb und IT ab.
  2. Erfassen Sie Linien und Zellen je Bereich und vergeben Sie stabile IDs.
  3. Legen Sie das Vokabular der Datentypen und die Payload-Schemata je Typ fest.
  4. Konfigurieren Sie Edge-Gateways oder das Sparkplug-Republishing so, dass ISA-95-Topics entstehen.
  5. Validieren Sie die Topics mit einem Skript und der ISA-95-Geräteansicht, bevor Sie Visualisierungen bauen.
  6. Bauen Sie den Zwillingsbaum aus Topics plus einer Metadatendatei für Namen und Typen.
  7. Veröffentlichen Sie Aggregate auf der Ebene, die sie beschreiben.
  8. Versionieren Sie das Hierarchiedokument und prüfen Sie jede Änderung.

Die Struktur lässt sich direkt auf einen digitalen Zwilling der Fabrik und auf Programme zum digitalen Zwilling in der Produktion anwenden.

Ordnen Sie Ihre Werksdaten mit ConnectMQ

ConnectMQ erkennt ISA-95- und UNS-Topics, dekodiert Sparkplug B und bietet Ihnen eine Geräteansicht nach ISA-95-Ebenen. Registrieren Sie sich unter app.connectmq.com für den kostenlosen Serverless-Tarif, ohne Kreditkarte, und sehen Sie zu, wie Ihre Hierarchie Gestalt annimmt, während sich Geräte verbinden.

Häufig gestellte Fragen

Was ist ein ISA-95 digitaler Zwilling?

Ein digitaler Zwilling, dessen Modell und Daten-Topics nach der ISA-95-Anlagenhierarchie aus Unternehmen, Standort, Bereich, Linie und Zelle organisiert sind, sodass der Zwilling der Struktur des Werks entspricht.

Ist ISA-95 dasselbe wie der Unified Namespace?

Nein. ISA-95 ist eine Norm, die die Hierarchie definiert; der Unified Namespace ist ein Architekturmuster, das alle Daten an einen Broker veröffentlicht. Ein UNS nutzt für seinen Topic-Baum häufig die ISA-95-Hierarchie.

Können Sparkplug-B-Geräte einen ISA-95-Zwilling speisen?

Ja. ConnectMQ dekodiert Sparkplug B und veröffentlicht die Daten erneut in ISA-95-Topics, sodass der Zwilling den ISA-95-Baum direkt abonnieren kann.

Was, wenn eine Maschine zu keiner Linie gehört?

Verwenden Sie auf Linienebene ein Platzhaltersegment wie general, damit jedes Topic dieselbe Tiefe behält und Wildcard-Subscriptions weiter funktionieren.

Verwandte Artikel

Alle Artikel →

Ihr privater MQTT-Broker ist nur wenige Klicks entfernt

Konto anlegen, Broker-Zugangsdaten erhalten und das erste Gerät verbinden — ohne Server, die installiert, gepatcht oder skaliert werden müssen.