DNP3 Control Points & Ethernet Configuration Guide

Reference guide for DNP3 data objects, control point configuration (Group 12 CROB), Ethernet/TCP setup, and gateway integration for SCADA and utility automation systems.

Categories:

Overview

DNP3 (Distributed Network Protocol 3) is the dominant SCADA communications protocol in North American electric, water, and gas utilities. Standardized as IEEE 1815-2012, it was purpose-built for reliable communications between master stations (SCADA/control centers), Remote Terminal Units (RTUs), and Intelligent Electronic Devices (IEDs) in environments subject to electromagnetic interference, aging components, and poor transmission media.

Unlike simpler protocols such as Modbus, DNP3 provides:

  • Typed data objects — binary inputs, analog inputs, counters, and control outputs with defined data types and flags
  • Event-driven reporting — outstations report only changed data, reducing bandwidth
  • Time-stamped events — reconstructing sequences of events between polls
  • Unsolicited responses — outstations push critical events without waiting to be polled
  • Control operations — structured command sequences with feedback (Select-Before-Operate)

This guide covers the two areas that cause the most integration issues: control point configuration (getting write commands to work) and Ethernet/TCP setup (migrating from serial to IP-based SCADA).

DNP3 master/outstation architecture showing SCADA master, QuickServer gateway with dual role, and field outstations

DNP3 Architecture: Masters and Outstations

DNP3 uses a Master/Outstation model:

RoleAlso CalledFunctionGateway Role
MasterClient, Control CenterPolls outstations, sends commandsInitiates requests
OutstationServer, Slave, RTU/IEDResponds to polls, reports eventsResponds to master requests

[!CAUTION] Role reversal is the #1 configuration error in DNP3 gateway projects. When a QuickServer bridges two DNP3 networks, it acts as master on one side and outstation on the other. Getting this backwards produces cryptic errors like “Connection closed by slave” or IIN2.0 “No Function Support” responses — symptoms that look like a protocol problem but are actually a configuration problem.

Addressing

Every DNP3 device has a numeric address (0–65,519). Communication requires specifying both source and destination addresses in every message:

ParameterDescriptionExample
Master AddressAddress of the polling station1 (common default)
Outstation AddressAddress of the remote device10
Source AddressSender’s address (in frame header)Matches the sender’s role
Destination AddressReceiver’s address (in frame header)Must match the receiver’s configured address

[!TIP] Unlike Modbus (which uses a single Unit ID), DNP3 requires both source and destination addresses to be correct. If either is wrong, the outstation silently ignores the request — no error response, no indication of misconfiguration. Always verify addresses at both ends before troubleshooting other issues.

DNP3 Data Objects (Groups and Variations)

DNP3 organizes all data into Groups (object type) and Variations (encoding format). This is the DNP3 equivalent of a Modbus register map — but with significantly more structure.

Core Data Object Types

Object TypeGroup(s)DirectionDescriptionBACnet Equivalent
Binary Input (BI)1, 2ReadDigital status from field devices (contact closure, relay state)Binary Input (BI)
Binary Output (BO)10, 11, 12Read/WriteDigital control outputs (breaker trip/close, valve open/close)Binary Output (BO)
Analog Input (AI)30, 32ReadAnalog measurements (voltage, current, temperature, flow)Analog Input (AI)
Analog Output (AO)40, 41, 42, 43Read/WriteAnalog setpoints and control (tap position, power setpoint)Analog Output (AO)
Counter20, 21, 22ReadAccumulated pulse counts (energy kWh, water volume)Analog Input (AI)
Frozen Counter21, 23ReadSnapshot of counter at a specific timeAnalog Input (AI)

Groups and Variations Reference

Each Group has multiple Variations that define the data encoding:

Binary Input (Group 1 — static, Group 2 — event):

GroupVariationDescriptionData Width
11Binary Input — packed format (8 per byte)1 bit
12Binary Input — with flags1 byte
21Binary Input Event — without time1 byte
22Binary Input Event — with absolute time7 bytes
23Binary Input Event — with relative time3 bytes

Analog Input (Group 30 — static, Group 32 — event):

