Skip to main content

DNP3 (Power / Utility)

DNP3 (Distributed Network Protocol v3) is the most widely used protocol in utility SCADA systems for power, water, and gas. It is the communication standard between RTUs/IEDs and the SCADA master, with time-stamped events and reliable unsolicited responses as its core features.


Registration Form Input Values​

Input FieldWhat to EnterExample
IP AddressIP of the RTU / IED192.168.0.120
PortDNP3 TCP port20000 (standard)
Master Address (master-address)Gateway's (master's) own address1
Outstation Address (outstation-address)Peer's (slave's) DNP address10
Request Timeout (request-timeout)Response wait time (ms)5000
Unsolicited (enable-unsolicited)Enable RTU's spontaneous transmission (push) — driver caches and returns it first on read()all / 1 / 2 / 3 / 1,2 (default blank = unused)
Both addresses must match for communication to work

In DNP3, the master address and outstation address must match on both sides. Check that the “Source Address” and “Destination Address” in the RTU settings (usually in ABB / SEL / GE IED configuration tools) pair with the gateway's master/outstation addresses.


PLC Address Notation for Tags​

DNP3 identifies data points by Group / Variation / Index. Common groups:

GroupTypeNotes
1Binary Input (BI)Breaker/contact status, etc.
10Binary Output (BO)Output status
20CounterCumulative counters
30Analog Input (AI)Current, voltage, temperature — most common
40Analog Output (AO)Output setpoint
41Analog Output Block (write target)Setpoint writing

On the gateway, enter them in the g<group>v<variation>.<index> or class<n> format.

NotationMeaning
g30v1.5Analog Input, var 1 (32-bit + flag), index 5
g30v5.5Analog Input, var 5 (Float), index 5
g1v2.0Binary Input, var 2 (with flag), index 0
g20v1.0Counter, 32-bit, index 0
class0Class 0 polling (full scan of static data)
class1Class 1 events (event-driven changes)
Class 0 vs g30v1.x

In the early stages of a project, if you “just want to get everything first,” it's convenient to issue class0 to receive it all at once, then select only the needed points and register them precisely with g30v....


Data Format Matching​

GroupData TypeFormat Supplementary
g1 (BI)Boolean(blank)
g30v1 (AI 32-bit signed)IntegerDW
g30v2 (AI 16-bit signed)Integer(blank)
g30v5 (AI float)FloatREAL
g30v6 (AI double)DoubleLREAL
g20v1 (Counter 32-bit)IntegerDW

Write Support​

DNP3 outstation write targets are usually of two types.

NotationMeaning
g41v1.5Analog Output Block 32-bit signed setpoint, index 5
g41v3.5Analog Output Block float setpoint, index 5
g12v1.0Control Relay Output Block (CROB) — breaker trip/close, etc.
CROB is dangerous

g12 (CROB) directly operates breakers/relays. In operational environments, always follow the select-before-operate procedure and verify permissions before use.


Common Issues and Solutions​

SymptomPossible CauseSolution
“No reply”Address mismatchCheck both master/outstation addresses
All values 0 or staleUnsolicited not received, link layer issueTry explicit polling with class0
“Object not found”Wrong group/variationCheck the RTU's “DNP point map” document
Large time discrepancyDNP3 timestamp UTC vs localGateway receives in UTC. Convert at the display layer

More Detailed Group / Variation Table​

The DNP3 data model has a structure where each “Group” contains multiple “Variations.” Even within Group 30 (AI), there are multiple representations (32-bit / 16-bit / float / double), and you need to match whichever variation the RTU exposes.

GroupVarMeaningSize / Format
11Binary Input — packed format (no flag)1 bit
12Binary Input with status (includes flag bit)1 byte
21Binary Input Change — no timeevent
22Binary Input Change — absolute timeevent + 6-byte time
102Binary Output Status (with flag)1 byte
121CROB (Control Relay Output Block) — write only11-byte struct
201Counter — 32-bit4 bytes
202Counter — 16-bit2 bytes
301AI 32-bit signed (with flag)5 bytes
302AI 16-bit signed (with flag)3 bytes
303AI 32-bit signed (no flag)4 bytes
305AI single-precision float (with flag)5 bytes
306AI double-precision float (with flag)9 bytes
321AI Change — no timeevent
327AI Change — single float, abs timeevent
401AO Status 32-bit signed (with flag)5 bytes
411AO Block 32-bit signed (write target)5 bytes
413AO Block float (write target)5 bytes

Frequently Used Operational Patterns​

Pattern 1. Basic Measurements from Substation IEDs (Current, Voltage, Power)​

IEDs such as ABB REC615 / SEL-451 / SEL-735 meters are typically mapped as follows:

Tag NameAddressData TypeFormat Supplementary
Phase A Currentg30v5.0FloatREAL
Phase B Currentg30v5.1FloatREAL
Phase C Currentg30v5.2FloatREAL
Total Active Powerg30v5.10FloatREAL
Frequencyg30v5.20FloatREAL
Breaker 1 Positiong1v2.0Boolean(blank)
Breaker 2 Positiong1v2.1Boolean(blank)

Pattern 2. Accumulated Counters (kWh / gas m³, etc.)​

Counters (Group 20) are cumulative values. The display layer calculates the difference to convert to “usage per hour.”

Tag NameAddressData Type
Accumulated Active Energy (kWh)g20v1.0Integer
Accumulated Reactive Energy (kvarh)g20v1.1Integer

Pattern 3. Breaker Control via CROB (write)​

g12v1.0 = "Pulse-On / Trip / Close" 명령 코드

CROB 1-byte control code:

ValueMeaning
0x01Pulse-On
0x02Pulse-Off
0x03Latch-On
0x04Latch-Off
0x41Trip (protection operation)
0x81Close
select-before-operate

Many RTUs require the SBO (select → operate) procedure for CROBs. Even if PlantPulse sends a single write command, the RTU may reject it. In such environments, enable the no-SBO mode on the RTU side, or perform the two steps via a separate automation script.


References / Next Steps​

  • The “DNP3 device profile” PDF from RTU manufacturers (ABB, SEL, GE, Schneider) contains all the group/variation/index mappings.
  • The IEEE 1815-2012 standard document (DNP3) is the official spec.
  • Refer to the DNP3 automation examples in Advanced — REST API.