Ignition Historical Deadband: It Is a Tag Property, Not Config

Patricia Callen8 min read
HMI / SCADAOther ManufacturerTechnical 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

The chart shows a progressively changing line where the process value should hold until the next sample, or it shows step transitions where analog interpolation is required. The failure usually begins upstream of the chart: the configuration code treats an omitted historicalDeadbandStyle key as missing metadata even though the tag has an effective value.

Follow the signal chain. The tag supplies a process value and an effective history configuration. The history subsystem applies that configuration, while the view reads the metadata and selects how the PowerChart renders the stored samples. Reading only serialized overrides breaks that chain for defaulted and inherited UDT properties.

Why does the configuration dictionary omit the deadband style?

system.tag.getConfiguration reports stored tag configuration, not a fully expanded set of effective property values. Properties at their defaults can be absent. A property inherited by a UDT instance can also be absent when the instance has no local override.

This omission has a second state that can look contradictory. If an engineer changes the deadband style away from its default and later selects Auto, the tag can retain an explicit override. In that state, system.tag.getConfiguration may return Auto. If the override is removed entirely, the key disappears again. Therefore, the presence of Auto means an explicit configuration entry exists; absence does not mean the tag lacks a deadband style.

The recursive argument does not turn the result into a resolved-property snapshot. For example, calling system.tag.getConfiguration(path, True) can traverse the requested configuration structure while still omitting properties supplied by defaults or UDT inheritance.

Which reading should the first check use?

Read the effective tag property directly. In a view, use indirect bindings to {1}.historicalDeadbandStyle and {1}.dataType, where {1} is the selected tag path. In a script, request both properties with one blocking read:

path = selectedTagPath
values = system.tag.readBlocking([
    path + '.historicalDeadbandStyle',
    path + '.dataType'
])

deadbandStyle = values[0].value
dataType = values[1].value

Check the returned quality before using either value. A good read gives the effective property presented through the tag system, including the value applicable to a UDT instance without a local deadband override. A bad or missing read points to the selected path, property access, provider connectivity, or permissions; changing chart interpolation cannot repair that condition.

Look at the trend first, then capture the metadata from the exact tag that feeds it. This keeps the diagnosis tied to the same signal path instead of a template definition, sibling instance, or similarly named member.

Signal Read source Wrong-value symptom
Process samples Historical data used by the PowerChart The trend itself contains unexpected holds, transitions, or gaps; investigate acquisition and history before display selection.
historicalDeadbandStyle Direct tag-property binding or system.tag.readBlocking An analog tag can be rendered step-after, or a discrete-behavior tag can be drawn progressively.
dataType Direct tag-property binding or the same blocking read Integer-versus-floating-point classification is wrong, so the chart policy selects the wrong branch.
Stored override system.tag.getConfiguration An absent key is misread as an absent effective value, especially on UDT instances.
Chart interpolation choice Dynamically generated PowerChart pen configuration Stored points are valid, but the line between them communicates the wrong process behavior.

What does the configuration check tell you?

After reading the effective property, call system.tag.getConfiguration(path, False) when the editor needs to know whether the selected tag stores a local value. Treat this as an override inspection, not as the primary source for the dropdown's displayed value.

  1. If the direct read returns a value and the configuration dictionary contains historicalDeadbandStyle, the tag has a stored entry. The entry might equal the default because changing away from the default and back can preserve the override.
  2. If the direct read returns a value but the dictionary omits the key, the value comes from the applicable default or inheritance path. Display the direct-read value and mark the editor state as inherited or not locally overridden.
  3. If neither method provides a usable value, validate the tag path and direct-property read before building fallback logic. A manually supplied default can hide a broken read and drive the chart down the wrong branch.

This distinction matters during writes. Setting the dropdown to the same text currently shown is not necessarily a no-op: writing that value to an inherited UDT member can create a local override. If the operator intends to follow the UDT definition, use the configuration workflow that removes the override instead of writing Auto merely because it looks like a default.

How should backend values map to the dropdown?

Bind the user-facing choices to the backend tokens rather than assuming the label and stored value always match. The observed mappings are:

  • Auto maps to the visible Auto selection.
  • Discrete maps to the visible Discrete selection.
  • Analog_Compressed maps to the visible Analog selection.

The Analog case is the trap: writing the display label Analog does not reproduce the observed backend token Analog_Compressed. Keep a label-to-token map in the popup or view model and reverse that map when loading the dropdown.

Apply the same discipline to other history settings. A minimum sample-time unit presented as milliseconds, seconds, or minutes can appear in configuration as MS, SEC, or MIN. Inspect the applicable property definition and its enumeration when expanding the editor. Property lists identify names and types; the type's enumeration identifies valid values.

Property names can also appear in different capitalization styles in documentation and runtime configuration. Use the runtime property token required by the scripting or binding context, such as historicalDeadbandStyle, rather than mechanically copying a TitleCase field name.

How should a UDT instance drive PowerChart interpolation?

Use the effective tag properties as inputs to one explicit display policy. For the stated policy, select curved or linear rendering only when the data type is floating point and the effective deadband style is Analog_Compressed. Select step-after for every other combination, including integer data, Discrete, and any combination that fails the analog test.

Auto requires a deliberate branch. It is a valid returned token, but it is not the same token as Analog_Compressed. If the application rule requires an explicitly analog tag before choosing progressive rendering, Auto belongs on the step-after branch. Do not infer analog behavior merely because the value's data type is floating point; a floating-point signal can still represent states that should hold between samples.

The chart does not change the stored samples when it changes interpolation. It changes the visual connection between them. Progressive rendering implies movement between timestamps, while step-after communicates that the last recorded state remains in force until the next point. Tuning the display does not fix an incorrect tag path, history configuration, or metadata read.

How can one configuration popup handle every selected tag?

Keep selection, reading, mapping, and writing in one reusable popup rather than attaching logic to individual tags. Pass the selected tag path into the view, then point the indirect bindings or one central script at that path.

  1. Read historicalDeadbandStyle and dataType directly to populate the effective state.
  2. Read system.tag.getConfiguration separately to determine whether the deadband property has a stored local entry.
  3. Convert Auto, Discrete, and Analog_Compressed into the dropdown's display labels.
  4. Track the initial effective value, initial override state, and requested value independently. This prevents an unchanged inherited value from becoming an accidental override.
  5. When the requested token differs and a local override is intended, build an update containing historicalDeadbandStyle and pass it through the centralized system.tag.configure operation.
  6. When inheritance is intended, remove the local override through the tag-configuration workflow rather than writing a token that only resembles the current default.

If the popup also edits other history properties, a manually generated defaults dictionary can fill fields omitted by system.tag.getConfiguration. Do not let that dictionary supersede a successful direct property read. Defaults can describe the base case, while direct reads describe the effective state of the selected tag.

What procedure verifies the resolving branch?

  1. Choose a chart pen with the reported rendering problem and record its exact tag path.
  2. Inspect the historical samples and timestamps. If the stored values themselves are wrong, stop the display diagnosis and correct the acquisition or history path.
  3. Read historicalDeadbandStyle and dataType directly from that tag. Record the values and read quality.
  4. Read the tag configuration with system.tag.getConfiguration. Classify the deadband property as a stored override when the key exists or inherited/defaulted when the direct read succeeds and the key is absent.
  5. Apply the dropdown mapping, using Analog_Compressed for the Analog selection.
  6. Apply the chart rule to both effective properties. Under the stated rule, floating point plus Analog_Compressed selects curved or linear rendering; every other combination selects step-after.
  7. If an edit is required, re-read the effective and stored states immediately before calling system.tag.configure. Submit only fields whose intended state has changed.
  8. Read both properties again after the write. Confirm that the direct value matches the requested token and that the presence or absence of an override matches the operator's intent.
  9. Rebuild or refresh the dynamic pen configuration, then compare the same historical interval. The values and timestamps should remain unchanged while the line between points follows the selected rendering policy.

FAQ

What happens if historicalDeadbandStyle is missing from getConfiguration?

The property is not stored as a local configuration entry. Read path + '.historicalDeadbandStyle' directly to obtain the effective default or inherited value.

What happens if Auto appears even though it is the default?

The tag can retain an explicit override after being changed away from the default and then back to Auto. Removing the override makes the key disappear from system.tag.getConfiguration.

What happens if I write Analog instead of Analog_Compressed?

The visible label and backend token do not match for that selection. Map the Analog dropdown choice to Analog_Compressed before passing the update to system.tag.configure.

What happens if the UDT instance has no deadband override?

system.tag.getConfiguration can omit the key, while a direct binding or system.tag.readBlocking still returns the effective value. Writing the displayed value can create a local instance override, so keep inherited and explicit states separate.

What happens if the direct property read still fails?

Stop changing chart interpolation and validate the exact provider path, property access, read quality, and remote-provider connectivity. If a known-good tag path also fails or runtime behavior differs from the documented property model, collect the failing path pattern, returned values, configuration output, and installed Ignition version, then escalate to official Inductive Automation support.

Back to blog