195 lines
13 KiB
Markdown
195 lines
13 KiB
Markdown
---
|
||
manual: IM 36K10L15-01EN
|
||
title: Alarm Management Engineering
|
||
edition: 3rd Edition, Sep. 2023
|
||
version: R1.03
|
||
status: verified for item-based alarms (acknowledgement type, AOI, ASA, ALARMING, alarm events, acknowledge, almdbg/alhdbg) on CI-Eng-Sample 2026-10-01; first-out, collections, notifications, shelving, acoustic/count destinations from docs; setup files checked read-only
|
||
---
|
||
|
||
# Alarm Management Engineering (R1.03)
|
||
|
||
ALARM Service turns item status changes (and external alarms, informational events) into
|
||
**alarm events**, distributes them to **destinations** and stores them. Section numbers refer to
|
||
the manual. Engineering Module forms for the same functions: `IM36K10C20-01EN.md`.
|
||
|
||
## 1. Processes (§1)
|
||
|
||
| Process | Role | Started by default |
|
||
|---|---|---|
|
||
| `ALM` | Alarm kernel: receives item-based events from ITEM Service and non-item-based events from applications, builds alarm events, sends them to destinations | yes |
|
||
| `ALH` | Alarm storage: current alarms (time and priority) and chronological history in storage group **`ALH`** | yes |
|
||
| `ALDPRT` | Printer destination: formats alarm lines for UMH, stderr or a printer | yes |
|
||
| `ALMUPD` | Recovery process (sends *Start recovery session* to ALM) | — |
|
||
| `ALNMGR`, `ALNSMTP`, `ALNSMS` | Notification manager, e-mail, SMS | `ALNMGR`, `ALNSMTP` yes |
|
||
| `ASBMAN` | Alarm shelving | yes |
|
||
| `ALDCNT` | Count destination (counts events into an item) | no (`alarm_start.cmd`, commented) |
|
||
| `ALDACO` | Acoustic destination (WAV or command) | no (`integration_start`) |
|
||
| `ALHCUR`, `ALHCHR` | Split current / history storage (ALH becomes a router) | no |
|
||
|
||
Blocks: ALM (kernel), ALH (storage), ALD (destinations), ALC (alarm selection areas).
|
||
Installed `alarm_start.cmd` starts `alm`, `alh`, `aldprt`, `alnmgr`, `alnsmtp`, `asbman`.
|
||
|
||
**Verified:** `almdbg` option 1 lists the connected destinations `ALH`, `OPXUAS` (OPC UA server
|
||
A&C), `ALNMGR`, `ALDPRT`.
|
||
|
||
## 2. Alarm sources and states (§2.1)
|
||
|
||
- **Item-based**: ITEM Service compares the value with the limits and sets the item status
|
||
(LOW LOW < low-low limit ≤ LOW < low limit ≤ NORMAL ≤ high limit < HIGH ≤ high-high limit <
|
||
HIGH HIGH). Each item status maps to one of four **alarm states**: Normal (N), Alarm 1–3
|
||
(A1–A3). The mapping is system-wide in `STATUS_DF` (`ALARM_STATE`, `ALARM_PRIO`, colour,
|
||
mnemonic, shelve flag) and can be overridden per item (up to 6 statuses, `ITEM_DF`
|
||
`ITEM_STAT_n`, `ALARM_STATE_n`, `PRIORITY_n`, `ALARM_TEXT_n`, …).
|
||
Installed `STATUS_DF`: NORMAL 9 → Normal/prio 15, HIGH 10 → Alarm 2/prio 2, HIGH HIGH 11 →
|
||
Alarm 3/prio 1 (140 statuses).
|
||
- Every status change is an alarm state transition, even when old and new state are equal
|
||
(e.g. LOW → HIGH, both A2).
|
||
- **External alarms**: OPC A&E (mapped to items, uses force to alarm/normal) and OPC UA A&C
|
||
(EAL definitions) — see C20 summary part B and `IM36K10L45-01EN.md`.
|
||
- **Informational events**: from equipment data sources (OPC UA/A&E clients, STARDOM) or
|
||
applications; shown only in history.
|
||
|
||
## 3. Alarm event types (§2.2)
|
||
|
||
ALARM, NORMAL, DIRECT, DELAY, REPEAT, ACKNOWLEDGE, INFORMATIONAL, DEACTIVATE, RECOVERY,
|
||
DIAGNOSTIC, QUALITY, PRIORITY, FIRSTUP. External OPC UA alarms never get RECOVERY.
|
||
|
||
**Verified** (dataset `ALARM_CHRONO`, column `EVENT_TYPE`): switching on `ALARMING` gave a
|
||
`NORMAL` event; 44.4 → 85 gave `ALARM` (HIGH, Normal → Alarm 2, prio 2, `ACK` 0); acknowledging
|
||
gave two `ACKNOW` records (the second carries the node name: `ACK_INFO` is set in `alm.sup`);
|
||
85 → 50 gave `NORMAL`.
|
||
|
||
## 4. Kernel mechanisms (§2.3)
|
||
|
||
| Mechanism | Behaviour | External alarms |
|
||
|---|---|---|
|
||
| Delay (item `DELAY`, s) | N → Ax gives DIRECT, timer starts; at expiry DELAY (with the latest state). Back to N during the delay: NORMAL, no DELAY. Another Ax during the delay: DIRECT, timer keeps running. No delay if the previous Normal was not acknowledged | yes |
|
||
| Repeat (item `REPEAT`, s) | ALARM, then REPEAT every period while in alarm; a new alarm state restarts the timer | yes |
|
||
| First-out (§2.3.3) | Group of first-out items and continuation items. While a first-out item is in alarm (*internal-active*), new continuation alarms give only DIRECT; when the group goes inactive (after the optional internal delay) still-standing continuation alarms give ALARM. Parent groups make child groups *external-active* (all new alarms DIRECT) with an external delay | yes |
|
||
| Acknowledgement (§2.3.4) | Acknowledgement matrix per **acknowledgement type**: for each (old state, old Ack/Nack) → new state, automatic or manual. Manual ack by an operator gives an ACKNOWLEDGE event; automatic ack gives none | yes (Inactive/Active matrix) |
|
||
| Change priority (§2.3.5) | `alm.sup` `PRIORITY = <old>,<seconds>,<new>`: an unacknowledged alarm of priority *old* gets a PRIORITY event with *new* after the time; chains (max 16 useful) | — |
|
||
| Force to normal / to alarm (§2.3.6–7) | Engineering Module *Update value* check boxes (authorised users); option bit, `itm_set_gen()` from programs; also for EALs after a long OPC UA disconnection | yes |
|
||
| Force an event (§2.3.8) | Criteria mask `ITM_CRI_EVENT`: event without state change | — |
|
||
|
||
Precedence (§2.3.9): delay → first-out → repeat → change priority (repeat and change priority
|
||
start together, after the ALARM).
|
||
|
||
Special events (§2.4): DEACTIVATE when alarming is switched off (or an EAL deleted) — the alarm
|
||
leaves the current overview; RECOVERY from the recovery process; DIAGNOSTIC for items marked
|
||
diagnostic; QUALITY when only the quality changed (needs `QUALITY_CODE` in `alm.sup`).
|
||
|
||
Recovery (§2.5): after queue overflows ALM sends RECOVERY events for every item in sets
|
||
(`REC_ITM`, default 25, `REC_WAIT` 500 ms, `REC_CYCL` 1). External alarms are refreshed by the
|
||
OPC UA client with *ConditionRefresh* (at connect, reconnect, redundancy switch, or *On scan*).
|
||
|
||
## 5. Acknowledgement types (dataset `ALARM_ACK_DF`)
|
||
|
||
Fields `<from><A|N>_<to>`: from state `N`, `A1`, `A2`, `A3`; `A` = was acknowledged, `N` = was
|
||
not; to state `N`, `A1`, `A2`, `A3`. Value 1 = automatic, 0 = manual (operator). 32 fields;
|
||
`EAL_ACK` 1 = external-alarm type (8 fields used). Name and the external flag cannot be changed
|
||
later; a type in use cannot be deleted (verified: `DSSP-E-NODEL … By <item> in dataset ITEM_DF`).
|
||
Items with no type behave like `AUTOMATIC`; EALs with none use `FULLMANUAL_EAL`.
|
||
|
||
Installed types: `AUTOMATIC` (all 1), `MANUAL` (only `NA_N`, `NN_N`, `A1A_N`, `A2A_N`, `A3A_N`
|
||
= 1), `FULLMANUAL` (all 0) and the `_EAL` variants (`AUTOMATIC_EAL`, `MANUAL_EAL`,
|
||
`FULLMANUAL_EAL`). `almdbg` 9/10 lists the types by number and prints the matrix.
|
||
|
||
**Verified with `CIENG_ACK` (same matrix as MANUAL):** HIGH alarm came in unacknowledged;
|
||
acknowledged, then back to normal → automatically acknowledged, gone from `ALARM_CURRENT`.
|
||
HIGH HIGH back to normal *without* acknowledgement → stayed in `ALARM_CURRENT` (NORMAL, `ACK` 0)
|
||
until acknowledged.
|
||
|
||
## 6. Kernel setup file `alm.sup` (§2.6)
|
||
|
||
`QUESIZE` (KB, default 25000), `PRIO_ACK_ABS` / `PRIO_ACK_REL` (priority after ack),
|
||
`ACK_INFO` (send node/terminal/user with acknowledgements), `QUALITY_CODE`, `PRIORITY` (change
|
||
priority list), `SUPPR_ACK_CHG`, `SYNC_COMM` (async DUR to destinations), `SYNC_MSG`,
|
||
`PRESERVE_PRIO`, `HIGHEST_PRIO` (15 or 0 = most important), recovery tab `REC_CYCL`, `REC_ITM`,
|
||
`REC_WAIT`, `RECOVER_ALL`, `RECOVER_QUEUE`.
|
||
|
||
**Installed:** `SYNC_COMM N`, `SYNC_MSG N`, `QUESIZE 25000`, `RECOVER_QUEUE Y`, `ACK_INFO`.
|
||
|
||
## 7. Storage process (§3)
|
||
|
||
- Three storage classes: current by time, current by priority, chronological (`CURT`, `CURP`,
|
||
`CHR` in `alh.sup`; all on by default). Current alarms live in memory unless `MEM-WRT` is
|
||
off; history is always on disk.
|
||
- `alh.sup`: `FPATH`, `ALM-PROC`, `DEF-WRT` (VMS only), `MEM-WRT`, `QUESIZE` (8000 KB),
|
||
`MAX-OPEN-UNITS` (2–100, default 5), `MAX-SEARCH` (s per history search, default 5),
|
||
`RECOVER_QUEUE`.
|
||
- Multi-process: copy `arh.sup` to `alhchr.sup` / `alhcur.sup`, uncomment their lines in
|
||
`alarm_start.cmd`; the router `alh.sup` then holds only `QUESIZE`.
|
||
- **Installed `alh.sup`**: `CURP`, `CURT`, `CHR`, `QUESIZE 8000`, `MAX-SEARCH 5`,
|
||
`RECOVER_QUEUE Y`, plus `DB-JRNL = WAL` and `DB-SYNC = OFF`, not in the manual (ISS-036).
|
||
- Datasets: `ALARM_CURRENT` (standing and unacknowledged alarms), `ALARM_CHRONO` (history; not
|
||
exported unless named, filter with `@SELECT`). External alarm definitions are in
|
||
`EXTERNAL_ALARM_DF`; `ALARM_EXT_CURR` is only a default report name, not a dataset.
|
||
- **Installed storage group `ALH`** (`HIS_GROUP_DF`): type Alarm, rollover 1 day, lifetime
|
||
**52 weeks** (the C20 manual gives 2 days as the default; ISS-036).
|
||
|
||
## 8. Destination processes (§4)
|
||
|
||
- Each destination registers with ALM giving the event types it wants (`EVENTS = direct,
|
||
alarm, repeat, ackn, info, deact, recov, diag, qual, prio, firstup`; ALARM includes DELAY and
|
||
NORMAL) and/or an alarm selection area (`DEST-ASA`); not both.
|
||
- Alarm line (`FORMAT = <unit>,<length>,…`): `ACKN`, `NAM1`–`NAM4`, `SECTION`, `NAME`, `PRIO`,
|
||
`TYPE`, time formats `TANS/TEUR/TGEN/TDEF/TJUL/TFMT` (and `ST…` for the original timestamp),
|
||
`TEXT`, `NWLN`, `SPAC`, `VAL` (`VAL-PREC`), `QC_DEC`, `QC_HEX`, `ITM_DESC`, `ENG_UNIT`, OPC
|
||
fields `EVT_CAT`, `SOURCE`, `COND`, `SUBC`, `ACTOR_ID` and combined `C_…` variants. `TIMEFMT`
|
||
picture string (installed keyword name; the manual also writes `TIMFMT`).
|
||
- **`ALDPRT`** (setup file = process name): `LOGUMH` / `LOGSCN` / `LOGPRT` (+ `PRTDEV` or
|
||
`PRTQUE`, `PRTBUF`), `HEADER … HEADEREND`, `DEST-TYPE`, `ALDMAN`, `PRIO-DEST`. With no log
|
||
destination set it logs via UMH. **Installed:** `FORMAT prio,2,spac,1,type,6,tdef,18,name,40,
|
||
text,10`, `EVENTS repeat,info,ackn,alarm,prio,firstup`, header every 10 lines. On the test
|
||
system ALDPRT received the events (`almdbg` counter) but no alarm line appeared in
|
||
`umhlog.log` (ISS-035).
|
||
- **`ALDCNT`**: counts events into `ITEM-NAME` (required), wraps at `MAX-COUNT` (1500); not the
|
||
number of standing alarms. Installed file has the placeholder item.
|
||
- **`ALDACO`**: `PLAY` (WAV, Windows, needs a logged-in user) or `COMMAND`, `SILENCE =
|
||
<item>,<ms>` repeats until the item is NORMAL, `DEF-NODE`, `QUE-SIZE` (30 KB). One process per
|
||
sound (e.g. `-n aco_p1` with `aco_p1.sup`, each with its own ASA). On a CI Portal prefer the
|
||
graphic alarm sound component.
|
||
- Setup files of alarm displays are read each time a display opens; removing comments speeds
|
||
this up (keep a backup).
|
||
|
||
## 9. Debuggers (§6)
|
||
|
||
`almdbg` (menu, `-1` exit; answers can be piped):
|
||
|
||
| No. | Action | Notes |
|
||
|---|---|---|
|
||
| 1 / 2 / 3 | Destinations / detail / disconnect | read-only except 3 |
|
||
| 5–8, 27, 28 | First-out groups, children, first-out and continuation items/EALs | read-only |
|
||
| 9 / 10 | Acknowledgement types / matrix of one type number | read-only |
|
||
| 11 | Repeat/delay list | read-only |
|
||
| 12 | Statistics (events received/sent, list sizes) | read-only |
|
||
| 13 | Item recovery | |
|
||
| 14 | Item alarm parameters (by name): monitoring, ack type number, collection, first-out, repeat, delay | read-only |
|
||
| 15 | Preset an item status | changes data |
|
||
| 16 | Generate non-item-based (INFO) event: timestamp, ms, priority, name, status text, description | 6 prompts; history only |
|
||
| 17, 19, 20 | Stop ALM / ALH / ALDPRT | never without approval |
|
||
| 22 | Diagnostic message for an item or EAL | |
|
||
| 23–26 | Collections: list, detail, reset, acknowledge | |
|
||
|
||
`alhdbg`: 1 storage groups (verified: group 3, unit 80, current cell start), 2 units of a
|
||
group, 3 force connect to kernel, 4 tidy stop (never without approval).
|
||
|
||
Piping `-1` at the end makes DURTIM log `Process ALMDBG_<pid> exited unexpectedly` — harmless.
|
||
|
||
## 10. Notifications and shelving (§7, §8)
|
||
|
||
- `alnmgr.sup`: `EVENTS` (alarm, firstup), `ALM-PROC`, `QUE-SIZE` (500 KB), `DBG-LEVEL`,
|
||
`MAX-LOG`, `MAX-LIFE-TIME`, `MAX-CLEAR-TIME`, `ACK_STOPS_REPEAT`, `INT-QUE-SIZE` (1000).
|
||
- `alnsmtp.sup`: `SMTP_SRV` (installed `localhost, 25`), `FROM_ADDRESS`
|
||
(`admin@localhost.com`), `SMTP_TIMEOUT` 10, `EMAILS_PER_CONN` 1, `SMTP_INACTIVE`,
|
||
`D_LEVEL`, `MAX_LOG`, `SUBJ_FORMAT` / `BODY_FORMAT` (+ `…_TIMEFMT`), `VAL-PREC`,
|
||
`ALARM_PREFIX [ALARM]`, `CLEAR_PREFIX [CLEAR]`, `SUFFIX`. Only SMTP servers without
|
||
authentication or encryption.
|
||
- `alnsms.sup`: `SMS_PORT` (installed `COM1:`), AT-command modem, serial line settings.
|
||
- `asbman.sup`: `QUE-SIZE` 500, `TICKER_INTERVAL` 2 s, `SYS_WIDE_SHELF` (installed `N`:
|
||
shelving kept per CI View) with optional count items, `DEBUG_ON`. Same setting on every node.
|
||
In enterprise mode use the alarm overview *Location* column.
|
||
- Known issue (IM 36K01A50 §1.6): shelving more than ~500 alarms can overflow the DURM queue.
|
||
|
||
Not practiced: notifications (no SMTP server), shelving (needs a CI View display), acoustic and
|
||
count destinations, split storage processes.
|