DNP3 (Strom / Utility)
DNP3 (Distributed Network Protocol v3) ist das am weitesten verbreitete Protokoll in Utility-SCADA-Systemen für Strom / Wasser / Gas. Es ist der Kommunikationsstandard zwischen RTU / IED und SCADA-Master, wobei zeitgestempelte Ereignisse (time-stamped events) und zuverlässige Meldungen (unsolicited responses) die Kernmerkmale sind.
Eingabewerte des Registrierungsformulars
| 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 Gateways (Master) | 1 |
| Outstation-Adresse (outstation-address) | DNP-Adresse des Gegenübers (Slave) | 10 |
| Antwort-Timeout (request-timeout) | Wartezeit auf Antwort (ms) | 5000 |
| Unsolicited (enable-unsolicited) | Aktivierung der spontanen Übertragung (Push) der RTU — der Treiber cached und gibt sie bei read() zuerst 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 RTU-Konfiguration (normalerweise mit den IED-Konfigurationstools von ABB / SEL / GE), ob „Source Address“ und „Destination Address“ mit den Master-/Outstation-Adressen des Gateways übereinstimmen.
PLC-Adressnotation für Tags
DNP3 identifiziert Datenpunkte über Group / Variation / Index. Häufige Groups:
| Group | Typ | Anmerkung |
|---|---|---|
| 1 | Binary Input (BI) | Schalter-/Kontaktstatus usw. |
| 10 | Binary Output (BO) | Ausgangsstatus |
| 20 | Counter | Zählerstand |
| 30 | Analog Input (AI) | Strom·Spannung·Temperatur — am häufigsten |
| 40 | Analog Output (AO) | Ausgangs-Sollwert |
| 41 | Analog Output Block (Schreibziel) | Sollwert schreiben |
Im Gateway wird die Eingabe im Format g<group>v<variation>.<index> oder class<n> vorgenommen.
| 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 (ereignisbezogene Änderungen) |
Wenn Sie in der frühen Projektphase „erstmal alles holen“ möchten, empfiehlt es sich, zunächst mit class0 alles auf einmal zu empfangen und anschließend nur die benötigten Punkte über g30v... präzise zu registrieren.
Datentyp-Zuordnung
| Group | Datentyp | Format-Hilfsfeld |
|---|---|---|
| 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 |
Schreibunterstützung (Write)
Bei einer DNP3-Outstation gibt es normalerweise zwei Schreibziele.
| Notation | Bedeutung |
|---|---|
g41v1.5 | Analog Output Block 32-bit signed Sollwert, Index 5 |
g41v3.5 | Analog Output Block float Sollwert, Index 5 |
g12v1.0 | Control Relay Output Block (CROB) — z. B. Schalter Aus/Ein |
g12 (CROB) steuert Schalter / Relais direkt. In Betriebsumgebungen muss unbedingt das select-before-operate-Verfahren und die Berechtigungsprüfung vor der Verwendung durchgeführt werden.
Häufige Probleme und Lösungen
| Symptom | Mögliche Ursache | Lösung |
|---|---|---|
| „No reply“ | Adress-Mismatch | Master-/Outstation-Adresse auf beiden Seiten prüfen |
| Alle Werte 0 oder veraltet | Keine Unsolicited-Meldungen, Link-Layer-Problem | Explizites Polling mit class0 versuchen |
| „Object not found“ | Falsche Group/Variation | DNP-Point-Map-Dokument der RTU prüfen |
| Zeit deutlich verschoben | DNP3-Zeitstempel UTC vs. lokal | Gateway empfängt in UTC. Umrechnung in der Anzeige |
Detailliertere Tabelle zu Group / Variation
Das Datenmodell von DNP3 ist so aufgebaut, dass eine „Group“ mehrere „Variationen“ enthält. Selbst bei derselben Group 30 (AI) gibt es mehrere Darstellungen (32-bit / 16-bit / float / double), sodass die Zuordnung davon abhängt, welche Variation die RTU bereitstellt.
| Group | Var | Bedeutung | Größe / Format |
|---|---|---|---|
| 1 | 1 | Binary Input — gepacktes Format (ohne Flag) | 1 Bit |
| 1 | 2 | Binary Input mit Status (Flag-Bit enthalten) | 1 Byte |
| 2 | 1 | Binary Input Change — ohne Zeit | Event |
| 2 | 2 | Binary Input Change — absolute Zeit | Event + 6-Byte-Zeit |
| 10 | 2 | Binary Output Status (mit Flag) | 1 Byte |
| 12 | 1 | CROB (Control Relay Output Block) — nur Schreiben | 11-Byte-Struktur |
| 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, abs. Zeit | Event |
| 40 | 1 | AO Status 32-bit signed (mit Flag) | 5 Byte |
| 41 | 1 | AO Block 32-bit signed (Schreibziel) | 5 Byte |
| 41 | 3 | AO Block float (Schreibziel) | 5 Byte |
Häufig verwendete Betriebsmuster
Muster 1. Grundmesswerte eines Umspannwerks-IED (Strom·Spannung·Leistung)
IEDs wie ABB REC615 / SEL-451 / SEL-735-Messgeräte werden normalerweise wie folgt zugeordnet.
| Tag-Name | Adresse | Datentyp | Format-Hilfsfeld |
|---|---|---|---|
| A-Phasenstrom | g30v5.0 | Float | REAL |
| B-Phasenstrom | g30v5.1 | Float | REAL |
| C-Phasenstrom | g30v5.2 | Float | REAL |
| Gesamtwirkleistung | g30v5.10 | Float | REAL |
| Frequenz | g30v5.20 | Float | REAL |
| Schalter 1 Position | g1v2.0 | Boolean | (leer) |
| Schalter 2 Position | g1v2.1 | Boolean | (leer) |
Muster 2. Zählerstände (kWh / m³ Gas usw.)
Counter (Group 20) sind kumulierte Werte. Die Differenz wird in der Anzeige berechnet und in „Verbrauch pro Stunde“ umgewandelt.
| Tag-Name | Adresse | Datentyp |
|---|---|---|
| Kumulierte Wirkenergie (kWh) | g20v1.0 | Integer |
| Kumulierte Blindenergie (kvarh) | g20v1.1 | Integer |
Muster 3. Schaltersteuerung mit CROB (write)
g12v1.0 = "Pulse-On / Trip / Close" 명령 코드
CROB 1-Byte-Steuercode:
| Wert | Bedeutung |
|---|---|
0x01 | Pulse-On |
0x02 | Pulse-Off |
0x03 | Latch-On |
0x04 | Latch-Off |
0x41 | Trip (Schutzauslösung) |
0x81 | Close |
Viele RTUs verlangen bei CROB zwingend die SBO-Prozedur (select → operate). Auch wenn PlantPulse einen einzelnen Write-Befehl sendet, kann die RTU diesen ablehnen. In solchen Umgebungen entweder den SBO-freien Modus auf der RTU-Seite aktivieren oder die beiden Schritte über ein separates Automatisierungsskript ausführen.
Referenz / Nächste Schritte
- Das „DNP3 device profile“-PDF des RTU-Herstellers (ABB, SEL, GE, Schneider) enthält die vollständige Group/Variation/Index-Zuordnung.
- Das IEEE 1815-2012-Standarddokument (DNP3) ist die offizielle Spezifikation.
- Siehe auch das DNP3-Automatisierungsbeispiel unter Fortgeschritten — REST API.