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.
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 Type | Abbrev. | Data | Solar Plant Example | Direction |
|---|---|---|---|---|
| Binary Input | BI | 0 or 1 | Breaker open/close, inverter run/fault status | RTU → Master |
| Analog Input | AI | Numeric value | Real power (kW), reactive power (kVAR), voltage (kV), current (A) | RTU → Master |
| Binary Output | BO | 0 or 1 | Remote trip/close breaker, enable/disable inverter | Master → RTU |
| Analog Output | AO | Numeric setpoint | Active power setpoint (kW), reactive power setpoint (kVAR), power factor target | Master → RTU |
Binary Input Variations
DNP3 has two Binary Input object groups with important differences:
- Group 1 (BI without time) — static value only. Used for integrity poll reads. No timestamp.
- Group 2 (BI with time / Change Event) — includes a millisecond timestamp from the RTU's internal clock. Use this for any status that needs sequence-of-events (SOE) recording. Always use Group 2 for breaker operations, fault flags, and trip events.
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.
| Class | Priority | Reporting | Use For | Solar Example |
|---|---|---|---|---|
| Class 1 | Highest | Immediate unsolicited | Critical alarms, trip events, protection flags | Inverter fault, breaker trip, islanding detect |
| Class 2 | Medium | Polled or unsolicited | Important status, operational analogs | Real power, reactive power, POI voltage |
| Class 3 | Lower | Polled periodically | Non-critical measurements, weather data | Wind speed, module temperature, irradiance |
| Class 0 | None | Integrity poll only | Static config data, firmware version | Rated capacity, device serial number display |
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.
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
| Measurement | Units | Recommended Deadband | Rationale |
|---|---|---|---|
| Real Power (P) | kW | 5–20 kW (1–2% of rated) | Catch meaningful generation changes; ignore noise |
| Reactive Power (Q) | kVAR | 5–15 kVAR (1–2% of rated) | Same as P — watch for dispatch step changes |
| Voltage (V) | kV | 0.1–0.5 kV (0.3–1% of nominal) | Voltage regulation actions need to be visible |
| Current (I) | A | 1–5 A (0.5–1% of CT rating) | Small enough to catch ramp events |
| Frequency | Hz | 0.01–0.05 Hz | Frequency rides need sub-Hz resolution |
| Irradiance (POA) | W/m² | 5–10 W/m² | Cloud events are fast; 10 W/m² is sufficient |
| Temperature | °C | 0.5–1.0°C | Thermal changes are slow; 1°C is fine |
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.
| Index | Object | Description | Units | Class | Deadband / Notes |
|---|---|---|---|---|---|
| BI 0 | Grp 2 | POI Breaker Status | — | Class 1 | 52a contact — 1=Closed |
| BI 1 | Grp 2 | Site Communication Healthy | — | Class 1 | 1=All comms OK |
| BI 2 | Grp 2 | Inverter Major Fault (any) | — | Class 1 | OR of all inverter fault flags |
| BI 3 | Grp 2 | IEEE 1547 Ride-Through Active | — | Class 1 | 1=Active ride-through event |
| BI 4 | Grp 1 | Site Control Mode | — | Class 2 | 0=Local, 1=Remote |
| BI 5 | Grp 1 | Met Station Healthy | — | Class 3 | 1=All met sensors communicating |
| AI 0 | Grp 30 | Real Power — POI | kW | Class 2 | Deadband: 10 kW · Gen+ convention |
| AI 1 | Grp 30 | Reactive Power — POI | kVAR | Class 2 | Deadband: 10 kVAR · +inject/−absorb |
| AI 2 | Grp 30 | Voltage — POI (L-L) | kV | Class 2 | Deadband: 0.1 kV |
| AI 3 | Grp 30 | Current — POI | A | Class 2 | Deadband: 2 A |
| AI 4 | Grp 30 | Power Factor — POI | — | Class 2 | Deadband: 0.005 · EEI convention |
| AI 5 | Grp 30 | Frequency — POI | Hz | Class 2 | Deadband: 0.02 Hz |
| AI 6 | Grp 30 | POA Irradiance | W/m² | Class 3 | Deadband: 5 W/m² |
| AI 7 | Grp 30 | Ambient Temperature | °C | Class 3 | Deadband: 0.5°C |
| AI 8 | Grp 30 | Active Power Setpoint (current) | kW | Class 2 | Echo of AO 0 — confirms receipt |
| AO 0 | Grp 41 | Active Power Setpoint | kW | — | Range: 0–rated MW. Requires select-before-operate |
| AO 1 | Grp 41 | Reactive Power Setpoint | kVAR | — | Range: ±Q_max. Requires SBO |
| AO 2 | Grp 41 | Power Factor Setpoint | — | — | Range: 0.90–1.00. Signed (lag/lead) |
| BO 0 | Grp 12 | Remote Trip POI Breaker | — | — | SBO required. Latch-type. Confirm with BI 0 |
| BO 1 | Grp 12 | Enable Remote Control Mode | — | — | 1=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.
| Index | Type | Description | Units | Class | Deadband / 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
- Wrong sign convention on Q. IEEE generator convention (Q+ = lagging/absorbing) vs IEC load convention (opposite). Agree on convention with the utility before point list submittal and document it on every AI point for reactive power.
- Not echoing setpoints. Every Analog Output setpoint (AO) should have a matching Analog Input (AI) that echoes the current active setpoint value. This lets the master confirm the RTU received and applied the command.
- Using Class 0 for operational analogs. Class 0 points only report on integrity poll (typically every 15-60 minutes). Real power and voltage at Class 0 means the utility SCADA sees stale values for most of the day.
- Index gaps. Some SCADA masters allocate memory for all index numbers 0 through max. A point list with BI0, BI1, BI47 may cause the master to allocate 48 binary input slots. Keep indices sequential and document any intentional gaps.
- No select-before-operate (SBO) on control points. All Binary Outputs and Analog Outputs that have physical consequences (breaker trip, power curtailment) must require SBO. Direct Operate without SBO is a cybersecurity and operational risk.
- Submitting the design-basis point list, not the as-built. The point list in the interconnect agreement was written at design. By commissioning day, point indices have shifted, new measurements were added, and three items were renamed. The utility tests to the agreement. Update the point list before the commissioning test.
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.