GroupVariationDescriptionData Width
30132-bit Analog Input with flag5 bytes
30216-bit Analog Input with flag3 bytes
30332-bit Analog Input without flag4 bytes
30416-bit Analog Input without flag2 bytes
30532-bit float with flag5 bytes
30664-bit float with flag9 bytes
32132-bit Analog Input Event without time5 bytes
32216-bit Analog Input Event without time3 bytes
32332-bit Analog Event with time11 bytes
32416-bit Analog Event with time9 bytes

Analog Output (Group 40 — static, Group 41 — command):

GroupVariationDescriptionData Width
40132-bit Analog Output Status with flag5 bytes
40216-bit Analog Output Status with flag3 bytes
40332-bit float Analog Output Status5 bytes
40464-bit float Analog Output Status9 bytes
41132-bit Analog Output Block5 bytes
41216-bit Analog Output Block3 bytes
41332-bit float Analog Output Block5 bytes
41464-bit float Analog Output Block9 bytes

Counter (Group 20 — static, Group 22 — event):

GroupVariationDescriptionData Width
20132-bit Counter with flag5 bytes
20216-bit Counter with flag3 bytes
20532-bit Counter without flag4 bytes
20616-bit Counter without flag2 bytes
22132-bit Counter Event with flag5 bytes
22532-bit Counter Event with time11 bytes

[!WARNING] Group/Variation mismatch is a common cause of “IIN2.0 — No Function Support” errors. If the master requests a Group/Variation the outstation doesn’t support, it returns this internal indication. Always verify which variations the outstation’s device profile supports before building the gateway configuration.

Static vs Event Data (Class 0, 1, 2, 3)

DNP3 assigns every data point to a Class, which controls how and when data is reported:

ClassNameBehaviorUse Case
Class 0StaticCurrent value — returned on integrity pollBaseline snapshots, initial state
Class 1Event (high priority)Change-of-value events — highest priorityCritical alarms, breaker trips
Class 2Event (medium priority)Change-of-value events — medium priorityAnalog value changes, status updates
Class 3Event (low priority)Change-of-value events — lowest priorityNon-critical logs, counters

The polling cycle works as:

  1. Integrity Poll (Class 0+1+2+3) — sent on startup or reconnection; retrieves all static data and queued events
  2. Event Polls (Class 1, 2, 3) — sent periodically; returns only data that changed since last poll
  3. Unsolicited Responses — outstation pushes Class 1/2/3 events without waiting for a poll (if enabled)

[!TIP] Configure Class 1 event polls at a faster rate than Class 2/3 to prioritize critical alarms. A typical configuration: Class 1 every 1 second, Class 2 every 5 seconds, Class 3 every 30 seconds, Integrity Poll every 300 seconds.

Control Point Configuration (Group 12 — CROB)

Control points are the most complex part of DNP3 integration. The Control Relay Output Block (CROB, Group 12) is the standard mechanism for binary control operations — breaker trip/close, valve open/close, pump start/stop.

CROB Structure

A CROB command contains:

FieldSizeDescription
Control Code1 byteOperation type + Trip/Close + Queue/Clear
Count1 byteNumber of times to execute (usually 1)
On Time4 bytesMilliseconds the output is energized
Off Time4 bytesMilliseconds the output is de-energized
Status1 byteResponse status code (0 = success)

Control Code Breakdown

The control code byte encodes three pieces of information:

BitsNameValues
0–3Operation Type0x01 = Pulse On, 0x02 = Pulse Off, 0x03 = Latch On, 0x04 = Latch Off
4–5Trip/Close0x00 = NUL, 0x40 = Close, 0x80 = Trip
6Clear0x20 = Clear queued operations
7Queue0x10 = Queue the operation

Common control code combinations:

Hex CodeOperationTypical Use
0x03Latch On (NUL)Turn on a motor, open a valve
0x04Latch Off (NUL)Turn off a motor, close a valve
0x41Pulse On + CloseClose a breaker (pulsed operation)
0x81Pulse On + TripTrip a breaker (pulsed operation)

Select-Before-Operate (SBO) vs Direct Operate

DNP3 defines two control modes:

ModeFunction CodesSequenceUse Case
Select-Before-Operate (SBO)FC 3 (Select) → FC 4 (Operate)Two-step: select the point, then executeSafety-critical controls (breakers, protective relays)
Direct OperateFC 5 (Direct Operate)One-step: execute immediatelyNon-critical controls (lights, dampers)
Direct Operate No AckFC 6 (Direct Operate No Ack)One-step, no confirmationLow-latency controls where speed matters more than confirmation

