DNP3 — Standard für Energieversorgung / Utility
DNP3 (Distributed Network Protocol v3) ist das in Utility-SCADA-Umgebungen — Energieversorger, Wasser, Gas — am weitesten verbreitete Protokoll. Es ist der Kommunikationsstandard zwischen RTU / IED und SCADA-Master; seine Kernmerkmale sind Zeitsynchronisation (time-stamped events) und zuverlässige Meldung (unsolicited responses).
Eingabewerte im Registrierungsformular
| Eingabefeld | Was wird eingetragen | Beispiel |
|---|---|---|
| IP-Adresse | IP der RTU / IED | 192.168.0.120 |
| Port | DNP3-TCP-Port | 20000 (Standard) |
| Master-Adresse (master-address) | Eigene Adresse des Gateway (Master) | 1 |
| Outstation-Adresse (outstation-address) | DNP-Adresse der Gegenstelle (Slave) | 10 |
| Antwort-Timeout (request-timeout) | Wartezeit auf Antwort (ms) | 5000 |
| Unsolicited (enable-unsolicited) | Spontanes Senden der RTU (Push) aktivieren — der Treiber cached die Daten und liefert sie bei read() bevorzugt zurück | all / 1 / 2 / 3 / 1,2 (Standard leer = nicht verwendet) |
Bei DNP3 müssen Master-Adresse und Outstation-Adresse auf beiden Seiten übereinstimmen. Prüfen Sie in der Konfiguration der RTU (üblicherweise das IED-Konfigurationswerkzeug von ABB / SEL / GE), ob „Source Address“ und „Destination Address“ mit Master/Outstation des Gateway zusammenpassen.
PLC-Adressnotation der Tags
DNP3 identifiziert Datenpunkte über Group / Variation / Index. Übliche Groups:
| Group | Art | Hinweis |
|---|---|---|
| 1 | Binary Input (BI) | Leistungsschalter-/Kontaktstatus usw. |
| 10 | Binary Output (BO) | Ausgangsstatus |
| 20 | Counter | Kumulierte Zähler |
| 30 | Analog Input (AI) | Strom, Spannung, Temperatur — am häufigsten |
| 40 | Analog Output (AO) | Ausgangs-Setpoint |
| 41 | Analog Output Block (Ziel für Schreibzugriffe) | Setpoint schreiben |
Im Gateway erfolgt die Eingabe im Format g<group>v<variation>.<index> oder class<n>.
| Notation | Bedeutung |
|---|---|
g30v1.5 | Analog Input, var 1 (32-bit + Flag), Index 5 |
g30v5.5 | Analog Input, var 5 (Float), Index 5 |
g1v2.0 | Binary Input, var 2 (mit Flag), Index 0 |
g20v1.0 | Counter, 32-bit, Index 0 |
class0 | Class-0-Polling (vollständiger Scan der statischen Daten) |
class1 | Class-1-Events (ereignisbasierte Änderungen) |
Wenn Sie in der Anfangsphase des Projekts „erst einmal alles abholen“ wollen, ist es praktisch, zunächst alles mit class0 auf einmal zu lesen und anschließend nur die benötigten Punkte gezielt über g30v... zu registrieren.
Zuordnung der Datenformate
| Group | Datenformat | Formatzusatz |
|---|---|---|
| g1 (BI) | Boolean | (leer) |
| g30v1 (AI 32-bit signed) | Integer | DW |
| g30v2 (AI 16-bit signed) | Integer | (leer) |
| g30v5 (AI float) | Float | REAL |
| g30v6 (AI double) | Double | LREAL |
| g20v1 (Counter 32-bit) | Integer | DW |
Unterstützung für Schreibzugriffe (Write)
Beim Schreiben auf eine DNP3-Outstation gibt es üblicherweise zwei Ziele.
| Notation | Bedeutung |
|---|---|
g41v1.5 | Analog Output Block, 32-bit signed Setpoint, Index 5 |
g41v3.5 | Analog Output Block, Float-Setpoint, Index 5 |
g12v1.0 | Control Relay Output Block (CROB) — z. B. Trip/Close eines Leistungsschalters |
g12 (CROB) betätigt Leistungsschalter / Relais direkt. In Produktivumgebungen nur nach dem select-before-operate-Verfahren und nach Prüfung der Berechtigungen verwenden.
Häufige Probleme und Lösungen
| Symptom | Mögliche Ursache | Lösung |
|---|---|---|
| „No reply“ | Adress-Mismatch | Master- und Outstation-Adresse auf beiden Seiten prüfen |
| Alle Werte 0 oder veraltet | Keine Unsolicited-Nachrichten empfangen, Link-Layer-Problem | Explizites Polling mit class0 versuchen |
| „Object not found“ | Falsche Group/Variation | Dokument „DNP point map“ der RTU prüfen |
| Zeit weicht stark ab | DNP3-Timestamp UTC vs. lokale Zeit | Das Gateway empfängt UTC. Umrechnung auf Anzeigeseite |
Ausführlichere Tabelle Group / Variation
Das Datenmodell von DNP3 ist so aufgebaut, dass eine „Group“ mehrere „Variations“ enthält. Selbst bei Group 30 (AI) gibt es die Darstellungen 32-bit / 16-bit / float / double — die Konfiguration muss zu der von der RTU bereitgestellten Variation passen.
| Group | Var | Bedeutung | Größe / Format |
|---|---|---|---|
| 1 | 1 | Binary Input — Packed Format (kein Flag) | 1 bit |
| 1 | 2 | Binary Input with Status (inkl. Flag-Bit) | 1 byte |
| 2 | 1 | Binary Input Change — ohne Zeit | event |
| 2 | 2 | Binary Input Change — absolute Zeit | event + 6-byte time |
| 10 | 2 | Binary Output Status (mit Flag) | 1 byte |
| 12 | 1 | CROB (Control Relay Output Block) — nur Schreiben | 11 byte struct |
| 20 | 1 | Counter — 32-bit | 4 byte |
| 20 | 2 | Counter — 16-bit | 2 byte |
| 30 | 1 | AI 32-bit signed (mit Flag) | 5 byte |
| 30 | 2 | AI 16-bit signed (mit Flag) | 3 byte |
| 30 | 3 | AI 32-bit signed (ohne Flag) | 4 byte |
| 30 | 5 | AI single-precision float (mit Flag) | 5 byte |
| 30 | 6 | AI double-precision float (mit Flag) | 9 byte |
| 32 | 1 | AI Change — ohne Zeit | event |
| 32 | 7 | AI Change — single float, absolute Zeit | event |
| 40 | 1 | AO Status 32-bit signed (mit Flag) | 5 byte |
| 41 | 1 | AO Block 32-bit signed (Ziel für Schreibzugriffe) | 5 byte |
| 41 | 3 | AO Block float (Ziel für Schreibzugriffe) | 5 byte |
Häufig genutzte Betriebsmuster
Muster 1. Basismesswerte eines Umspannwerk-IED (Strom, Spannung, Leistung)
IEDs wie ABB REC615 / SEL-451 / SEL-735-Zähler werden üblicherweise etwa so gemappt.
| Tag-Name | Adresse | Datenformat | Formatzusatz |
|---|---|---|---|
| Strom Phase A | g30v5.0 | Float | REAL |
| Strom Phase B | g30v5.1 | Float | REAL |
| Strom Phase C | g30v5.2 | Float | REAL |
| Gesamtwirkleistung | g30v5.10 | Float | REAL |
| Frequenz | g30v5.20 | Float | REAL |
| Position Leistungsschalter 1 | g1v2.0 | Boolean | (leer) |
| Position Leistungsschalter 2 | g1v2.1 | Boolean | (leer) |
Muster 2. Kumulierte Zähler (kWh / Gas m³ usw.)
Counter (Group 20) sind kumulierte Werte. Auf der Anzeigeseite wird die Differenz gebildet und in „Verbrauch pro Stunde“ umgerechnet.
| Tag-Name | Adresse | Datenformat |
|---|---|---|
| Wirkarbeit kumuliert (kWh) | g20v1.0 | Integer |
| Blindarbeit kumuliert (kvarh) | g20v1.1 | Integer |
Muster 3. Leistungsschaltersteuerung über CROB (Write)
g12v1.0 = "Pulse-On / Trip / Close" 명령 코드
CROB 1-byte Control Code:
| Wert | Bedeutung |
|---|---|
0x01 | Pulse-On |
0x02 | Pulse-Off |
0x03 | Latch-On |
0x04 | Latch-Off |
0x41 | Trip (Schutzauslösung) |
0x81 | Close |
Bei vielen RTUs ist für CROB das SBO-Verfahren (select → operate) zwingend. Auch wenn PlantPulse den Befehl als einzelnen Write absetzt, kann die RTU ihn zurückweisen. In solchen Umgebungen entweder auf der RTU den Modus ohne SBO aktivieren oder die beiden Schritte über ein separates Automatisierungsskript ausführen.
Referenzen / Nächste Schritte
- In den PDFs „DNP3 device profile“ der RTU-Hersteller (ABB, SEL, GE, Schneider) ist das gesamte Mapping von Group/Variation/Index enthalten.
- Das Normdokument IEEE 1815-2012 (DNP3) ist die offizielle Spezifikation.
- Siehe das DNP3-Automatisierungsbeispiel unter Erweitert — REST API.