I recently tested DNP3 comms with a simulator (GitHub - stepfunc/dnp3: Rust implementation of DNP3 (IEEE 1815) with idiomatic bindings for C, .NET, C++, and Java · GitHub) to see what's required for backfilling.
One thing that now jumps out at me from this screenshot is the wrong DNP3 data type: g32v5 = 32-bit (IEEE single-precision) floating-point numbers without a time stamp.
For any DNP3 backfilling to work, I found the data types defined in the outstation must be set to vars that have timestamps.
E.g.
- AnalogueInput:
- g32v3 (32bit int + timestamp) or
- g32v5 (float + timestamp)
- BinaryInput:
- g2v3 (value + timestamp)
- BinaryOutput:
- g11v2 (value + timestamp)
- AnalogueOutput:
- g42v3 (32bit int + timestamp)
- g42v7 (float + timestamp)
Other than this, I got mine working by:
- Creating a Tag Group specifically for DNP3 tags with the settings (from user manual)
- OPC UA Queue Size: > 1 (set to the max events to pull in)
- OPC UA sampling interval: 0
- Tag History - Sample Mode: On Change
- Tags in Ignition must use the addresses exposed for the outstation via OPC UA (e.g. [outstation1]BinaryIn); you cannot use the direct "gvi" address (e.g. [outstation1]g32v5i3)
- DNP3 Device settings
- Source Address: set to the Destination/Master address in the DNP3 Outstation - if this is not set, then unsolicited msgs won't be delivered here, and in some (all?) cases, requests for class data won't be responded to at all
- Destination Address: set to the Outstation's DNP3 address
- Class 1-3 polling: set these to the rates that you want to pull in events from these classes which will be stored in history.
- Class 1-3 Unsolicited Event checkboxes: Check these to recieve class events as they happen. (This is not required to receive buffered events, it just hastens value updates)
- Set the event buffer size for each DNP3 data type in the outstation to appropriate values. These determine the max number of events to store in the outstation.
Note: you do not need to check "Allow Back-fill Data" within the tag provider for backfilling to work.