← Articles
Networking/8 min read/ views

How DNP3 Deadbands and Event Variations Decide What Reaches Your Master

The deadband decides whether a change becomes an event; the Group 32 variation decides its size. Set both wrong and you flood the buffer or lose time.

NetworkingSCADATroubleshootingCommissioningTags

Two knobs that decide your event traffic

DNP3 outstations report analog values two ways: in a static (Class 0) poll that returns the current value from Group 30, and as events (Class 1/2/3) that fire when a value changes and land in Group 32. The class-poll and unsolicited-response notes cover when the master asks. What follows is the outstation side of analogs: when a change is worth an event, and what format that event takes.

Those are two separate settings that people constantly conflate:

  • The deadband decides whether a change is big enough to generate an event at all.
  • The event variation decides how that event is encoded — integer or float, with or without a timestamp, 16-bit or 32-bit.

Get the deadband wrong and you either flood the event buffer or miss real movement. Get the variation wrong and your timestamps are useless or your resolution is gone. They are independent, and you tune them independently.

What an analog deadband actually is

An analog deadband is the amount a value must move from its last reported value before the outstation queues a new event. It is not a filter on the live value and it does not affect the Class 0 static read — a Class 0 poll always returns the current value regardless of deadband.

The subtlety that trips people up: the deadband is measured against the last reported value, not the last sampled value. A value that drifts slowly, one tiny step at a time, still generates an event every time the accumulated drift crosses the deadband. It does not need to jump the whole deadband in one sample.

Deadband is configured per point, in engineering-value or raw-count units depending on the device. In DNP3 it is a real object — Group 34, the Analog Input Reporting Deadband, with variation 1 for a 16-bit value, variation 2 for 32-bit, and variation 3 for single-precision float. Some masters can read and even write it at runtime (a Group 34 write with function code 2), which is worth knowing when a vendor tool hides the setting but the point is clearly flooding. The unit basis matters:

  • On a device that applies the deadband in raw counts, a deadband of 10 counts means something different on a 0–100 kPa range than on a 0–10000 kPa range.
  • On a device that applies it in engineering units, you set it in the units the operator thinks in, which is far less error-prone.

Always confirm which one your outstation uses before you copy a deadband value from another point. This is the single most common analog-event misconfiguration.

Setting deadbands that match the signal

The right deadband comes from the signal, not from a house default. A pressure that swings 2% on normal noise and a tank level that creeps over hours need completely different deadbands even at the same 0–100% scale.

Signal behaviorDeadband too smallDeadband too large
Noisy analog (flow, pressure)Event flood from noiseReal excursions missed
Slow drift (tank level, temperature)Steady trickle of eventsTrend looks like coarse steps
Step-like (setpoint, position)Fine, events are realSmall real moves lost

Rules that hold up in the field:

  • Set the deadband just above the noise band of the signal, so noise stays quiet but any real move reports.
  • If you want a smooth trend, remember the historian only sees reported values. A big deadband makes trends look like staircases because nothing was reported between steps.
  • Do not set deadband to zero on a noisy analog "to be safe." Zero deadband on a jittering signal is the classic cause of an event buffer that overflows and starts discarding the events you actually care about.

Event variations: format and size

Once a change clears the deadband, the outstation queues an event. The variation number on the analog input event object (Group 32) decides how that event is encoded. IEEE 1815 lays them out plainly: variation 1 is 32-bit integer with flag, variation 2 is 16-bit integer with flag, variations 3 and 4 add a 48-bit absolute timestamp to the 32- and 16-bit integers, variation 5 is single-precision float with flag, variation 7 is single float with flag and time, and variations 6 and 8 are the double-precision float pair. The choices that matter in practice collapse to three questions:

  • With time vs. without time. A no-time variation (32/2 or 32/1) forces the master to stamp the event on arrival, which loses the outstation's own timing and defeats the whole point of buffered events on a slow link. On any link with latency or store-and-forward, use a with-time variation — 32/3, 32/4, or 32/7.
  • Integer vs. floating point. The integer variations are compact but clip large or scaled values; the float variations (32/5 through 32/8) carry full resolution at the cost of more bytes per event — 32/7 is 11 bytes against 3 for a bare 32/2. Match the variation to the point's real range and resolution.
  • 32-bit vs. 16-bit integer. A 16-bit analog event (32/2 or 32/4) silently wraps or saturates a value that exceeds ±32767. If a point can exceed a signed 16-bit count, it needs a 32-bit or float variation.

The master requests a default variation, but the outstation's configured variation is what actually gets sent for events. Mismatched assumptions here produce values that look plausible but are wrong — a truncated 32-bit value that fits in 16 bits looks like real data until the process moves past the wrap point.

The reason event variations exist at all is to preserve when something happened, not just that it happened. On a clean LAN you might get away with untimed events because the master reads them milliseconds later. On a radio, a cellular backhaul, or any store-and-forward path, events can sit in the buffer for seconds or minutes.

If those buffered events carry no timestamp, the master stamps them all at the moment it finally reads them, and a whole sequence of changes collapses onto one arrival time. Your event order survives but your timing is fiction. That breaks sequence-of-events analysis and makes any trend rebuilt from events wrong.

Use a with-time variation for any analog whose timing you care about, and make sure the outstation clock is synchronized — a timestamped event is only as good as the clock that stamped it, which is why time synchronization and event variation are commissioned together.

How deadband and variation load the event buffer

The two settings combine to determine event buffer pressure, and the buffer is a fixed size. Every event that clears the deadband takes a slot until the master reads it, and a with-time floating-point event takes more bytes than an untimed 16-bit one.

The failure mode: a too-small deadband on a noisy point generates events faster than the master polls them, the per-point (or per-outstation) event buffer fills, and the outstation starts discarding. Depending on device behavior it either drops the oldest events or sets an overflow/buffer-full indication. Either way you lose data, and it is usually the data around a real disturbance — because a disturbance is exactly when a noisy point generates the most events.

To keep the buffer healthy:

  • Size deadbands so the sum of event rates across all points stays well under what the poll cycle can drain.
  • Watch the event buffer overflow indication (IIN bit / device diagnostic). A buffer that overflows during upsets is telling you the deadbands are too tight or the poll rate too slow.
  • Remember that widening a deadband and slowing the poll both reduce buffer pressure, but they trade different things — deadband trades resolution, poll rate trades latency.

Commissioning checklist

Walk analogs point by point; a house default applied to every analog is how you end up with both floods and blind spots on the same outstation.

  1. Confirm whether the outstation applies deadband in raw counts or engineering units, and set values in the right unit.
  2. Measure or estimate each analog's noise band and set the deadband just above it, not at zero and not at a copied default.
  3. Choose an event variation with time for any analog whose timing matters, and confirm the outstation clock is synchronized.
  4. Match integer vs. float and 16- vs. 32-bit variation to the point's real range and resolution; verify no point can exceed its variation's range.
  5. Confirm the master's requested default variation and the outstation's configured variation agree, so events are not silently truncated.
  6. Estimate the total event rate across all points and check it against how fast the poll cycle drains the buffer.
  7. Enable and trend the event buffer overflow indication, and force an upset in test to confirm the buffer holds during the worst case, not just at idle.
  8. Record deadband value, unit basis, event variation (as Group 32 variation number), and class assignment next to each analog in the point map.

If you only check one thing after commissioning, force an upset and watch the event buffer. Idle behavior tells you nothing — the buffer overflows during the disturbance, which is exactly the window you'll be asked to reconstruct later.