01 — What Is a DNP3 Point List?

A DNP3 point list is a structured table that maps every measurement and control in your field device (RTU, RTAC, plant controller) to a DNP3 object number, object type, event class, and scaling. It is the formal interface document between your plant and the utility SCADA master station.

Think of it as the API schema for your power plant. The utility's SCADA master polls your RTU using the point indices in the agreed point list. If your point list says Analog Input 14 = Real Power at POI in kW (scale 1.0), the master will read AI14, multiply by 1.0, and display it as kW. If your configuration doesn't match — wrong index, wrong scale, wrong object type — the utility sees garbage or nothing at all.

✓ Why This Matters

Most commissioning delays on solar interconnect projects come from a mismatch between the point list submitted in the interconnect agreement and the actual RTU configuration during startup testing. The utility SCADA team tests to the agreed point list. If your as-built differs, the commissioning test fails.

02 — DNP3 Object Types

DNP3 defines four fundamental object categories. Understanding which type to use for each measurement is the first step in point list design.

Object TypeAbbrev.DataSolar Plant ExampleDirection
Binary InputBI0 or 1Breaker open/close, inverter run/fault statusRTU → Master
Analog InputAINumeric valueReal power (kW), reactive power (kVAR), voltage (kV), current (A)RTU → Master
Binary OutputBO0 or 1Remote trip/close breaker, enable/disable inverterMaster → RTU
Analog OutputAONumeric setpointActive power setpoint (kW), reactive power setpoint (kVAR), power factor targetMaster → RTU

Binary Input Variations

DNP3 has two Binary Input object groups with important differences:

⚠ Common Mistake

Assigning all binary inputs to Group 1 (no time). The utility's SOE recorder needs Group 2 timestamps to reconstruct fault sequences. A breaker trip event without a millisecond timestamp is useless for protection coordination analysis.

03 — Event Classes: 1, 2, 3, and 0

This is where most point lists go wrong. Every DNP3 point is assigned to an event class that controls when the RTU reports changes to the master. Getting this wrong either floods the SCADA master with irrelevant change events, or starves it of critical real-time data.

ClassPriorityReportingUse ForSolar Example
Class 1HighestImmediate unsolicitedCritical alarms, trip events, protection flagsInverter fault, breaker trip, islanding detect
Class 2MediumPolled or unsolicitedImportant status, operational analogsReal power, reactive power, POI voltage
Class 3LowerPolled periodicallyNon-critical measurements, weather dataWind speed, module temperature, irradiance
Class 0NoneIntegrity poll onlyStatic config data, firmware versionRated capacity, device serial number display
ℹ Unsolicited Reporting

Class 1 events trigger unsolicited responses — the RTU pushes data to the master without being polled. This is essential for fault events where a 5-second poll cycle is too slow. The master must explicitly enable unsolicited reporting after the link comes up. If unsolicited is disabled, Class 1 events only report on the next integrity poll — defeating the purpose.

DNP3 event class reporting flow Class 1 events push immediately as unsolicited messages. Class 2 events report on a class poll cycle. Class 3 events report on the slower class poll. Class 0 contains static data read only on integrity poll. RTU Outstation Class 1 buf Class 2 buf Class 3 buf Unsolicited push · < 1 s Class 2 poll · ~2 s Class 3 poll · ~30 s Class 0 integrity · ~5 min Utility SCADA Master station Receives in priority order
Class assignment controls reporting speed and bandwidth. Class 1 jumps to the front. Class 0 only moves when the master asks for it.

04 — Deadbands — The Silent Data Killer

An analog deadband (also called a dead band, threshold, or reporting threshold) is the minimum change in an analog value before the RTU generates a change event. If you set it too high, small but meaningful changes are never reported. If you set it too low, every measurement noise spike becomes an event that floods the event buffer.

Deadband Sizing Guidelines

MeasurementUnitsRecommended DeadbandRationale
Real Power (P)kW5–20 kW (1–2% of rated)Catch meaningful generation changes; ignore noise
Reactive Power (Q)kVAR5–15 kVAR (1–2% of rated)Same as P — watch for dispatch step changes
Voltage (V)kV0.1–0.5 kV (0.3–1% of nominal)Voltage regulation actions need to be visible
Current (I)A1–5 A (0.5–1% of CT rating)Small enough to catch ramp events
FrequencyHz0.01–0.05 HzFrequency rides need sub-Hz resolution
Irradiance (POA)W/m²5–10 W/m²Cloud events are fast; 10 W/m² is sufficient
Temperature°C0.5–1.0°CThermal changes are slow; 1°C is fine
🔴 Event Buffer Overflow

Every RTU has a finite event buffer for each class. If your deadbands are too small and the buffer fills faster than the master polls, the oldest events are dropped — permanently lost. The RTU sets an event buffer overflow flag that the master can detect, but the events themselves are gone. Size your deadbands to keep the event rate below 10 events/second on any single class.

05 — Solar Plant Point List Template

Here is a practical starting-point point list for a utility-scale solar plant with a plant controller (RTAC) as the DNP3 outstation. Indices are zero-based (0 = first point). Adjust to match your interconnect agreement.

IndexObjectDescriptionUnitsClassDeadband / Notes
BI 0Grp 2POI Breaker StatusClass 152a contact — 1=Closed
BI 1Grp 2Site Communication HealthyClass 11=All comms OK
BI 2Grp 2Inverter Major Fault (any)Class 1OR of all inverter fault flags
BI 3Grp 2IEEE 1547 Ride-Through ActiveClass 11=Active ride-through event
BI 4Grp 1Site Control ModeClass 20=Local, 1=Remote
BI 5Grp 1Met Station HealthyClass 31=All met sensors communicating
AI 0Grp 30Real Power — POIkWClass 2Deadband: 10 kW · Gen+ convention
AI 1Grp 30Reactive Power — POIkVARClass 2Deadband: 10 kVAR · +inject/−absorb
AI 2Grp 30Voltage — POI (L-L)kVClass 2Deadband: 0.1 kV
AI 3Grp 30Current — POIAClass 2Deadband: 2 A
AI 4Grp 30Power Factor — POIClass 2Deadband: 0.005 · EEI convention
AI 5Grp 30Frequency — POIHzClass 2Deadband: 0.02 Hz
AI 6Grp 30POA IrradianceW/m²Class 3Deadband: 5 W/m²
AI 7Grp 30Ambient Temperature°CClass 3Deadband: 0.5°C
AI 8Grp 30Active Power Setpoint (current)kWClass 2Echo of AO 0 — confirms receipt
AO 0Grp 41Active Power SetpointkWRange: 0–rated MW. Requires select-before-operate
AO 1Grp 41Reactive Power SetpointkVARRange: ±Q_max. Requires SBO
AO 2Grp 41Power Factor SetpointRange: 0.90–1.00. Signed (lag/lead)
BO 0Grp 12Remote Trip POI BreakerSBO required. Latch-type. Confirm with BI 0
BO 1Grp 12Enable Remote Control Mode1=Enable remote setpoints

06 — Interactive Point List Builder

Use the builder below to draft your own DNP3 point list. Add points, assign classes and deadbands, then export to CSV for your interconnect submittal. Your list is saved in this session.

📋 DNP3 Point List Builder
IndexTypeDescriptionUnitsClassDeadband / Notes
No points yet — click + Add Point or load the template below.

07 — Test Your Knowledge

Work through these quick-fire questions to check your understanding of DNP3 point list design.

08 — Common Mistakes

Walkthrough: "The historian went flat after commissioning"

What it looks like. Plant goes live. Utility SCADA shows P, Q, V on the operator screens. Two weeks later the asset management team pulls a daily generation report and the graph is a flat line at the last value seen on commissioning day. Real-time looks fine; history is broken.

How to find it. Two checks. First, on the SCADA master, look at the report timestamps for the analog points — if every timestamp is the same minute, the master is showing the same value it last received and your unsolicited reporting is off. Second, on the RTU, check whether unsolicited responses are enabled for Class 2 events. Most outstations default this off; the master has to send an enable-unsolicited message after the link comes up. If the link bounced (cellular backhaul reconnect, RTU restart) and the master never re-issued the enable, you are in this state.

How to fix it. On the master, configure the link-up handler to issue function code 20 (Enable Unsolicited Responses) for Classes 1, 2, and 3 every time the link establishes. Many master implementations have a checkbox for this; others require a startup script. Confirm by watching the actual link-up traffic in a DNP3 trace and verifying the enable message goes out and the RTU acknowledges. Without this, you are running on integrity polls only and getting one update every 15-60 minutes whether the data changed or not.

Other mistakes worth naming

✓ Summary

A well-designed DNP3 point list is sequential, consistently indexed, uses Group 2 binary inputs for all SOE-critical points, assigns analogs to Class 2 with appropriate deadbands, echoes all setpoints, and is updated to match the as-built configuration before utility commissioning testing. Use the builder above to draft yours.