DNP3 uses 27 basic function codes to exchange information between Masters (think Control Center) and Remotes (think pump yard). Some of those function codes enable a Master to request and receive status information from a Remote. Other function codes enable a Master to determine or adjust the configuration of a Remote.
Several function codes are defined for a DNP3 Master to control the Remote itself or equipment co-located with the Remote. One function code is provided to enable the Remote to respond autonomously with an Unsolicited Message to particular events that occur in its installation space.
For example, function codes can enable a:
As you can see, most of the messages are issued by the DNP3 manager to the DNP3 remote. However, because the Unsolicited Message is capable of being initiated by a Remote, it is typically used to report alarms. This notifies the DNP3 Master as soon as an alarm condition occurs, instead of waiting for the next request.
Be sure you understand the key limitation of all unsolicited ("asynchronous") alerts: there's no "keep alive" function. For polled ("synchronous") protocols, the manager polls the agent. This guarantees that a disabled agent will be promptly identified at the next polling cycle.
Contrast this with what happens in an unsolicited-message protocol: a disabled agent remains silent. This silence is identical to an active agent reporting that "I have no problems right now." That's why, whenever possible, you should look for a DNP3 master that has some ability to routinely query agents for their status. This mitigates one of the major threats from using DNP3.