Compare commits
4 commits
9c4fd17a66
...
d9e8d54079
| Author | SHA1 | Date | |
|---|---|---|---|
| d9e8d54079 | |||
| f3c7a15bb3 | |||
| ba4ce20c62 | |||
| 8b5ed97db2 |
16 changed files with 867 additions and 7 deletions
48
.claude/skills/alarm-management/SKILL.md
Normal file
48
.claude/skills/alarm-management/SKILL.md
Normal 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 |
|
||||
65
.claude/skills/alarm-management/tasks/alarm-checks.md
Normal file
65
.claude/skills/alarm-management/tasks/alarm-checks.md
Normal 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.
|
||||
103
.claude/skills/alarm-management/tasks/alarm-definitions.md
Normal file
103
.claude/skills/alarm-management/tasks/alarm-definitions.md
Normal 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.
|
||||
101
.claude/skills/alarm-management/tasks/item-alarming.md
Normal file
101
.claude/skills/alarm-management/tasks/item-alarming.md
Normal 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).
|
||||
|
|
@ -24,3 +24,4 @@ Rules:
|
|||
| 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 |
|
||||
| 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 |
|
||||
|
|
|
|||
33
examples/CI-Eng-Sample/01b_alarm_df.qli
Normal file
33
examples/CI-Eng-Sample/01b_alarm_df.qli
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
@LANGUAGE
|
||||
ENGLISH
|
||||
|
||||
@VERSION
|
||||
1.03.00
|
||||
|
||||
! Alarm definitions used by TANK1.LEVEL (16_item_alarm_df.qli). Load before the items refer to them.
|
||||
! Acknowledgement type: every alarm needs a manual acknowledgement; a return to normal is
|
||||
! acknowledged automatically only if the alarm was acknowledged (same matrix as MANUAL).
|
||||
! Field <from><A|N>_<to>: from state N/A1/A2/A3 with Ack/Nack, to state N/A1/A2/A3; 1 = automatic.
|
||||
! Unlisted matrix fields default to 0 (manual).
|
||||
@FIELDS
|
||||
NAME,DESCRIPTION,EAL_ACK,NA_N,NN_N,A1A_N,A2A_N,A3A_N
|
||||
|
||||
@ALARM_ACK_DF
|
||||
"CIENG_ACK","CI-Eng-Sample: manual ack; auto ack on return to normal if acked",0,1,1,1,1,1
|
||||
|
||||
! Area of interest (alarm grouping for displays and destinations)
|
||||
@FIELDS
|
||||
NAME,DESCRIPTION
|
||||
|
||||
@ALARM_AOI_DF
|
||||
"CIENG_TANKS","CI-Eng-Sample tank items"
|
||||
|
||||
! Alarm selection area, compiled on load (COMPILE = 1). Keywords and operators need spaces.
|
||||
@FIELDS
|
||||
NAME,DESCRIPTION,COMPILE,EXPRESSION
|
||||
|
||||
@ALARM_ASA_DF
|
||||
"CIENG_TANK1","Alarms of section CI-Eng-Sample.TANK1",1,\
|
||||
@"
|
||||
/* Alarm selection area : CIENG_TANK1 */
|
||||
SECTION = "CI-Eng-Sample.TANK1""@
|
||||
13
examples/CI-Eng-Sample/16_item_alarm_df.qli
Normal file
13
examples/CI-Eng-Sample/16_item_alarm_df.qli
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
@LANGUAGE
|
||||
ENGLISH
|
||||
|
||||
@VERSION
|
||||
1.03.00
|
||||
|
||||
! Switch on alarming for TANK1.LEVEL (limits 10/20/80/90 come from 02_item_df.qli). Load with dssqld -m.
|
||||
! Status and alarm state come from STATUS_DF: > 80 HIGH (Alarm 2, prio 2), > 90 HIGH HIGH (Alarm 3, prio 1).
|
||||
@FIELDS
|
||||
NAME,ALARMING,ACKN_TYPE,AOI_1
|
||||
|
||||
@ITEM_DF
|
||||
"CI-Eng-Sample.TANK1.LEVEL",1,"CIENG_ACK","CIENG_TANKS"
|
||||
18
examples/CI-Eng-Sample/93_remove_alarm_df.qli
Normal file
18
examples/CI-Eng-Sample/93_remove_alarm_df.qli
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
@LANGUAGE
|
||||
ENGLISH
|
||||
|
||||
@VERSION
|
||||
1.03.00
|
||||
|
||||
! Remove CI-Eng-Sample alarm definitions (after the items: an acknowledgement type in use cannot be deleted)
|
||||
@FIELDS
|
||||
NAME
|
||||
|
||||
@ALARM_ASA_DF
|
||||
"CIENG_TANK1"
|
||||
|
||||
@ALARM_AOI_DF
|
||||
"CIENG_TANKS"
|
||||
|
||||
@ALARM_ACK_DF
|
||||
"CIENG_ACK"
|
||||
|
|
@ -31,7 +31,7 @@ cmd /c "<repo>\examples\CI-Eng-Sample\remove.cmd"
|
|||
|---|---|---|
|
||||
| `CI-Eng-Sample` | Section | Top level |
|
||||
| `CI-Eng-Sample.TANK1`, `.PUMP1`, `.SYSTEM` | Sections | Tank, pump, system monitoring |
|
||||
| `CI-Eng-Sample.TANK1.LEVEL` | Item, Real | %, format `999.9`, limits LL 10 / L 20 / H 80 / HH 90, scale 0–100 (alarming off), stored in `CIENG_EVENT` |
|
||||
| `CI-Eng-Sample.TANK1.LEVEL` | Item, Real | %, format `999.9`, limits LL 10 / L 20 / H 80 / HH 90, scale 0–100, stored in `CIENG_EVENT`; alarming on (ack type `CIENG_ACK`, area `CIENG_TANKS`; `16_item_alarm_df.qli`) |
|
||||
| `CI-Eng-Sample.TANK1.INFLOW` | Item, Real | m3/h, format `9999.9`, scale 0–500, stored in `CIENG_EVENT` |
|
||||
| `CI-Eng-Sample.PUMP1.RUNNING` | Item, Boolean | |
|
||||
| `CI-Eng-Sample.PUMP1.MODE` | Item, Integer | 0 manual, 1 auto |
|
||||
|
|
@ -67,6 +67,9 @@ cmd /c "<repo>\examples\CI-Eng-Sample\remove.cmd"
|
|||
| `CIENG_UA_LINE` | OPC UA client line | Client process `OPXCIENG` (created and started by loading the line) |
|
||||
| `CIENG_UA` | OPC UA station | `opc.tcp://localhost:34493`, Basic256Sha256 / SignAndEncrypt, anonymous; subscription `CIENG_SUB` (1 s); points `LEVEL`, `SRV_STATE` |
|
||||
| OPC visible | Flags | Sections `CI-Eng-Sample`, `TANK1` and item `TANK1.LEVEL` are OPC visible, item read-only (`12_opc_visible_df.qli`) |
|
||||
| `CIENG_ACK` | Acknowledgement type | Every alarm needs an acknowledgement; return to normal automatic only if the alarm was acknowledged (same matrix as `MANUAL`) |
|
||||
| `CIENG_TANKS` | Area of interest | Label for tank items (`TANK1.LEVEL` `AOI_1`) |
|
||||
| `CIENG_TANK1` | Alarm selection area | `SECTION = "CI-Eng-Sample.TANK1"`, compiled on load |
|
||||
| `CIENG_VIEWER` | Authorization group | Read-only: `ITEM_READ`, `SECTION_READ`, `ALARM_CURRENT_READ`, `ALARM_CHRONO_READ`. No users are created by the sample. |
|
||||
|
||||
Items created by objects (`TANK1.CALC.VOLUME`, `TANK1.JFLOW.sPerMin`) and their sections are
|
||||
|
|
@ -89,8 +92,10 @@ New items start with status 13 (`NOT INIT`) until a value is written.
|
|||
| `09_modbus_line_df.qli`, `10_modbus_station_df.qli`, `11_item_eqp_df.qli` | Modbus line; station, scan type, points; items connected to points |
|
||||
| `12_opc_visible_df.qli` | OPC visible / read flags (loaded with `dssqld -m`) |
|
||||
| `13_opcua_line_df.qli`, `14_opcua_station_df.qli`, `15_item_opcua_df.qli` | OPC UA client line; station, subscription, points; connected items |
|
||||
| `01b_alarm_df.qli` | Alarm definitions: acknowledgement type, area of interest, alarm selection area (`ALARM_ACK_DF`, `ALARM_AOI_DF`, `ALARM_ASA_DF`) |
|
||||
| `16_item_alarm_df.qli` | Switch on alarming for `TANK1.LEVEL` (loaded with `dssqld -m`) |
|
||||
| `equipment/eqpciengslv_start.cmd`, `_stop.cmd` | Start/stop the Modbus slave mirror (copy to `tls\com`) |
|
||||
| `80_`…`92_remove_*.qli` | Names to delete, in reverse order |
|
||||
| `76_`…`93_remove_*.qli` | Names to delete, in reverse order (alarm definitions last, `93`) |
|
||||
| `load.cmd`, `remove.cmd` | Run the steps in the right order |
|
||||
| `monitoring/*.sup.txt` | Setup-file lines for the monitoring processes (not applied by `load.cmd`) |
|
||||
|
||||
|
|
@ -126,6 +131,14 @@ exchange, done by the user (skill `data-access`, task `opcua-client.md` §4):
|
|||
Then `UA.COMM_OK` = 1 and `UA.LEVEL_COPY` follows `TANK1.LEVEL`. The trust is kept when the
|
||||
sample is removed and loaded again.
|
||||
|
||||
## Alarms (TANK1.LEVEL)
|
||||
|
||||
`TANK1.LEVEL` raises HIGH above 80 (Alarm 2, priority 2) and HIGH HIGH above 90 (Alarm 3,
|
||||
priority 1). To try it on a test system: `itmval -p -n CI-Eng-Sample.TANK1.LEVEL -v 85`, export
|
||||
`ALARM_CURRENT` (filter on `ITEM_NAME`), acknowledge with `dssqld -m` on `ALARM_CURRENT`
|
||||
(`NAME`, `ACK` 1), write the level back below 80. See skill `alarm-management`, task
|
||||
`item-alarming.md`.
|
||||
|
||||
## Monitoring processes (optional)
|
||||
|
||||
`monitoring/` holds the lines to add to the setup files in `%TLS_ROOT_PATH%\tls\sup\` so that
|
||||
|
|
@ -137,7 +150,6 @@ testing. See the `system-management` skill, task `monitoring-processes.md`.
|
|||
|
||||
| Phase | Adds |
|
||||
|---|---|
|
||||
| 8 | Alarm settings on sample items |
|
||||
| 9 | More storage groups (scan/time, aggregation) |
|
||||
| 10 | A display and symbol |
|
||||
| 11 | A report |
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@ rem Results go to *.qlo listing files; check that Errors = 0.
|
|||
rem Restart CI Server afterwards: new storage groups only start storing after a restart.
|
||||
cd /d "%~dp0"
|
||||
dssqld -i 01_section_df.qli -l 01_section_df.qlo
|
||||
rem Alarm definitions (acknowledgement type, area of interest, alarm selection area)
|
||||
dssqld -i 01b_alarm_df.qli -l 01b_alarm_df.qlo
|
||||
dssqld -i 02_item_df.qli -l 02_item_df.qlo
|
||||
dssqld -i 02b_sub_item_df.qli -l 02b_sub_item_df.qlo
|
||||
dssqld -i 03_his_group_df.qli -l 03_his_group_df.qlo
|
||||
|
|
@ -33,3 +35,5 @@ echo Waiting 10 seconds for OPC UA client OPXCIENG to start...
|
|||
powershell -NoProfile -Command "Start-Sleep -Seconds 10"
|
||||
dssqld -i 14_opcua_station_df.qli -l 14_opcua_station_df.qlo
|
||||
dssqld -i 15_item_opcua_df.qli -l 15_item_opcua_df.qlo
|
||||
rem Alarming: switch on alarms for TANK1.LEVEL (modify existing record)
|
||||
dssqld -m 16_item_alarm_df.qli -l 16_item_alarm_df.qlo
|
||||
|
|
|
|||
|
|
@ -24,4 +24,6 @@ dssqld -r 90_remove_his_group_df.qli -l 90_remove_his_group_df.qlo
|
|||
dssqld -r 90b_remove_sub_item_df.qli -l 90b_remove_sub_item_df.qlo
|
||||
dssqld -r 91_remove_item_df.qli -l 91_remove_item_df.qlo
|
||||
dssqld -r 92_remove_section_df.qli -l 92_remove_section_df.qlo
|
||||
rem Alarm definitions last: an acknowledgement type still used by an item cannot be deleted.
|
||||
dssqld -r 93_remove_alarm_df.qli -l 93_remove_alarm_df.qlo
|
||||
del 90a_stop_his_group_df.qli
|
||||
|
|
|
|||
|
|
@ -54,3 +54,6 @@ development system (see "Test system" in `progress.md`); they do not exist on ot
|
|||
| ISS-032 | 2026-10-01 | ACCESS (OPC UA server node IDs) | IM 36K10L45 §10.3 shows CI Server node IDs (`{"nsid":"32"}`, `{"0":"Value","itnm":"ITEM1"}`) and the CI Server namespace `http://www.yokogawa.com/CI_Server/` (ns 3) but not which namespace the **entities** use. With that URI (or `urn:<host>:Yokogawa:CI_SERVER_OPC_UA_SERVER`) the client point was silently not monitored. Browsing (`OPCUAC_TAG_DF`) shows sections/items in **`urn:Yokogawa:CI_SERVER_OPC_UA_SERVER`**; with it `{"0":"Value","itnm":"<item>"}` and `{"0":"Value","nsid":"<n>"}` both work. IM 36K10E20 §2.2.6 also asks to enable `OPXUAS_USE_NAME_NODEIDS` and restart for CI client ↔ CI server; not needed on the test system. | closed | Closed 2026-10-01 (user decision: installed software is the reference). Installed software is the reference (standing user decision). Close when the user confirms. | `knowledge/manuals/IM36K10L45-01EN.md` §7 (done); `knowledge/manuals/IM36K10E20-01EN.md` §3 (done); `.claude/skills/data-access/tasks/opcua-client.md` (done) |
|
||||
| ISS-033 | 2026-10-01 | ACCESS (Engineering Module OPC UA point) | Tested by the user: the point form's *Browse path* stops at the item (`Objects/CI-Eng-Sample/TANK1/INFLOW`) and stores the item **object** `{"nsid":"548"}`; the point is not monitored (revised sampling interval 0, connected item status 13, *Last value*/*Data type* empty). Typing `{"0":"Value","itnm":"CI-Eng-Sample.TANK1.INFLOW"}` in *Node Id* fixed it (values followed at once). Browsing into an item that is OPC visible but not *Read* fails (`UncertainNotAllNodesAvailable`, `OPXC-E-BRW_NODE`). | open | Check whether the browse dialog can expand an item to `Value` (e.g. double-click); otherwise type the node ID. | `knowledge/manuals/IM36K10E20-01EN.md` §2 (done); `.claude/skills/data-access/tasks/opcua-client.md` §3 (done) |
|
||||
| ISS-034 | 2026-10-01 | ACCESS (OPC UA server setup) | Installed vs IM 36K10L45 §10.5–10.6: `ServerConfig.xml` enables certificate user tokens (`EnableCertificate true`, manual false) and offers no `None` endpoint (only Basic256Sha256 / Aes128_Sha256_RsaOaep / Aes256_Sha256_RsaPss with Sign or SignAndEncrypt); the `rejected` folder is created only at the first rejection; `opxuas.sup` uses `OPXUAS_DYNAMIC_SCANRATE` (manual `OPXUAS_USE_DYNAMIC_SCANRATE`) and has `OPXUAS_SET_HIGH_PRIO_15` (not described); `opxsys.sup` has `OPXDAS_SET_LOG_LEVEL` (not described). Also `dur.sup` adaptive queue entry `OPCEXE` while the installed executors are `OPCEXE1`–`4`. | closed | Closed 2026-10-01 (user decision: installed software is the reference). Installed software is the reference (standing user decision). Close when the user confirms. | `knowledge/manuals/IM36K10L45-01EN.md` §4, §7 (done); `knowledge/manuals/IM36K10L30-01EN.md` §8 (done) |
|
||||
| ISS-035 | 2026-10-01 | ALARM (`ALDPRT`) | `ALDPRT` is running and connected (`almdbg` 1 shows `Events-send-to` rising with each alarm), `aldprt.sup` sets no log destination (so per IM 36K10L15 §4.3 it should log via UMH) and `EVENTS` includes `alarm`/`ackn`, but no alarm line appears in `tls\log\umhlog.log` for the CI-Eng-Sample HIGH / HIGH HIGH / acknowledge events. No other log file changed. Cause unknown (UMH filtering? output only with `LOGUMH` set explicitly?). | open | Ask the user whether alarm lines were ever seen in the message log; possibly test `LOGUMH` (or `LOGSCN`) in `aldprt.sup` (admin, restart) in a later session. Low priority: history and overviews are not affected. | `.claude/skills/alarm-management/tasks/item-alarming.md` (last line); `knowledge/manuals/IM36K10L15-01EN.md` §8 |
|
||||
| ISS-036 | 2026-10-01 | ALARM (setup) | Installed vs manuals: `alh.sup` has `DB-JRNL = WAL` and `DB-SYNC = OFF`, not described in IM 36K10L15 §3.4; storage group `ALH` has lifetime **52 weeks** while IM 36K10C20 §A7 says the default is 2 days (may have been changed on this system earlier — unknown); `aldprt.sup` uses `TIMEFMT` where the manual text also writes `TIMFMT`. | open | Installed software is the reference (standing user decision). Close when the user confirms. | `knowledge/manuals/IM36K10L15-01EN.md` §7, §8; `knowledge/manuals/IM36K10C20-01EN.md` §A7 |
|
||||
| ISS-037 | 2026-10-01 | ALARM (history fields) | `ALARM_CHRONO` records contain leftover or unreadable text: INFO events generated with `almdbg` 16 carry `INSTALL`/`UNIT`/`TAG`/`SUB` values from earlier events and non-ASCII bytes in `SOURCE`, `CATEGORY`, `CONDITION`; item events of `CI-Eng-Sample.TANK1.LEVEL` show `SUB` = `RoC` although the item has only the sub-item `MAX`. | open | Check whether the alarm overview shows the same (phase 10, needs a display). Treat these columns as unreliable for non-OPC events until then. | `.claude/skills/alarm-management/tasks/alarm-checks.md` §4 |
|
||||
|
|
|
|||
173
knowledge/manuals/IM36K10C20-01EN.md
Normal file
173
knowledge/manuals/IM36K10C20-01EN.md
Normal 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.
|
||||
83
knowledge/manuals/IM36K10E30-01EN.md
Normal file
83
knowledge/manuals/IM36K10E30-01EN.md
Normal 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).
|
||||
195
knowledge/manuals/IM36K10L15-01EN.md
Normal file
195
knowledge/manuals/IM36K10L15-01EN.md
Normal 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.
|
||||
|
|
@ -48,9 +48,9 @@ AID is not needed.
|
|||
| 7 | IM 36K10L30 | BUS Service | done for single-node checks; MDUR, encryption, logical addresses, printer devices from docs ([notes](manuals/IM36K10L30-01EN.md)); task `system-management/bus-utilities.md` |
|
||||
| 7 | IM 36K10L45 | Data Access Engineering | done for OPC UA client/server (loopback); OPC DA/A&E from docs (DA loopback not allowed); ODBC not running (ISS-008) ([notes](manuals/IM36K10L45-01EN.md)); skill `data-access` |
|
||||
| 7 | IM 36K10E20 | OPC Interface | summarized; OPC UA point form compared with quick load by the user ([notes](manuals/IM36K10E20-01EN.md)) |
|
||||
| 8 | IM 36K10L15 | Alarm Management Engineering | not started |
|
||||
| 8 | IM 36K10C20 | Engineering Module - Alarms | not started |
|
||||
| 8 | IM 36K10E30 | Alarm System Performance Analysis | not started |
|
||||
| 8 | IM 36K10L15 | Alarm Management Engineering | done for item-based alarms (ack type, AOI, ASA, events, acknowledge, delay/repeat, `almdbg`/`alhdbg`); first-out, collections, notifications, shelving, acoustic/count destinations from docs ([notes](manuals/IM36K10L15-01EN.md)); skill `alarm-management` |
|
||||
| 8 | IM 36K10C20 | Engineering Module - Alarms | done by quick load for item alarm fields, ack types, AOI, ASA; forms, overviews, shelving, link display, notifications, external/Vnet alarms from docs ([notes](manuals/IM36K10C20-01EN.md)) |
|
||||
| 8 | IM 36K10E30 | Alarm System Performance Analysis | summarized, from docs (ASPA GUI not practiced; launcher and fetch limits checked) ([notes](manuals/IM36K10E30-01EN.md)) |
|
||||
| 9 | IM 36K10L20 | History Management Engineering | not started |
|
||||
| 9 | IM 36K10C40 | Engineering Module - Historical | not started |
|
||||
| 10 | IM 36K10R30 | Graphic Display Setup | not started |
|
||||
|
|
@ -109,7 +109,7 @@ now come before classes and objects (phase 6), and the other interfaces follow a
|
|||
| C10 | Integrator time unit: integration granule `itm_int_secs` in `itm.sup` ([task](../.claude/skills/item-engineering/tasks/sub-items.md)) | passed | passed | 60 → `RUN_SECONDS` +1 per minute; restored to 1 (file identical to backup), +1 per second again ([ISS-010](issues.md)). Elevated restarts run by the user. |
|
||||
| G10 | Displays, symbols, Operator Interface test | not practiced | pending | GUI (Edit Module); phase 10. |
|
||||
| L41/C10 | Modbus TCP line, station, scan type, points, connected items by quick load ([task](../.claude/skills/equipment/tasks/modbus-station.md)) | passed | passed | Loopback to CI Server's own Modbus slave (`eqpmdcmem` + `eqpmdcslvtcp` on 5020, started by hand). Line load created and started `EQPCIENG`; removal stopped it and deleted its files. Write/read-back, off-scan/on-scan checked; full remove/reload from sample files. Protocol must be Open Modbus/TCP ([ISS-024](issues.md)). Mirror start files copied to `tls\com` by the user; after a restart everything came back under the CI Service and the setpoint was re-sent on connect. |
|
||||
| G10 | Alarms, reports, audit, RDBMS, history | not practiced | pending | Covered in their own phases (7–12). |
|
||||
| G10 | Alarms, reports, audit, RDBMS, history | alarms done (phase 8); others not practiced | alarms added | Covered in their own phases (7–12). |
|
||||
| R10/R20 | Read a setup file: active settings and keyword help ([task](../.claude/skills/portal-setup/tasks/read-setup-file.md)) | passed | n/a | Read-only. Compared with the Setup File Editor GUI for `wfla_display.sup`, `wflgdi.sup` and all 9 tabs of `jwuiisg.sup`: fields and values identical. Manual differences logged as ISS-012 to ISS-017 (installed software taken as the reference). |
|
||||
| R10 | Check web access for CI View: ports, Remote Connect page, `DEPLOY` folder ([task](../.claude/skills/portal-setup/tasks/check-web-access.md)) | passed | n/a | 8080/8443 listening, page 200, six `DEPLOY` folders. |
|
||||
| R10/R20 | Change a setup file safely ([task](../.claude/skills/portal-setup/tasks/change-setup-file.md)) | passed | n/a | `jwuiisg.sup` HTTP port 8080 → 8081 (text edit, elevated restart): 8081 served the page, 8080 refused; restored, hash identical to backup. Editor: *OK* writes at once, *Reset Field* restores the default (ISS-016). |
|
||||
|
|
@ -120,3 +120,9 @@ now come before classes and objects (phase 6), and the other interfaces follow a
|
|||
| L30 | BUS utilities: `durwfp`, setup files (`dur.sup`, `durm_1_udp.sup`, `time_table.sup`, `fmfprt.sup`) ([task](../.claude/skills/system-management/tasks/bus-utilities.md)) | passed (read-only) | n/a | `umhman`, `umhtestprog`, `umhmsg` fail (ISS-030). Unlicensed run-time limit hit and documented (ISS-031). |
|
||||
| L30 | MDUR node links, encryption, logical addresses, printer devices | not practiced | n/a | Single node, no printer devices. |
|
||||
| L55 | CI Exchange for CENTUM VP / Prodigy | not practiced | n/a | Needs CENTUM VP (RGS, Vnet/IP) or Prodigy data. |
|
||||
| L15/C20 | Acknowledgement type, area of interest, alarm selection area by quick load; ASA compile check ([task](../.claude/skills/alarm-management/tasks/alarm-definitions.md)) | passed | passed | `CIENG_ACK` (MANUAL matrix), `CIENG_TANKS`, `CIENG_TANK1` compiled valid. Description > 78 characters refused; an ASA without spaces is stored with `VALID_EXPRESSION` 0; an ack type in use cannot be deleted. |
|
||||
| L15/C20 | Item alarming, test alarm, `ALARM_CURRENT` / `ALARM_CHRONO`, acknowledge via `dssqld -m` on `ALARM_CURRENT`, delay and repeat ([task](../.claude/skills/alarm-management/tasks/item-alarming.md)) | passed | passed | `TANK1.LEVEL` 85 → HIGH (Alarm 2, prio 2), 95 → HIGH HIGH; acknowledged by `NAME`/`ACK`; acknowledged return to normal cleared, unacknowledged one stayed; DELAY 5 s / REPEAT 10 s events as documented. Changing alarm fields auto-acknowledges a pending return to normal. No `ALDPRT` lines in `umhlog.log` (ISS-035). Full remove/reload clean. |
|
||||
| L15 | ALARM Service read-only checks: processes, setup files, `almdbg` 1/9/10/12/14, `alhdbg` 1, `ALH` storage group; INFO event with `almdbg` 16 ([task](../.claude/skills/alarm-management/tasks/alarm-checks.md)) | passed | n/a | Destinations ALH, OPXUAS, ALNMGR, ALDPRT. `alh.sup` extra keywords, `ALH` lifetime 52 weeks (ISS-036). INFO event stored; some text columns hold leftovers (ISS-037). Two extra INFO events named `name` were created by a probe with default answers. |
|
||||
| L15/C20 | First-out groups, alarm collections, shelving, link display, notifications, acoustic/count destinations | not practiced | n/a | Need displays (phase 10), a second alarm item design, an SMTP server or a logged-in sound session. |
|
||||
| C20 | External alarms (EAL) from OPC UA A&C servers and CENTUM VP | not practiced | n/a | No A&C source or Vnet/IP on the test system. |
|
||||
| E30 | Alarm System Performance Analysis (ASPA) | not practiced | n/a | GUI; the test system has too little alarm history for meaningful KPIs. |
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue