Understanding DNP3 Data Objects, Groups, and Variations in SCADA Systems

By | March 23, 2026

The Distributed Network Protocol (DNP3) is a widely used SCADA communication protocol designed to enable reliable data exchange between master stations and outstations. It is optimized for transmitting small, structured data packets efficiently and reliably in industrial environments

A key strength of DNP3 lies in its object-based data model, which organizes data into object groups, variations, and indices. This structured approach enables flexible, efficient, and interoperable communication across devices from different vendors.

1. DNP3 Object-Based Data Model

DNP3 uses an object library at the application layer to represent all data exchanged between devices.

According to the DNP3 reference manual:

  • Data is organized into object groups (types of data)
  • Each object is further defined by variations (format of data)
  • Individual data points are identified by indexes

This model allows:

  • Standardized communication
  • Efficient data transmission
  • Support for multiple data types in a single message

2. DNP3 Data Objects

DNP3 data objects represent real-world measurements and control points stored in device databases.

Typical data types include:

  • Binary inputs (e.g., breaker status)
  • Analog inputs (e.g., voltage, temperature)
  • Counters (e.g., energy usage)
  • Control outputs

As explained in the DNP3 primer:

  • These data points are stored as arrays in outstation databases
  • Each element is identified by a zero-based index

This structure allows efficient access and transmission of large numbers of data points.

3. Object Groups (Data Categories)

DNP3 organizes objects into groups, where each group represents a category of data.

Examples:

  • Binary Inputs
  • Analog Inputs
  • Counters
  • Binary Outputs
  • Analog Outputs

Groups define what type of data is being communicated, not how it is formatted.

The DNP3 manual describes this as:

Data objects are “broadly grouped together into Object Groups such as Binary Input Objects and Analog Input Objects”

4. Variations (Data Representation)

Each object group contains multiple variations, which define how the data is encoded.

Variations specify:

  • Data format (integer, floating point)
  • Size (16-bit, 32-bit, etc.)
  • Presence of additional information (e.g., flags, timestamps)

For example, analog data may be transmitted as:

  • Integer values
  • Floating-point values
  • With or without status flags

This flexibility allows DNP3 to:

  • Optimize bandwidth
  • Match device capabilities
  • Provide detailed or compact data formats

5. Object Headers and Message Structure

DNP3 transmits data objects using object headers, which are part of the application layer message.

Each object header contains:

  • Group number
  • Variation number
  • Qualifier field
  • Range or count of objects
application layer

The diagram clearly shows:

  • Object headers precede the actual data
  • Multiple objects can be included in a single message

This structure allows:

  • Efficient bulk data transfer
  • Flexible addressing of data points

6. Indexing of Data Points

Each data object is identified by an index (point number).

  • Indexes are zero-based
  • Represent specific field devices or measurements
  • Used to access data within object groups

From the primer:

“Element numbers are called point indexes… the lowest element is always identified as zero”

This enables scalable systems with thousands of data points.

7. Static and Event Objects

DNP3 defines two main types of data:

Static Objects

  • Represent current values
  • Retrieved using polling
  • Belong to Class 0

Event Objects

  • Represent changes in data
  • Stored in event buffers
  • Assigned to Class 1, 2, or 3 (priority levels)

From the DNP3 manual:

  • Event data is returned when the master polls a specific class
  • Only changed data is transmitted, improving efficiency

8. Class-Based Data Organization

DNP3 assigns data objects to classes:

  • Class 0 → Static data
  • Class 1 → High-priority events
  • Class 2 → Medium-priority events
  • Class 3 → Low-priority events

This allows:

  • Priority-based polling
  • Efficient bandwidth usage
  • Faster reporting of critical events

9. Efficient Data Transmission

The object model supports efficient communication by:

  • Sending only changed (event) data
  • Allowing multiple object types in one message
  • Supporting unsolicited responses

DNP3 systems can operate in:

  • Polling mode (master requests data)
  • Quiescent mode (report-by-exception)

In quiescent mode:

  • Outstations send data only when changes occur
  • Communication remains idle otherwise

10. Practical Example

In a substation SCADA system:

  • Binary Input → Breaker ON/OFF
  • Analog Input → Voltage level
  • Counter → Energy consumption

Each data point:

  • Belongs to a group
  • Has a variation (format)
  • Is identified by an index
  • May be assigned a class

The master station retrieves:

  • All static data (Class 0)
  • Only changed event data (Class 1–3)

DNP3 Data Objects – Complete List of Groups and Variations

The table below presents a consolidated summary of all DNP3 object groups and variations defined in IEEE Std 1815-2012.

This summary includes every supported object group, its variation numbers, and the official object description. It serves as a quick-reference guide for DNP3 implementers, system integrators, and protocol analysts, showing the full range of static data, events, commands, counters, analog values, device attributes, and time-related objects available across all subset levels.

Objects are sorted by Group number and then by Variation for easy lookup. Variations that appear only in higher levels (e.g., floating-point, time-tagged events, or device attributes) are clearly identified by their presence in Level 4.

Complete List of DNP3 Objects and Variations

