Fix aggregation source priority (ISS-040) and document aggregate retrieval
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
c08207847e
commit
e7b4cd1f3f
7 changed files with 37 additions and 23 deletions
|
|
@ -31,8 +31,8 @@ Rules:
|
|||
|
||||
| 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 (aggregation values not yet seen, ISS-040) |
|
||||
| Read history with `dssqld` (`ITEM_HISTORY`, per group); aggregates | `tasks/storage-groups.md` §4 | verified (aggregates from docs, ISS-040) |
|
||||
| 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) |
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
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 for Event/Item and Scan/Time; Aggregation loads but values not yet seen (ISS-040)
|
||||
status: verified
|
||||
---
|
||||
|
||||
# Item storage groups (quick load)
|
||||
|
|
@ -81,12 +81,22 @@ and 11:54 started storing only after the 12:00 restart). Ask the user to restart
|
|||
`SAMPLE_TIME`, `SAMPLE_END_TIME`, `INTERVAL_TIME`, `ITEM_VALUE`, `QUALITY`, `INITIAL_VALUE`
|
||||
(1 = value at unit start), `STATUS`, `INTERPOLATION`, `ATTRIBUTE`, `GROUP_NAME`, …
|
||||
|
||||
Aggregates (from docs; **not yet seen on the test system**, ISS-040): add
|
||||
`and INTERPOLATION = "Hour" and ATTRIBUTE = "Maximum"` (also `Minimum`, `Average`,
|
||||
`Integration`, `Standard deviation`, `Counter`, `Differential summation`; periods `Hour`, `Day`,
|
||||
`Month`, `Year`, …). `INTERPOLATION = "Hour"` is accepted by `dssqld`; `"30 minutes"`,
|
||||
`"30 Minutes"` and `"Half hour"` are refused (`DSSP-E-NOTRANSF … illegal value`), so the
|
||||
30-minute period name is still unknown.
|
||||
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
|
||||
|
||||
|
|
@ -101,4 +111,4 @@ Removing a group deletes its history.
|
|||
|---|---|---|
|
||||
| `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 | Group, items and units created (extra `…zzz…` files); after the restart no 30-minute aggregate was written by 13:00 (ISS-040) |
|
||||
| `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) |
|
||||
|
|
|
|||
|
|
@ -12,12 +12,14 @@ NAME,DESCRIPTION,TYPE,COL_STOR_TYPE,LIFE_TIME,ROLLOVER_INT
|
|||
@HIS_GROUP_DF
|
||||
"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
|
||||
! 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,LIFE_TIME,ROLLOVER_INT
|
||||
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,"1 days","1 hours"
|
||||
"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
|
||||
|
|
|
|||
|
|
@ -53,8 +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 |
|
||||
| `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_SCAN10S` | Item storage group | Scan/Time every 10 s with quality, 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 (values not yet seen, ISS-040) |
|
||||
| `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.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 |
|
||||
|
|
|
|||
|
|
@ -59,4 +59,4 @@ development system (see "Test system" in `progress.md`); they do not exist on ot
|
|||
| 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` (`COL_STOR_TYPE` Aggregation, `AGG_PERIOD_30MIN` 1, `AGG_PERIOD_HOUR` 1; `TANK1.LEVEL` with `STORE_AGG_MAX/MIN/AVG` 1) loads with 0 errors and gets units, but after the 12:00 restart no aggregate was in `ITEM_HISTORY` by 13:00 (expected the 12:00–12:30 values by 12:40 with `run_interval` 600 s), and the `…zzz…` files were not written after 12:00:48. Possible causes: the source items are also in `CIENG_EVENT` / `CIENG_SCAN10S` with the same priority 0 (C40 §2.1: aggregation reads from the highest-priority group), or the 30-minute period name/filter (`INTERPOLATION` value for 30 min unknown; `"30 minutes"` refused). | open | Next session: after a restart, wait past a full hour + 10 min and query `INTERPOLATION = "Hour"`; if still empty, give the event group a higher `PRIORITY` or use an item only in the aggregation group; check `hisdbg` 6 for an `ITHSAG` client. | `.claude/skills/history-management/tasks/storage-groups.md` §4; `knowledge/manuals/IM36K10C40-01EN.md` §3; `examples/CI-Eng-Sample/README.md` |
|
||||
| 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`. | open | 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) |
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ manual: IM 36K10C40-01EN
|
|||
title: Engineering Module - Historical
|
||||
edition: 3rd Edition, Sep. 2023
|
||||
version: R1.03
|
||||
status: Event/Item and Scan/Time storage groups verified by quick load (Aggregation loads, values not yet seen — ISS-040) on CI-Eng-Sample 2026-10-01; ithloahis loading rules verified; Engineering Module forms, archive and retrieve from docs
|
||||
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)
|
||||
|
|
@ -84,10 +84,12 @@ min, `max_open_files` 10, `queue_size` (installed **500** KB, manual default 200
|
|||
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, LEVEL max/min/avg) loaded, units and extra
|
||||
`…zzz…` files created, but no aggregate appeared in `ITEM_HISTORY` between the 12:00 restart
|
||||
and 13:00 (level varied 40–70 from 12:06 to 12:11; `ithsag` running, no message) — ISS-040.
|
||||
`INTERPOLATION = "Hour"` is a valid filter value; `"30 minutes"` is refused.
|
||||
- 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)
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ AID is not needed.
|
|||
| 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 | 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 | done by quick load for Event/Item and Scan/Time groups; aggregation loads but values not seen (ISS-040); archive from docs ([notes](manuals/IM36K10C40-01EN.md)) |
|
||||
| 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 36K10C50 | Edit Module | not started |
|
||||
| 10 | IM 36K10C60 | Advanced Operating Graphics | not started |
|
||||
|
|
@ -126,7 +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. |
|
||||
| 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. |
|
||||
| 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 (aggregation values not seen) | passed | `CIENG_SCAN10S` stored LEVEL/INFLOW every 10 s after the restart; `CIENG_EVENT` stored live writes; restart needed for new groups (ISS-006). `CIENG_AGG` produced no aggregates 12:00–13:00 (ISS-040). Full remove/reload with three groups: 0 errors. |
|
||||
| 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). `CIENG_AGG` stayed empty until the scan group got priority 10, then 30-min max 77 / min 33 / avg 52.7 (ISS-040). 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