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 press Open on its row in the table of its folder or of its section root, to open its editor (an alarm made with New… > New alarm is not opened but marked in that table, see Creating and copying); 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 Boolean 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 Boolean, 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, Status bar. The field's tooltip: "How an activation announces: Sticky = snackbar until acked or back to normal; Timed = snackbar for a few seconds; Status bar = 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.
Status bar 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, marked in that root's table rather than opened (Creating and copying); 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.

Used by

The USED BY card, at the foot of the form column, lists everything in the station that reads the alarm, so you see what depends on it before you rename or delete it. It is read when you select the alarm and again after a rename.

Kind Location Name
Modbus server Empty The row of the Modbus server register map that serves one of the alarm's states, by its register class and register (Coil 0)
OPC UA server Empty The row of the OPC UA server's Served nodes that serves the alarm: always Read only
MQTT publication The broker The topic of the row of the broker's Publish card that publishes the alarm
Variable, Action Empty The expression variable or action whose text reads one of the alarm's members (Alarms.HighLevel.IsActive), with the folders it is filed in
Dashboard The dashboard The component whose address property names the alarm

A condition never reads another alarm, so no alarm is listed. A server's row holds the alarm by its stable identity: a rename leaves it serving the same alarm, and a deletion leaves the row standing, naming what it lost. A broker's row does the same and keeps its topic. While the lookup runs the card says "Reading references…"; when nothing uses the alarm, "Nothing in the station uses this alarm."; when the lookup fails, "The references could not be read" with Try again, never an empty list. The card only reads: every role that opens the editor sees it, also while the station is locked, and it offers no command.

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.