GroupVariationDescription
0209Device Attributes— Secure authentication version
0210Device Attributes— Number of security statistics per association
0211Device Attributes— Identifier of support for user-specific attributes
0212Device Attributes— Number of master-defined data set prototypes
0213Device Attributes— Number of outstation-defined data set prototypes
0214Device Attributes— Number of master-defined data sets
0215Device Attributes— Number of outstation-defined data sets
0216Device Attributes— Max number of binary outputs per request
0217Device Attributes— Local timing accuracy
0218Device Attributes— Duration of timing accuracy
0219Device Attributes— Support for analog output events
0220Device Attributes— Max analog output index
0221Device Attributes— Number of analog outputs
0222Device Attributes— Support for binary output events
0223Device Attributes— Max binary output index
0224Device Attributes— Number of binary outputs
0225Device Attributes— Support for frozen counter events
0226Device Attributes— Support for frozen counters
0227Device Attributes— Support for counter events
0228Device Attributes— Max counter index
0229Device Attributes— Number of counter points
0230Device Attributes— Support for frozen analog inputs
0231Device Attributes— Support for analog input events
0232Device Attributes— Maximum analog input index
0233Device Attributes— Number of analog input points
0234Device Attributes— Support for double-bit binary input events
0235Device Attributes— Maximum double-bit binary input index
0236Device Attributes— Number of double-bit binary input points
0237Device Attributes— Support for binary input events
0238Device Attributes— Max binary input index
0239Device Attributes— Number of binary input points
0240Device Attributes— Max transmit fragment size
0241Device Attributes— Max receive fragment size
0242Device Attributes— Device manufacturer’s software version
0243Device Attributes— Device manufacturer’s hardware version
0245Device Attributes— User-assigned location name
0246Device Attributes— User assigned ID code/number
0247Device Attributes— User-assigned device name
0248Device Attributes— Device serial number
0249Device Attributes— DNP3 subset and conformance
0250Device Attributes— Device manufacturer’s product name and model
0252Device Attributes— Device manufacturer’s name
0254Device Attributes— Non-specific all attributes request
0255Device Attributes— List of attribute variations
10Binary Input— Any Variation
11Binary Input— Packed format
12Binary Input— With flags
20Binary Input Event— Any Variation
21Binary Input Event— Without time
22Binary Input Event— With absolute time
23Binary Input Event— With relative time
30Double-bit Binary Input— Any Variation
31Double-bit Binary Input— Packed format
32Double-bit Binary Input— With flags
40Double-bit Binary Input Event— Any Variation
41Double-bit Binary Input Event— Without time
42Double-bit Binary Input Event— With absolute time
43Double-bit Binary Input Event— With relative time
100Binary Output— Any Variation
102Binary Output— Output status with flags
110Binary Output Event— Any Variation
111Binary Output Event— Status without time
112Binary Output Event— Status with time
120Binary Command— Control relay output block (CROB)
121Binary Command— Control relay output block (CROB)
130Binary Output Command Event— Any Variation
131Binary Output Command Event— Command status without time
132Binary Output Command Event— Command status with time
200Counter— Any Variation
201Counter— 32-bit with flag
202Counter— 16-bit with flag
205Counter— 32-bit without flag
206Counter— 16-bit without flag
210Frozen Counter— Any Variation
211Frozen Counter— 32-bit with flag
212Frozen Counter— 16-bit with flag
215Frozen Counter— 32-bit with flag and time
216Frozen Counter— 16-bit with flag and time
219Frozen Counter— 32-bit without flag
2110Frozen Counter— 16-bit without flag
220Counter Event— Any Variation
221Counter Event— 32-bit with flag
222Counter Event— 16-bit with flag
230Frozen Counter Event— Any Variation
231Frozen Counter Event— 32-bit with flag
232Frozen Counter Event— 16-bit with flag
235Frozen Counter Event— 32-bit with flag and time
236Frozen Counter Event— 16-bit with flag and time
300Analog Input— Any Variation
301Analog Input— 32-bit with flag
302Analog Input— 16-bit with flag
303Analog Input— 32-bit without flag
304Analog Input— 16-bit without flag
305Analog Input— Single-prec flt-pt with flag
320Analog Input Event— Any Variation
321Analog Input Event— 32-bit without time
322Analog Input Event— 16-bit without time
323Analog Input Event— 32-bit with time
324Analog Input Event— 16-bit with time
325Analog Input Event— Single-prec flt-pt without time
327Analog Input Event— Single-prec flt-pt with time
340Analog Input Deadband— Any Variation
341Analog Input Deadband— 16-bit
342Analog Input Deadband— 32-bit
400Analog Output Status— Any Variation
401Analog Output Status— 32-bit with flag
402Analog Output Status— 16-bit with flag
411Analog Output— 32-bit
412Analog Output— 16-bit
501Time and Date— Absolute time
511Time and Date CTO— Absolute time, synchronized
512Time and Date CTO— Absolute time, unsynchronized
521Time Delay— Coarse
522Time Delay— Fine
601Class Objects— Class 0 data
602Class Objects— Class 1 data
603Class Objects— Class 2 data
604Class Objects— Class 3 data
801Internal Indications— Packed format

Conclusion

The DNP3 data model—based on objects, groups, variations, and indices—provides a structured and flexible framework for representing industrial data. This model enables:

  • Efficient communication
  • Scalable system design
  • Interoperability across vendors
  • Reliable data handling in SCADA systems

By separating data type (groups) from data format (variations), DNP3 achieves both flexibility and efficiency, making it one of the most effective protocols for industrial automation.

Author: Zakaria El Intissar

I'm an automation and industrial computing engineer with 12 years of experience in power system automation, SCADA communication protocols, and electrical protection. I build tools and write guides for Modbus, DNP3, IEC 101/103/104, and IEC 61850 on ScadaProtocols.com to help engineers decode, analyze, and troubleshoot real industrial communication systems.

Leave a Reply

Your email address will not be published. Required fields are marked *