DNP3 stack

This is a Python implementation of the DNP3 communications protocol as used for a variety of monitoring and control devices, particularly in the electrical and water industries.

The main goal in writing the stack was to allow testing of DNP3 masters that would normally be infeasible in a testing environment with actual hardware outstations. For example, stress testing with several thousand devices or testing the handling of corner cases or optional parts of the standard that may not be implemented differently on different devices.

The stack contains largely independent implementations of the datalink, transport, and application layers as defined in the DNP3 standard. It has hooks to add a physical layer to handle passing bytes in and out of the stack and a “user” layer that provides application-specific functionality such as controlling the values of inputs.

Source for the stack is not publicly available at this time but is expected to be available in the near future.