Phase 8: Alarm Management, Engineering Module - Alarms, Alarm System Performance Analysis #8

Merged
cliu merged 3 commits from docs/phase-8-alarms into main 2026-10-01 11:51:56 +10:00
8 changed files with 769 additions and 0 deletions
Showing only changes of commit ba4ce20c62 - Show all commits

View file

@ -0,0 +1,48 @@
---
name: alarm-management
description: >-
CI Server R1.03 ALARM Service and alarm engineering. Use when the user wants to switch on
alarms for an item (alarming, limits, HIGH / HIGH HIGH / LOW alarms, alarm state, priority,
alarm text), set up acknowledgement types (manual / automatic acknowledgement, ack matrix,
ALARM_ACK_DF), areas of interest (AOI), alarm selection areas (ASA, alarm filter expressions,
compile), delayed or repeated alarms, first-out groups, alarm collections (first-up), read or
acknowledge current alarms and alarm history (ALARM_CURRENT, ALARM_CHRONO), generate a test or
informational event, check the alarm kernel or storage (ALM, ALH, ALDPRT, almdbg, alhdbg,
alm.sup, alh.sup, aldprt.sup), configure alarm e-mail / SMS notification (alnmgr, alnsmtp),
alarm shelving (asbman), alarm sound (aldaco), alarm counting (aldcnt), external alarms (EAL,
OPC UA alarms, CENTUM VP Vnet alarms) or analyse alarm performance (ASPA, alarm floods, KPIs,
EEMUA 191, ISA 18.2). Sources IM 36K10L15-01EN, IM 36K10C20-01EN, IM 36K10E30-01EN.
---
# Alarm management (R1.03)
Background: `knowledge/manuals/IM36K10L15-01EN.md` (kernel, events, mechanisms, setup files,
debuggers), `IM36K10C20-01EN.md` (Engineering Module forms, filters, grouping, shelving,
notifications, external alarms), `IM36K10E30-01EN.md` (ASPA tool and KPI targets). Item limits
and statuses: skill `item-engineering`. OPC UA alarm sources: skill `data-access`.
Rules:
- Run `system-check` first; follow the user's chosen way of working.
- **Alarms reach operators.** Switching alarming on or off, changing acknowledgement types, or
acknowledging alarms on a running plant changes what operators see: only with the user's
approval. Changing an item's alarm settings also auto-acknowledges a pending return to normal
(L15 summary, C20 §A2).
- Writing a value to force a test alarm changes live data (`system-management`, task
`read-write-item.md`): only on test items, and restore the value.
- `almdbg` options 3, 13, 15, 17, 19, 20, 25, 26 and `alhdbg` 3, 4 change or stop things:
never without approval. Read-only options are listed in `tasks/alarm-checks.md`.
- Setup files (`alm.sup`, `alh.sup`, `aldprt.sup`, `aln*.sup`, `asbman.sup`, `wfladi.sup`) need
admin rights and a restart: hand changes to the user (skill `portal-setup`, task
`change-setup-file.md`).
| Task | File | Status |
|---|---|---|
| Acknowledgement type, area of interest, alarm selection area by quick load; compile check | `tasks/alarm-definitions.md` | verified |
| Switch on alarming for an item; delay / repeat; test an alarm; read and acknowledge current alarms and history | `tasks/item-alarming.md` | verified |
| Read-only checks: alarm processes, destinations, statistics, item alarm parameters, storage group, setup files; generate an INFO event | `tasks/alarm-checks.md` | verified |
| First-out groups, alarm collections (first-up, status/ack/reset items) | C20 summary §A6 | from docs |
| Alarm overviews, priority labels, link display, shelving | C20 summary §A3, §A9, §A10 | from docs (needs displays, phase 10) |
| E-mail / SMS notification | L15 summary §10, C20 §A11 | from docs (needs an SMTP server without authentication) |
| Acoustic (`aldaco`) and count (`aldcnt`) destinations, split storage processes | L15 summary §7, §8 | from docs |
| External alarms (EAL) from OPC UA servers or CENTUM VP | C20 summary part B | from docs (no A&C source / Vnet on the test system) |
| Alarm performance analysis (ASPA) | E30 summary | from docs |

View file

@ -0,0 +1,65 @@
---
task: Read-only checks of ALARM Service; generate an informational test event
version: R1.03
source: IM 36K10L15-01EN §1, §2.6, §3.4, §4.3, §6; IM 36K10C20-01EN §A7; practiced on the test system 2026-10-01
status: verified
---
# ALARM Service checks
## 1. Processes and setup files (read-only)
| Check | How | Test system result |
|---|---|---|
| Processes | `tasklist` → `alm.exe`, `alh.exe`, `aldprt.exe`, `alnmgr.exe`, `alnsmtp.exe`, `asbman.exe`; `durwfp -p ALM -t 0` → 0 = attached | All six running (`tls\com\alarm_start.cmd`) |
| Kernel setup | `%TLS_ROOT_PATH%\tls\sup\alm.sup` (active lines after `!ENDDEFAULT`) | `SYNC_COMM N`, `SYNC_MSG N`, `QUESIZE 25000`, `RECOVER_QUEUE Y`, `ACK_INFO` |
| Storage setup | `alh.sup` | `CURP`, `CURT`, `CHR`, `QUESIZE 8000`, `MAX-SEARCH 5`, `RECOVER_QUEUE Y`, `DB-JRNL WAL`, `DB-SYNC OFF` |
| Alarm printer | `aldprt.sup` | `FORMAT prio,2,spac,1,type,6,tdef,18,name,40,text,10`, `EVENTS repeat,info,ackn,alarm,prio,firstup` |
| Overview events | `wfladi.sup` `EVENTS` | `alarm,repeat,ackn,deact,info,recov,diag,firstup` (no `DIRECT`) |
| Notification / shelving | `alnmgr.sup`, `alnsmtp.sup`, `alnsms.sup`, `asbman.sup` | Defaults: SMTP `localhost, 25`, SMS `COM1:`, `SYS_WIDE_SHELF N` |
| History storage group | `dssqld -e` filter `'NAME = "ALH"'` on `HIS_GROUP_DF` | Type Alarm, rollover 1 day, lifetime 52 weeks |
| Definitions | `dssqld -e <out> -d ALARM_ACK_DF -c` (also `ALARM_AOI_DF`, `ALARM_ASA_DF`, `ALARM_FO_DF`, `ALARM_FU_DF`, `ALARM_PRIORITY_DF`, `EXTERNAL_ALARM_DF`, `STATUS_DF`) | Predefined ack types `AUTOMATIC`, `MANUAL`, `FULLMANUAL` and their `_EAL` variants; everything else is project data |
## 2. Alarm kernel debugger `almdbg` (read-only options)
Interactive; pipe the answers and end with `-1` (from bash, with a timeout):
```
printf '1\n9\n12\n-1\n' | timeout 20 almdbg
printf '14\n<Section>.<Tag>\n10\n<ack type number>\n-1\n' | timeout 20 almdbg
```
| Option | Shows |
|---|---|
| 1 | Connected destinations, events sent, overflows (test system: `ALH`, `OPXUAS`, `ALNMGR`, `ALDPRT`) |
| 5 / 7 / 8 / 23 | First-out groups, first-out / continuation items, collections |
| 9 / 10 | Ack type numbers / matrix of one type (`A` automatic, `M` manual) |
| 11 | Items with repeat or delay running |
| 12 | Statistics: start time, item-based / non-item-based / external events received, events sent |
| 14 | Item alarm parameters: monitoring, diagnostic, ack type number, collection, first-out, repeat, delay |
The last `-1` makes DURTIM log `DUR-W-REM_PROC, Process ALMDBG_<pid> exited unexpectedly`
in `umhlog.log`: harmless. A blank answer takes the default shown in brackets; an empty line at
the main prompt repeats the previous action — never send blank lines blindly.
## 3. Storage debugger `alhdbg`
`printf '1\n-1\n' | timeout 10 alhdbg` → storage groups with current unit, cell and start
time (test system: group 3, unit 80). Option 2 lists the units of one group. Options 3 (force
connect) and 4 (stop ALH) only with approval.
## 4. Generate an informational test event (`almdbg` 16)
Changes the alarm history (adds one INFO event; no effect on current alarms). With approval:
```
printf '16\n\n0\n15\n<Section>.<Tag>\n<status text>\n<description>\n-1\n' | timeout 15 almdbg
```
Prompts: timestamp (blank = now), milliseconds, priority (0–15), name, status text,
description. Check with a filter `'EVENT_TYPE = "INFO"'` on `ALARM_CHRONO`.
**Verified:** the event appears with `EVENT_TYPE` INFO, `ITEM_NAME` = the given name, `ALARM_TEXT`
= status text, `DESCRIPTION` = description, priority 15, ack 1. Other text columns (`INSTALL`,
`UNIT`, `SUB`, `SOURCE`, `CATEGORY`, `CONDITION`) contain leftovers or unreadable characters
(ISS-037): use the event only as a test marker.

View file

