From f24e617a7035bc92e0ca2ee6f33053e1757f520e Mon Sep 17 00:00:00 2001 From: cliu Date: Wed, 30 Sep 2026 17:15:14 +1000 Subject: [PATCH] Add phase 5 equipment and ITEM Service summaries - Summaries of IM 36K10L40 (EQUIPMENT utilities), L41 (EQUIPMENT configuration: lines, stations, conversion types, Modbus master/slave, driver table), L35 (ITH) and L36 (ITM), checked against the installed start scripts, setup files and datasets - tuning-checks: read-only itmdbg / eqpdbg via piped answers - New ISS-021 (STATION_STAT empty), ISS-022 (itmval -f crashes), ISS-023 (install differs from ITEM manuals, closed); ISS-006 updated Co-Authored-By: Claude Opus 5.5 --- .../system-management/tasks/tuning-checks.md | 18 +- knowledge/issues.md | 5 +- knowledge/manuals/IM36K10L35-01EN.md | 103 ++++++++++ knowledge/manuals/IM36K10L36-01EN.md | 81 ++++++++ knowledge/manuals/IM36K10L40-01EN.md | 85 ++++++++ knowledge/manuals/IM36K10L41-01EN.md | 193 ++++++++++++++++++ knowledge/progress.md | 8 +- 7 files changed, 485 insertions(+), 8 deletions(-) create mode 100644 knowledge/manuals/IM36K10L35-01EN.md create mode 100644 knowledge/manuals/IM36K10L36-01EN.md create mode 100644 knowledge/manuals/IM36K10L40-01EN.md create mode 100644 knowledge/manuals/IM36K10L41-01EN.md diff --git a/.claude/skills/system-management/tasks/tuning-checks.md b/.claude/skills/system-management/tasks/tuning-checks.md index efd792c..37e8a6b 100644 --- a/.claude/skills/system-management/tasks/tuning-checks.md +++ b/.claude/skills/system-management/tasks/tuning-checks.md @@ -37,8 +37,20 @@ Read the newest entries: Test system (2026-09-30): common memory 665.6 MB, free 665.3 MB; queues empty; 3 lock collisions in total. +## Live values from the interactive debuggers (read-only) + +The debuggers ask for a code; pipe the answers in and end with `-1` (exit). Use only the +read-only codes listed in the manual summaries: + +| Command | Shows | Reference | +|---|---|---| +| `printf '2\n-1\n' \| itmdbg` | item common size/free, number of items, integration granule, update counters | `knowledge/manuals/IM36K10L36-01EN.md` §4 | +| `printf '1\n-1\n' \| eqpdbg 0 ` | equipment manager: lines attached, scan tick, slave count, line load % | `knowledge/manuals/IM36K10L40-01EN.md` §3 | + +Verified 2026-09-30 (bash). Other codes change the running system (delete items, unlock, +update scan status); do not use them without the user's approval. + ## Not yet practiced -Debug launchers (`jwuipoi_debug`, `jhmiset_debug`, …), interactive debuggers (`itmdbg`, -`opcdbg`, `eqpdbg`, …), and per-process debug settings; see -`knowledge/manuals/IM36K10J10-01EN.md` §5.5.2. +Debug launchers (`jwuipoi_debug`, `jhmiset_debug`, …), other debuggers (`opcdbg`, `ithdbg`, +…), and per-process debug settings; see `knowledge/manuals/IM36K10J10-01EN.md` §5.5.2. diff --git a/knowledge/issues.md b/knowledge/issues.md index 60dada3..cfc5e1d 100644 --- a/knowledge/issues.md +++ b/knowledge/issues.md @@ -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 .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`, `@`, 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 `@`; run `dssqld -e .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-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. | `.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. | 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 -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-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 (web/OPC UA server?) | `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. | open | Identify in phase 7 (OPC Interface IM 36K10E20, Data Access IM 36K10L45). | `.claude/skills/installation-security/tasks/setup-check.md`; the phase 7 skill | | 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 | @@ -40,3 +40,6 @@ development system (see "Test system" in `progress.md`); they do not exist on ot | ISS-018 | 2026-09-30 | Authorization (`dssana.sup`) | IM 36K10C10 §2.2 says the *No* login method applies the user profile `FT_NO_LOGIN`; the installed `dssana.sup` names `CI_NO_LOGIN` (and `CI_NO_LOGIN_OPCUAS` for anonymous OPC UA) as the no-login profile. `USER_DF` on the test system has `CI_NO_LOGIN_OPCUAS` but no `CI_NO_LOGIN`. | open | Installed software is the reference: use `CI_NO_LOGIN`. Still to check: behaviour of a *No* login when that user does not exist (manual: no profile applied). Covered again in phase 13 (IM 36K10J40). | `knowledge/manuals/IM36K10C10-01EN.md` §2 | | ISS-019 | 2026-09-30 | ITEM (string items) | Maximum string item length differs by source: IM 36K10C10 §3.3.4 says default 80, max 100; the Tutorial summary says up to 168 without audit; the data dictionary (`dssqld -f`) gives `ITEM_DF.STRING_LENGTH` range 1–200, default 80. | closed | Tested 2026-09-30 on CI-Eng-Sample (`dssqld -i`, `itmval -p/-g`, non-elevated): `STRING_LENGTH` 100, 168 and 200 load with or without `AUDIT_INFO`; 201 fails with `DSS-E-VAL_RANGE`. An item holds **length − 1** characters: a 99-character value in a length-100 item is stored with status 9 NORMAL; longer values are cut to length − 1 with status **12 OVERRANGED** (100 → 99, 200 → 199, 201 → 199). So the data dictionary (1–200) is right. Test items removed. Closed 2026-09-30 (confirmed by user). | `knowledge/manuals/IM36K10C10-01EN.md` §3; `knowledge/manuals/IM36K10G10-01EN.md` (items); `.claude/skills/item-engineering/SKILL.md` | | ISS-020 | 2026-09-30 | DATABASE (`dssqld`) | `dssqld -i "\user.qli"` failed with `CRL-E-ENOENT` / `DSSQ-E-QLD_FILOPN`: the path in the message was cut after 79 characters (`…\73b3559a-12.`). A relative file name from the same folder works. Similar to the `intspawn` path limit (ISS-007). | open | Find the exact limit (79/80 characters?) and whether `-l` and `-e` paths are also cut. Until then: `cd` to the folder and use short relative names. | `.claude/skills/system-management/tasks/load-remove-records.md`; `.claude/skills/system-management/tasks/export-dataset.md` | +| ISS-021 | 2026-09-30 | EQUIPMENT (`eqpiostat`) | IM 36K10L40 §2 says `eqpiostat` stores hourly I/O statistics per station line in "history group STATION_STAT". On the test system `eqpiostat` runs (started by `equipment_start.cmd` on the host node) and `STATION_STAT` is a dataset, but `dssqld -e` returned 0 records, also with filters on `TIME_STAMP` and `STATION` (AID Modbus stations, which send requests). | open | Check whether records appear after a full hour with a communicating station, or whether the dataset is read another way (e.g. Engineering Module, report). | `knowledge/manuals/IM36K10L40-01EN.md` §2 | +| ISS-022 | 2026-09-30 | ITEM (`itmval -f`) | `itmval -f vs -n CI-Eng-Sample.TANK1.LEVEL` (IM 36K10L36 §1.4, write a restore command) crashes with a segmentation fault (bash) / access violation 0xC0000005 (PowerShell) and writes no file; also with `-l`. The manual's space-separated form `-n ` is rejected with `FSL-E-NARG_ALL`. `itmval -g`/`-p` work. | open | Workaround: build restore lines from `itmval -g` output. Report to Yokogawa support if needed. | `knowledge/manuals/IM36K10L36-01EN.md` §3; `.claude/skills/system-management/tasks/read-write-item.md` | +| ISS-023 | 2026-09-30 | ITEM / ITH (manual vs install) | Installed ITEM Service differs from IM 36K10L35/L36: `item_start.cmd` starts `itheix` (EVENT/ITEM storage, not described), aggregation `ithsag`/`ithrag`, two instances of each retrieve process, and `itmtim 100 1000 1 200 1` (five arguments, three documented); `itm.sup` item pool is 650000 KB (manual default 50000) and has `not_regained` (not described); `itheix.sup` has `max_sample_delay`, `max_samples_queued`, `max_open_files`. | closed | Closed 2026-09-30 (user decision: the installed software is the reference). Summaries describe the installed values. | `knowledge/manuals/IM36K10L35-01EN.md`; `knowledge/manuals/IM36K10L36-01EN.md` | diff --git a/knowledge/manuals/IM36K10L35-01EN.md b/knowledge/manuals/IM36K10L35-01EN.md new file mode 100644 index 0000000..2037156 --- /dev/null +++ b/knowledge/manuals/IM36K10L35-01EN.md @@ -0,0 +1,103 @@ +--- +manual: IM 36K10L35-01EN +title: ITEM Service Engineering - ITH +edition: 3rd Edition, Sep. 2023 +version: R1.03 +status: from docs; installed ITH processes (item_start.cmd), setup files itheex.sup and itheix.sup checked read-only on the test system (2026-09-30); ithloahis practiced in phase 1 +--- + +# ITEM Service Engineering - ITH (R1.03) + +ITH is the item-history part of ITEM Service: it gathers item values from ITM and stores and +retrieves them for the storage (history) groups that HISTORY Service manages. Section numbers +refer to the manual. Storage groups themselves: phase 9 (IM 36K10L20, C40). + +## 1. Processes and data (§1) + +- **Collection/storage types** and their processes: + +| Group type (collection/storage) | Store process | Retrieve process | +|---|---|---| +| SCAN / TIME | `ITHSTX` (more: `ITHST2`…, setup key `task`) | `ITHRTT` | +| SCAN / ITEM | `ITHSIX` | `ITHRTI` | +| EVENT / EVENT | `ITHEEX` | `ITHRTE` | +| EVENT / ITEM | `ITHEIX` (not described in the manual; used by CI-Eng-Sample `CIENG_EVENT`) | `ITHREI` | +| DIRECT / EVENT (values from applications, e.g. an equipment manager reading history from the field) | `ITHSDE` | `ITHRDE` | +| DIRECT / ITEM | `ITHSDI` | `ITHRDI` | + +- `ITHSER`: one per node (normally the host). Group definition (with HIS) and retrieval: + finds the item's groups, picks the **highest-priority** group, finds the first unit in the + time window and hands the request to a retrieve process. Keeps the item directory. +- `ITHDBG` debugger, `ITHRECOVER` repair. +- Start/stop lists: `tls\com\item_start.cmd` / `item_stop.cmd`; processes for unused types can + be removed there. **Installed R1.03 start list**: `ithser`, `itheex`, `itheix`, `ithstx`, + `ithsde`, aggregation `ithsag` and retrieve processes in **two instances each** + (`ithrte00/01`, `ithrei00/01`, `ithrag00/01`, `ithrtt00/01`, `ithrde00/01`). Not started: + `ithsix`, `ithrti`, `ithsdi`, `ithrdi`. + +**Files** (in the history/data folders; do not delete): +- `ith_itmdir.dat` item directory (item, id, time window, group, priority). +- Group description `hnnggg000000.dat`, unit descriptions `hnnggguuu000.dat` (a new one on + every group change, so old compositions stay readable), unit data `hnnggguuuddd.dat` (a new + one at each start/rollover). `nn` node, `ggg` group, `uuu` unit, `ddd` data sequence. +- Record layouts: time-based (one scan of many items per record, split into file groups), + item-based (many scans of one item), event-based (one event per record). **Events older + than 60 units cannot be stored.** + +## 2. Setup files (§2) + +Each process reads `.sup` (missing → error in `umhlog`). +- `ithser.sup`: `agg_hour_method` (hourly aggregate labelled by start or end of hour, default + start), `his` (HIS address), `con_timeout` (group configuration lock, default 8 min), + `his_path`, `sh_path` (default history and shadow paths), `his_mod` (allow modifying + `ITEM_HISTORY` data via the API). +- `ithstx.sup` / `ithsix.sup`: `his`, `task`, `run_interval` (heartbeat, ≤ 1/10 of the + shortest scan interval), `max_recsize`, `itms_a_rscan`/`itms_a_dscan` (items per ITM + lock, ~50), `itms_a_rrun`/`itms_a_drun` (items per heartbeat, limits CPU peaks), + overheads; ITHSIX also `max_total_buf`, `max_grp_buf` (memory in 28-byte blocks). +- `itheex.sup` (test system values): `run_interval = 600` s, `buffer_size = 10` events, + `event_timeout = 1` s, **`gap_time = 2880` min**, `queue_size = 750` KB, optional + `overflow_item` (counts/toggles on queue overflow). +- `itheix.sup` (not in the manual; test system): `run_interval = 60`, `buffer_size = 20`, + `event_timeout = 1`, **`gap_time = 2880` min**, **`max_sample_delay = 14400` min**, + `max_samples_queued = 25` (million), `max_open_files = 10`, `queue_size = 2000`. +- `ithsde.sup` / `ithsdi.sup`: `his`, `task`, `max_open_files` (10), `max_recsize` (4000), + `gap_time` (60 min). + +## 3. `ithrecover` (§3) + +`ithrecover [-v] [-p]` repairs the relations between item definitions, group +descriptions, the item-in-use list and the item directory (trusting item definitions and group +descriptions). Needs HISTORY Service and ITHSER running, no group configuration in progress. +`-p` extends the item directory into the past for history migration (advanced; with product +support). + +## 4. `ithdbg` (§4) + +Menu: 1 group contents, 2 item directory, 3 unit data file dump, 4–18 global/group info of +each ITH process, 20 retrieve history, 80 stop a process, 90 log to file, −1 exit. Group names +are case-sensitive. + +## 5. `ithloahis` item history loader (§5) + +`ithloahis -f [-v] [-l] [-i] [-s
] [-t GMT|LST|LCT]` loads CSV history into +EVENT/EVENT and EVENT/ITEM groups (not SCAN). Groups and items must exist. `-i` also writes +the value to the item (e.g. to trigger alarms). Formats: `SCAN, item1, item2` header then +`time, v1, v2` rows (blank = no sample), or `EVENT` header then `time, item, value` rows. +Time as `29-Apr-14 11:48:17.452`, `29-04-2014 11:48:18.452` or UTC seconds. Practiced: skill +`system-management`, task `load-history.md`. + +**Loading older history (migration)**: +1. Raise `gap_time` in `itheex.sup` (EVENT/EVENT) or `gap_time` and `max_sample_delay` in + `itheix.sup` (EVENT/ITEM) beyond the age of the oldest sample (5 years ≈ 2,628,000 min); + note the old values; restart CI Server. +2. Create the group, add all items, start it immediately. +3. Create earlier unit files: `hisdbg` option 3 for unit info; copy unit files to + `%TLS_HIS_PATH%\has`, delete the unit (`hisdbg` 4), copy back, set times with + `hisrecover .his "" ""`, create the next with `isfrename`, + repeat until the original second unit's start time. +4. `ithrecover -p`, restart CI Core. +5. `ithloahis -f `. +6. Restore the setup values and restart. +This explains why samples older than the current unit were not stored in phase 1 +(`knowledge/issues.md` ISS-006). From an older CI Server version use `ITHIMPORT` instead. diff --git a/knowledge/manuals/IM36K10L36-01EN.md b/knowledge/manuals/IM36K10L36-01EN.md new file mode 100644 index 0000000..379cb0f --- /dev/null +++ b/knowledge/manuals/IM36K10L36-01EN.md @@ -0,0 +1,81 @@ +--- +manual: IM 36K10L36-01EN +title: ITEM Service Engineering - ITM +edition: 3rd Edition, Sep. 2023 +version: R1.03 +status: from docs; itm.sup, item_start.cmd and itmdbg statistics checked on the test system (2026-09-30); itmval -g/-p verified in phase 1; itmval -f crashes (ISS-022) +--- + +# ITEM Service Engineering - ITM (R1.03) + +ITM is the real-time item database (item common, shared memory). Section numbers refer to the +manual. + +## 1. Processes (§1.1–1.2) + +| Process | Role | +|---|---| +| `ITM` | item handler, message interface | +| `ITMTIM` | sends buffered item events; recalculates integrators | +| `ITMCPM` / `ITMCPS` | item copy master / slave for distributed items between nodes (buffered, compressed; after a lost MDUR link it rescans all or only changed master items in limited batches). Restart `ITMCPM` after deleting a distributed group. | +| `ITMLIMUPD` | copies limit/deadband changes to other nodes | +| `ITMREM` | cleans up event requests of processes that disappeared | +| `itmval` | command-line get/put | + +`itmtim [] [] []`: +save count = integrators saved to disk per recalculation. **Installed** `item_start.cmd` +starts `itmtim 100 1000 1 200 1` (five arguments; the last two are not documented). Also +started: `itmaah`, `intitmini`, `itmlimupd`, `itmrem`. + +## 2. `itm.sup` (§1.3) + +| Setting (keyword) | Manual default | Test system | +|---|---|---| +| Queue size (`queue_size`) | 200 KB | 200 | +| Save items (`item_save`): ITEM_BASE (per item's *remember last value*), ALWAYS, NEVER | ITEM_BASE | ITEM_BASE | +| Max item groups (`max_groups`) | 255 | 255 | +| Max items per group (`max_number`) | 65534 (255 × 65534 = 16,711,170 items) | 65534 | +| Max application info per item (`max_appl_info`) | ≤ 20 bytes always fits | 0 | +| Max update info per item (`max_upd_info`) | 512 | 512 | +| Item pool size (`pool_kbytes`), guide `0.07 × groups × items + appl KB × groups × items + 10` | **50000 KB** | **650000** | +| Integration granule (`itm_int_secs`), system-wide integrator time unit | 1 s | 1 (60 tested, ISS-010) | +| Lock timeout (`lock_timeout_secs`) | 60 s | 60 | +| Save to disk (`disk_save`) | YES | yes | +| Not regained (`not_regained`): after start, mark possibly stale values until the first update; hidden in trends | not described | no (default block) | + +## 3. `itmval` (§1.4) + +``` +itmval -g [-l] -n +itmval -p [-l] -n [-v ] [-s ] [-q ] [-o] [-t []