WinCC Logging Deadband Absolute Limits and Hysteresis Workarounds

David Krause18 min read
HMI / SCADASiemensTechnical Reference
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

Overview: Deadband in Industrial Process Logging

A deadband (also known as a dead-band, dead zone, or neutral zone) is a deliberate band of input values within which a system produces no change in output. In the context of industrial SCADA and HMI data archiving, a deadband is a threshold-based filter that prevents redundant samples from being committed to the historical database. The intent is threefold: reduce storage pressure on the archive server, minimize network bandwidth consumption between the HMI station and the historian, and clarify trend visualizations by eliminating noise that carries no operational meaning. Every major HMI/SCADA platform implements some form of deadband on its tag logging subsystem, but the semantics differ in ways that have significant practical consequences when you commission a project or migrate from one vendor to another.

In SIMATIC WinCC - the family that spans WinCC V7.x (PCS 7 / Standalone), WinCC Comfort, WinCC Advanced, and WinCC Professional inside TIA Portal - the tag logging engine exposes two independent numeric fields per tag: a High limit and a Low limit. Both are configured in the tag's logging properties dialog, and both can be sourced from either a constant or another HMI tag in the project. The behavior of these fields is the subject of recurring confusion because the documentation refers to them as limits without explicitly stating whether they are interpreted as absolute magnitudes or as deltas relative to the previously archived value. This article documents the actual semantics, demonstrates them with a worked numerical example, explains why the constant-limit mode is often insufficient for real process signals, and provides two field-proven implementations for true hysteresis behavior.

WinCC Tag Logging Architecture

Before drilling into deadband semantics, it helps to understand where deadband sits inside the WinCC runtime data path. The data flow is:

  1. An external PLC tag is updated on a configurable acquisition cycle (typically 500 ms, 1 s, or on demand).
  2. The tag manager evaluates whether the candidate value should be written to the process image.
  3. If the tag is configured for archiving, the tag logging subsystem applies the deadband filter using the High and Low limits against the last archived value.
  4. If the filter passes, a new row is inserted into the archive database (Microsoft SQL Server for WinCC V7.x / Professional, or the file-based archive in Comfort / Advanced for smaller panels).
  5. The Trend, Online Trend, and Table controls read from the archive to render the historical view.

The deadband filter is therefore the boundary between the real-time process image (which always reflects the latest value) and the historical record (which only reflects values deemed significant). A noisy signal can have its process image change thousands of times per minute while only a handful of archive entries are produced per shift.

Deadband Semantics: Absolute vs. Delta in WinCC

The High and Low limits in WinCC tag logging are absolute threshold magnitudes, not deltas from the last archived sample in the sense of a relative change ratio. However, they function as a constant tolerance band applied symmetrically or asymmetrically around the last archived value. The behavior is best illustrated by worked examples.

Worked Example: Symmetric REAL Deadband

For a REAL (IEEE 754 single-precision 32-bit floating point) tag with current process value 40.5:

  • High limit = 0.1 → a new archive entry is created when the current value exceeds 40.5 + 0.1 = 40.6
  • Low limit = 0.1 → a new archive entry is created when the current value falls below 40.5 - 0.1 = 40.4
  • Values within the inclusive range [40.4, 40.6] produce no new archive entry; the archive retains its previous sample.

The numbers 40.4 and 40.6 are the release thresholds. They are not fixed in absolute coordinates - they are recomputed every time a new value is archived, based on that newly archived value. In that sense the High and Low limits are deltas from the last archived value, but they are entered as absolute magnitudes (the constant 0.1) rather than as a percentage or ratio.

Worked Example: Asymmetric INTEGER Deadband

For an INTEGER tag with current process value 1000 and acquisition cycle of 1 second:

  • High limit = 50 → log when value > 1050
  • Low limit = 10 → log when value < 990
  • Range [990, 1050] → no log entry

Asymmetric limits are useful when the process has different noise characteristics on rising vs. falling edges (for example, a fill-level sensor with high-frequency surface ripple when filling but slow drift when draining).

Worked Example: Boundary Behavior at Acquisition Cycle

Suppose the process value sequence at successive 1-second cycles is: 40.5, 40.55, 40.62, 40.7, 40.6, 40.45, 40.3, 40.5 with High = Low = 0.1.

Cycle Value Last Archived High Threshold Low Threshold Logged?
1 40.5 (none - first sample) - - YES (initialization)
2 40.55 40.5 40.6 40.4 NO (inside band)
3 40.62 40.5 40.6 40.4 YES (exceeds 40.6)
4 40.7 40.62 40.72 40.52 NO (inside new band)
5 40.6 40.62 40.72 40.52 NO (inside new band)
6 40.45 40.62 40.72 40.52 YES (below 40.52)
7 40.3 40.45 40.55 40.35 YES (below 40.35)
8 40.5 40.3 40.4 40.2 YES (above 40.4)

Notice that the band moves with each new archive entry. This is the key insight: the limits are deltas from the last archived value, but you enter them as absolute magnitudes.

Parameter Configuration Reference

The deadband configuration fields appear in the tag logging properties dialog of WinCC Explorer (V7.x) or the HMI tag properties in TIA Portal.

Field Data Type Valid Range Default Behavior
High limit value REAL (32-bit float) 0.0 to 3.4E+38 0.0 (disabled) Absolute upper delta from last archived value
Low limit value REAL (32-bit float) 0.0 to 3.4E+38 0.0 (disabled) Absolute lower delta from last archived value
High limit source Enum No limit / Constant / HMI tag No limit Selects whether the limit is a constant or read from another tag
Low limit source Enum No limit / Constant / HMI tag No limit Selects whether the limit is a constant or read from another tag
High limit tag (when source = HMI tag) Tag reference Any REAL or numeric tag in the project - Dynamic high limit, evaluated per acquisition cycle
Low limit tag (when source = HMI tag) Tag reference Any REAL or numeric tag in the project - Dynamic low limit, evaluated per acquisition cycle
Acquisition cycle Enum 500 ms / 1 s / 2 s / 5 s / 10 s / 1 min / On demand 1 s How often the process image is sampled
Archive Tag reference Any configured archive in the project - Target archive for filtered samples

Why Constant Limit Is Insufficient for Hysteresis

A symmetric deadband of ±0.1 around a process value of 40.5 produces an archive entry whenever the process crosses 40.4 or 40.6. The issue arises when the process oscillates repeatedly around one of these thresholds rather than around the previous archived value. Consider a temperature loop where the setpoint is 40.5 °C and the controlled variable hunts between 40.3 and 40.7 due to sluggish PID tuning:

  1. Cycle 1: Value 40.5 → logged as initial sample.
  2. Cycle 2: Value 40.7 → exceeds 40.6 → logged. Last archived is now 40.7.
  3. Cycle 3: Value 40.3 → below new band [40.6, 40.8] → not logged. Wait, the band is now [40.6, 40.8] based on last archived 40.7. 40.3 is below 40.6, so it IS logged.
  4. Cycle 4: Value 40.7 → exceeds new band [40.2, 40.4] (based on last archived 40.3). 40.7 > 40.4 → logged.
  5. Cycle 5: Value 40.3 → below new band [40.6, 40.8] → logged.

The result is every cycle producing an archive entry, because each crossing recomputes the band and the new band always sits on the opposite side of the oscillation. The symmetric constant deadband collapses to a zero-width filter for oscillating signals. To suppress this, you need hysteresis: two different thresholds, one to release on a rising edge and one to release on a falling edge, both measured from the last archived value.

WinCC does not expose a native hysteresis mode. The High and Low limits collapse to a single band per archive entry, with the same magnitude on both sides unless you configure asymmetric constants - and even asymmetric constants do not solve the oscillation problem above because the band still moves with each new entry.

Hysteresis Implementation via Dynamic HMI Tag Selection

The WinCC tag logging dialog exposes a button next to both the High and Low limit fields. Clicking it opens a selection prompt with three options: No limit, Constant, or HMI tag. Selecting HMI tag lets you reference any tag in the project as the dynamic limit source. The runtime evaluates the referenced tag on every acquisition cycle and uses its current value as the new threshold delta.

This converts the static deadband into a dynamic one that can be updated by the PLC, an HMI script, or another tag. To implement hysteresis, follow this procedure:

  1. Create two new internal HMI tags of type REAL: HystHighLimit and HystLowLimit.
  2. In the PLC, maintain a copy of the last archived value (use an initial sample on first cycle, then update via a WinCC acknowledgment mechanism or by reading back from the archive).
  3. In the PLC, compute the next release thresholds based on the last archived value, the desired hysteresis band, and the direction of the next expected transition. Write these to HystHighLimit and HystLowLimit.
  4. In the logged tag's properties, change the High and Low limit sources from Constant to HMI tag, and select the two new tags.

The PLC now has full control over the deadband behavior per cycle. The asymmetry, the band width, and even the direction-dependent release thresholds are all computed in real time.

S7-1500 Structured Text Hysteresis Filter


// Last archived process value (initialized on first scan)
#last_archived : REAL := 0.0;
#initialized : BOOL := FALSE;

// Hysteresis band (asymmetric example)
#hyst_high : REAL := 1.0;   // Log on rising edge when process exceeds last + hyst_high
#hyst_low  : REAL := 0.5;   // Log on falling edge when process falls below last - hyst_low

// Output HMI tags that WinCC reads as dynamic limits
#hmi_high_limit : REAL;
#hmi_low_limit  : REAL;

IF NOT #initialized THEN
    // First pass: seed with current value, force a log by setting limits to 0
    #last_archived := #process_value;
    #hmi_high_limit := 0.0;
    #hmi_low_limit  := 0.0;
    #initialized := TRUE;
END_IF;

