Overview
A common APROL requirement: energize a physical digital output to sound a buzzer or horn whenever an unacknowledged alarm exists anywhere in the system — the same condition that makes the AlarmMonitor line display flash with a red frame and triggers the operator station's audible horn.
The naive implementation is a large OR network that collects the outputs of every alarm block in every CFC. That approach is unmaintainable: every new alarm block must be manually wired into the OR tree, and any omission produces a silent horn for that alarm.
APROL already maintains this aggregate condition internally as the system variable GLOBAL_ALARM_SIGNAL. The AlarmServer sets it to 1 when one or more unacknowledged alarms are present in the AlarmMonitor, and it returns to 0 when all alarms have been acknowledged. The point that costs engineers hours is that this variable is not exposed in the normal variable browser — a wildcard search on GLOBAL* in "All variables" returns nothing. Access is provided exclusively through a dedicated function block.
Root Cause: Why the Variable Search Returns Nothing
GLOBAL_ALARM_SIGNAL is an AlarmServer-owned system variable, not a process variable published into the normal engineering variable namespace that the CaeManager variable browser indexes. Consequences for the engineer:
- Name-wildcard searches (
GLOBAL,*ALARM_SIGNAL*) in the variable list produce zero hits — this is expected behaviour, not a broken installation or a missing option package. - You cannot drag-and-drop the variable onto a CFC connector, and you cannot reference it directly by typing the name into a connector field.
- B&R Online Help contains wording that discourages direct use of the variable. Read this as: the direct-reference path is deprecated in favour of the function-block path, not as "the signal no longer exists." The AlarmServer still maintains the signal in APROL 4.x.
GLOBAL_ALARM_SIGNAL fails, do not conclude the feature was removed and do not fall back to a manual OR tree. Search the APROL library block catalog instead, for AprFuAlarmSignal.Solution: AprFuAlarmSignal
The function block AprFuAlarmSignal, supplied in the APROL library, is the sanctioned interface. Per its block description, it makes the GLOBAL_ALARM_SIGNAL system variable available to a logic (CFC/IEC task) for further processing.
| Item | Value |
|---|---|
| Block name | AprFuAlarmSignal |
| Library | APROL |
| Source signal |
GLOBAL_ALARM_SIGNAL (maintained by AlarmServer) |
| Signal = 1 when | One or more unacknowledged alarms present in the AlarmMonitor |
| Signal = 0 when | No unacknowledged alarms remain (all acknowledged/cleared) |
| Equivalent visual/audible indications | Red flashing frame around the AlarmMonitor in the line display; operator-station horn "honking" when the horn is enabled |
Because the block reflects the AlarmServer's aggregate state, it automatically includes every alarm the AlarmServer manages. No maintenance is required when alarm blocks are added or deleted later.
Step-by-Step: Driving a Physical Horn Output
-
Choose the host task. Place the logic in a CFC that runs on the controller that owns the physical DO channel. Note the architectural constraint:
GLOBAL_ALARM_SIGNALis an AlarmServer/runtime-system signal, so the consuming logic depends on the connection to that server. Plan the failure behaviour accordingly (see the note below). -
Insert the block. In the CaeManager CFC editor, open the block catalog, select library
APROL, and dragAprFuAlarmSignalonto the sheet. If it is not visible, verify theAPROLlibrary is included in the project/task's library list. -
Read the block's output. Connect the block output (the BOOL carrying the global alarm state) to a named connector, e.g.
GlobalAlarmActive, so it can be reused by several consumers (horn, beacon, remote annunciator, SMS gateway trigger). -
Add horn conditioning logic. A raw connection to the DO is rarely acceptable in the field. Typical conditioning:
HornOut := GlobalAlarmActive AND NOT HornSilenced AND HornEnableKeyswitch;
LatchHornSilencedon a "Silence/Mute" pushbutton and reset it on any rising edge ofGlobalAlarmActiveso that a new alarm re-sounds a silenced horn. Without this reset, one silence press mutes the plant indefinitely. - Add a pulse/ring-back timer (optional). If continuous sounding is undesirable, gate the output with an on-delay/off-delay pair or a periodic pulse so the horn beeps rather than sounds continuously while the condition persists. Keep the pulse period well above the DO module and relay switching lifetime constraints.
- Map to the physical channel. Assign the resulting BOOL to the digital output channel in the I/O configuration. Confirm the channel's electrical rating covers the horn's inrush; for inductive or high-inrush sounders, drive an interposing relay or contactor from the DO rather than the field device directly.
- Protect the output. Fit a flyback diode (DC coil) or RC snubber (AC coil) across an interposing relay coil, and fuse the horn branch separately from the I/O supply so a shorted sounder cable cannot drop the DO module supply.
- Download and commission. Build the project, download to the target, and verify with the runtime online view that the block output tracks the AlarmMonitor state.
Verification
- Force an alarm. Trigger a low-consequence alarm (simulate a process value across a limit, or use an alarm block with a test input). Confirm all three indications appear together: AlarmMonitor red flashing frame in the line display, operator-station horn "honking" (if the horn is enabled on that station), and the physical DO channel LED illuminating.
-
Check the block output online. Open the CFC in online/watch mode and confirm the
AprFuAlarmSignaloutput =1concurrently with the flashing frame. -
Acknowledge and confirm reset. Acknowledge the alarm in the AlarmMonitor. The output must fall to
0once no unacknowledged alarms remain. If it stays at1, an unacknowledged alarm still exists somewhere — filter the AlarmMonitor for unacknowledged entries across all areas, not just the current view, before suspecting the block. - Test the silence latch. With an alarm active, press Silence and confirm the DO drops. Trigger a second, different alarm and confirm the DO re-energizes on the rising edge of the aggregate signal.
- Measure the horn branch. With the horn sounding, check the DO channel/interposing relay coil voltage and the actual load current against the module's per-channel and per-group ratings from the module datasheet. Verify total group current with all annunciation outputs simultaneously on — the worst case is an alarm flood.
Design Notes and Pitfalls
| Pitfall | Mitigation |
|---|---|
Searching the variable list for GLOBAL_ALARM_SIGNAL and finding nothing |
Expected. Search the block catalog for AprFuAlarmSignal in the APROL library instead. |
| Building an OR tree of alarm block outputs | Replace with the single block; the OR tree silently degrades every time an alarm block is added. |
| Interpreting help text as "variable discontinued" | The direct-reference method is discouraged; the underlying AlarmServer signal remains available through the block. |
| Horn never re-sounds after operator silence | Reset the silence latch on the rising edge of the aggregate signal, not on acknowledge. |
| Horn chatters during alarm floods | Add an off-delay (hold) so the output stays on for a minimum period, and a pulse generator for repeat annunciation. |
| Signal reflects acknowledgement, not alarm-active | Note the semantics: the signal is 1 for unacknowledged alarms. An active-but-acknowledged alarm will not hold the horn on. If you need "any alarm active regardless of acknowledgement," that is a different aggregate and must be sourced separately. |
Confirm the exact input/output pin names, data types, and any enable/reset pins for AprFuAlarmSignal against the block description in the B&R Online Help for your installed APROL version before wiring the CFC, since pin sets can differ between library revisions.
FAQ
Why can't I find GLOBAL_ALARM_SIGNAL in the APROL variable search?
It is an AlarmServer system variable and is not indexed in the normal engineering variable namespace, so wildcard searches such as GLOBAL* return no hits. Access it through the AprFuAlarmSignal function block in the APROL library instead.
What exactly sets GLOBAL_ALARM_SIGNAL to 1?
The AlarmServer sets it to 1 whenever one or more unacknowledged alarms are present in the AlarmMonitor. The same condition produces the red flashing frame around the AlarmMonitor in the line display and the operator-station horn when the horn is enabled.
Does the signal stay at 1 while an alarm is still active but acknowledged?
No. The documented condition is unacknowledged alarms. Once every alarm has been acknowledged, the signal returns to 0 even if the underlying process condition persists, so plan your horn logic around acknowledgement semantics.
Is the aggregate alarm signal suitable for a safety-rated annunciator?
No. It is a SCADA-level annunciation signal that depends on the AlarmServer and its connection to the controller. Safety-related annunciation must be derived from hardwired or safety-rated I/O and assessed against the applicable functional-safety standard.
How do I stop the horn from staying silent after an operator presses Silence?
Latch the silence flag on the pushbutton and reset it on the rising edge of the aggregate alarm signal, not on acknowledgement. A new alarm then re-energizes the digital output even though the previous alarm was silenced.