In this Ignition project, changing Cp updates M but leaves the small htMultiplier value stale until the tag is reapplied; reducing the expression tag deadband to 1e-6 corrected the behavior.
Deadband and scan-class approaches
Compare the likely causes before changing the tag group. The decisive distinction is whether the expression is being evaluated but its small change is suppressed, or whether its inputs are not being observed at the expected rate.
| Approach | What it changes | When it fits | Decision for this case |
|---|---|---|---|
Reduce htMultiplier deadband |
Reduces the change threshold that can suppress reporting of a small result change. | Use when the expression’s value changes by less than its deadband, particularly when the result magnitude is small. | Recommended. The reported result was on the order of 1e-5; setting the deadband to 1e-6 resolved the observed update. |
| Change the scan class or tag group | Changes polling or evaluation scheduling for tags assigned to that group. | Investigate when a source tag itself is stale, or when observed updates arrive at an unexpected cadence. | Not the first fix here: M and other dependent tags already updated after Cp changed. |
| Open the tag editor and apply | Forces an edit/apply action on the affected tag instance. | Useful as a diagnostic observation that the tag can produce a refreshed result when reapplied. | Not a durable operating procedure. It masks the update problem rather than correcting the threshold. |
Keep the deadband adjustment local to the affected expression unless measurements show that other tags also need different thresholds. A blanket reduction increases the amount of reported value change and can add unnecessary downstream updates.
Deadband adjustment procedure
-
Record the existing configuration. In the tag editor, inspect
htMultiplierand note its expression, deadband setting, and tag group or scan class. Confirm thatCpis the value being changed and thatMresponds to that change. Do not alter scheduling while collecting this baseline. -
Observe the result before forcing a refresh. Change
Cpthrough the normal project workflow and readMandhtMultiplierfrom the tag browser or the project’s normal diagnostic view. Record the displayed values and update indicators available in that view. Avoid opening and applying thehtMultiplierinstance during this test, because that would confound whether the normal dependency update worked. -
Compare the result delta with the configured deadband. For two consecutive
htMultipliervalues, calculateabs(new_value - old_value). Compare that difference with the configured threshold, keeping the tag’s units and the interpretation of its deadband in mind. A small result near1e-5can change by less than a larger deadband even though the upstream calculation has changed. -
Set the expression deadband to
1e-6. Edit thehtMultipliertag’s deadband setting and apply the change. LeaveCp,M, the expression, and the scan class unchanged for this test. The project that resolved this symptom used this deadband value. -
Repeat the same input change. Change
Cpagain through the normal workflow. ReadMandhtMultiplierwithout reopening the tag editor. Confirm thatMchanges and thathtMultipliernow reflects its recalculated value. -
Test both small and larger changes. Repeat with representative
Cpchanges that produce differenthtMultiplierdeltas. Confirm the expression reports changes that matter to the application, and inspect whether the lower threshold causes excessive downstream updates. If the calculated delta still falls below1e-6, capture the actual values and reassess the required threshold instead of assuming this value fits every operating range.
Expression dependency and threshold mechanism
The calculation chain is Cp → M → htMultiplier. The observed behavior isolates the failure downstream of M: changing Cp updates M, and other expressions such as A, B, and C that depend on M also update. That pattern makes a missing Cp update or a generally stalled tag group less likely than a threshold applied to htMultiplier.
A deadband suppresses recognition or reporting of changes smaller than a configured threshold. A calculated tag can therefore be mathematically responsive while consumers see no value-change update when the delta is under that threshold. This matters especially when the expression result itself is small: its absolute magnitude is not the same thing as the change between successive results. Inspect the actual difference between readings, not only the displayed value’s order of magnitude.
Changing Cp and seeing M update does not alone prove that htMultiplier is wrong. Follow the dependency chain and test the final expression without forcing a manual apply. If lowering the deadband makes that last link update, the deadband—not the scan schedule—was the operative issue.
Scan-class diagnostic gates
A scan class or tag group controls when tags are polled or evaluated according to their configuration. It is a reasonable investigation only when the input itself is delayed, a source tag is not changing as expected, or update cadence is inconsistent across tags that share the group. It is a poor first adjustment when the intermediate and sibling expressions already respond promptly to the same input change.
| Observation | Likely area to inspect | Next check |
|---|---|---|
Cp changes but M does not |
Input update, expression dependency, or scheduling | Read Cp directly, inspect the M expression and its dependencies, then compare their tag-group configuration and observed update cadence. |
M, A, B, and C update, but htMultiplier does not |
Specific expression result or deadband | Measure consecutive htMultiplier values and compare their difference with that tag’s threshold. |
htMultiplier changes only after opening and applying its tag |
Forced edit obscures the normal update path | Repeat the test without editing the tag and verify the deadband configuration directly. |
Do not change scan timing simply to make a small value appear more responsive. Faster evaluation cannot by itself make a delta exceed a deadband. If the source and intermediate values arrive on time, establish the threshold first; revisit scheduling only if timestamp or cadence observations point to a separate delay.
Numerical threshold selection
Use measured values rather than guessing from the name or units of the tag. For each test, record the old result, new result, and absolute delta:
delta = abs(htMultiplier_new - htMultiplier_old)
Then compare delta with the configured deadband. In the reported case, htMultiplier was on the order of 1e-5, and the working threshold was 1e-6. These values describe that case; they are not a universal setting for every model or operating range. The threshold must be low enough to pass changes that matter, but not so low that inconsequential numerical variation produces unwanted updates.
If the result has a meaningful operating range, test across that range, including the smallest change that the application needs to detect. Keep enough displayed precision or use a diagnostic readout capable of exposing the actual value; rounded display text can hide a delta and lead to a wrong conclusion. Check any downstream calculations or displays that subscribe to htMultiplier after changing its deadband.
UDT template references and dynamic instances
The template issue is separate from the expression update issue. A Brick structure containing ten BrickNodes raised a design need to bind child UDT tags to template objects while reusing a template for multiple instances. The practical change described was to use indirect tag references in the templates for the brickNode and brick structures, rather than hard-coding child tags from one existing instance.
For a reusable view, parameterize the instance path and resolve child references relative to the selected Brick instance. Verify the binding against more than one instance: each displayed Brick must resolve its own child nodes, not continue to show the BrickNodes from a fixed instance such as barrelBrick. Keep this binding change independent of the deadband test so a UDT path correction does not obscure whether htMultiplier now reports small changes.
FAQ
How do I fix an Ignition expression tag that does not update?
Compare the expression’s value change with its configured deadband. In the described case, setting htMultiplier deadband to 1e-6 made the small result update normally.
How do I know whether Ignition deadband is hiding a value change?
Record two successive values and calculate abs(new_value - old_value). If the delta is below the tag’s deadband and upstream tags update, lower the affected expression’s threshold and retest without manually applying the tag.
Should I change the scan class when one expression tag is stale?
Not as the first step when M and sibling expressions already respond to Cp. Check source update cadence and tag-group configuration only if those readings show scheduling delay.
How do I reuse a Brick template for multiple UDT instances?
Use indirect tag references for the brick and brickNode template bindings, then test the template against multiple instances and confirm that each resolves its own child tags.