[!CAUTION] SBO has a timeout. After sending a Select (FC 3), the Operate (FC 4) must follow within the outstation’s configured timeout (typically 2–10 seconds). If the operate arrives late, the outstation rejects it. If control commands work intermittently, check whether the SBO timeout is too short for the network latency.

Active vs Passive Control Points

When configuring control points on a QuickServer, each Binary Output can be configured as:

ModeBehaviorWhen to Use
ActiveGateway sends CROB commands to the outstationGateway is the master and controls field devices
PassiveGateway accepts CROB commands from a masterGateway is the outstation and receives commands from SCADA

[!WARNING] “Control points stuck as status-only” is almost always a passive-vs-active misconfiguration. If you can read Binary Output status (Group 10) but cannot write controls (Group 12), verify that the control points are configured as active on the master side and that the outstation supports the Group 12 variation being sent.

Analog Output Commands (Group 41)

For analog control operations (setpoints, positions, power levels), use Group 41 — Analog Output Block:

VariationData TypeRangeUse Case
41.132-bit signed integer−2,147,483,648 to 2,147,483,647High-precision setpoints
41.216-bit signed integer−32,768 to 32,767Standard setpoints
41.332-bit float (IEEE 754)±3.4 × 10³⁸Engineering-unit setpoints
41.464-bit double±1.7 × 10³⁰⁸High-precision scientific

Analog Output commands also support SBO and Direct Operate modes, using the same function codes (FC 3/4/5/6) as binary controls.

DNP3 Protocol Levels (L1–L4)

DNP3 devices are certified to subset levels that define which features they support:

LevelFeaturesTypical Device
Level 1Basic read of BI, BO, AI, AO, counters. Direct Operate only. No events.Simple sensors, basic RTUs
Level 2Level 1 + event reporting (Class 1/2/3), integrity polls, SBO controls, time syncStandard IEDs, meters, relays
Level 3Level 2 + frozen counters, analog deadband, unsolicited responses, file transferAdvanced RTUs, gateway devices
Level 4Level 3 + floating-point data types, double-bit binary, octet stringsFull-featured SCADA devices

[!CAUTION] Protocol level mismatch = zero communication. If the master requests features above the outstation’s supported level, it receives “Function Not Supported” errors. More importantly, if the outstation transmits using data types the master doesn’t understand, the master silently ignores the data with no error indication on the serial link — LEDs blink but no data appears. Always confirm both devices’ protocol levels before starting configuration.

How to Determine a Device’s Protocol Level

  1. Check the manufacturer’s DNP3 Device Profile — a standardized document listing supported objects, variations, and function codes
  2. Request the device’s conformance level from the manufacturer
  3. Test with an integrity poll — monitor which objects and variations appear in the response

Ethernet / TCP Configuration

Migrating from Serial to DNP3 over TCP/IP

DNP3 was originally designed for serial links (RS-232 / RS-485). The DNP3 over TCP transport (defined in IEEE 1815) wraps DNP3 application-layer messages in TCP connections, enabling IP-based SCADA communication.

Connection Parameters

ParameterStandard ValueNotes
TCP Port20000DNP3 standard port; some implementations use 20001+ for secondary channels
TransportTCP (connection-oriented)UDP is allowed by the standard but rarely used in practice
IP ModeMaster initiates TCP connection to outstationOutstation listens on port 20000
Keep-aliveRecommendedDetect connection drops on unreliable networks
TLSOptional (IEC 62351-3)Recommended for wide-area networks

[!NOTE] The master always initiates the TCP connection. The outstation listens. This is the opposite of some other protocols and can cause confusion when configuring firewalls — the outstation’s port 20000 must be reachable from the master.

Gateway Ethernet Configuration

When configuring a QuickServer for DNP3 over TCP:

As DNP3 Master (polling outstation devices):

SettingValueNotes
RoleMaster / ClientInitiates TCP connections
Remote IPOutstation’s IP addressMust be reachable on the network
Remote Port20000Or device-specific port
Local DNP3 AddressMaster address (e.g., 1)Must match outstation’s expected master address
Remote DNP3 AddressOutstation address (e.g., 10)Must match outstation’s configured address

As DNP3 Outstation (serving data to SCADA master):

SettingValueNotes
RoleOutstation / ServerListens for TCP connections
Listen Port20000Or any agreed port
Local DNP3 AddressOutstation address (e.g., 10)Must match master’s configured destination
Allowed Master IPSCADA master’s IPRestrict connections for security
Allowed Master AddressMaster’s DNP3 address (e.g., 1)Reject messages from unexpected masters

Multi-Master Considerations

A single DNP3 outstation typically serves one master per TCP connection. When multiple SCADA masters need access to the same data:

ApproachImplementationLimitation
Multiple TCP connectionsOutstation accepts connections from multiple master IPsEach master gets its own event buffer; events consumed by one master are not seen by others
DNP3 proxy/repeaterGateway mirrors data to multiple outstation portsAdds latency; requires additional configuration
Separate IP interfacesUse a gateway with multiple Ethernet portsHardware-dependent; not all gateways support this

[!WARNING] Event buffer contention: When two masters poll the same outstation, each integrity poll clears the event buffers. Master A receives events, then Master B’s poll returns empty because the events were already consumed. Use separate event classes per master or configure the outstation to retain events until all masters have polled.

Serial-to-Ethernet Bridge Configuration

The most common DNP3 gateway use case is bridging serial outstations (RS-232/RS-485) to an Ethernet/IP SCADA network:

[Serial IED] ←RS-232/485→ [QuickServer] ←TCP/IP→ [SCADA Master]
   Outstation                Master | Outstation        Master

The gateway runs two DNP3 stacks simultaneously:

SideRoleTransportPolls/Responds
Serial sideMasterRS-232 or RS-485Polls serial IEDs on a schedule
Ethernet sideOutstationTCP port 20000Responds to SCADA master requests

Configuration steps:

  1. Configure the serial port (baud rate, parity, stop bits, RS-232 vs RS-485)
  2. Configure the serial-side DNP3 master (addresses, poll intervals, object list)
  3. Configure the Ethernet-side DNP3 outstation (listen port, addresses, exposed objects)
  4. Map serial objects to Ethernet objects — the gateway’s internal point map links serial-side data to Ethernet-side presentation

[!TIP] Configure the serial side first and verify communication (data reads successfully) before configuring the Ethernet side. This isolates serial issues (baud rate, wiring, addressing) from Ethernet issues (port, IP, role, firewall).

DNP3 to BACnet / Modbus Mapping

DNP3 gateways frequently bridge utility protocols to building automation protocols. The mapping follows a predictable pattern:

DNP3 → BACnet Object Mapping

DNP3 ObjectGroupBACnet ObjectNotes
Binary Input1Binary Input (BI)Status flags map to Reliability property
Binary Output Status10Binary Output (BO)Present Value = output state
Binary Output Control12Binary Output (BO)BACnet Write → CROB command to outstation
Analog Input30Analog Input (AI)Apply engineering unit scaling in gateway
Analog Output Status40Analog Value (AV)Current setpoint value
Analog Output Command41Analog Output (AO)BACnet Write → AO Block command to outstation
Counter20Analog Input (AI)Map to units: pulses or kilowatt-hours

For detailed BACnet object type guidance, see BACnet Object Types & Properties Reference.

DNP3 → Modbus Register Mapping

DNP3 ObjectGroupModbus Register TypeNotes
Binary Input1Discrete Input (1xxxx)Read-only single bit
Binary Output10/12Coil (0xxxx)Read/write single bit
Analog Input30Input Register (3xxxx)16-bit or 32-bit depending on variation
Analog Output40/41Holding Register (4xxxx)Read/write analog value
Counter20Input Register (3xxxx)32-bit counters may need two registers

For Modbus addressing conventions, see Modbus Addressing & Register Reference.

Pre-Project Intake Checklist

Collect this information before starting any DNP3 integration. Missing items cause project delays measured in weeks, not days.

Device Information

  • Device manufacturer and model — e.g., Siemens Siprotec 7UT635, SEL-751, GE D60
  • DNP3 Device Profile document — lists supported Groups, Variations, Function Codes, and protocol level
  • Outstation address(es) for every device — numeric (0–65,519)
  • Master address — address the devices expect to be polled from
  • Protocol level — L1, L2, L3, or L4
  • Number of devices on the network