IF (#process_value - #last_archived) > #hyst_high THEN
    // Rising transition - arm logging
    #hmi_high_limit := 0.0;   // any change will be logged on next cycle
    #hmi_low_limit  := #hyst_low;
ELSIF (#last_archived - #process_value) > #hyst_low THEN
    // Falling transition - arm logging
    #hmi_high_limit := #hyst_high;
    #hmi_low_limit  := 0.0;
ELSE
    // Inside hysteresis band - suppress logging
    #hmi_high_limit := #hyst_high;
    #hmi_low_limit  := #hyst_low;
END_IF;

// Update last_archived when WinCC acknowledges a new sample
// (via a separate handshake tag or alarm-triggered feedback)

Hysteresis Implementation via On-Demand Trigger

An alternative, often cleaner approach is to remove the deadband filter from WinCC entirely and let the PLC decide when a sample is significant. This uses the on-demand logging trigger.

  1. In WinCC tag logging, set the acquisition cycle to On demand for the affected tag.
  2. Create a trigger tag (BOOL) that is set by the PLC whenever a new archive entry should be produced.
  3. In the WinCC tag logging properties, wire the trigger tag to fire the archive write.
  4. In the PLC, implement the full hysteresis filter on every scan, set the trigger tag to TRUE for one cycle when a release condition is met, and update the last-archived register.

This approach gives you complete control over the hysteresis logic. It also supports edge cases that WinCC's native deadband cannot model: time-based filtering (log at most once per N seconds), rate-of-change filtering (log only when dV/dt exceeds a threshold), or statistical filtering (log only when a running average moves beyond a band).

Ladder Logic Equivalent (S7-300/400)


NETWORK 1: Initialize on first scan
A   M 0.0          // First scan flag
FP  M 100.0        // Rising edge detect
JCN END1
L   MD 200         // Current process value
T   MD 204         // last_archived register
SET
=   M 0.1          // initialized flag
END1: NOP 0

NETWORK 2: Rising transition check
L   MD 200         // process_value
L   MD 204         // last_archived
-R                  // process - last
T   MD 208
L   1.0            // hyst_high
>R                  // > 1.0 ?
JCN NET3
S   M 0.2          // trigger = TRUE
L   MD 200
T   MD 204         // update last_archived
JU END2

NETWORK 3: Falling transition check
NET3: L   MD 204
L   MD 200
-R                  // last - process
T   MD 208
L   0.5            // hyst_low
>R
JCN END2
S   M 0.2          // trigger = TRUE
L   MD 200
T   MD 204
END2: NOP 0

NETWORK 4: Reset trigger after one cycle (WinCC samples on positive edge)
A   M 0.2
R   M 0.2
NOP 0

Comparison: WinCC vs. Other Platforms

While WinCC uses separate High and Low absolute thresholds applied symmetrically or asymmetrically around the last archived value, other SCADA platforms use different models. Inductive Automation's Ignition platform exposes a historical deadband with two style options: Discrete, which logs any change greater than or equal to the deadband magnitude, and Analog, which suppresses changes within a percentage of the tag's engineering range. The Discrete mode is conceptually similar to WinCC's constant deadband but applies the delta as a single magnitude rather than as separate high/low limits.

Platform Deadband Model Directional Split Native Hysteresis Dynamic Limit Source
Siemens WinCC V7.x High and Low absolute limits Yes (independent High and Low) No Yes (HMI tag selection)
Siemens WinCC TIA (Comfort/Advanced) High and Low absolute limits Yes No Yes
Siemens WinCC Professional High and Low absolute limits Yes No Yes
Inductive Ignition Single magnitude (Discrete) or % of range (Analog) No (single magnitude) No Tag property
AVEVA Historian Compression deviation per segment No No Configuration-time only

If you migrate a project from one of these platforms to WinCC, expect to re-tune your filter because the semantics differ. In particular, a single-magnitude deadband of 0.1 in Ignition's Discrete mode corresponds roughly to WinCC's High = Low = 0.1 symmetric configuration, but an Analog-mode percentage deadband must be converted to an absolute delta using the engineering range of the source tag.

Edge Cases and Limitations

  1. Tag initialization: At project start, after a runtime restart, or after archive segment rotation, the first sample is always logged regardless of deadband values. This avoids a "flatline" period in the trend.
  2. Manual archive write from script: A direct write to the archive via VBScript lgSetTagArchive or via the WinCC OLE DB provider bypasses the deadband filter and records immediately. This is the standard escape hatch for forced logging.
  3. Quality code changes: A transition from OPC quality Good (0xC0) to Uncertain (0x40-0x7F) or Bad (0x00-0x3F) may be logged independently of the magnitude check. WinCC treats quality transitions as significant events.
  4. Acquisition cycle interaction: With a 500 ms cycle, the deadband filter runs twice per second. The filter only sees the candidate value at the cycle boundary, so a 50 ms spike inside the cycle is invisible unless another tag is configured to capture it.
  5. Type promotion: Deadband limits apply to the logged tag's data type after any scaling. If you configure a tag as INT and then apply a linear scaling to REAL, the limits apply to the REAL value, not the raw INT.
  6. Archive segment boundaries: At the boundary between two archive segments (typically daily or weekly), the last value of the previous segment becomes the seeding value for the new segment's deadband computation. If you reset the archive, the next cycle starts with no history and logs unconditionally.
  7. Float precision: For REAL tags near the IEEE 754 precision limit (very small or very large magnitudes), the deadband may behave unexpectedly because the addition last + delta can round. Specify delta as a relative tolerance and verify with field tests.
  8. HMI tag cycling: When the limit source is an HMI tag, the runtime re-reads that tag every acquisition cycle. If the HMI tag is on a different PLC connection and that connection is down, the deadband defaults to "no limit" (logged every cycle).

SVG: Deadband State Machine Diagram

The following state diagram illustrates the runtime decision path inside the tag logging filter. Each state represents the relationship between the current process value and the band [last - Low, last + High].

INIT first sample, no history INSIDE |v - last| within band LOG + UPDATE archive write, last := v EXCEEDS HIGH v > last + High BELOW LOW v < last - Low log v > last+H v < last-L return to INSIDE subsequent exceed subsequent fall

Verification Procedures

After configuring deadband - whether using the native constant limit, the HMI tag dynamic limit, or the on-demand trigger workaround - run the following checks before signing off the commissioning.

  1. Trend viewer inspection: Open WinCC Explorer → Tag Logging → Runtime. Force the tag value (via the PLC simulator or a manual override in the tag simulator) to oscillate slowly around the expected boundary. Verify that archive entries appear only on the expected crossings.
  2. Database inspection: Query the archive table directly in SQL Server Management Studio. For a file-based archive, use the WinCC archive export tool. Confirm that sample timestamps align with trigger events and that no entries are recorded when the value stays within the deadband for an extended period (e.g., 10 minutes).
  3. Trigger tag monitoring: For on-demand implementations, monitor the trigger tag in the PLC online view (TIA Portal → Online & Diagnostics, or STEP 7 → Monitor/Modify). Confirm the pulse width is exactly one acquisition cycle and that no spurious triggers occur.
  4. Boundary sweep: With the PLC in stop mode, write a sequence of test values just inside and just outside the band. Use the Watch Table to drive the value step by step. Expected result: only the boundary crossings produce archive entries.
  5. Restart behavior: Stop and restart the WinCC Runtime. Confirm that the next cycle after restart produces an unconditional archive entry (initialization behavior). This is correct and expected.
  6. Quality code change: Force the source PLC tag to return OPC quality Bad for one cycle, then return it to Good. Verify whether the transition is logged (it usually is, independently of deadband).
  7. Segment boundary: Configure the archive to rotate segments more frequently (e.g., every hour) and observe the seam between two segments. The last value of the old segment should seed the deadband in the new segment.

Troubleshooting Matrix

Symptom Likely Cause Diagnostic Resolution
Every cycle produces an archive entry High and Low limits set to 0 (or HMI tag source returning 0) Inspect tag properties dialog Set both limits to a meaningful delta or to No limit
No archive entries are produced at all Acquisition cycle set to On demand but no trigger wired Check archive trigger configuration Wire a trigger tag or change to a time-driven cycle
Archive entry lag behind the process value by several cycles HMI tag source connection polling delay Watch the limit tag in PLC online view Increase PLC polling priority or use a constant limit
Hysteresis workaround still logs every oscillation PLC not updating last_archived correctly Cross-check archive timestamps against PLC timestamp Add explicit acknowledgment handshake between WinCC and PLC
First sample after restart is missing from trend Archive segment rotation deleted uncommitted rows Inspect archive configuration Enable persistent buffering in the archive settings
Real values show step changes every cycle Float precision exhaustion (delta smaller than ULP) Compare delta to engineering range Increase delta to at least 1e-6 × range
High limit field shows the HMI tag icon but value is constant HMI tag selection not propagated to runtime Recompile and download OS Re-download the OS to the HMI panel or PC station

Reference Documentation and Standards

For further reading on the deadband concept in control systems, refer to the Wikipedia entry on deadband, which provides the underlying control-theory definition and illustrates common applications including hysteresis and neutral zones. For WinCC-specific configuration of tag logging and dynamic limit sources, consult the Siemens Industry Online Support portal, which hosts the official WinCC V7.x and TIA Portal WinCC manuals under Documentation → SIMATIC HMI → WinCC. Cross-reference the OPC Quality of Service specification and IEC 61131-3 for the underlying tag semantics, although WinCC does not implement deadband as a standard OPC property.

FAQ

Are WinCC tag logging high and low limits absolute or relative values?

The High and Low limits are absolute magnitudes entered as numeric constants (or referenced HMI tags of type REAL). The runtime applies them as deltas relative to the last archived value, computing the release thresholds as last + High and last - Low on every acquisition cycle.

Can I implement true hysteresis in WinCC tag logging?

Not directly - WinCC does not expose a dedicated hysteresis mode. You can implement it by selecting an HMI tag as the limit source and updating that tag from the PLC, or by switching the tag to on-demand acquisition and letting a PLC trigger tag fire the archive write based on PLC-side hysteresis logic.

What happens on the first sample after a restart or archive reset?

The first sample is always logged unconditionally, regardless of the configured High and Low limits. This guarantees that the trend view is never flatline at project start and that the archive always has a valid seed value for subsequent deadband computations.

Can a script force a logging event that bypasses the deadband?

Yes. Direct writes through the WinCC OLE DB provider, the lgSetTagArchive VBScript function, or the equivalent C-script API write directly to the archive database without invoking the deadband filter. This is the standard escape hatch when you need a forced entry outside the normal filter logic.

How does WinCC deadband differ from Inductive Ignition's historical deadband?

WinCC uses two independent absolute magnitudes (High and Low) applied symmetrically or asymmetrically around the last archived value. Ignition's Discrete deadband uses a single magnitude applied in both directions, and its Analog mode uses a percentage of the tag's engineering range. Both compute against the last archived sample, but WinCC's dual-field model gives finer control over rising-edge vs. falling-edge sensitivity without scripting.

Back to blog