ci-server-engineer/.claude/skills/alarm-management/tasks/item-alarming.md
cliu ba4ce20c62 Add alarm manual summaries (L15, C20, E30) and alarm-management skill
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:41:45 +10:00

101 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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).