DNP3 Tags not backfilling data between class polls

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.