The DNP3 protocol transmits data in the form of objects. An object is composed of a data value and any related fields, such as flags or timestamps. Objects can be polled by object class, object group, object variation, and/or object index.

Object Groups

Object groups are defined by the DNP3 protocol specification to describe the kind of data that an object contains.

These are the object groups defined by Std 1815-2012:

Object Variation

Objects in each group can occur in multiple object variations. The object variation is determined by the fields that the object contains and the format their data is stored in.

For example, an Analog Input object can occur in the following variations:


An Analog Output Event object can occur in the following variations:

Point Type

Multiple object groups may reference the same point type. Objects with the same index and the same point type contain data for the same point, even if they are of different groups and variations. That is, the Binary Input object with index 1 and the Binary Input Change object with index 1 contain the value of the same binary input point.

These are the point types and their object groups defined by Std 1815-2012:

Single-Bit Binary Input

Double-Bit Binary Input

Binary Output Point Type

Counter Point Type

Analog Input Point Type

Analog Output Point Type

BCD Point Type

Octet String Point Type

Virtual Terminal Point Type

Security Statistics Point Type

Object Index

A DNP3 device will normally have more than one object of each point type.

For example, a DNP3 device might have:

These objects are referenced by indexes starting with zero:

Object Class

Object classes are defined by the user (with certain restrictions) to contain a subset of objects, which then may all be read at once by polling the object class. Class 0 may only contain static objects -- objects that contain a current value. Class 1, Class 2, and Class 3 may only contain event objects -- objects that contain a value from the time when the event occurred.

If an event object is assigned to Class 1 - 3, its corresponding static value will automatically be assigned to Class 0. For example, assigning Binary Output Event 1 to Class 2 will also assign Binary Output 1 to Class 0. A static object that is not assigned to Class 0 can still be read by polling the object group. An event object that is not assigned to Class 1 - 3 will not have its event stored by the device, and therefore cannot be read by polling the object group.

The following object groups may be assigned to Class 0:

The following object groups may be assigned to Class 1 - 3: