Ein Wirkleistungswert kann alle drei Protokolle durchlaufen, bevor er eine Energieplattform erreicht. Den Zähler verlässt er als zwei Modbus-Register ohne Einheit, Zeitstempel oder Status. Eine SPS kann ihn als OPC-UA-Knoten mit Datentyp, StatusCode und zwei Zeitstempeln bereitstellen. Den Standort verlässt er als MQTT-Nachricht in einem zuvor zwischen Sender und Empfänger vereinbarten Format. Bei jedem Übergang kann ein Teil der Bedeutung verloren gehen. Die folgenden Inbetriebnahmefehler entstehen an solchen Übergängen.
Die Protokolle im Vergleich
| Modbus | OPC UA | MQTT | |
|---|---|---|---|
| Muster | Anfrage und Antwort. Ein Master je RTU-Bus; TCP-Geräte begrenzen gleichzeitige Verbindungen | Anfrage und Antwort innerhalb einer Sitzung; PubSub ist ebenfalls definiert (Teil 14) | Veröffentlichen und Abonnieren über einen Broker |
| Datenmodell | Vier Tabellen: Coils, diskrete Eingänge, Eingangsregister, Halteregister (16 Bit) | Typisierte Knoten mit Beziehungen in einem Adressraum | Keines; die Nutzdaten können beliebige Bytes sein |
| Bedeutung eines Werts | In der Registertabelle des Geräts | Datentyp und Name des Knotens; technische Einheit nur bei bereitgestellter optionaler Eigenschaft | Zwischen Sender und Empfänger vereinbart oder durch Sparkplug definiert |
| Zeit und Qualität | Nicht im Protokoll enthalten | StatusCode, Quell- und Serverzeitstempel je Wert | Nicht in MQTT enthalten; im Nutzdatenformat ergänzen |
| Erkennung | Keine | Adressraum durchsuchen | Keine. Wildcard-Abonnements zeigen nur veröffentlichte oder gespeicherte Topics; Sparkplug-Birth-Nachrichten deklarieren Messgrößen |
| Sicherheit | Keine; durch Netzarchitektur absichern | Anwendungszertifikate, Signatur, Verschlüsselung und Benutzerauthentifizierung | TLS zum Broker und dessen Zugriffskontrolle |
| Standardport | 502 (TCP) | 4840 (TCP) | 1883 oder 8883 mit TLS |
| Typischer Einsatz | Zähler, Antriebe, Wechselrichter und kleine Steuerungen | SPS, SCADA-Server und Anlagensteuerungen | Gateway zur Plattform oder zwischen Anwendungen |
| Standard | Modbus Organization | OPC Foundation OPC 10000, auch IEC 62541 | OASIS; Sparkplug der Eclipse Foundation, auch ISO/IEC 20237 |
Modbus-Register und Registertabellen
Viele Stromzähler, Wechselrichter und Antriebe bieten Modbus an. Das Protokoll definiert vier Tabellen: Coils und diskrete Eingänge (1 Bit) sowie Eingangs- und Halteregister (16 Bit). Diskrete Eingänge und Eingangsregister sind nur lesbar. Coils und Halteregister können gelesen und geschrieben werden, soweit das Gerät dies zulässt. Funktion 03 liest bis zu 125 zusammenhängende Halteregister, Funktion 04 entsprechend Eingangsregister. Die Antwort erklärt die Bedeutung der Bits nicht. Einheit, Skalierung, Datentyp und Wortreihenfolge stehen in der Registertabelle des Herstellers. Zeitstempel und Status gehören nicht zum Protokoll. Der Leitfaden zu Modbus-Registertabellen erläutert, was je Datenpunkt erfasst werden muss.
Bei Modbus RTU über RS-485 muss die Abfrageliste zur Busgeschwindigkeit passen. Mit 8 Datenbits, gerader Parität und 1 Stoppbit umfasst ein Zeichen 11 Bit. Beim Lesen zweier Register sind Anfrage und Antwort 8 beziehungsweise 9 Byte lang. Diese 17 Zeichen benötigen bei 9600 Baud 19,5 ms auf der Leitung. Hinzu kommen nach jedem Frame eine Ruhezeit von 3,5 Zeichen (4,0 ms) und die Antwortverzögerung des Zählers laut Datenblatt. Dauert ein Vorgang insgesamt 60 ms, benötigen 20 Zähler mit jeweils 4 Abfragen 4,8 s je Durchlauf. Einen RTU-Bus darf nur ein Master abfragen.
Modbus TCP beseitigt die Baudratenbegrenzung, hat aber Grenzen für gleichzeitige Verbindungen. Viele Zähler erlauben nur wenige TCP-Verbindungen, manche nur eine. Fragen Gebäudeleittechnik und Gateway denselben Zähler ab, kann einer der beiden Clients seine Verbindung verlieren oder ohne klare Fehlermeldung in einen Timeout laufen.
OPC-UA-Adressraum, Status und Sicherheit
OPC UA aus der Reihe OPC 10000 (IEC 62541) stellt ein System als Adressraum von Knoten dar. Ein Client kann von einer Pumpe zu ihrer Drehzahl, ihren Betriebsstunden und ihren Alarmen navigieren. Das Lesen einer Variablen liefert einen DataValue: Wert und Datentyp, StatusCode, Quellzeitstempel von Gerät oder SPS sowie Serverzeitstempel des OPC-UA-Servers.
Die obersten zwei Bits des StatusCode kennzeichnen die Schwere (Teil 4, 7.38.1): Good ist 00, Uncertain 01 und Bad 10. UncertainLastUsableValue (0x40900000) bedeutet beispielsweise, dass die Aktualisierung des Werts ausgefallen ist. BadCommunicationError (0x80050000) meldet den Verlust der Datenquelle des Servers. Ein Client, der den Wert behält und den StatusCode verwirft, macht daraus scheinbar normale Messwerte.
Technische Einheiten gehören nicht zu jedem Knoten. Teil 8 definiert EngineeringUnits als optionale Eigenschaft analoger Variablen. Viele Server bieten einfache Variablen ohne Einheit; dann muss diese aus der Punktliste stammen.
OPC UA sichert Verbindungen mit Anwendungszertifikaten. Der Server bietet Endpunkte mit Sicherheitsrichtlinie und Modus an: None, Sign oder SignAndEncrypt. Benutzer können sich anonym, mit Benutzername und Passwort oder mit Zertifikat anmelden. Deaktivieren Sie den None-Endpunkt am Server. Bleibt er aktiv, kann ein Client, der beliebige Endpunkte akzeptiert, ohne Signatur und Verschlüsselung verbinden.
Der Leitfaden zur OPC-UA-Knotenidentität erklärt Kennungen und Namespaces. Der Leitfaden zur OPC-DA-Migration behandelt die Umstellung von OPC Classic.
MQTT-Broker, Topics und Nutzdatenvertrag
MQTT ist ein Transportprotokoll. Ein Publisher sendet eine Nachricht zu einem Topic an einen Broker. Dieser liefert sie an alle Clients, die das Topic abonniert haben. Publisher und Abonnenten verbinden sich nicht direkt. Der Broker muss für alle Beteiligten erreichbar und abgesichert sein. Der Publisher erfährt nicht, ob ein bestimmter Abonnent die Nachricht erhalten hat. Dafür braucht es eine Bestätigung auf Anwendungsebene oder eine Zustandsmeldung.
MQTT bietet Zustellstufen (QoS 0, 1 und 2), gespeicherte Nachrichten und eine Will-Nachricht. Erhält der Broker bei einem Keep-Alive-Wert ungleich null innerhalb des 1,5-Fachen dieses Intervalls kein MQTT-Steuerpaket, schließt er die Verbindung. Die registrierte Will-Nachricht wird dann nach den eingestellten Will-Delay- und Sitzungsregeln veröffentlicht. So lässt sich ein verlorenes Gateway erkennen, gegebenenfalls mit Verzögerung. Der Leitfaden zu MQTT-QoS erläutert die Zustellung, der MQTTS-Leitfaden TLS und Topic-Rechte.
MQTT legt den Inhalt einer Nachricht nicht fest. MQTT 5 ergänzt einen Indikator für das Nutzdatenformat, einen Inhaltstyp und Benutzereigenschaften, aber keine Feldnamen oder Einheiten. Jede Integration braucht einen Nutzdatenvertrag für Topic-Struktur, Feldnamen, Einheiten, Zeitstempelformat und Kennzeichnung fehlerhafter Daten. Gibt die empfangende Plattform ein eigenes Format vor, beschaffen Sie deren Topic- und Nutzdatenspezifikation vor der Inbetriebnahme.
Zwei Standards definieren ein Format auf MQTT. Sparkplug B (Eclipse Foundation, ISO/IEC 20237:2023) verwendet Topics der Form spBv1.0/group/message_type/edge_node/device und Protocol-Buffers-Nutzdaten. NBIRTH und DBIRTH deklarieren jede Messgröße samt Datentyp. NDEATH wird als Will des Knotens registriert. Datennachrichten (NDATA, DDATA) werden mit QoS 0 gesendet. Anhand einer Sequenznummer von 0 bis 255 kann die Host-Anwendung fehlende Nachrichten erkennen und eine erneute Birth-Nachricht anfordern. Auch OPC UA PubSub (Teil 14) kann einen MQTT-Broker als Transport mit UADP- oder JSON-Kodierung verwenden. Bei MQTT 3.1.1 müssen Abonnenten die Kodierung vorab kennen.
Ein Messwert über alle drei Protokolle
Ein Zähler misst 200,5 kW Wirkleistung. Laut Registertabelle liegt der Wert als 32-Bit-IEEE-754-Float mit höherwertigem Wort zuerst in den Halteregistern 0 und 1.
Über Modbus liest das Gateway 0x4348 und 0x8000. In der richtigen Wortreihenfolge ergibt sich 0x43488000, also 200,5. Vertauscht das Gateway die Wörter, entsteht 0x80004348, ungefähr -2,4 × 10⁻⁴¹. Ein Dashboard zeigt praktisch null und der Fehler wirkt wie eine lastfreie Anlage. Der Modbus-Registerdecoder zeigt alle vier Byte- und Wortreihenfolgen eines Registerpaars.
Über OPC UA kann eine SPS den Zählerwert als Knoten ns=2;s=Meter1.ActivePower bereitstellen. Ein Lesezugriff liefert 200,5 als Float mit StatusCode Good (0x00000000), dem Zeitpunkt der SPS-Abtastung und dem Zeitpunkt der Serverantwort. Verliert die SPS den Zähler, kann der Server weiterhin 200,5 mit UncertainLastUsableValue liefern. Der Wert ist nur bei Status Good als gültige aktuelle Messung zu verwenden.
Über MQTT könnte ein JSON-Vertrag denselben Punkt als {"point":"meter1/active_power","value":200.5,"unit":"kW","ts":"2026-09-24T10:15:00Z","quality":"good"} übertragen. Mit Sparkplug B liegt der Wert als Float-Messgröße in einer DDATA-Nachricht auf spBv1.0/site-a/DDATA/gateway-1/meter-1; der Zeitstempel zählt Millisekunden seit der Unix-Epoche. Sparkplug hat kein Standardfeld für den OPC-UA-StatusCode. Vereinbaren Sie vor dem Betrieb, wie Uncertain- und Bad-Werte übertragen werden, beispielsweise als Null-Messgröße.
Fehler bei der Inbetriebnahme prüfen
| Symptom | Mögliche Ursache | Prüfung |
|---|---|---|
| Werte nahe null oder sehr große Werte von einem korrekt messenden Zähler | Falsche Wortreihenfolge, falscher Datentyp oder Skalierungsfaktor | Messwert unter Last mit der Zähleranzeige vergleichen |
| Sporadische Modbus-TCP-Timeouts | Zwei Clients fragen einen Zähler ab, der nur eine Verbindung akzeptiert | Verbindungsgrenze im Datenblatt prüfen. Einen Client abfragen und die übrigen über ihn versorgen |
| CRC-Fehler und fehlende Antworten auf RS-485 | Zwei Master auf einem RTU-Bus oder eine zu schnelle Abfrageliste | Durchlaufzeit berechnen und genau einen Master sicherstellen |
| OPC-UA-Verbindung beim ersten Versuch abgelehnt | Client-Zertifikat nicht vertrauenswürdig (BadCertificateUntrusted, 0x801A0000) | Client-Zertifikat am Server und Server-Zertifikat am Client als vertrauenswürdig einrichten |
| OPC-UA-Sicherheit scheitert nach einem Neustart | Gateway- oder Serveruhr falsch, Zertifikat außerhalb der Gültigkeitsdauer | Beide Uhren mit einem Zeitserver abgleichen |
| Eingefrorener Wert wird als aktuell gesendet | OPC-UA-StatusCode am Gateway verworfen | Quelle trennen und die veröffentlichten Werte beobachten |
| Lücken nach Broker- oder Netzausfall | QoS-0-Nachrichten oder fehlende lokale Zwischenspeicherung beim Publisher | Broker zehn Minuten blockieren, dann empfangene und erwartete Nachrichtenzahlen vergleichen |
Der Leitfaden zu Protokoll-Gateways beschreibt die Angaben für jeden übersetzten Punkt. Der Leitfaden zu Quell- und Ankunftszeit erklärt, welchen Zeitstempel Sie behalten sollten.
Protokoll auswählen
| Frage | Empfehlung |
|---|---|
| Welche Schnittstelle bietet das Gerät? | Die vorhandene Schnittstelle nutzen. Einen funktionierenden Modbus-Zähler nicht allein für OPC UA ersetzen |
| Wer empfängt die Daten? | Plattformen nehmen meist MQTT oder HTTPS an. SCADA-Systeme und Gebäudeleittechnik unterstützen oft OPC UA, Modbus oder BACnet; manche nur Modbus TCP |
| Müssen Status und Zeit mit dem Wert übertragen werden? | OPC UA führt beides mit. Bei MQTT gehört es in den Nutzdatenvertrag; bei Modbus ergänzt der lesende Client seine Lesezeit |
| Wird das Netz gemeinsam genutzt oder ist es nicht vertrauenswürdig? | OPC UA mit SignAndEncrypt oder MQTT über TLS verwenden. Modbus in einem geschützten Netz halten |
| Brauchen viele Verbraucher denselben Wert? | MQTT über einen Broker oder OPC UA PubSub verwenden |
Der Vergleich von BACnet und Modbus behandelt die Gebäudeautomation.
OPC UA, MQTT und Modbus mit Edge
Edge auf dem ZGW-20 Gateway übernimmt die Gateway-Rolle. Es liest Geräte über Modbus TCP und RTU. Als OPC-UA-Client liest es Variablenknoten in Intervallen von 1 s bis 86.400 s. Es unterstützt None, Sign und SignAndEncrypt sowie anonyme Anmeldung, Benutzername/Passwort und Zertifikate. Halten Sie die Uhr des Gateways korrekt, da Zertifikatsprüfungen davon abhängen. EpiSensor-Funkgeräte, LoRaWAN-Sensoren und BACnet/IP-Steuerungen fließen in dasselbe Datenmodell ein.
Edge fragt OPC UA zyklisch ab. Es nutzt weder Abonnements noch PubSub und damit keine serverseitigen Deadbands. Änderungen, die kürzer als das Abfrageintervall dauern, können fehlen. Jeder Punkt erhält die geplante Lesezeit, nicht den OPC-UA-Quellzeitstempel. Der gespeicherte Punkt trägt den OPC-UA-StatusCode nicht. Die Edge-Qualitätskennzahl ist der Anteil eingetroffener erwarteter Lesevorgänge in einem gleitenden 15-Minuten-Fenster. Das ist eine andere Größe. Prüfen Sie, wie Uncertain- und Bad-Werte des Servers in Edge erscheinen, bevor Sie sich darauf verlassen.
Edge sendet Daten über MQTTS oder HTTPS nach außen. Zugeordnete Punkte kann es einer Gebäudeleittechnik außerdem als Modbus-TCP-Register auf einem eigenen Listener an Port 10502 bereitstellen, nicht an 502.
Häufige Fragen
Was unterscheidet OPC UA von MQTT?
OPC UA ist ein Client-Server-Protokoll mit Informationsmodell: Ein Wert liegt als typisierter Knoten mit StatusCode und Zeitstempeln vor, und der Client kann den Server durchsuchen. MQTT ist ein Publish-Subscribe-Transport über einen Broker. Es überträgt beliebige Nutzdaten, ohne ein Datenmodell festzulegen. Beides lässt sich verbinden: OPC UA PubSub (OPC 10000-14) kann einen MQTT-Broker als Transport mit UADP- oder JSON-Kodierung nutzen.
Wann ist OPC UA statt Modbus sinnvoll?
Nutzen Sie OPC UA, wenn die Quelle bereits einen OPC-UA-Server bereitstellt, etwa eine SPS oder ein SCADA-System, wenn der Empfänger Status und Quellzeitstempel zu jedem Wert braucht oder wenn die Daten ein Netz durchqueren, das Sie nicht kontrollieren. Stromzähler bieten häufig nur Modbus an; lesen Sie sie dann über Modbus.
Welche Ports verwenden OPC UA, MQTT und Modbus?
Binäres OPC UA über TCP nutzt standardmäßig Port 4840. MQTT nutzt 1883, mit TLS meist 8883. Modbus TCP nutzt 502. Hersteller und Standorte können diese Ports ändern; prüfen Sie die Einstellung jedes Geräts.
Was ist Sparkplug B?
Eine Spezifikation der Eclipse Foundation, auch als ISO/IEC 20237:2023 veröffentlicht. Sie definiert Topic-Namen, Protocol-Buffers-Nutzdaten und Zustandsmeldungen auf MQTT. Topics beginnen mit spBv1.0. NBIRTH und DBIRTH deklarieren alle Messgrößen, NDEATH meldet den Verlust eines Knotens, und Sequenznummern in Datennachrichten lassen die Host-Anwendung fehlende Nachrichten erkennen und eine erneute Birth-Nachricht anfordern.
Kann OPC UA über MQTT laufen?
Ja. OPC 10000-14 definiert MQTT als Transport für OPC UA PubSub. Die Nutzdaten sind UADP (binär) oder JSON. MQTT 3.1.1 hat kein Feld für die Kodierung; Abonnenten müssen sie daher vorab kennen. MQTT 5 kann sie in den Nachrichteneigenschaften mitführen.