Alarms

The alarm editor: identity and address, the condition, the Behavior card with priority, notification, delays, message and acknowledge, the State rail, the state machine, annunciation, and Acknowledge and Ack all.

View as Markdown

An alarm watches one Boolean condition and drives an acknowledge state machine, so a condition that mattered can never come and go unseen. Select an alarm under the Alarms root of the Logic column (or create one with New… > New alarm) to open its editor; reading needs View logic, editing Configure logic, acknowledging Operate logic.

The header shows the alarm mark (ringing while the alarm is active), the name, the line "A condition this station watches: while it holds, the alarm announces itself and waits to be acknowledged.", a pill with the current state (Normal; Active, unacked; Active, acked; Cleared, unacked) and a Disabled pill while the alarm is off. The form column holds IDENTITY, CONDITION and BEHAVIOR; the rail holds STATE.

Identity

Field What it is Values / default Effect
Name The display name; its sanitized segment is the address under Alarms. Free text; a new alarm is AlarmN. Commits through the safe rename like a variable's name: a preview of the references that follow, Enter or blur to commit, "Alarm renamed and N references updated." Renaming preserves the live state and a pending acknowledge. A colliding name is refused in place.
Address line Alarms.<folders>.<segment>, echoed under the name. Read only. Expressions and scripts read the alarm's state through it (Alarms.HighLevel.IsActive).
Description (optional) Free text. Empty. None.

Condition

The CONDITION card is the script editor with the hint "A single Bool JavaScript expression over the address space, e.g. Connector.Simulated.Pump.Temp.ValueToReal() > Variables.SetpointHigh.ValueToReal(). Conditions cannot reference other alarms." The condition follows every expression rule: one read-only expression, static addresses, the quality gate, the 250 ms limit. It may reference tags, variables of both kinds, Process points, Assets and the diagnostics, never Alarms.*, and it must produce a Boolean ("The condition must evaluate to a Bool, but it produced '…'."). A condition that cannot be evaluated on a sweep (a referenced point Bad, missing or empty) is uncertainty: the state machine holds its last state.

Behavior

Field What it is Values / default Effect
Priority The severity. Critical, High, Medium (default), Low; each option is drawn in its severity color. Shown on the tree's dot, in every summary, on the snackbar card, in the journal and on the status bar indicator; the worst pending priority wins on the shared marks.
Notification How an activation announces beyond the always-on status bar indicator. Sticky (default), Timed, StatusBar. The field's tooltip: "Sticky = snackbar until acked or back to normal; Timed = snackbar for a few seconds; StatusBar = status-bar indicator only." See Annunciation.
On delay (ms) How long the condition must hold true before the alarm raises. A non-negative integer; 0 raises immediately. Sustained observed time, at the 100 ms sweep resolution.
Off delay (ms) How long the condition must hold false before the alarm clears. A non-negative integer; 0 clears immediately. The same resolution.
Message (shown while active, optional) Text carried by the annunciation. Free text, empty. The card and the system notification read "<Message> (Priority)"; without one, "<Priority> alarm is active."
Requires acknowledge: a cleared alarm stays latched until the operator acks Whether an activation demands a response. On by default. Off: the alarm rises straight to Active, acked and clears straight to Normal; it annunciates but never latches and never waits.

A delay that is negative or does not parse keeps the stored value and shows "Delays must be non-negative integers (ms; resolution is the 100 ms sweep)." A delay is sustained observed time: while the condition cannot be evaluated, both delay clocks restart, so a blind window is never credited towards raising or clearing.

Saving a change to the condition, a delay, Requires acknowledge or Enabled resets the machine to Normal (stale state for a different rule would lie); the reset is journaled with the source Configuration and closes the alarm's snackbar card. Changing the name, the description, the priority, the message or the notification, or re-filing the alarm in another folder, preserves the state.

The State rail

STATE shows the current state in words, "Priority: <priority>", Active since (a dash while the condition is not holding) and Last transition (a dash before the first change of state), and the note "Every transition appears on the Events page and in the persistent Alarms history. Alarm state lives in the address space, e.g. Alarms.X.IsActive in an expression or a script." The Alarms root panel lists every alarm with "<state> · <priority> · since <when>" in its Value column and an Ack button per row.

