Compare commits
6 commits
d9e8d54079
...
c2d9f837cd
| Author | SHA1 | Date | |
|---|---|---|---|
| c2d9f837cd | |||
| 2fb9634c23 | |||
| e7b4cd1f3f | |||
| c08207847e | |||
| 37c91eeac7 | |||
| 9259a3cce2 |
14 changed files with 489 additions and 10 deletions
40
.claude/skills/history-management/SKILL.md
Normal file
40
.claude/skills/history-management/SKILL.md
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
---
|
||||||
|
name: history-management
|
||||||
|
description: >-
|
||||||
|
CI Server R1.03 HISTORY Service and item history. Use when the user wants to store item values
|
||||||
|
in history (item storage group, storage group item, Scan/Time, Event/Item, Event/Event,
|
||||||
|
Direct, scan interval, averaging, quality codes, priority), set rollover interval, life time
|
||||||
|
or retention of history, use aggregation (30 minutes, hourly, shift, daily, weekly, monthly,
|
||||||
|
yearly maximum / minimum / average / integral / standard deviation / counter / differential
|
||||||
|
summation, ithsag.sup, completion notification), read history (ITEM_HISTORY, GROUP_NAME,
|
||||||
|
INTERPOLATION, ATTRIBUTE), load history from CSV (ithloahis), force a rollover, check storage
|
||||||
|
groups and units (hisdbg, his_units, history files h*.his), repair or recover history
|
||||||
|
(hisrep, hisrecover), or archive and retrieve history (has.sup, hasman, hasdbg, tape, DVD,
|
||||||
|
disk archive). Sources IM 36K10L20-01EN, IM 36K10C40-01EN, IM 36K10L35-01EN.
|
||||||
|
---
|
||||||
|
|
||||||
|
# History management (R1.03)
|
||||||
|
|
||||||
|
Background: `knowledge/manuals/IM36K10C40-01EN.md` (storage group fields, types, aggregation,
|
||||||
|
archive, reading history), `IM36K10L20-01EN.md` (history manager, files, `hisdbg`, utilities,
|
||||||
|
archive administration), `IM36K10L35-01EN.md` (item history processes and setup files).
|
||||||
|
|
||||||
|
Rules:
|
||||||
|
- Run `system-check` first; follow the user's chosen way of working.
|
||||||
|
- **Deleting a storage group, a unit or unknown files deletes history for good.** Life time
|
||||||
|
changes can delete old units at the next rollover. Only with the user's approval, and never
|
||||||
|
on production data without a backup.
|
||||||
|
- A new storage group stores nothing until CI Server is restarted (ISS-006): plan the restart
|
||||||
|
with the user (admin).
|
||||||
|
- `has.sup` / `ithsag.sup` / `ith*.sup` changes need admin rights and a restart: hand them to
|
||||||
|
the user (skill `portal-setup`, task `change-setup-file.md`).
|
||||||
|
|
||||||
|
| Task | File | Status |
|
||||||
|
|---|---|---|
|
||||||
|
| Create item storage groups (Event/Item, Scan/Time, Aggregation) and add items by quick load; remove them | `tasks/storage-groups.md` | verified |
|
||||||
|
| Read history with `dssqld` (`ITEM_HISTORY`, per group); aggregates | `tasks/storage-groups.md` §4 | verified |
|
||||||
|
| Load history from CSV (`ithloahis`); which time stamps are accepted | skill `system-management`, task `load-history.md` | verified |
|
||||||
|
| Check groups, units, clients, rollover with `hisdbg` | `tasks/history-checks.md` | verified |
|
||||||
|
| Archive / retrieve, `hasdbg` | C40 summary §4, L20 summary §5 | from docs (no archive device) |
|
||||||
|
| Repair and recovery (`hisrep`, `hisrecover`, `isfrename`, `hiswrn`) | L20 summary §4 | from docs |
|
||||||
|
| Reading history from classes, reports, ODBC | C40 summary §5 | from docs (phases 6, 11) |
|
||||||
46
.claude/skills/history-management/tasks/history-checks.md
Normal file
46
.claude/skills/history-management/tasks/history-checks.md
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
---
|
||||||
|
task: Check storage groups, units and history clients with hisdbg; force a rollover
|
||||||
|
version: R1.03
|
||||||
|
source: IM 36K10L20-01EN §2.1, §3.1; IM 36K10C40-01EN §5.1; practiced on the test system and CI-Eng-Sample 2026-10-01
|
||||||
|
status: verified
|
||||||
|
---
|
||||||
|
|
||||||
|
# History checks (`hisdbg`)
|
||||||
|
|
||||||
|
Interactive; pipe the answers from bash with a timeout. The first answer is the node (blank =
|
||||||
|
local), the last `-1` exits. Never send blank lines at the action prompt blindly (a blank repeats
|
||||||
|
the previous action).
|
||||||
|
|
||||||
|
```
|
||||||
|
printf '\n1\n20\n6\n-1\n' | timeout 20 hisdbg
|
||||||
|
printf '\n21\n<GROUP>\n3\n\n-1\n' | timeout 20 hisdbg
|
||||||
|
```
|
||||||
|
|
||||||
|
| Option | Shows | Safe |
|
||||||
|
|---|---|---|
|
||||||
|
| 1 | Statistics: group count, logged-in clients, unit starts / stops / rollovers / deletions since start | yes |
|
||||||
|
| 20 | All groups: name, node,group number, history type (24 item, 21 alarm, 6 audit, 1058 report, 36 system log, 4 station statistics) | yes |
|
||||||
|
| 21 `<name>` | Group info: path, next unit and file name, opt_type (`1 1` Scan/Time, `2 2` Event/Item, `4 4` Aggregation), start, stop, first rollover, interval, life time (all GMT), GMT/LCT rollover, archiving | yes |
|
||||||
|
| 3 (then blank = this group) | Units: unit, data, file, start, stop or `--- active ---`, delete time | yes |
|
||||||
|
| 6 | Clients logged in at the history manager | yes |
|
||||||
|
| 11 | Unknown history files | yes |
|
||||||
|
| 5 | Force rollover of the current group (closes the active unit, starts the next) | changes files — with approval |
|
||||||
|
| 4, 8, 10, 12, 9 | Delete unit / group, restore unit, delete unknown files, change schedule | **no — never without explicit approval** |
|
||||||
|
|
||||||
|
History files are in `%TLS_ALLUSERS_PATH%\tls\his\` (path shown by option 21):
|
||||||
|
`h<node><group><unit><data>.his` with base-32 digits, e.g. group 1,54 → `h0101m…`.
|
||||||
|
|
||||||
|
## What to look for
|
||||||
|
|
||||||
|
- New group but no history: no active unit after loading → restart CI Server (ISS-006).
|
||||||
|
- Unit start dates: the first unit of an Event/Item or Aggregation group is dated 2 days back
|
||||||
|
(`gap_time`); history loaded before the first unit opened after the restart is dropped
|
||||||
|
(see `storage-groups.md` §5).
|
||||||
|
- After a CI Server restart the unit sequence increases (the start script runs `hisrep`).
|
||||||
|
- Delete times = stop time + life time.
|
||||||
|
|
||||||
|
## Verified (2026-10-01)
|
||||||
|
|
||||||
|
45 groups, 30 clients; `CIENG_EVENT` group 1,54, opt_type `2 2`, daily GMT rollover, life 7
|
||||||
|
days; units 1,1 (created at load) → 3,1 after restart → forced rollover closed 3,1 at 12:05:26
|
||||||
|
and opened 3,2. `CIENG_SCAN10S` 1,55 `1 1`; `CIENG_AGG` 1,56 `4 4` with extra `h0101ozzz…` files.
|
||||||
114
.claude/skills/history-management/tasks/storage-groups.md
Normal file
114
.claude/skills/history-management/tasks/storage-groups.md
Normal file
|
|
@ -0,0 +1,114 @@
|
||||||
|
---
|
||||||
|
task: Create item storage groups (Event/Item, Scan/Time, Aggregation), add items, read history
|
||||||
|
version: R1.03
|
||||||
|
source: IM 36K10C40-01EN §2.1, §3, App. 1; IM 36K10L20-01EN §2.1; practiced on CI-Eng-Sample 2026-10-01
|
||||||
|
status: verified
|
||||||
|
---
|
||||||
|
|
||||||
|
# Item storage groups (quick load)
|
||||||
|
|
||||||
|
Sample files: `examples/CI-Eng-Sample/03_his_group_df.qli` (groups) and `04_item_his_df.qli`
|
||||||
|
(items in groups); removal `89_…`, `90a` (generated by `remove.cmd`), `90_…`. Commands as in
|
||||||
|
skill `system-management` (`dssqld -i` / `-m` / `-r`); `dssqld` exits 0 even on errors — read the
|
||||||
|
summary table.
|
||||||
|
|
||||||
|
## 1. Groups (`HIS_GROUP_DF`)
|
||||||
|
|
||||||
|
```
|
||||||
|
@FIELDS
|
||||||
|
NAME,DESCRIPTION,TYPE,COL_STOR_TYPE,LIFE_TIME,ROLLOVER_INT
|
||||||
|
@HIS_GROUP_DF
|
||||||
|
"<GROUP>","<description>","Item","Event/Item","1 weeks","1 days"
|
||||||
|
|
||||||
|
@FIELDS
|
||||||
|
NAME,DESCRIPTION,TYPE,COL_STOR_TYPE,SCAN_INTERVAL,STORE_QUALITY,LIFE_TIME,ROLLOVER_INT
|
||||||
|
@HIS_GROUP_DF
|
||||||
|
"<GROUP>","<description>","Item","Scan/Time",10,1,"1 days","1 hours"
|
||||||
|
|
||||||
|
@FIELDS
|
||||||
|
NAME,DESCRIPTION,TYPE,COL_STOR_TYPE,STORE_QUALITY,LIFE_TIME,ROLLOVER_INT,AGG_PERIOD_HOUR,AGG_PERIOD_30MIN
|
||||||
|
@HIS_GROUP_DF
|
||||||
|
"<GROUP>","<description>","Item","Aggregation",1,"4 weeks","1 weeks",1,1
|
||||||
|
```
|
||||||
|
|
||||||
|
- Name ≤ 16 characters. `COL_STOR_TYPE`: `Scan/Time`, `Event/Item`, `Event/Event`,
|
||||||
|
`Direct/Event`, `Direct/Item`, `Aggregation`. Other fields: C40 summary §2 (priority, data
|
||||||
|
compression, averaging, samples per record, shift/day/week settings, completion item).
|
||||||
|
- Defaults filled in by the system: first rollover at the next interval boundary, aggregation
|
||||||
|
shift 8 h from 00:00, week from Monday.
|
||||||
|
- Size the life time to the disk: every unit older than the life time is deleted at rollover.
|
||||||
|
|
||||||
|
## 2. Items in a group (`ITEM_HIS_DF`)
|
||||||
|
|
||||||
|
```
|
||||||
|
@FIELDS
|
||||||
|
NAME,ITEM_NAME,GROUP_NAME,ON_VALUE_CHANGE,ON_STATUS_CHANGE
|
||||||
|
@ITEM_HIS_DF
|
||||||
|
"<GROUP>:<Section>.<Tag>","<Section>.<Tag>","<GROUP>",1,1
|
||||||
|
|
||||||
|
@FIELDS
|
||||||
|
NAME,ITEM_NAME,GROUP_NAME
|
||||||
|
@ITEM_HIS_DF
|
||||||
|
"<SCANGROUP>:<Section>.<Tag>","<Section>.<Tag>","<SCANGROUP>"
|
||||||
|
|
||||||
|
@FIELDS
|
||||||
|
NAME,ITEM_NAME,GROUP_NAME,STORE_AGG_MAX,STORE_AGG_MIN,STORE_AGG_AVG
|
||||||
|
@ITEM_HIS_DF
|
||||||
|
"<AGGGROUP>:<Section>.<Tag>","<Section>.<Tag>","<AGGGROUP>",1,1,1
|
||||||
|
```
|
||||||
|
|
||||||
|
Event triggers (`ON_*`) matter for event groups; aggregates (`STORE_AGG_MAX`, `_MIN`, `_AVG`,
|
||||||
|
`_INTG` + `AGG_INTG_PERIOD`, `_STDV`, `_CNT`, `_DIFF_SUM` + range/percentage) for aggregation
|
||||||
|
groups. Load the group first; a short pause before linking items avoids a failure seen once
|
||||||
|
(`load.cmd` waits 5 s).
|
||||||
|
|
||||||
|
## 3. Restart
|
||||||
|
|
||||||
|
**A new group stores nothing until CI Server is restarted** (verified: groups loaded at 11:32
|
||||||
|
and 11:54 started storing only after the 12:00 restart). Ask the user to restart the CI Service
|
||||||
|
(admin) and check the active unit with `history-checks.md`.
|
||||||
|
|
||||||
|
## 4. Read history
|
||||||
|
|
||||||
|
```
|
||||||
|
@SELECT
|
||||||
|
'ITEM_NAME = "<Section>.<Tag>" and GROUP_NAME = "<GROUP>" and SAMPLE_TIME > "<dd-mm-yyyy hh:mm:ss>" and SAMPLE_TIME < "<dd-mm-yyyy hh:mm:ss>"'
|
||||||
|
@ITEM_HISTORY
|
||||||
|
```
|
||||||
|
|
||||||
|
`dssqld -e <out>.qli <filter>.qli -c`. Item name and a time range are required; times are local.
|
||||||
|
`GROUP_NAME` picks one group (otherwise every group with the item answers). Columns:
|
||||||
|
`SAMPLE_TIME`, `SAMPLE_END_TIME`, `INTERVAL_TIME`, `ITEM_VALUE`, `QUALITY`, `INITIAL_VALUE`
|
||||||
|
(1 = value at unit start), `STATUS`, `INTERPOLATION`, `ATTRIBUTE`, `GROUP_NAME`, …
|
||||||
|
|
||||||
|
Aggregates: add `and INTERPOLATION = "<period>" and ATTRIBUTE = "<aggregate>"`.
|
||||||
|
Periods (installed names, from `ithdbg`): `Hour`, `Shift`, `Day`, `Week`, `Month`, `Year`,
|
||||||
|
**`30Minutes`** (`"30 minutes"` is refused: `DSSP-E-NOTRANSF … illegal value`). Aggregates:
|
||||||
|
`Maximum`, `Minimum`, `Average`, `Integration`, `Standard deviation`, `Counter`,
|
||||||
|
`Difference summation` (`ithdbg` spelling; the manual writes *Differential summation*).
|
||||||
|
`SAMPLE_TIME` is the start of the period; `QUALITY` 1000 = all source values online.
|
||||||
|
|
||||||
|
**Source group:** aggregation (and retrieval) uses the item's **highest-priority** storage
|
||||||
|
group as its source. If the item is in several groups with the same priority, the aggregates
|
||||||
|
stay empty without any message (ISS-040). Give one source group a higher `PRIORITY`.
|
||||||
|
|
||||||
|
Check: `ithsag.log` in `%TLS_LOG_PATH%` logs `[INFO: Aggregation Completed] Group
|
||||||
|
Name:<group> Period Type:<n>` (8 = 30 min, 2 = hour) about 1–2 min after each period; `ithdbg`
|
||||||
|
20 retrieves one aggregate (`<item>`, attribute 100 max / 101 min / 102 avg / 103 integral /
|
||||||
|
104 std dev / 105 counter / 106 diff. sum, interpol 8 or 2, group, interval ms, start, end):
|
||||||
|
`0x09 = ITM error` means no value for that period.
|
||||||
|
|
||||||
|
## 5. Remove
|
||||||
|
|
||||||
|
Items first (`ITEM_HIS_DF` names), then give each group a `STOP_TIME` in the future with
|
||||||
|
`dssqld -m`, wait until it has passed, then `dssqld -r` the groups (an active unit blocks the
|
||||||
|
delete: `HIS-E-GROUPHASUNT`, ISS-005). `remove.cmd` does this for all three sample groups.
|
||||||
|
Removing a group deletes its history.
|
||||||
|
|
||||||
|
## Verified (CI-Eng-Sample, 2026-10-01)
|
||||||
|
|
||||||
|
| Group | Type | Result |
|
||||||
|
|---|---|---|
|
||||||
|
| `CIENG_EVENT` | Event/Item, 1 week / 1 day | Live writes stored (12:04:56 = 112); `ithloahis` into active and closed units stored |
|
||||||
|
| `CIENG_SCAN10S` | Scan/Time 10 s, quality, 1 day / 1 hour | `TANK1.LEVEL` and `INFLOW` every 10 s after the restart |
|
||||||
|
| `CIENG_AGG` | Aggregation 30 min + hour, 4 weeks / 1 week | Empty while `CIENG_EVENT` and `CIENG_SCAN10S` both had priority 0; after `CIENG_SCAN10S` got priority 10, 13:30–14:00 gave max 77, min 33, average 52.7, quality 1000 (written values 33–77) |
|
||||||
|
|
@ -15,8 +15,15 @@ item storage group of type *Event/Item* or *Event/Event*. The sample project pro
|
||||||
|
|
||||||
- A **new** storage group stores nothing until CI Server has been restarted (stop, then start
|
- A **new** storage group stores nothing until CI Server has been restarted (stop, then start
|
||||||
the CI Service). Restart after creating a group.
|
the CI Service). Restart after creating a group.
|
||||||
- Only samples dated **after the start of the current storage unit** were stored; older ones
|
- Samples are stored into the active unit **or an earlier unit opened by the storage process
|
||||||
were silently skipped (see `knowledge/issues.md` ISS-006). A restart starts a new unit.
|
since the last restart** (e.g. one closed by a forced rollover). Samples older than the first
|
||||||
|
unit opened after the restart are **dropped without any message**, even with `-l`, and even
|
||||||
|
when an older unit's time range covers them (verified 2026-10-01, ISS-006). A restart closes
|
||||||
|
the active unit and starts a new one, so load old data **before** restarting, or not at all.
|
||||||
|
Check the unit times first: skill `history-management`, task `history-checks.md`.
|
||||||
|
- A dropped sample can still become the initial value of the next unit at the next rollover
|
||||||
|
(ISS-038): check the result after loading.
|
||||||
|
- Loaded samples appear in `ITEM_HISTORY` a few seconds after `ithloahis` returns.
|
||||||
|
|
||||||
## Input files
|
## Input files
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,3 +11,19 @@ NAME,DESCRIPTION,TYPE,COL_STOR_TYPE,LIFE_TIME,ROLLOVER_INT
|
||||||
|
|
||||||
@HIS_GROUP_DF
|
@HIS_GROUP_DF
|
||||||
"CIENG_EVENT","CI-Eng-Sample event history","Item","Event/Item","1 weeks","1 days"
|
"CIENG_EVENT","CI-Eng-Sample event history","Item","Event/Item","1 weeks","1 days"
|
||||||
|
|
||||||
|
! Scan/Time group: every item sampled every SCAN_INTERVAL seconds, with quality codes.
|
||||||
|
! PRIORITY 10 makes it the source for retrieval and aggregation of items that are also in
|
||||||
|
! CIENG_EVENT (priority 0); with equal priorities the aggregation got no source data (ISS-040).
|
||||||
|
@FIELDS
|
||||||
|
NAME,DESCRIPTION,TYPE,COL_STOR_TYPE,SCAN_INTERVAL,STORE_QUALITY,PRIORITY,LIFE_TIME,ROLLOVER_INT
|
||||||
|
|
||||||
|
@HIS_GROUP_DF
|
||||||
|
"CIENG_SCAN10S","CI-Eng-Sample 10 s scan history","Item","Scan/Time",10,1,10,"1 days","1 hours"
|
||||||
|
|
||||||
|
! Aggregation group: 30-minute and hourly aggregates (AGG_PERIOD_HOUR is always on)
|
||||||
|
@FIELDS
|
||||||
|
NAME,DESCRIPTION,TYPE,COL_STOR_TYPE,STORE_QUALITY,LIFE_TIME,ROLLOVER_INT,AGG_PERIOD_HOUR,AGG_PERIOD_30MIN
|
||||||
|
|
||||||
|
@HIS_GROUP_DF
|
||||||
|
"CIENG_AGG","CI-Eng-Sample aggregation","Item","Aggregation",1,"4 weeks","1 weeks",1,1
|
||||||
|
|
|
||||||
|
|
@ -11,3 +11,18 @@ NAME,ITEM_NAME,GROUP_NAME,ON_VALUE_CHANGE,ON_STATUS_CHANGE
|
||||||
@ITEM_HIS_DF
|
@ITEM_HIS_DF
|
||||||
"CIENG_EVENT:CI-Eng-Sample.TANK1.LEVEL","CI-Eng-Sample.TANK1.LEVEL","CIENG_EVENT",1,1
|
"CIENG_EVENT:CI-Eng-Sample.TANK1.LEVEL","CI-Eng-Sample.TANK1.LEVEL","CIENG_EVENT",1,1
|
||||||
"CIENG_EVENT:CI-Eng-Sample.TANK1.INFLOW","CI-Eng-Sample.TANK1.INFLOW","CIENG_EVENT",1,1
|
"CIENG_EVENT:CI-Eng-Sample.TANK1.INFLOW","CI-Eng-Sample.TANK1.INFLOW","CIENG_EVENT",1,1
|
||||||
|
|
||||||
|
! Scan group: name <group>:<item>, no trigger fields needed
|
||||||
|
@FIELDS
|
||||||
|
NAME,ITEM_NAME,GROUP_NAME
|
||||||
|
|
||||||
|
@ITEM_HIS_DF
|
||||||
|
"CIENG_SCAN10S:CI-Eng-Sample.TANK1.LEVEL","CI-Eng-Sample.TANK1.LEVEL","CIENG_SCAN10S"
|
||||||
|
"CIENG_SCAN10S:CI-Eng-Sample.TANK1.INFLOW","CI-Eng-Sample.TANK1.INFLOW","CIENG_SCAN10S"
|
||||||
|
|
||||||
|
! Aggregation group: choose the aggregates per item (also STORE_AGG_INTG, _STDV, _CNT, _DIFF_SUM)
|
||||||
|
@FIELDS
|
||||||
|
NAME,ITEM_NAME,GROUP_NAME,STORE_AGG_MAX,STORE_AGG_MIN,STORE_AGG_AVG
|
||||||
|
|
||||||
|
@ITEM_HIS_DF
|
||||||
|
"CIENG_AGG:CI-Eng-Sample.TANK1.LEVEL","CI-Eng-Sample.TANK1.LEVEL","CIENG_AGG",1,1,1
|
||||||
|
|
|
||||||
|
|
@ -11,3 +11,6 @@ NAME
|
||||||
@ITEM_HIS_DF
|
@ITEM_HIS_DF
|
||||||
"CIENG_EVENT:CI-Eng-Sample.TANK1.LEVEL"
|
"CIENG_EVENT:CI-Eng-Sample.TANK1.LEVEL"
|
||||||
"CIENG_EVENT:CI-Eng-Sample.TANK1.INFLOW"
|
"CIENG_EVENT:CI-Eng-Sample.TANK1.INFLOW"
|
||||||
|
"CIENG_SCAN10S:CI-Eng-Sample.TANK1.LEVEL"
|
||||||
|
"CIENG_SCAN10S:CI-Eng-Sample.TANK1.INFLOW"
|
||||||
|
"CIENG_AGG:CI-Eng-Sample.TANK1.LEVEL"
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,11 @@ ENGLISH
|
||||||
@VERSION
|
@VERSION
|
||||||
1.03.00
|
1.03.00
|
||||||
|
|
||||||
! Remove CI-Eng-Sample storage group (deletes its history)
|
! Remove CI-Eng-Sample storage groups (deletes their history)
|
||||||
@FIELDS
|
@FIELDS
|
||||||
NAME
|
NAME
|
||||||
|
|
||||||
@HIS_GROUP_DF
|
@HIS_GROUP_DF
|
||||||
"CIENG_EVENT"
|
"CIENG_EVENT"
|
||||||
|
"CIENG_SCAN10S"
|
||||||
|
"CIENG_AGG"
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,8 @@ cmd /c "<repo>\examples\CI-Eng-Sample\remove.cmd"
|
||||||
| `CIENG_JFLOW` | Class (Java) | Attaches `<object section>.INFLOW`; creates `<object>.sPerMin` = inflow / 60; logs each change |
|
| `CIENG_JFLOW` | Class (Java) | Attaches `<object section>.INFLOW`; creates `<object>.sPerMin` = inflow / 60; logs each change |
|
||||||
| `CI-Eng-Sample.TANK1.JFLOW` | Object | `CIENG_JFLOW`; creates item `TANK1.JFLOW.sPerMin` (mixed case, as the Java identifier) |
|
| `CI-Eng-Sample.TANK1.JFLOW` | Object | `CIENG_JFLOW`; creates item `TANK1.JFLOW.sPerMin` (mixed case, as the Java identifier) |
|
||||||
| `CIENG_EVENT` | Item storage group | Event/Item, lifetime 1 week, rollover 1 day |
|
| `CIENG_EVENT` | Item storage group | Event/Item, lifetime 1 week, rollover 1 day |
|
||||||
|
| `CIENG_SCAN10S` | Item storage group | Scan/Time every 10 s with quality, priority 10 (source for aggregation), lifetime 1 day, rollover 1 hour; `TANK1.LEVEL`, `TANK1.INFLOW` |
|
||||||
|
| `CIENG_AGG` | Item storage group | Aggregation 30 min + hourly, lifetime 4 weeks, rollover 1 week; `TANK1.LEVEL` max/min/average (read with `INTERPOLATION = "30Minutes"` / `"Hour"`, `ATTRIBUTE = "Maximum"` …) |
|
||||||
| `CI-Eng-Sample.PLC1` | Section | Modbus loopback station |
|
| `CI-Eng-Sample.PLC1` | Section | Modbus loopback station |
|
||||||
| `CI-Eng-Sample.PLC1.COMM_OK` | Item, Boolean | Status item of station `CIENG_PLC` (1 = communicating, status 22 when off-scan) |
|
| `CI-Eng-Sample.PLC1.COMM_OK` | Item, Boolean | Status item of station `CIENG_PLC` (1 = communicating, status 22 when off-scan) |
|
||||||
| `CI-Eng-Sample.PLC1.SETPOINT` / `.READBACK` | Items, Integer | Written to holding register 1 (`RO:1`) / read from input register 1 (`RI:1`), same memory |
|
| `CI-Eng-Sample.PLC1.SETPOINT` / `.READBACK` | Items, Integer | Written to holding register 1 (`RO:1`) / read from input register 1 (`RI:1`), same memory |
|
||||||
|
|
@ -85,7 +87,7 @@ New items start with status 13 (`NOT INIT`) until a value is written.
|
||||||
| `01_section_df.qli` | Sections (`SECTION_DF`); parents before children |
|
| `01_section_df.qli` | Sections (`SECTION_DF`); parents before children |
|
||||||
| `02_item_df.qli` | Items (`ITEM_DF`) |
|
| `02_item_df.qli` | Items (`ITEM_DF`) |
|
||||||
| `02b_sub_item_df.qli` | Sub-items (`SUB_ITEM_DF`) |
|
| `02b_sub_item_df.qli` | Sub-items (`SUB_ITEM_DF`) |
|
||||||
| `03_his_group_df.qli` | Item storage group (`HIS_GROUP_DF`) |
|
| `03_his_group_df.qli` | Item storage groups (`HIS_GROUP_DF`): event, scan, aggregation |
|
||||||
| `04_item_his_df.qli` | Items in the storage group (`ITEM_HIS_DF`, name `<group>:<item>`) |
|
| `04_item_his_df.qli` | Items in the storage group (`ITEM_HIS_DF`, name `<group>:<item>`) |
|
||||||
| `05_trigger_df.qli`, `06_class_df.qli`, `07_object_df.qli` | Trigger group; classes (source in the `METHOD` memo, `@"` … `"@`, `COMPILE` 1; Traditional and Java); objects (`ATTR_VALUE_1` = prompt answer) |
|
| `05_trigger_df.qli`, `06_class_df.qli`, `07_object_df.qli` | Trigger group; classes (source in the `METHOD` memo, `@"` … `"@`, `COMPILE` 1; Traditional and Java); objects (`ATTR_VALUE_1` = prompt answer) |
|
||||||
| `08_auth_group_df.qli` | Authorization group (`AUTH_GROUP_DF`) |
|
| `08_auth_group_df.qli` | Authorization group (`AUTH_GROUP_DF`) |
|
||||||
|
|
@ -150,7 +152,6 @@ testing. See the `system-management` skill, task `monitoring-processes.md`.
|
||||||
|
|
||||||
| Phase | Adds |
|
| Phase | Adds |
|
||||||
|---|---|
|
|---|---|
|
||||||
| 9 | More storage groups (scan/time, aggregation) |
|
|
||||||
| 10 | A display and symbol |
|
| 10 | A display and symbol |
|
||||||
| 11 | A report |
|
| 11 | A report |
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
@echo off
|
@echo off
|
||||||
rem Remove CI-Eng-Sample from a CI Server R1.03 TEST system (also deletes its history).
|
rem Remove CI-Eng-Sample from a CI Server R1.03 TEST system (also deletes its history).
|
||||||
rem Run in an elevated prompt while CI Server is running; call this script by full path.
|
rem Run in an elevated prompt while CI Server is running; call this script by full path.
|
||||||
rem Order: object, class, trigger group, storage links, stop + delete storage group, items, sections (children first).
|
rem Order: object, class, trigger group, storage links, stop + delete storage groups, items, sections (children first).
|
||||||
rem A storage group with an active unit cannot be deleted (HIS-E-GROUPHASUNT), so the
|
rem A storage group with an active unit cannot be deleted (HIS-E-GROUPHASUNT), so the
|
||||||
rem group first gets a stop time one minute ahead; the script waits until it has passed.
|
rem group first gets a stop time one minute ahead; the script waits until it has passed.
|
||||||
cd /d "%~dp0"
|
cd /d "%~dp0"
|
||||||
|
|
@ -16,7 +16,7 @@ dssqld -r 86_remove_object_df.qli -l 86_remove_object_df.qlo
|
||||||
dssqld -r 87_remove_class_df.qli -l 87_remove_class_df.qlo
|
dssqld -r 87_remove_class_df.qli -l 87_remove_class_df.qlo
|
||||||
dssqld -r 88_remove_trigger_df.qli -l 88_remove_trigger_df.qlo
|
dssqld -r 88_remove_trigger_df.qli -l 88_remove_trigger_df.qlo
|
||||||
dssqld -r 89_remove_item_his_df.qli -l 89_remove_item_his_df.qlo
|
dssqld -r 89_remove_item_his_df.qli -l 89_remove_item_his_df.qlo
|
||||||
powershell -NoProfile -Command "$t=(Get-Date).AddMinutes(1).ToString('dd-MM-yyyy HH:mm:ss'); \"@LANGUAGE`r`nENGLISH`r`n`r`n@VERSION`r`n1.03.00`r`n`r`n@FIELDS`r`nNAME,STOP_TIME`r`n`r`n@HIS_GROUP_DF`r`n\"\"CIENG_EVENT\"\",\"\"$t\"\"`r`n\" | Set-Content -Encoding ascii 90a_stop_his_group_df.qli"
|
powershell -NoProfile -Command "$t=(Get-Date).AddMinutes(1).ToString('dd-MM-yyyy HH:mm:ss'); \"@LANGUAGE`r`nENGLISH`r`n`r`n@VERSION`r`n1.03.00`r`n`r`n@FIELDS`r`nNAME,STOP_TIME`r`n`r`n@HIS_GROUP_DF`r`n\"\"CIENG_EVENT\"\",\"\"$t\"\"`r`n\"\"CIENG_SCAN10S\"\",\"\"$t\"\"`r`n\"\"CIENG_AGG\"\",\"\"$t\"\"`r`n\" | Set-Content -Encoding ascii 90a_stop_his_group_df.qli"
|
||||||
dssqld -m 90a_stop_his_group_df.qli -l 90a_stop_his_group_df.qlo
|
dssqld -m 90a_stop_his_group_df.qli -l 90a_stop_his_group_df.qlo
|
||||||
echo Waiting 75 seconds for the storage group stop time to pass...
|
echo Waiting 75 seconds for the storage group stop time to pass...
|
||||||
powershell -NoProfile -Command "Start-Sleep -Seconds 75"
|
powershell -NoProfile -Command "Start-Sleep -Seconds 75"
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ development system (see "Test system" in `progress.md`); they do not exist on ot
|
||||||
| ISS-003 | 2026-09-30 | DATABASE (`dssqld`) | Filtered export (`dssqld -e <out> <filter>.qli`) failed with a guessed filter syntax (`@ITEM_DF`, `@FIELD`, `@SELECT`). | closed | Closed 2026-09-30 (confirmed by user). 2026-09-30: the quick load **data** format is now known and verified (`@LANGUAGE`, `@VERSION`, `@FIELDS`, `@<DATASET>`, quoted CSV records, `\` continuation, `!` comments; IM 36K10L45 §9.11). Filter syntax found (IM 36K10L50 §3.6) and practiced, awaiting confirmation: a file with `@SELECT`, then the filter in single quotes (strings in double quotes), then `@<DATASET>`; run `dssqld -e <out> <filter>.qli`. `ITEM_HISTORY` returns nothing unless the filter names `ITEM_NAME` and a `SAMPLE_TIME` range (`SAMPLE_TIME > "dd-mm-yyyy hh:mm:ss" and SAMPLE_TIME < ...`). | `.claude/skills/system-management/tasks/export-dataset.md` section "Filtered exports"; `knowledge/manuals/IM36K10J10-01EN.md` §5.6 step 1; `knowledge/progress.md` row "Export a dataset" |
|
| ISS-003 | 2026-09-30 | DATABASE (`dssqld`) | Filtered export (`dssqld -e <out> <filter>.qli`) failed with a guessed filter syntax (`@ITEM_DF`, `@FIELD`, `@SELECT`). | closed | Closed 2026-09-30 (confirmed by user). 2026-09-30: the quick load **data** format is now known and verified (`@LANGUAGE`, `@VERSION`, `@FIELDS`, `@<DATASET>`, quoted CSV records, `\` continuation, `!` comments; IM 36K10L45 §9.11). Filter syntax found (IM 36K10L50 §3.6) and practiced, awaiting confirmation: a file with `@SELECT`, then the filter in single quotes (strings in double quotes), then `@<DATASET>`; run `dssqld -e <out> <filter>.qli`. `ITEM_HISTORY` returns nothing unless the filter names `ITEM_NAME` and a `SAMPLE_TIME` range (`SAMPLE_TIME > "dd-mm-yyyy hh:mm:ss" and SAMPLE_TIME < ...`). | `.claude/skills/system-management/tasks/export-dataset.md` section "Filtered exports"; `knowledge/manuals/IM36K10J10-01EN.md` §5.6 step 1; `knowledge/progress.md` row "Export a dataset" |
|
||||||
| ISS-004 | 2026-09-30 | ITEM (`itmval`) | `itmval -g -a <1..5>` returns `ITM-E-WRONG_ATT` on `AID.WRPS.*` items, so reading limits is unproven. | closed | Closed 2026-09-30 (confirmed by user). On `CI-Eng-Sample.TANK1.LEVEL` (limits set) `-a 1..5` returned deadband 0, low 20, high 80, low-low 10, high-high 90. The error only occurs on items without limits. | `.claude/skills/system-management/tasks/read-write-item.md` (limits section); `knowledge/progress.md` row "Read an item with `itmval -g`" |
|
| ISS-004 | 2026-09-30 | ITEM (`itmval`) | `itmval -g -a <1..5>` returns `ITM-E-WRONG_ATT` on `AID.WRPS.*` items, so reading limits is unproven. | closed | Closed 2026-09-30 (confirmed by user). On `CI-Eng-Sample.TANK1.LEVEL` (limits set) `-a 1..5` returned deadband 0, low 20, high 80, low-low 10, high-high 90. The error only occurs on items without limits. | `.claude/skills/system-management/tasks/read-write-item.md` (limits section); `knowledge/progress.md` row "Read an item with `itmval -g`" |
|
||||||
| ISS-005 | 2026-09-30 | DATABASE (`dssqld`) | Loading `04_item_his_df.qli` straight after creating the storage group gave 2 errors once; three other runs were clean. Error text not captured. | open | Added a 5 s pause in `load.cmd`. If it happens again, capture `04_item_his_df.qlo`. | `examples/CI-Eng-Sample/load.cmd`; `.claude/skills/system-management/tasks/load-remove-records.md` |
|
| ISS-005 | 2026-09-30 | DATABASE (`dssqld`) | Loading `04_item_his_df.qli` straight after creating the storage group gave 2 errors once; three other runs were clean. Error text not captured. | open | Added a 5 s pause in `load.cmd`. If it happens again, capture `04_item_his_df.qlo`. | `examples/CI-Eng-Sample/load.cmd`; `.claude/skills/system-management/tasks/load-remove-records.md` |
|
||||||
| ISS-006 | 2026-09-30 | HISTORY (`ithloahis`) | Samples dated before the start of the current storage unit were not stored (no error shown); samples after it were. Also, a new storage group stored nothing until CI Server was restarted. | open | Confirm with History Management (IM 36K10L20) in phase 9: how to load into older units, and whether a restart is really required. 2026-09-30 (phase 5): IM 36K10L35 §1.3/§5 explains the first part: event storage picks the unit by time stamp, never older than 60 units, and within the storage process's `gap_time` (ITHEEX/ITHEIX 2880 min) and, for EVENT/ITEM, `max_sample_delay` (ITHEIX 14400 min); older data needs earlier unit files (`hisdbg`, `hisrecover`, `isfrename`), `ithrecover <group> -p` and a restart. Practice in phase 9. | `.claude/skills/system-management/tasks/load-history.md`; `examples/CI-Eng-Sample/README.md`; `knowledge/manuals/IM36K10J10-01EN.md` command-line tools |
|
| ISS-006 | 2026-09-30 | HISTORY (`ithloahis`) | Samples dated before the start of the current storage unit were not stored (no error shown); samples after it were. Also, a new storage group stored nothing until CI Server was restarted. | closed | Closed 2026-10-01 (confirmed by user). Confirm with History Management (IM 36K10L20) in phase 9: how to load into older units, and whether a restart is really required. 2026-09-30 (phase 5): IM 36K10L35 §1.3/§5 explains the first part: event storage picks the unit by time stamp, never older than 60 units, and within the storage process's `gap_time` (ITHEEX/ITHEIX 2880 min) and, for EVENT/ITEM, `max_sample_delay` (ITHEIX 14400 min); older data needs earlier unit files (`hisdbg`, `hisrecover`, `isfrename`), `ithrecover <group> -p` and a restart. Practice in phase 9. 2026-10-01 (phase 9, verified): (1) restart **is** required — `CIENG_SCAN10S` / `CIENG_AGG` loaded at 11:54 and `CIENG_EVENT` reloaded at 11:32 stored nothing until the 12:00 restart, then stored at once. (2) The first unit of a new Event/Item or Aggregation group is dated 2 days back (= `gap_time` 2880 min), but samples loaded into that pre-restart unit (11:50, 30-Sep) were still dropped; samples inside the active unit (12:02) and inside a unit closed by a forced rollover (12:03 into unit 3,1) were stored. So: samples older than the first unit opened since the restart are dropped silently. Loading older data would need `hisrecover` / `isfrename` / `ithrecover` (not practiced). Proposed close: documented in `load-history.md` and skill `history-management`. | `.claude/skills/system-management/tasks/load-history.md`; `examples/CI-Eng-Sample/README.md`; `knowledge/manuals/IM36K10J10-01EN.md` command-line tools |
|
||||||
| ISS-007 | 2026-09-30 | INTEGRATION (monitoring) | `intdskmon` wrote 61.9 for a C: drive that is 61.9 % used / 38.1 % free, although the manual says it monitors the disk free space rate. `intspawn` did nothing when the command path was ~130 characters; a short path worked (limit unknown). | open | Confirm the disk value meaning and the path limit. | `.claude/skills/system-management/tasks/monitoring-processes.md`; `knowledge/manuals/IM36K10J10-01EN.md` §4.1.6; `examples/CI-Eng-Sample/monitoring/` |
|
| ISS-007 | 2026-09-30 | INTEGRATION (monitoring) | `intdskmon` wrote 61.9 for a C: drive that is 61.9 % used / 38.1 % free, although the manual says it monitors the disk free space rate. `intspawn` did nothing when the command path was ~130 characters; a short path worked (limit unknown). | open | Confirm the disk value meaning and the path limit. | `.claude/skills/system-management/tasks/monitoring-processes.md`; `knowledge/manuals/IM36K10J10-01EN.md` §4.1.6; `examples/CI-Eng-Sample/monitoring/` |
|
||||||
| ISS-008 | 2026-09-30 | ACCESS (ODBC server `odbsrv`) | `ci_start.log` on the test system shows `CppServerAPI::Run() failed: InitializeSslCtx(): SSL_CTX_use_certificate_chain_file() failed.` right after ACCESS Service starts. Which component and certificate is not known. | closed | Closed 2026-10-01 (confirmed by user): cause known, ODBC server left as is (not licensed/used on the test system). Identify in phase 7. 2026-10-01 (phase 7): cause found. The message comes from the ODBC server `odbsrv` (ACCESS Service, Simba): `odbsrv.sup` has `USESSL = YES` and `access_start.cmd` points it at `%TLS_ROOT_PATH%\tls\pki\odbsrv\SampleServerCertificate.pem` / `SampleServerKey.pem`, but that folder does not exist and no sample certificate is installed. `odbsrv` exits right after start (`DUR-W-REM_PROC, Process ODBSRV exited unexpectedly`), port 1583 does not listen. Fix (admin, only if ODBC is licensed and wanted): install a certificate + key there, or set `USESSL = NO`. Not applied. Close when the user confirms. | `.claude/skills/installation-security/tasks/setup-check.md`; `knowledge/manuals/IM36K10L45-01EN.md` §1 (done); `.claude/skills/data-access/tasks/access-checks.md` (done) |
|
| ISS-008 | 2026-09-30 | ACCESS (ODBC server `odbsrv`) | `ci_start.log` on the test system shows `CppServerAPI::Run() failed: InitializeSslCtx(): SSL_CTX_use_certificate_chain_file() failed.` right after ACCESS Service starts. Which component and certificate is not known. | closed | Closed 2026-10-01 (confirmed by user): cause known, ODBC server left as is (not licensed/used on the test system). Identify in phase 7. 2026-10-01 (phase 7): cause found. The message comes from the ODBC server `odbsrv` (ACCESS Service, Simba): `odbsrv.sup` has `USESSL = YES` and `access_start.cmd` points it at `%TLS_ROOT_PATH%\tls\pki\odbsrv\SampleServerCertificate.pem` / `SampleServerKey.pem`, but that folder does not exist and no sample certificate is installed. `odbsrv` exits right after start (`DUR-W-REM_PROC, Process ODBSRV exited unexpectedly`), port 1583 does not listen. Fix (admin, only if ODBC is licensed and wanted): install a certificate + key there, or set `USESSL = NO`. Not applied. Close when the user confirms. | `.claude/skills/installation-security/tasks/setup-check.md`; `knowledge/manuals/IM36K10L45-01EN.md` §1 (done); `.claude/skills/data-access/tasks/access-checks.md` (done) |
|
||||||
| ISS-009 | 2026-09-30 | Security Guide | DCOM port range printed as 20500–20550 in the firewall table but "2500–20550" in the OPC configuration table. Taken as a typo for 20500–20550. | open | Confirm on a system with IT security applied. | `knowledge/manuals/IM36K01C30-01EN.md` §4 |
|
| ISS-009 | 2026-09-30 | Security Guide | DCOM port range printed as 20500–20550 in the firewall table but "2500–20550" in the OPC configuration table. Taken as a typo for 20500–20550. | open | Confirm on a system with IT security applied. | `knowledge/manuals/IM36K01C30-01EN.md` §4 |
|
||||||
|
|
@ -57,3 +57,6 @@ development system (see "Test system" in `progress.md`); they do not exist on ot
|
||||||
| 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-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-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 |
|
| 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 |
|
||||||
|
| ISS-038 | 2026-10-01 | HISTORY (`ithloahis` + rollover) | An `ithloahis` sample that was dropped (dated 11:50, before the active unit) still became the **initial value** of the next unit: after a forced rollover at 12:05:26 `ITEM_HISTORY` shows `CI-Eng-Sample.TANK1.INFLOW` = 95 (`INITIAL_VALUE` 1) although the item's value was 112. History after loading old samples can therefore show a wrong value at the next rollover. | open | Accept as a caution (documented in `load-history.md`), or retest after a CI Server restart to see whether the wrong initial value persists. | `.claude/skills/system-management/tasks/load-history.md`; `knowledge/manuals/IM36K10C40-01EN.md` §3 |
|
||||||
|
| ISS-039 | 2026-10-01 | HISTORY (setup) | Installed vs manuals: `hisdbg` menu runs to option 22 (manual text: `-1 - 10`, list to 22) and lists history types 4 (`STATION_STAT`) and 36 (`SYS_LOG`) not in IM 36K10L20 §3.1; `ithsag.sup` keyword `run_interval` (manual: *Heartbeat*) and `queue_size` 500 KB (manual default 200); the option-type table in IM 36K10L20 §3.1 is garbled in the PDF (observed: Scan/Time `1 1`, Event/Item `2 2`, Aggregation `4 4`). | open | Installed software is the reference (standing user decision). Close when the user confirms. | `knowledge/manuals/IM36K10L20-01EN.md` §3; `knowledge/manuals/IM36K10C40-01EN.md` §2 |
|
||||||
|
| ISS-040 | 2026-10-01 | HISTORY (aggregation) | Aggregation group `CIENG_AGG` (30 min + hour, `TANK1.LEVEL` max/min/avg) ran (`ithsag.log`: *Aggregation Completed*) but stored no values: retrieval gave `0x09 = ITM error` per period. `TANK1.LEVEL` was in `CIENG_EVENT` and `CIENG_SCAN10S`, both priority 0. Also `INTERPOLATION = "30 minutes"` is refused by `dssqld`; the installed name is `30Minutes`. | closed | Closed 2026-10-01 (confirmed by user). 2026-10-01 14:02: after `CIENG_SCAN10S` got `PRIORITY` 10, the 13:30–14:00 period stored max 77, min 33, avg 52.7, quality 1000 (`ithdbg` 20 and `dssqld` with `INTERPOLATION = "30Minutes"`). Cause: equal source priorities (C40 §2.1 says the highest-priority group is the source, but not that a tie gives nothing). Sample fixed (priority 10). The hourly value for 13:00–14:00 was not stored (first half had no source); not rechecked. Proposed close. | `.claude/skills/history-management/tasks/storage-groups.md` §4 (done); `knowledge/manuals/IM36K10C40-01EN.md` §3 (done); `examples/CI-Eng-Sample/03_his_group_df.qli`, `README.md` (done) |
|
||||||
|
|
|
||||||
124
knowledge/manuals/IM36K10C40-01EN.md
Normal file
124
knowledge/manuals/IM36K10C40-01EN.md
Normal file
|
|
@ -0,0 +1,124 @@
|
||||||
|
---
|
||||||
|
manual: IM 36K10C40-01EN
|
||||||
|
title: Engineering Module - Historical
|
||||||
|
edition: 3rd Edition, Sep. 2023
|
||||||
|
version: R1.03
|
||||||
|
status: Event/Item, Scan/Time and Aggregation storage groups verified by quick load on CI-Eng-Sample 2026-10-01; ithloahis loading rules verified; Engineering Module forms, archive and retrieve from docs
|
||||||
|
---
|
||||||
|
|
||||||
|
# Engineering Module - Historical (R1.03)
|
||||||
|
|
||||||
|
Item storage groups (*Configuration > Historisation > Item storage groups*), aggregation and
|
||||||
|
archive in the Engineering Module, plus how history is read. History manager internals:
|
||||||
|
`IM36K10L20-01EN.md`; storage processes: `IM36K10L35-01EN.md`. Section numbers refer to the
|
||||||
|
manual; dataset fields were checked on the installed system.
|
||||||
|
|
||||||
|
## 1. Historical database (§1)
|
||||||
|
|
||||||
|
| Storage group kind | Dataset | Created by |
|
||||||
|
|---|---|---|
|
||||||
|
| Item storage groups | `ITEM_HISTORY` | the engineer, one per collection/storage type and schedule |
|
||||||
|
| Alarm (`ALH`) | `ALARM_CHRONO` | system |
|
||||||
|
| Audit (`ADT`) | `AUDIT_TRAIL` | system |
|
||||||
|
| System log (`SYS_LOG`) | `SYS_LOG` | system |
|
||||||
|
| Reports | report storage | system |
|
||||||
|
|
||||||
|
Items are only stored after they are added to an item storage group (`ITEM_HIS_DF`, name
|
||||||
|
`<group>:<item>`). Displays read history through the trend, alarm overview and report
|
||||||
|
components.
|
||||||
|
|
||||||
|
## 2. Item storage group (§2.1, dataset `HIS_GROUP_DF`)
|
||||||
|
|
||||||
|
| Tab / field | `HIS_GROUP_DF` | Notes |
|
||||||
|
|---|---|---|
|
||||||
|
| Name | `NAME` | max 16 characters |
|
||||||
|
| Type | `TYPE` | `Item` |
|
||||||
|
| Node | `NODE` | cannot be changed later |
|
||||||
|
| Exclude from archive | `EXCLUDE_ARCHIVE` | |
|
||||||
|
| Activation / deactivation time | `START_TIME`, `STOP_TIME` | `STOP_TIME` in the future = stop then (used by `remove.cmd`, ISS-005) |
|
||||||
|
| First rollover, interval | `FIRST_ROLLOVER`, `ROLLOVER_INT` (`"1 hours"`, `"1 days"`, `"1 weeks"`) | |
|
||||||
|
| Correct for daylight saving | `CORRECT_DAYLIGHT` | data is stored in UTC |
|
||||||
|
| Life time, warning time | `LIFE_TIME`, `WARN_TIME` | units older than the life time are deleted at rollover; warning if not archived |
|
||||||
|
| Collection/storage type | `COL_STOR_TYPE` | `Scan/Time`, `Event/Event`, `Event/Item`, `Direct/Event`, `Direct/Item`, `Aggregation` |
|
||||||
|
| Priority | `PRIORITY` | which group answers when an item is in several groups (highest wins; also source for aggregation) |
|
||||||
|
| Data compression | `DATA_COMP` | doubles stored as singles (15 → 7 digits) |
|
||||||
|
| Store quality code | `STORE_QUALITY` | |
|
||||||
|
| Scan interval, averaging | `SCAN_INTERVAL` (s), `AVERAGING_METHOD` (None / Normal / Difference), `AVERAGING_INTERVAL` | Scan/Time only |
|
||||||
|
| Samples per record | `SAMPLES_RECORD` (default 100) | Event/Item, Direct/* |
|
||||||
|
| Fill old record | `FILL_OLD` | Direct/* only |
|
||||||
|
| Aggregation periods | `AGG_PERIOD_30MIN`, `_HOUR` (always on), `_SHIFT`, `_DAY`, `_WEEK`, `_MONTH`, `_YEAR`; `AGG_SHIFT_START`, `AGG_SHIFT_LENGTH`, `AGG_DAY_START`, `AGG_WEEK_START`, `AGG_CORRECT_*_DST` | Aggregation only |
|
||||||
|
| Completion notification item | `AGG_COMP_NOT_ITEM` | string item set to `"<GMT seconds>,<period>,<group>"`; period 2 hour, 3 shift, 4 day, 5 week, 6 month, 7 year, 8 30 min |
|
||||||
|
|
||||||
|
Collection types: **Scan** (fixed interval, no buffering), **Event** (on change; needed for
|
||||||
|
buffering and for migrating history to a CI Core), **Direct** (written by tools/applications).
|
||||||
|
Storage types: **Time** (one record per scan time, predictable size), **Item** (one record per
|
||||||
|
item with many samples), **Event** (one record per event; slow for many samples of one item).
|
||||||
|
|
||||||
|
Item in a group (`ITEM_HIS_DF`): `NAME`, `ITEM_NAME`, `GROUP_NAME`; event triggers
|
||||||
|
`ON_VALUE_CHANGE`, `ON_STATUS_CHANGE`, `ON_QUALITY_CHANGE`, `ON_OPTION_CHANGE`, `ON_EACH_UPDATE`,
|
||||||
|
`ON_FIRST_UPDATE`, `ON_PASS_PIT`; extra values `STORE_VALUE`, `STORE_*_LIMIT`, `STORE_DEADBAND`;
|
||||||
|
aggregates `STORE_AGG_MAX`, `_MIN`, `_AVG`, `_INTG` (+ `AGG_INTG_PERIOD` second/minute/hour/day),
|
||||||
|
`_STDV`, `_CNT` (Boolean: times True), `_DIFF_SUM` (+ `AGG_DIFF_SUM_RANGE` rollover count,
|
||||||
|
`AGG_DIFF_SUM_PERC` leap detection; for counters, more accurate than the integral).
|
||||||
|
Typical: Real/Integer max, min, average, standard deviation, integral; Boolean counter;
|
||||||
|
Integer counter totals differential summation.
|
||||||
|
|
||||||
|
Aggregation quality (with *Store quality code*): 1000 × share of source values that were not
|
||||||
|
offline (other bad statuses do not count). Weekly/monthly/yearly are built from daily values.
|
||||||
|
|
||||||
|
`ithsag.sup` (aggregation process): `run_interval` (manual: *Heartbeat*, spreads the work,
|
||||||
|
600 s), `buffer_size` 20, `event_timeout` 1 s, `gap_time` 2880 min, `max_sample_delay` 14400
|
||||||
|
min, `max_open_files` 10, `queue_size` (installed **500** KB, manual default 200), `dif_sum_noise`.
|
||||||
|
|
||||||
|
## 3. Verified behaviour (CI-Eng-Sample, 2026-10-01)
|
||||||
|
|
||||||
|
- Loaded `CIENG_SCAN10S` (Scan/Time, 10 s) and `CIENG_AGG` (Aggregation, 30 min + hour) with
|
||||||
|
`dssqld -i`, 0 errors. **They stored nothing until CI Server was restarted** (ISS-006); after
|
||||||
|
the restart `TANK1.LEVEL` appeared every 10 s (`SAMPLE_TIME` 12:00:10, 12:00:20, …, status 9).
|
||||||
|
- The first unit of a new Event/Item or Aggregation group is dated 2 days back (= `gap_time`);
|
||||||
|
a Scan/Time group's first unit starts at creation.
|
||||||
|
- Reading one group: add `GROUP_NAME = "<group>"` to the `ITEM_HISTORY` filter. Without it the
|
||||||
|
rows of all groups holding the item are returned.
|
||||||
|
- `ithloahis` into an Event/Item group: samples dated inside the active unit or a unit closed by a
|
||||||
|
rollover were stored (a few seconds later); samples older than the first unit the storage
|
||||||
|
process opened after the restart were dropped **without any message** (also with `-l`). The
|
||||||
|
next unit's initial value then came from the dropped sample (ISS-038).
|
||||||
|
|
||||||
|
- Aggregation (`CIENG_AGG`, 30 min + hour, `TANK1.LEVEL` max/min/avg): the aggregation ran
|
||||||
|
(`%TLS_LOG_PATH%\ithsag.log`: *Aggregation Completed*, period type 8 = 30 min, 2 = hour) but stored
|
||||||
|
nothing while the source item was in two groups of equal priority 0. After giving
|
||||||
|
`CIENG_SCAN10S` priority 10 the 13:30–14:00 period gave max 77 / min 33 / average 52.7,
|
||||||
|
quality 1000 (ISS-040). Filter values: `INTERPOLATION = "30Minutes"` (not "30 minutes"),
|
||||||
|
`"Hour"`; `ATTRIBUTE = "Maximum"` etc. (`ithdbg` lists *Difference summation*).
|
||||||
|
- Full sample remove/reload with all three groups: 0 errors.
|
||||||
|
|
||||||
|
## 4. Archive (§2.2)
|
||||||
|
|
||||||
|
1. Define the device in `has.sup` (tape, or a CD/DVD/disk path) and restart.
|
||||||
|
2. *Historisation > Archive > Initialize storage medium* (label, e.g. the first date) — writes an
|
||||||
|
ID file.
|
||||||
|
3. *Archive > Automatic archive*: daily time; unarchived data is written then. Big archives
|
||||||
|
need a scratch folder (`TEMPORARY-PATH` in `has.sup`).
|
||||||
|
4. *Archive > Retrieve from archive*: period (whole archive runs only), group, keep-free disk
|
||||||
|
space, life time of the restored data; mount the requested media. Restored data is used by
|
||||||
|
reports and trends until its life time ends. (Known issue: alarm attribute databases are not
|
||||||
|
restored, IM 36K01A50.)
|
||||||
|
|
||||||
|
## 5. Reading history (§4)
|
||||||
|
|
||||||
|
- Classes (`DSS_OPEN_ALL("ITEM_HISTORY", "r", r)`, `DSS_SET_FILTER`, `DSS_READ_NEXT`,
|
||||||
|
`DSS_GET_FLOAT(…,"ITEM_VALUE",…)`), reports (`SELECT … FROM ITEM_HISTORY WHERE ITEM_NAME = …
|
||||||
|
and INTERPOLATION = 'Hour' and ATTRIBUTE = 'Maximum' …`), ODBC (only remote way), C / .NET API,
|
||||||
|
`dssqld`, and `ithloahis` for writing.
|
||||||
|
- Aggregates are selected with `INTERPOLATION` (`Hour`, `Day`, `Month`, `Year`, …) and
|
||||||
|
`ATTRIBUTE` (`Maximum`, `Minimum`, `Average`, `Integration`, `Standard deviation`,
|
||||||
|
`Counter`, `Differential summation`).
|
||||||
|
- `ithloahis -f <csv> [-v] [-l] [-i] [-s <section>] [-t GMT|LST|LCT]`: SCAN or EVENT files
|
||||||
|
(skill `system-management`, task `load-history.md`).
|
||||||
|
|
||||||
|
## 6. Troubleshooting (§5)
|
||||||
|
|
||||||
|
`hisdbg` (3 unit info, 20 all groups, 21 group by name), `hisrep`, `hisrecover`, `isfrename`;
|
||||||
|
archive: the `has.sup` status item and `hasdbg` (11 media, 8 overview, 10 delete a medium).
|
||||||
|
Backup example (App. 1.4): `xcopy /E` of `%TLS_ROOT_PATH%\tls` and `%TLS_ALLUSERS_PATH%` into
|
||||||
|
a dated folder (the manual does not say; stopping CI Server first gives a consistent copy).
|
||||||
104
knowledge/manuals/IM36K10L20-01EN.md
Normal file
104
knowledge/manuals/IM36K10L20-01EN.md
Normal file
|
|
@ -0,0 +1,104 @@
|
||||||
|
---
|
||||||
|
manual: IM 36K10L20-01EN
|
||||||
|
title: History Management Engineering
|
||||||
|
edition: 3rd Edition, Sep. 2023 (text marked Sep. 2022)
|
||||||
|
version: R1.03
|
||||||
|
status: hisdbg read-only options, rollover and history file layout verified on the test system 2026-10-01; archive (hasman/hasexe/hasdbg), hisrecover, hisrep, hiswrn from docs; setup files checked read-only
|
||||||
|
---
|
||||||
|
|
||||||
|
# History Management Engineering (R1.03)
|
||||||
|
|
||||||
|
HISTORY Service schedules and administers **history groups** (storage groups) and their
|
||||||
|
**units** (files) for all services that keep history: item history (ITEM Service), the
|
||||||
|
chronological alarm overview (`ALH`), the audit trail, the system log and report definitions.
|
||||||
|
It does not know the contents of the files; the client services write and read them. Section
|
||||||
|
numbers refer to the manual. Engineering Module forms and item storage group types:
|
||||||
|
`IM36K10C40-01EN.md`; item history processes (ITH*): `IM36K10L35-01EN.md`.
|
||||||
|
|
||||||
|
## 1. Processes and data (§1)
|
||||||
|
|
||||||
|
| Process | Role |
|
||||||
|
|---|---|
|
||||||
|
| `HIS` | History manager: schedules start / stop / rollover / delete commands, keeps the administration, serves the message interface. No setup file, no arguments |
|
||||||
|
| `HASMAN` | Archive manager (automatic daily archive, manual archive, retrieve); `has.sup` |
|
||||||
|
| `HASEXE` | Archive executor: accesses the archive device; `has.sup` |
|
||||||
|
| `LGHUMH` | Copies message log entries into the `SYS_LOG` group (started by `history_start.cmd` on the host node) |
|
||||||
|
|
||||||
|
Installed `tls\com\history_start.cmd`: creates `%TLS_HIS_PATH%\has`, runs **`hisrep`
|
||||||
|
automatically at every start** when `his_units.dat` exists, then starts `his`, `lghumh`,
|
||||||
|
`hasexe`, `hasman`.
|
||||||
|
|
||||||
|
Administration (DATABASE Service files in `tls\dat`): `his_proc.dat` (every client that ever
|
||||||
|
logged in; they get *history manager up* at start), `his_groups.dat` (group definitions and
|
||||||
|
schedule), `his_units.dat` (all units with start, stop, delete and warning times).
|
||||||
|
|
||||||
|
Archive status item (`has.sup` `STATUS_ITEM`): statuses `ARCHIVE_A`, `ARCHIVE_M`, `ARCHIVE_R`,
|
||||||
|
`MOUNT_TAPE`, `INIT_TAPE`, `REG_TAPE`, `SKIP_TAPE`, `CANCEL`, `READY` (value 1, normal) and
|
||||||
|
`FAILED` (value 0, Alarm 1). A storage group can be excluded from archiving
|
||||||
|
(`HIS_GROUP_DF` `EXCLUDE_ARCHIVE`).
|
||||||
|
|
||||||
|
## 2. History files (§2.1)
|
||||||
|
|
||||||
|
- Group number = node + sequence; unit number = *unit* sequence (incremented when the group
|
||||||
|
is modified) + *data* sequence (incremented at each rollover).
|
||||||
|
- File names use base-32 digits (`0`–`9`, `a`–`v`): `h<nn><ggg>000000.his` group description,
|
||||||
|
`h<nn><ggg><uuu>000.his` unit description, `h<nn><ggg><uuu><ddd>.his` unit data; reports also
|
||||||
|
`…000000.rpt`. Each is a DATABASE Service file with `.d01` / `.k01` / `.k02` companions.
|
||||||
|
- **Verified** (`%TLS_ALLUSERS_PATH%\tls\his\`, `hisdbg`): `CIENG_EVENT` = group 1,54 →
|
||||||
|
`h0101m…`; `CIENG_SCAN10S` 1,55 → `h0101n…`; `CIENG_AGG` 1,56 → `h0101o…` plus extra
|
||||||
|
`h0101ozzz…` files for the aggregates. After a CI Server restart the unit sequence jumped from
|
||||||
|
1 to 3 (consistent with `hisrep` at start, which increases unit sequences by 1).
|
||||||
|
|
||||||
|
## 3. Debugger `hisdbg` (§3.1)
|
||||||
|
|
||||||
|
Starts by asking for the node (blank = local). Menu (installed: `-1` … `22`):
|
||||||
|
|
||||||
|
| No. | Action | Use |
|
||||||
|
|---|---|---|
|
||||||
|
| 1 | Statistics (groups, logged-in clients, commands, unit starts/stops/rollovers/deletions) | read-only |
|
||||||
|
| 2 / 21 / 22 | Group info (last group / by name / by number): path, group number, next unit and file, his_type, opt_type, start, stop, first rollover, interval, life time, warn time, GMT/LCT rollover, archiving flag, lock state | read-only |
|
||||||
|
| 3 | Unit info of the current group: unit, data, file, start, stop, delete (GMT) | read-only |
|
||||||
|
| 6 / 7 | Logged-in clients / command interests of one client | read-only |
|
||||||
|
| 11 | Show unknown history files | read-only |
|
||||||
|
| 20 | All groups: name, number, type | read-only |
|
||||||
|
| 4 / 8 / 10 / 12 | Delete unit / delete group (no active unit) / restore unit (file must exist) / delete unknown files | **changes history — never without approval** |
|
||||||
|
| 5 | Force rollover (same as Engineering Module *Force rollover*; not within 2 min of the last one) | changes files |
|
||||||
|
| 9 | Change schedule (start, stop, next rollover, interval, life time, GMT rollover, warn time) | changes the group |
|
||||||
|
|
||||||
|
History types: 21 alarm (`ALH`), 24 item, 6 audit (`ADT`), 1058 report definitions; on the test
|
||||||
|
system also 4 (`STATION_STAT`) and 36 (`SYS_LOG`), not listed in the manual (ISS-039).
|
||||||
|
opt_type shows the item collection/storage type (the manual's table is garbled in the PDF);
|
||||||
|
**verified**: Scan/Time `1 1` (`CIENG_SCAN10S`), Event/Item `2 2` (`CIENG_EVENT`),
|
||||||
|
Aggregation `4 4` (`CIENG_AGG`). Times are shown in GMT.
|
||||||
|
|
||||||
|
**Verified on the test system (2026-10-01):** 45 groups, 30 logged-in clients (ITH*, ALH,
|
||||||
|
ADTSTO, DSSSDA/DSSEVT, LGHUMH, EQPIOSTAT, RPTMAN, HIS); group info of `CIENG_EVENT` (path
|
||||||
|
`C:\Users\Public\Yokogawa\tls\his\`, rollover daily at 00:00 GMT, life 7 days, GMT rollover,
|
||||||
|
included in archiving); force rollover of `CIENG_EVENT` closed unit 3,1 and started 3,2.
|
||||||
|
|
||||||
|
## 4. Other utilities (§3.2–§3.5)
|
||||||
|
|
||||||
|
| Utility | Use |
|
||||||
|
|---|---|
|
||||||
|
| `hisrecover <file> <start> <stop>` | Make an unknown unit data file known again (start/stop LCT `dd-mmm-yy hh:mm:ss`); group and unit description must be known |
|
||||||
|
| `hiswrn` | Reset deletion warning times of units saved with a backup prefix |
|
||||||
|
| `hisrep` | Repair unit administration after crashes or full disks: increase unit sequences, close units with stop time 0 using the last time-control record. Runs at every CI Server start |
|
||||||
|
| `hasdbg` | Archive debugger: 1 initialise, 2 mount, 3 register medium, 4/5 get/set automatic archive time, 6 manual archive, 7 retrieve, 8 overview, 9 cancel, 10 delete a medium from the administration, 11 list media, 20 dump medium |
|
||||||
|
|
||||||
|
## 5. Archive (§2.2)
|
||||||
|
|
||||||
|
- `HASMAN` decides what to archive (daily automatic archive or on request), `HASEXE` writes it.
|
||||||
|
Devices: tape (`TAPE-DRIVE`, Windows default `//./TAPE0`) or a disk path (`CD-DRIVE`: local
|
||||||
|
disk, network share, USB, UDF-formatted CD/DVD). One device at a time; restart after
|
||||||
|
changing `has.sup`. Archive size ≈ 20 % of the history data.
|
||||||
|
- Administration: `has_idx_act.dat` (initialise / archive actions) and `has_idx_grp.dat`
|
||||||
|
(groups and units per medium), also copied to each medium. If corrupt: stop CI Server,
|
||||||
|
delete both from `tls\dat`, start, register the latest initialised medium (and the latest
|
||||||
|
used one). Remove damaged media with `hasdbg` 10.
|
||||||
|
- **Installed `has.sup`:** no drive configured (archiving not set up), `COMPRESSION-RATIO 6`,
|
||||||
|
`SH_EOT` / `SH_NO_TAPE` shell signals. Other keywords: `TAPE-SIZE`, `STATUS_ITEM`,
|
||||||
|
`HISTORY-PATH`, `TEMPORARY-PATH` (scratch folder for big archives), `HIS`, `SH_WRITE_PROT`,
|
||||||
|
`SH_IGNORE`, `SH_KILL`, `DEBUG`.
|
||||||
|
|
||||||
|
Not practiced: archiving and retrieve (no archive device; would write to disk and change the
|
||||||
|
archive administration), `hisrecover`, `hiswrn`, running `hisrep` by hand.
|
||||||
|
|
@ -51,8 +51,8 @@ AID is not needed.
|
||||||
| 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 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 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)) |
|
| 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 36K10L20 | History Management Engineering | done for `hisdbg` checks, files and rollover; archive and repair utilities from docs ([notes](manuals/IM36K10L20-01EN.md)); skill `history-management` |
|
||||||
| 9 | IM 36K10C40 | Engineering Module - Historical | not started |
|
| 9 | IM 36K10C40 | Engineering Module - Historical | done by quick load for Event/Item, Scan/Time and Aggregation groups (aggregation needs a higher-priority source group, ISS-040); archive from docs ([notes](manuals/IM36K10C40-01EN.md)) |
|
||||||
| 10 | IM 36K10R30 | Graphic Display Setup | not started |
|
| 10 | IM 36K10R30 | Graphic Display Setup | not started |
|
||||||
| 10 | IM 36K10C50 | Edit Module | not started |
|
| 10 | IM 36K10C50 | Edit Module | not started |
|
||||||
| 10 | IM 36K10C60 | Advanced Operating Graphics | not started |
|
| 10 | IM 36K10C60 | Advanced Operating Graphics | not started |
|
||||||
|
|
@ -126,3 +126,7 @@ now come before classes and objects (phase 6), and the other interfaces follow a
|
||||||
| 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. |
|
| 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. |
|
| 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. |
|
| E30 | Alarm System Performance Analysis (ASPA) | not practiced | n/a | GUI; the test system has too little alarm history for meaningful KPIs. |
|
||||||
|
| C40 | Item storage groups by quick load: Event/Item, Scan/Time, Aggregation; read per group ([task](../.claude/skills/history-management/tasks/storage-groups.md)) | passed | passed | `CIENG_SCAN10S` stored LEVEL/INFLOW every 10 s after the restart; `CIENG_EVENT` stored live writes; restart needed for new groups (ISS-006, closed). `CIENG_AGG` stayed empty until the scan group got priority 10, then 30-min max 77 / min 33 / avg 52.7 (ISS-040, closed). Full remove/reload with three groups: 0 errors (before the priority field was added; `PRIORITY` itself verified with `dssqld -m`). |
|
||||||
|
| L20 | `hisdbg` read-only checks and forced rollover ([task](../.claude/skills/history-management/tasks/history-checks.md)) | passed | passed | 45 groups, 30 clients; group/unit info; rollover of `CIENG_EVENT` closed unit 3,1. Extra history types 4 and 36 (ISS-039). |
|
||||||
|
| L20/L35 | `ithloahis` into older units ([task](../.claude/skills/system-management/tasks/load-history.md)) | passed | passed | Samples in the active unit or a unit closed after the restart stored; older ones dropped silently (ISS-006); dropped sample became the next unit's initial value (ISS-038). |
|
||||||
|
| L20/C40 | Archive and retrieve, `hasdbg`, `hisrecover`, `hiswrn`, `hisrep` by hand | not practiced | n/a | No archive device configured (`has.sup`); would change history administration. |
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue