Moving the hour meter to a Run-Always Expression Item separates its execution from the transaction-group trigger and provides the practical workaround for the reset failure observed after upgrading from 7.9.10 to 8.0.1. The Retentive setting is not the controlling issue when the same tag drives both the hour meter and the group trigger.
Reset decision path
- Trigger the transaction group and read the hour-meter value at the start of the new transaction. If it begins at zero, the reset lifecycle is working; investigate any downstream display, logging, or query that shows an older value. If it carries the previous transaction's accumulated value, continue to the configuration check.
- Open the hour-meter item configuration and confirm that
Retentiveis not selected. Do not move on until the saved configuration also shows it cleared. If it is selected, clear it, save the group, and repeat the trigger test. If it was already cleared, retention is not the resolving branch. - Compare the hour-meter driving tag with the transaction-group trigger. If they are different signals, inspect the group execution and reset sequence before changing item placement. If they are the same tag, treat trigger coupling as the primary diagnostic branch.
- Move the hour meter to a
Run-Always Expression Item. Confirm that the expression produces the intended run state independently of the transaction group's triggered execution. - Run two complete trigger cycles. Do not accept the workaround after only one cycle: the first establishes accumulated state, and the second proves whether the next transaction starts from zero.
Version and configuration baseline
| Check | Known condition | Decision |
|---|---|---|
| Previous version | 7.9.10 |
The hour meter restarted from zero as soon as the group was triggered. |
| Version showing the symptom | 8.0.1 |
The next triggered transaction could retain the preceding hour-meter value. |
| Retention setting |
Retentive not selected |
The symptom cannot be corrected merely by clearing a setting that is already clear. |
| Signal relationship | One tag drives the hour meter and triggers the group | Separate the timer's execution from the trigger boundary. |
| Tracking identifier | BUG-14000 |
Preserve a reproducible project backup and test future software revisions before removing the workaround. |
The intended hour-meter behavior remains a reset between non-retentive transaction executions. The installation-specific regression is bounded to an upgrade from 7.9.10 to 8.0.1; that observation does not establish that every 8.0 release or every transaction-group configuration is affected. Record the exact installed version shown by the gateway before comparing results.
Trigger-coupling mechanism
A triggered transaction group has an execution boundary: it evaluates the trigger, processes its items, and writes or updates the transaction as configured. An hour meter also carries timing state while its driving condition is active. When one changing tag supplies both roles, its transition defines the group boundary and changes the timer input during the same execution event.
Retention and trigger coupling control different behaviors. Clearing Retentive requests non-retained timer state across executions. It does not remove ambiguity created when the timer's input transition is also the event that starts the group. A version-dependent change in evaluation order, item initialization, or state transfer can therefore expose the previous accumulated value even though retention is disabled.
The decisive test is signal separation, not repeated toggling of Retentive. If an independently executed hour meter resets correctly while the group-bound item does not, the database destination and the physical tag are not the first suspects. The failure lies at the interaction between item lifecycle and triggered group execution.
Run-always workaround procedure
- Save a gateway backup containing the failing configuration. Label it with the installed software version and preserve the original group long enough to reproduce the problem.
- Record the current hour-meter source, expression, units, and destination mapping. These fields must remain functionally equivalent after the move.
- Create or relocate the hour meter as a
Run-Always Expression Item. Configure its expression to follow the intended running condition rather than depending on the transaction group's one-time trigger evaluation. - Remove or disable the original group-bound hour-meter calculation so that two items do not calculate or write competing values. Confirm that only the intended item supplies the logged hour-meter result.
- Save the configuration and observe the run-always item before triggering the group. It must update according to its driving condition while the group is otherwise idle.
- Trigger the group, allow a measurable value to accumulate, end the cycle, and trigger it again. Confirm the new transaction begins at zero before approving the change.
This workaround changes the execution context, so review the destination mapping carefully. Relocating the calculation without preserving how its result reaches the transaction can fix the timer lifecycle while leaving the logged field stale or unmapped.
Verification criteria
| Test point | Passing observation | Failure meaning |
|---|---|---|
| Idle evaluation | The run-always item follows its driving condition outside a group trigger. | The expression or source mapping is incorrect. |
| First transaction | The meter starts at zero and accumulates while the run condition is active. | The timer did not initialize or is using an unintended state source. |
| Second transaction | The displayed and logged meter value starts at zero again. | The reset defect remains or another retained state path exists. |
| Stopped condition | The value does not accumulate while the driving condition is inactive. | The run expression has the wrong polarity or source. |
| Recorded result | The stored transaction matches the observed item value. | Inspect destination mapping, write timing, and duplicate writers. |
Capture timestamps and meter values immediately before the first trigger, during accumulation, after the cycle ends, and immediately after the second trigger. This sequence distinguishes a failed reset from a display that has not refreshed or a destination that still contains the prior record.
Recurring diagnostic pitfalls
- Testing only one trigger: A reset-between-transactions defect requires two transactions. One cycle cannot prove that prior state was discarded.
-
Treating retention as the only state control: An unchecked
Retentiveoption does not decouple the hour-meter input from the group trigger. - Changing several fields together: Move the hour meter first while preserving its source and mapping. Multiple simultaneous changes destroy the comparison needed to identify the resolving branch.
- Reading only the operator display: Compare the live expression item, group value, and stored transaction. A stale display and a failed timer reset produce similar symptoms but require different corrections.
- Removing the workaround after an upgrade without testing: Restore the original topology only in a controlled copy, then execute the same two-cycle acceptance test against the new software revision.
FAQ
How do I reset a transaction-group hour meter to zero?
Clear Retentive, save the configuration, and test two trigger cycles. If the same tag drives the hour meter and triggers the group, move the meter to a Run-Always Expression Item and repeat the test.
How do I tell whether BUG-14000 affects my project?
Record the installed version, accumulate a value in one transaction, then start a second transaction. A non-retentive meter that carries its prior value across the second trigger matches the BUG-14000 symptom observed in 8.0.1.
How do I test whether the trigger tag causes the reset problem?
Compare the group's trigger with the hour-meter driving tag. If they are the same, place the meter in a run-always execution context; a successful two-cycle reset after that change isolates trigger coupling as the cause.
How do I verify the Run-Always Expression Item is working?
Observe it while the transaction group is idle. Its value must follow the run condition independently, stop accumulating when that condition is inactive, and supply the intended transaction field.
How do I complete the final hour-meter verification?
Trigger one transaction, allow the meter to accumulate, end it, and trigger a second transaction. Approve the workaround only when the live item and the newly stored transaction both begin at zero on that second trigger.