The state machine

State Meaning
Normal Condition false, nothing pending.
Active, unacked Condition true, not yet acknowledged.
Active, acked Condition true, acknowledged (or the alarm never requires acknowledge).
Cleared, unacked The condition returned to normal while unacknowledged: latched until the operator acks.

A condition that holds true through the on delay raises the alarm from Normal or from Cleared, unacked to Active, unacked (straight to Active, acked when Requires acknowledge is off). A condition that holds false through the off delay clears it: to Normal when already acknowledged, to Cleared, unacked when not. Acknowledging moves Active, unacked to Active, acked and releases the latch back to Normal. The sweep evaluates variables first and alarms second, every 100 ms, on the logic queue. Alarm state lives in memory: after a restart every machine starts at Normal and the first sweep re-derives reality from the live conditions, so a latch or a pending acknowledge does not survive a restart. Every transition, whatever its origin (the sweep, an acknowledge, a reset on save, disable or delete), is journaled and recorded in the durable alarm history of the Events page.

Annunciation

The shell status bar always carries the count and the worst pending severity (the window). Beyond that, the Notification kind decides:

Notification Behavior
Sticky A snackbar card on raise, titled with the alarm's name and colored by priority (Critical as an error, High and Medium as warnings, Low as information), carrying Ack while unacknowledged and Open alarms. It stays until the alarm is acknowledged or returns to Normal; the Cleared, unacked latch keeps it on screen, and a re-raise replaces it.
Timed The same card, dismissed by itself after 8 seconds.
StatusBar No card and no system notification; only the status bar indicator.

Dismissing a card by hand is not an acknowledge. While the window is hidden to the tray or minimized, a Sticky or Timed activation also raises a system notification with the same text.

Acknowledging

Acknowledging is an operate command and happens wherever the alarm meets you: the Acknowledge verb over an open alarm, Ack all over the Alarms root, the Ack button of each row in the Alarms root panel, the right-click Acknowledge of an alarm row, the Ack of the snackbar card, the Events page, an Alarm banner on a dashboard, and the agent (journaled as MCP). Every acknowledge rides the logic queue, is journaled with its source, and closes the alarm's card.

Wherever it appears, the answer is offered only where there is one to give. An alarm that is Normal or already acknowledged keeps its verb in place, greyed, saying "This alarm is not waiting for a response."; Ack all over a registry with nothing pending says "No alarm is waiting for a response.". And the feed confirms only what moved: pressing an answer that changes nothing reports the same sentence, never "Acknowledged.", because a station log that records an operator act nobody made is worse than a verb briefly out of reach.

Command What it does Greyed when Not drawn when
Acknowledge Acknowledges the open alarm; the feed says "Acknowledged." "This alarm is not waiting for a response." when it is Normal or already acked; "Runtime stopped" while read-only. Role lacks Operate logic.
Ack all Acknowledges every alarm with something pending, in one queue item; the feed says "All alarms acknowledged." "No alarm is waiting for a response." when nothing is pending; "Runtime stopped" while read-only. Role lacks Operate logic.
Enable / Disable Flips Enabled; disabling resets the machine to Normal and stops evaluation. Station locked or read-only. Role lacks Configure logic.
Copy Duplicates the alarm to the Alarms root under a free name; the copy starts at Normal. Station locked or read-only. Role lacks Configure logic.
Delete alarm Asks "Delete 'X'? This removes the alarm. This cannot be undone.", resets the machine first (so an annunciation never outlives its alarm) and removes it; references to Alarms.X become unresolved. Station locked or read-only. Role lacks Configure logic.

What alarms do not do

No hysteresis or deadband beyond what the condition expresses, no shelving, no sound, no acknowledge from a script, no persisted state across restarts, and no evaluation while the alarm is disabled or the runtime stopped. An alarm is not a Process occurrence: those are configured and judged on the Process page.