docs(alarms): #641 review follow-ups (comment carry, AbCip record, projector ack, residuals)
Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe
This commit is contained in:
+11
-4
@@ -73,7 +73,7 @@ transition.
|
||||
The node manager now carries native state across the rebuild itself:
|
||||
|
||||
1. `RebuildAddressSpace` captures each **native** condition's live state off the **node** — Active, Acked,
|
||||
Confirmed, Severity, Message, Quality, Time, `ActiveState.TransitionTime` — before clearing. Reading the
|
||||
Confirmed, Severity, Message, Comment + ClientUserId, Quality, Time, `ActiveState.TransitionTime` — before clearing. Reading the
|
||||
node, not a host-side cache, is what keeps a **client's** acknowledgement: the SDK applies it to the node
|
||||
and neither the driver nor `NativeAlarmProjector` ever sees it.
|
||||
2. `MaterialiseAlarmCondition(isNative: true)` for the same id in the same apply restores it. **Quality is
|
||||
@@ -84,7 +84,8 @@ The node manager now carries native state across the rebuild itself:
|
||||
3. `IOpcUaAddressSpaceSink.CompleteAddressSpaceApply`, which `OpcUaPublishActor` calls at the end of
|
||||
**every** apply (in a `finally`), reports **one** condition event per restored condition — after the
|
||||
notifier wiring, so the raw folder, every referencing equipment folder and `i=2253` items all get it,
|
||||
stamped with the original `Time`, not the deploy time — and **discards** every capture no materialise
|
||||
stamped with the original `Time`, not the deploy time (or the node's newer `Time`, if a client method call
|
||||
reported in the restore→complete window — that window can yield a second, state-correct event) — and **discards** every capture no materialise
|
||||
claimed, so a later deploy re-adding the same RawPath gets a fresh node (no resurrection). A kind swap
|
||||
(native ↔ scripted on one id) is never restored. Node-only: no `/alerts` row, no historian record.
|
||||
|
||||
@@ -95,10 +96,16 @@ Two companions keep the host and driver in step with the carried node:
|
||||
project `Active=false`, and the next Clear of an unacknowledged one project `Acked=true` — after *any*
|
||||
deploy, rebuild or not.
|
||||
- MTConnect's "last told" record is pruned to the conditions that **left** the subscribed set rather than
|
||||
cleared on any set change; re-raising a surviving (carried) condition would un-acknowledge it.
|
||||
cleared on any set change; re-raising a surviving (carried) condition would un-acknowledge it. AbCip's ALMD
|
||||
last-seen `InFaulted` record is likewise driver-owned and pruned to the set, so a re-subscribe (every
|
||||
reconnect / set change) does not re-raise a still-faulted alarm.
|
||||
- A routed **client** acknowledgement marks the projector's prior state acknowledged
|
||||
(`NativeAlarmProjector.MarkAcknowledged`), so a later driver Clear does not project it unacknowledged.
|
||||
|
||||
Accepted residual: a condition that clears at the device while the rebuild runs is restored active until
|
||||
the driver's Clear arrives — which it does, because the driver's own record still holds it active.
|
||||
the driver's Clear arrives — which it does, because the driver's own record still holds it active. The capture
|
||||
is keyed by RawPath only, so a tag deleted and re-created under the same RawPath in one deploy inherits the old
|
||||
condition's state until its next transition.
|
||||
|
||||
## Condition event identity fields (what a client reads on the wire)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user