Transport Information

  • Serial or Ethernet? — RS-232 (point-to-point) or RS-485 (multi-drop) or TCP/IP?
  • Serial settings (if applicable) — baud rate, parity, stop bits, data bits
  • IP address and port (if TCP) — default port 20000
  • Firewall rules — can the master reach the outstation on port 20000?

Data Point Requirements

  • Point list — which Binary Inputs, Analog Inputs, Counters are needed?
  • Control requirements — which Binary Outputs and Analog Outputs need write capability?
  • Control mode — SBO (safety-critical) or Direct Operate?
  • Group/Variation preferences — 16-bit vs 32-bit, with/without timestamps, float vs integer?
  • Event class assignments — which points are Class 1 (critical) vs Class 2/3?

Integration Requirements

  • Destination protocolBACnet/IP, BACnet MS/TP, Modbus TCP, or Modbus RTU?
  • Gateway role on each side — which side is master, which is outstation?
  • Unsolicited responses — supported and desired? (Reduces polling traffic)
  • Time synchronization — does the outstation need time sync from the master?
  • Fragment size — standard 2K or larger? (Large point counts may need custom firmware)

[!WARNING] Fragment size limits can silently truncate data. The standard DNP3 fragment size is 2,048 bytes. If a response exceeds this, it’s split into multiple fragments. Some older masters don’t reassemble multi-fragment responses correctly. For large point counts (500+), verify multi-fragment handling works end-to-end before commissioning.

Troubleshooting Common Issues

SymptomLikely CauseFix
No response from outstationAddress mismatch — source or destination wrongVerify both master and outstation addresses match at both ends
”IIN2.0 — No Function Support”Requesting unsupported Group/Variation or Function CodeCheck device profile; reduce to a supported variation (e.g., Group 30 Var 2 instead of Var 5)
“Connection closed by slave”Master/outstation roles reversed in gateway configSwap the role assignment — master connects, outstation listens
Control commands have no effectActive/passive misconfiguration on control pointsVerify control points set to Active on the master side
Controls work once then stopSBO timeout expired between Select and OperateIncrease SBO timeout or switch to Direct Operate if safety allows
Serial LEDs blink but no dataProtocol level mismatch (device expects L3, gateway sends L1)Match gateway’s protocol level to device requirement
Analog values are wrong or zeroGroup/Variation data width mismatch (16-bit vs 32-bit)Match the variation to the outstation’s actual data width
Events missing on second masterEvent buffer consumed by first master’s pollAssign separate event classes per master, or use unsolicited reporting
TCP connection drops repeatedlyFirewall, NAT, or keep-alive timeoutEnable TCP keep-alive; verify firewall allows persistent connections on port 20000
Upload fails with no errorConfig file extension case sensitivityRename .CSV.csv — some gateways reject uppercase extensions
Large point maps cause timeoutsFragment size exceeded (>2K)Request custom firmware with larger fragment support (e.g., 16K)
“Function Not Supported” on WriteOutstation doesn’t support control function codesVerify device profile supports FC 3/4/5/6 for controls; some IEDs are read-only

Common DNP3 Devices

These devices are frequently encountered in Chipkin integration projects:

ManufacturerModelTypeTypical Application
SiemensSiprotec 4 (7UT635, 7UT6135)Protective relaySubstation transformer protection
Schweitzer (SEL)SEL-751, SEL-351Protective relayFeeder protection, recloser control
GE / GE VernovaD60, D30Protective relayDistance protection, line differential
OrionOrion LXRTU / gatewaySubstation automation (requires L4)
ABBREF615, REB670Protective relayBusbar and feeder protection
SchneiderEasergy P3Protective relayDistribution automation

[!NOTE] Protective relays are the most common DNP3 devices in gateway projects. Each manufacturer has a unique DNP3 device profile — the same Groups/Variations that work on a SEL relay may not work on a Siemens relay. Always request the device profile document before configuration.

Chipkin Tools

  • QuickServer — DNP3 Serial/TCP master and outstation with configurable protocol level support
  • QuickServer — Multi-protocol gateway supporting DNP3, BACnet, Modbus, and 35+ other protocols
  • CAS BACnet Explorer — Verify BACnet object exposure after DNP3-to-BACnet gateway mapping
  • Chipkin Support — DNP3 device profile analysis, control point configuration, and gateway setup services

Need more help?

If this page does not resolve the issue, contact Chipkin support with the product model, protocol details, and any diagnostics you have already captured.

Open Chipkin Support