@ -0,0 +1,103 @@
---
task: Acknowledgement types, areas of interest and alarm selection areas by quick load
version: R1.03
source: IM 36K10L15-01EN §2.3.4, §4.1.2; IM 36K10C20-01EN §A5, §A8; practiced on CI-Eng-Sample 2026-10-01
status: verified
---
# Alarm definitions (quick load)
Sample file: `examples/CI-Eng-Sample/01b_alarm_df.qli` (removed by `93_remove_alarm_df.qli`).
Load definitions **before** the items that use them; remove them **after** those items.
Commands as in skill `system-management` (`dssqld -i` / `-m` / `-r`, `-l <listing>`); run
`dssqld` from the file's folder (paths over 79 characters are cut, ISS-020). `dssqld` returns
exit code 0 even when records fail: always read the summary table (Errors column) or listing.
## 1. Acknowledgement type (`ALARM_ACK_DF`)
```
@FIELDS
NAME,DESCRIPTION,EAL_ACK,NA_N,NN_N,A1A_N,A2A_N,A3A_N
@ALARM_ACK_DF
"<ACK_TYPE>","<description, max 78 characters>",0,1,1,1,1,1
```
- Matrix field `<from><A|N>_<to>`: from state `N`/`A1`/`A2`/`A3`, `A` = was acknowledged,
`N` = was not, to state `N`/`A1`/`A2`/`A3`. 1 = automatic, 0 = operator must acknowledge.
Fields left out are 0. The example equals the predefined `MANUAL`: every alarm needs an
acknowledgement; returning to normal is automatic only if the alarm was acknowledged.
- `EAL_ACK` 1 makes a type for external alarms (Inactive/Active matrix); it cannot be changed
later, nor can the name. Predefined: `AUTOMATIC`, `MANUAL`, `FULLMANUAL` and `_EAL` variants.
- A description longer than 78 characters fails with `DSSG-E-STRBUFSMAL … buffer is too small (79)`.
- Delete refused while an item uses the type: `DSSP-E-NODEL … still in use` /
`DSSP-E-NODELBY, By <item> in dataset ITEM_DF`.
- Check: `almdbg` 9 (numbers) and 10 (`<number>` → matrix with A/M), see `alarm-checks.md`.
## 2. Area of interest (`ALARM_AOI_DF`)
```
@FIELDS
NAME,DESCRIPTION
@ALARM_AOI_DF
"<AOI_NAME>","<description>"
```
`NUMBER` is assigned automatically. Assign to items with `ITEM_DF` `AOI_1` … `AOI_16` (never the
same AOI twice on one item).
## 3. Alarm selection area (`ALARM_ASA_DF`)
```
@FIELDS
NAME,DESCRIPTION,COMPILE,EXPRESSION
@ALARM_ASA_DF
"<ASA_NAME>","<description>",1,\
@"
/* comment */
SECTION = "<Section>.<Sub-section>" and PRIO < 3"@
```
- `COMPILE` 1 compiles on load. Multi-line text: `\` at the end of the line, then `@"` … `"@`.
(Verified with a single `SECTION` condition; the `and PRIO < 3` part follows the manual.)
- Spaces are required around operators (`SECTION = "…"`, not `SECTION="…"`). Keywords and
operators: C20 summary §A8.3. `SECTION` matches only items directly in that section.
- **Check after loading** — a bad expression is still stored:
```
@SELECT
'NAME = "<ASA_NAME>"'
@ALARM_ASA_DF
```
`dssqld -e <out>.qli <filter>.qli -c`, then look at `LISTING` and `VALID_EXPRESSION`:
- good: `% ALC-I-CMP_SUCC, Expression compiled successfully`, `VALID_EXPRESSION` 1
(`COMPILE` reads 0 again after compiling);
- bad: `% ALC-E-UNKNOWN_TOK, Unknown token encountered, token: (…)`,
`ALC-E-CMP_NO_SUCC`, `VALID_EXPRESSION` 0 — the load summary shows 1 error. An invalid
ASA filters out **all** alarms where it is used: fix and reload with `dssqld -m`, or remove.
## 4. Remove
```
@FIELDS
NAME
@ALARM_ASA_DF
"<ASA_NAME>"
@ALARM_AOI_DF
"<AOI_NAME>"
@ALARM_ACK_DF
"<ACK_TYPE>"
```
`dssqld -r` after the items that refer to them are removed or changed.
## Verified (CI-Eng-Sample, 2026-10-01)
`CIENG_ACK`, `CIENG_TANKS` (number 2), `CIENG_TANK1` (`SECTION = "CI-Eng-Sample.TANK1"`,
compiled, valid) loaded and removed in a full sample remove/reload, 0 errors. A test ASA without
spaces was stored invalid and then removed.

View file

@ -0,0 +1,101 @@
---
task: Switch on alarming for an item, test an alarm, read and acknowledge alarms
version: R1.03
source: IM 36K10L15-01EN §2.1–§2.3, IM 36K10C20-01EN §A2, §A5, §A12; IM 36K01A50 (ODBC acknowledge); practiced on CI-Eng-Sample 2026-10-01
status: verified
---
# Item alarming
Sample file: `examples/CI-Eng-Sample/16_item_alarm_df.qli` (loaded with `dssqld -m`).
The item needs limits (`LOW_LOW_LIMIT`, `LOW_LIMIT`, `HIGH_LIMIT`, `HIGH_HIGH_LIMIT`, skill
`item-engineering`); its status then follows the value and maps to an alarm state through
`STATUS_DF` (installed: HIGH 10 → Alarm 2 prio 2, HIGH HIGH 11 → Alarm 3 prio 1, LOW/LOW LOW
likewise, NORMAL 9 → Normal prio 15).
## 1. Switch on alarming (modify the item)
```
@FIELDS
NAME,ALARMING,ACKN_TYPE,AOI_1
@ITEM_DF
"<Section>.<Tag>",1,"<ACK_TYPE>","<AOI_NAME>"
```
Other `ITEM_DF` alarm fields: `ALARM_INHIBIT`, `DELAY`, `REPEAT` (seconds, 0 = off),
`DIAG`, `FO_GROUP` + `FO_ITEM`, `COL_GROUP` (first-out **or** collection, not both),
`ITEM_STAT_n` / `ALARM_STATE_n` / `PRIORITY_n` / `ALARM_TEXT_n` / `ALARM_COLOR_n` /
`MNEMONIC_n` / `SHELVE_ENABLED_n` (n = 1–6, per-item status overrides).
Any change of these fields makes ALM send a NORMAL event (acknowledged automatically when the
item is normal): it **clears a pending unacknowledged return to normal**. Avoid changing alarm
settings of items with standing alarms without the operator knowing.
Check: `almdbg` 14 → `<Section>.<Tag>` shows *Alarm monitoring: yes*, the ack type number,
repeat and delay (`alarm-checks.md`).
## 2. Test an alarm (test items only)
```
itmval -g -n <Section>.<Tag> # note the value to restore
itmval -p -n <Section>.<Tag> -v <value above HIGH_LIMIT>
itmval -g -n <Section>.<Tag> # Status 10 (HIGH), Options without "ack"
```
Unacknowledged alarms lose the `ack` option word; `t1` / `t2` appear while an alarm is direct
or delayed.
## 3. Read current alarms and history
Filter file (one per dataset), then `dssqld -e <out>.qli <filter>.qli -c`:
```
@SELECT
'ITEM_NAME = "<Section>.<Tag>"'
@ALARM_CURRENT
```
- `ALARM_CURRENT`: standing alarms and unacknowledged returns to normal. Key `NAME` =
`"<DD-MON-YY hh:mm:ss.mmm>/<id>"`; useful fields `ALARM_TIME`, `ALARM_ORIG_TIME`,
`ALARM_ACK_TIME`, `OLD_VALUE`, `NEW_VALUE`, `PRIORITY`, `RPT_COUNT`, `ACK`, `OLD_STATUS`,
`NEW_STATUS`, `EVENT_TYPE`, `ALARM_TEXT`, `OLD_STATE`, `NEW_STATE`.
- `ALARM_CHRONO` (history; only exported when named): same fields; add a time range for big
histories, e.g. `'ITEM_NAME = "<Section>.<Tag>" and ALARM_TIME > "01-10-2026 11:00:00"'`.
## 4. Acknowledge from a script
```
@FIELDS
NAME,ACK
@ALARM_CURRENT
"<NAME from the export>",1
```
`dssqld -m` → summary *Modified 1*; the item gets `ack` again, history gets an `ACKNOW` event
(plus a second `ACKNOW` with the node name when `alm.sup` has `ACK_INFO`). Use the `NAME` key,
not `ITEM_NAME` (same rule as the ODBC known issue, IM 36K01A50). Acknowledging is an operator
action: only with the user's approval.
## 5. Delay and repeat
`DELAY` = d: DIRECT at once, DELAY after d seconds (same original time); back to normal earlier
gives NORMAL and no DELAY. `REPEAT` = r: REPEAT every r seconds after the (delayed) alarm,
`RPT_COUNT` 1, 2, …. The current alarm overview shows DIRECT only if `wfladi.sup` `EVENTS`
contains `DIRECT` (not installed by default).
## Verified (CI-Eng-Sample `TANK1.LEVEL`, limits 10/20/80/90, ack type `CIENG_ACK` = MANUAL matrix)
| Step | Result |
|---|---|
| `ALARMING` 1 loaded | `NORMAL` event, ack 1 |
| 44.4 → 85 | Status 10, `ALARM` HIGH Normal → Alarm 2, prio 2, `ACK` 0; in `ALARM_CURRENT` |
| Acknowledge via `ALARM_CURRENT` | `ack` option back; two `ACKNOW` records |
| 85 → 50 after ack | `NORMAL`, acknowledged automatically, `ALARM_CURRENT` empty |
| 50 → 95 → 50 without ack | `ALARM` HIGH HIGH (Alarm 3, prio 1), `NORMAL` stays in `ALARM_CURRENT` with `ACK` 0 until acknowledged |
| `DELAY` 5, `REPEAT` 10, 50 → 85 for 27 s | `DIRECT` 11:36:57, `DELAY` 11:37:02, `REPEAT` 11:37:12 and 11:37:22 (`RPT_COUNT` 1, 2), `NORMAL` 11:37:24 |
| Reset `DELAY`/`REPEAT` to 0 while the NORMAL was unacknowledged | new `NORMAL` event with ack 1; alarm gone from `ALARM_CURRENT` |
| Full sample remove/reload | 0 errors; the alarm test passed again |
No alarm line from `ALDPRT` appeared in `umhlog.log` (ISS-035).

View file

@ -24,3 +24,4 @@ Rules:
| Block / unblock an item; write to a blocked item | `tasks/block-item.md` | verified | | Block / unblock an item; write to a blocked item | `tasks/block-item.md` | verified |
| String items: length limit (1–200) and truncation | `tasks/string-items.md` | verified | | String items: length limit (1–200) and truncation | `tasks/string-items.md` | verified |
| Item forms, limits, PIT filter, clamping, alarm tab, option bits, item statuses | `knowledge/manuals/IM36K10C10-01EN.md` §3–4 | from docs | | Item forms, limits, PIT filter, clamping, alarm tab, option bits, item statuses | `knowledge/manuals/IM36K10C10-01EN.md` §3–4 | from docs |
| Switch on alarming, ack type, delay/repeat, test and acknowledge alarms | skill `alarm-management`, task `item-alarming.md` | verified |

View file

@ -0,0 +1,173 @@
---
manual: IM 36K10C20-01EN
title: Engineering Module - Alarms
edition: 3rd Edition, Sep. 2023
version: R1.03
status: item alarm settings, acknowledgement types, areas of interest, alarm selection areas, delay/repeat verified by quick load on CI-Eng-Sample 2026-10-01; Engineering Module forms, overviews, grouping, shelving, link display, notifications and external/Vnet alarms from docs
---
# Engineering Module - Alarms (R1.03)
How alarms are set up in the Engineering Module (*Configuration > Alarming* and the item
form) and what the operator sees. Part A = item-based alarms, part B = external alarms (OPC UA
servers, CENTUM VP). Kernel internals: `IM36K10L15-01EN.md`. Section numbers refer to the
manual. Dataset/field names below were checked on the installed system.
## A1. Functions (§A1)
Detection (limit check, OPC A&E), management (acknowledgement, first-out groups, alarm
collections, history), display/operation (current/historical/shelved overviews, alarm sound,
AOI and ASA filters, shelving, alarm link display), external notification (e-mail, SMS),
reporting. A jump NORMAL → HIGH HIGH gives only the HIGH HIGH alarm.
## A2. Item form, alarm fields (§A2)
| Form | Field (`ITEM_DF`) | Meaning |
|---|---|---|
| General | *Alarming* (`ALARMING`) | Show/notify this item's alarms |
| Item management | *Alarm inhibit* (`ALARM_INHIBIT`) | Suppress display and notification |
| Limits and filtering | `HIGH_HIGH_LIMIT`, `HIGH_LIMIT`, `LOW_LIMIT`, `LOW_LOW_LIMIT`, deadband | Status by value; deadband for the way back |
| Alarming | *OPC AE alarm detection* | Alarm from an OPC A&E source; no limit check then |
| | *Acknowledgment type* (`ACKN_TYPE`) | `ALARM_ACK_DF` name; none = automatic |
| | *Alarm collection* (`COL_GROUP`), *First-out group* (`FO_GROUP`), *First-out item* (`FO_ITEM`) | One group per item; never both kinds |
| | *Delay time* (`DELAY`), *Repeat time* (`REPEAT`), seconds, 0 = off | |
| | Up to 6 per-item status overrides: status, alarm state, priority, alarm text, colour, mnemonic, shelve enable (`ITEM_STAT_n`, `ALARM_STATE_n`, `PRIORITY_n`, `ALARM_TEXT_n`, `ALARM_COLOR_n`, `MNEMONIC_n`, `SHELVE_ENABLED_n`) | |
| Areas of interest | Area 1–16 (`AOI_1` … `AOI_16`) | Same AOI not twice |
- Changing alarm settings re-evaluates the item even without a status change. **Verified:** a
`dssqld -m` on `ALARMING`, `DELAY` or `REPEAT` produced a NORMAL event; when the item was
back to normal but still unacknowledged, this new event was acknowledged automatically and
the alarm left `ALARM_CURRENT`.
- **Delayed alarm** (verified, `DELAY` 5): DIRECT at once, DELAY 5 s later (same original
time). The current alarm overview shows DIRECT only if `wfladi.sup` `EVENTS` includes
`DIRECT` (installed: not included; add it and restart, §A2.4).
- **Repeated alarm** (verified, `REPEAT` 10): REPEAT events every 10 s after the delay,
`RPT_COUNT` 1, 2, …; repeats can be acknowledged only in the historical overview.
## A3. Alarm overviews (§A3)
- Current (standing + unacknowledged), historical, shelved. Columns include alarm time, section
1/2, tag, sub-item, alarm type (NORMAL, ALARM, ACKNOW, DELAY, DIRECT, FIRSTUP, INFO), text,
priority, acknowledgement, value, quality, OPC fields and `C…` combined fields, item name,
acknowledged by, original time, location, area nn, collection, priority text, CI attributes.
Keep to 20–30 columns (throughput, memory).
- Priority text: *Alarming > Alarm priority labels* (`ALARM_PRIORITY_DF`, 0–15, ≤ 31 ASCII
characters; empty on the test system).
- CI attributes (vendor attributes from OPC AE/UA client settings) are chosen on the overview's
*Attributes* tab; listed under *Alarming > Alarm attributes*.
- Operations (right-click): acknowledge (also the check box; current overview only), block,
shelve, link display, export (CSV/XML, all displayed rows), filters (condition; date normal or
time-interval mode).
## A5. Acknowledgement (§A5)
Unacknowledged alarms blink; acknowledgement is recorded as ACKNOW in history. The setting is
per **alarm state transition** (4 states × Ack/Nack × 4 states = 32 check boxes = one
acknowledgement type), not per item status — so give statuses that need different handling
different alarm states. Form: *Alarming > Acknowledgement type*; name and *External alarm* flag
cannot be changed; delete only when unused. Predefined `MANUAL`: every new alarm state manual;
N → N automatic; Ax → N automatic only if Ax was acknowledged.
Quick load (verified, CI-Eng-Sample `01b_alarm_df.qli`): `ALARM_ACK_DF` fields `NAME`,
`DESCRIPTION` (max 78 characters), `EAL_ACK`, `<from><A|N>_<to>` (e.g. `A2A_N`) — see L15
summary §5. Acknowledge from a program or script: `dssqld -m` on `ALARM_CURRENT` with `NAME`
(the `<time>/<id>` key) and `ACK` 1 (verified; same rule as the ODBC known issue in IM 36K01A50).
## A6. Alarm grouping (§A6)
- **First-out group** (*Alarming > First-out group*; `ALARM_FO_DF`: `DELAY` internal,
`EXT_DELAY` external, parents `PAR_GRP_1…9`): first-out items vs continuation items; while a
first-out item is in alarm, new continuation alarms are hidden. Internal delay keeps the group
active after the first-out items clear. Parents make children external-active (whole subtree,
several parents allowed; no loops). Rename = copy; delete only when unused.
- **Alarm collection** (*Alarming > Alarm collections*; `ALARM_FU_DF`): group status =
alarm × acknowledged × reset (8 statuses, numbers 9, 128–135, e.g. `AL_NAK_NRS` 132). Optional
numeric *status item* (counts alarms; its own alarming shows the group), Boolean
*acknowledgement item* and *reset item* (0→1, 1→0 or any), reset Manual/Automatic (use
Automatic if reset is not needed), default ack type, node, *first-up alarming* (first alarm
shown as FIRSTUP, priority offset −15…15), *Acknowledge group too*. Installed fields:
`NAME`, `NODE`, `PRIO_OFFS_1UP`, `RESET_TYPE`, `ACKN_TYPE`, `RESET_TRNS`, `ACKN_TRNS`,
`EAL_ACKN_TYPE`, `FIRSTUP_MON`, `LOOPB_ACK`, `RESET_ITEM`, `ACKN_ITEM`, `STATUS_ITEM`.
## A7. Alarm history (§A7)
Storage group `ALH` (type Alarm): rollover 1 day; the manual says lifetime 2 days by default —
**the test system shows 52 weeks** (ISS-036). Set the lifetime to the required period; details
in the historical manual (phase 9).
## A8. Alarm filters (§A8)
| Filter | Overview | Sound | Notification | User filter |
|---|---|---|---|---|
| Unit / item identification | yes | yes | no | no |
| Area of interest | yes | yes | no | no |
| Alarm selection area | yes | yes | yes | yes |
- **Area of interest** (*Alarming > Areas of Interest*; `ALARM_AOI_DF` `NAME`, `DESCRIPTION`,
`NUMBER` assigned automatically): a label, up to 16 per item.
- **Alarm selection area** (*Alarming > Alarm selection areas*; `ALARM_ASA_DF` `EXPRESSION`,
`COMPILE`, `LISTING`, `VALID_EXPRESSION`): `<keyword> <operator> <constant>` **with spaces**
around the operator. Keywords `ACTOR_ID`, `AOI`, `COLLNAM`, `COND_NAME`, `EAL_ID`, `EAL_NAME`,
`EVENT_CAT`, `INST`, `ITMID` (`node,group,number,0,0`), `ITMNAM`, `ITMSUB`, `PRIO`, `QC`,
`SECTION`, `SOURCE`, `SUBC_NAME`, `UNIT`; operators `= != < > <= >= | &` (by type); strings in
double quotes with `*` / `?` wildcards; `and` / `or` evaluated left to right (no precedence),
parentheses, `/* */` comments. `section = "A.B"` matches items directly in `A.B`, not in
sub-sections. An invalid expression filters out every alarm.
- **Verified**: `COMPILE` 1 on load compiles the expression; the export then shows `COMPILE` 0,
the numbered `LISTING` with `ALC-I-CMP_SUCC` and `VALID_EXPRESSION` 1. Without spaces
(`SECTION="…"`) the load reports an error but the record **is stored** with
`ALC-E-UNKNOWN_TOK` in `LISTING` and `VALID_EXPRESSION` 0 — check the listing after loading.
## A9. Shelving (§A9)
Shelve standing alarms from the current overview; they move to the shelved overview until
unshelved, back to normal (auto-unshelve), or the shelf time expires (marked, not unshelved).
Shelf types: Static (re-alarm shows normally) or Dynamic (re-alarm within the max shelf time is
shelved again), max shelf time 180–43200 s. Shelf groups: which alarm states (A1–A3) and up to
16 shelf types; assigned to users (*Authorisation > Users*, Alarming tab). Overview component:
*Operator can shelve alarms* (+ multiple). System-wide shelving: `asbman.sup`
`SYS_WIDE_SHELF` (installed N). Shelving history needs the audit option.
## A10–A12. Link display, notification, reporting
- **Alarm link display** (*Alarming > Alarm link display*): entity (item/EAL, wildcards `*` `+`)
+ user (wildcards) → display name; first matching entry wins; overview component option
*Operator can activate alarm related display* (shortcut, layout, frame).
- **Notification**: `alnsmtp.sup` / `alnsms.sup` (restart CI Core after changes); *Alarm
notification users* (SMTP or SMS, address, retries, *Receive clear*, active, weekly
schedule), *Alarm notification destinations* (ASA or all, callback item toggling on success,
order All/Sequential, delay, repeat, retries, retry timeout, up to 32 users); *Send message*
for a test (subject "Alarm notification: Manual message"). SMTP without authentication only.
- **Reporting**: datasets `ALARM_CURRENT`, `ALARM_CHRONO`; default reports `ALARM_COUNT`,
`ALARM_CURRENT`, `ALARM_EXT_CURR`, `ALARM_HISTORY`, `ALARM_SHELVE` (audit option),
`ALM_ATTS_CUR`, `ALM_ATRS_HIS` (phase 11).
## B1. External alarms from OPC UA servers (§B1)
- OPC UA A&C messages with a condition type become **external alarms** when an **EAL** is
defined (under the root, a section or an object: *External alarm > Add*; dataset
`EXTERNAL_ALARM_DF`). Others are stored as INFO events. Alarm time = time in the source;
acknowledgement is sent to the server and reflected back.
- EAL form: name (≤ 40 bytes without section, not renamable), station, alarm template,
condition node ID (namespace ≤ 127, node ID ≤ 383 bytes; not twice; not
NonExclusiveLimitAlarmType), OPC visible/read/write, *OPC Manual Reset*, ack type (none =
`FULLMANUAL_EAL`), collection, first-out (+ *First-out EAL*), shelve, process areas 1–999,
diagnostic, delay/repeat 0–65535 s, severity→priority mapping, areas 1–16.
- Supported like items: ack type (Inactive/Active matrix), diagnostic, collections, first-out,
delay, repeat, AOI, sound, ASA (`EAL_NAME`, `EAL_ID`), shelving, link display, notification,
priority change on ack. No alarm inhibit.
- Overview columns map to OPC UA fields (Message, Severity, AckedState, SourceName, EventType,
ConditionName, ClientUserId, EventId, ConditionId, BranchId, ActiveState.TransitionTime).
- Appendix 2: changing delay/repeat/collection/ack type while an alarm stands behaves
differently for EALs (timers adjusted, ack state kept, description/AOI changes only for new
alarms) than for items (DELAY/REPEAT replaced by ALARM, AUTOMATIC → MANUAL makes the alarm
unacknowledged, changes applied at once).
## B2. CENTUM VP (Vnet) alarms (§B2)
Alarms from CENTUM VP over Vnet/IP (RGS with VAGW) as EALs; acknowledgement in CI Server is a
batch acknowledgement of the function block in CENTUM VP (system alarms only locally); manual
reset of system alarms without recovery message; at CI Server start only process alarm
messages are restored (time = PC start, unacknowledged); no AOF or operation groups (AOF only
as CI attribute). CI Exchange for CENTUM VP generates the EALs (`IM36K10L55-01EN.md`); review
them and configure the overviews afterwards. Not available on the test system.

View file

@ -0,0 +1,83 @@
---
manual: IM 36K10E30-01EN
title: Alarm System Performance Analysis
edition: 3rd Edition, Sep. 2023
version: R1.03
status: from docs; launcher and fetch limits (jwuiaan.sup) checked read-only 2026-10-01; GUI not practiced
---
# Alarm System Performance Analysis (R1.03)
The **ASPA tool** fetches alarm events from a CI Core and analyses them with views based on
EEMUA 191 and ISA 18.2: operator load, acknowledgement times, floods, top offenders, long
standing, repeats, consequential alarms, and a summary of KPIs against targets. Section numbers
refer to the manual.
## 1. Start and limits (§1)
- Start from the CI Server program menu (installed launcher `%TLS_ROOT_PATH%\tls\com\jwuiaan.cmd`,
debug variant `jwuiaan_debug.cmd`) and log on with a CI Server user.
- Workflow: define filters → *Get alarms* → tabs fill automatically (sequentially by default;
can take hours on big data) → adjust the fields under each tab → print / export → repeat.
- Fetch limits protect the PC and the server: `jwuiaan.sup` (*Tuning* tab).
**Installed:** `JDSS_MSG_FETCH_NUMBER_REMOTE = 50000`, `JDSS_MSG_FETCH_NUMBER_LOCAL = 100000`.
- An *alarm* belongs to one item and lasts from arising to return to normal; repeats and status
changes (HIGH → HIGH HIGH) are *alarm events* of the same alarm.
- Menus: print, export chart (PNG, current zoom) or table (CSV, XML), export/import user
filters (`.filter`), save/load ASPA database, tab filling control (parallel / sequential /
stop and disable auto-fill / current tab), big font, save application log (for support).
## 2. Filtering area (§2)
| Part | Use |
|---|---|
| Time filter | Main period (start < end) plus optional comparison periods (same length, own start) |
| Filtering mode | Use only the selected group-filter tab, or AND of all tabs |
| Group filter | Up to 9 groups (number + colour), each by *User (ASA)* (the ASA of a user), *Item name* (section drill-down or typed), *ASA*, *AOI*, *Coll*; *ColorAndVisibility* tab; counts per period shown after fetching |
| Acknowledge filter | Only unacknowledged; min / max duration to acknowledge |
| Save/Load filter | In memory only (lost on exit); use *Export User Filters* to keep them |
Users, ASAs, AOIs and collections come from the Engineering Module (C20 summary §A8, §A6).
## 3. Reporting tabs (§3)
| Tab | Shows | Main settings |
|---|---|---|
| Load | Max/average alarm rate and % time above the acceptable rate per group (KPI, timelines, grid, distribution pie) | Acceptable *A* alarms per *B* minutes, interval (h) |
| Acknowledge | Acknowledged in time / late / not acknowledged / nuisance (cleared before ack), average ack time; detail per alarm | Acceptable acknowledge time, interval |
| Count | Alarms per interval per group | Interval, stacked, labels |
| Floods | Only intervals above a minimum count (trips, start-ups) | Measure period, min. alarms |
| Top Ten | Items with most alarms (Top 1–100), durations | Absolute / percent |
| Long Standing | Longest (or shortest) standing alarms; still-standing alarms ignored | Long/short, top N |
| Repeat | Items with most repeats | Top N |
| Item status | Alarms per status (HIGH, HIGH HIGH, …) | Period |
| Consequential | Pairs A → B within *Max. Seconds*: total, consequential count, correlation % | Max seconds, min correlation, same status only |
| Time Line | Periods of alarm activity per group, per priority, for the top N | Top N |
| All Alarms | Every fetched alarm with arise / ack / normal times and durations | — |
| Summary | KPIs vs targets (needs ≥ 30 days of data) | Chattering period (s) |
Charts zoom with drag (Shift-drag zooms out) and pan with right-drag; tables sort, resize and
filter by column (funnel icon).
## 4. Summary KPIs and targets (§3.12)
| Metric | Target |
|---|---|
| Average annunciated alarms per day | 150–300 at most |
| … per hour | 6–12 at most |
| … per 10 minutes | 1–2 at most |
| % hours with more than 30 alarms | < 1 % |
| % 10-minute periods with more than 10 alarms | < 1 % |
| Maximum alarms in a 10-minute period | < 11 |
| % time in flood (starts above 10 alarms / 10 min, ends below 5) | < 1 % |
| Top 10 alarms as % of all alarms | < 1 % to 5 % |
| Chattering and fleeting alarms | 0 |
| Alarms standing > 24 h | < 5 per day |
| Priority distribution | low > 80 %, medium < 15 %, high < 5 %, highest < 1 % |
| Unauthorised suppressions / attribute changes | 0 |
Priority categories 0–15 are not fixed to an importance; `alm.sup` `HIGHEST_PRIO` decides which
end is most important (L15 summary §6).
Not practiced: the ASPA GUI (needs a logged-on user session and meaningful alarm history; the
test system has only a few sample alarms).

View file

@ -0,0 +1,195 @@
---
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.