From ef543cde209e22a47857d6f7099d4d34f3338e14 Mon Sep 17 00:00:00 2001 From: cliu Date: Wed, 30 Sep 2026 17:09:45 +1000 Subject: [PATCH] Add phase 5 Engineering Module summary, authorization skill, item tests - Summary of IM 36K10C10 (Engineering Module - I/O Processes), checked against dssana.sup, itm.sup and the default datasets - New skill authorization: users and authorization groups by quick load - item-engineering: string item limits (1-200, holds length - 1) and the integration granule (itm_int_secs), both tested on CI-Eng-Sample - CI-Eng-Sample: read-only authorization group CIENG_VIEWER - Closed ISS-001 (uoff/ublk option bits), ISS-010, ISS-019; new ISS-018, ISS-020 Co-Authored-By: Claude Opus 5.5 --- .claude/skills/authorization/SKILL.md | 29 ++ .../authorization/tasks/users-groups.md | 86 ++++++ .claude/skills/item-engineering/SKILL.md | 7 +- .../item-engineering/tasks/block-item.md | 4 +- .../item-engineering/tasks/string-items.md | 37 +++ .../item-engineering/tasks/sub-items.md | 12 +- .../tasks/read-write-item.md | 9 +- examples/CI-Eng-Sample/02b_sub_item_df.qli | 2 +- examples/CI-Eng-Sample/08_auth_group_df.qli | 13 + .../CI-Eng-Sample/85_remove_auth_group_df.qli | 12 + examples/CI-Eng-Sample/README.md | 6 +- examples/CI-Eng-Sample/load.cmd | 2 + examples/CI-Eng-Sample/remove.cmd | 1 + knowledge/issues.md | 9 +- knowledge/manuals/IM36K10C10-01EN.md | 247 ++++++++++++++++++ knowledge/manuals/IM36K10G10-01EN.md | 6 +- knowledge/progress.md | 10 +- 17 files changed, 470 insertions(+), 22 deletions(-) create mode 100644 .claude/skills/authorization/SKILL.md create mode 100644 .claude/skills/authorization/tasks/users-groups.md create mode 100644 .claude/skills/item-engineering/tasks/string-items.md create mode 100644 examples/CI-Eng-Sample/08_auth_group_df.qli create mode 100644 examples/CI-Eng-Sample/85_remove_auth_group_df.qli create mode 100644 knowledge/manuals/IM36K10C10-01EN.md diff --git a/.claude/skills/authorization/SKILL.md b/.claude/skills/authorization/SKILL.md new file mode 100644 index 0000000..56dc9b9 --- /dev/null +++ b/.claude/skills/authorization/SKILL.md @@ -0,0 +1,29 @@ +--- +name: authorization +description: >- + CI Server R1.03 users, authorization groups, login and schemes. Use when the user wants to + create, list or remove CI Server users or authorization groups, choose authorization actions + (ITEM_READ, ITEM_MODIFY_VALUE, …), set process areas, logoff timeout or initial display for + a user, change how users log in (dssana.sup login method: Automatic, Manual CI Server, + Manual OS, No, SSO, Deny), or hide Engineering Module features with a scheme. + Sources IM 36K10C10-01EN §2; Active Directory and single sign-on follow in phase 13 (IM 36K10J40). +--- + +# Authorization (R1.03) + +Background: `knowledge/manuals/IM36K10C10-01EN.md` §2 (login methods, actions, user tabs, +schemes). Login settings are in `dssana.sup` on CI Core (skill `portal-setup` for reading +and changing setup files). + +Rules: +- Run the `system-check` skill first; follow the user's chosen way of working. +- Users are login accounts. Claude prepares user quick load files but the user loads them + and sets any password; never put real passwords in repo files. +- Remove users before the authorization group they belong to. + +| Task | File | Status | +|---|---|---| +| Create, check and remove authorization groups and users (quick load) | `tasks/users-groups.md` | verified | +| Login methods per client and user interface (`dssana.sup`, tab *Login control*) | C10 summary §2 | from docs (installed values read) | +| Schemes (hide Engineering Module features) | C10 summary §2 | from docs | +| Active Directory, single sign-on, password rules | phase 13 | not covered | diff --git a/.claude/skills/authorization/tasks/users-groups.md b/.claude/skills/authorization/tasks/users-groups.md new file mode 100644 index 0000000..8da8f1d --- /dev/null +++ b/.claude/skills/authorization/tasks/users-groups.md @@ -0,0 +1,86 @@ +--- +task: Create, check and remove authorization groups and users with quick load +version: R1.03 +source: IM 36K10C10-01EN §2.4, §2.5; data dictionary (`dssqld -f`); practiced on the test system 2026-09-30 +status: verified +--- + +# Authorization groups and users (quick load) + +Engineering Module equivalent: *Authorization → Authorization groups / User → Add*. +Datasets: `AUTH_GROUP_DF` (groups), `AUTH_ACTION_DF` (allowed action names), `USER_DF` +(users). Works from a normal prompt while CI Server is running. Use short relative file +names (`cd` to the folder first): long absolute paths are cut (ISS-020). + +## List what exists + +``` +dssqld -e groups.qli -d AUTH_GROUP_DF -c -l groups.lst +dssqld -e users.qli -d USER_DF -c -l users.lst +dssqld -e actions.qli -d AUTH_ACTION_DF -c -l actions.lst +``` + +Installed on R1.03: groups `SYSTEM_MANAGER`, `ENGINEER`, `OPERATOR`, `GUEST`; users `ADMIN`, +`ADMINE`, `OPER`, `CI_NO_LOGIN_OPCUAS`. Passwords export as `****`. + +## Group + +Required: `NAME`. Actions go in `ACTION_NAME_1`, `ACTION_NAME_2`, … and must be names from +`AUTH_ACTION_DF` (e.g. `ITEM_READ`, `ITEM_MODIFY_VALUE`, `SECTION_BLOCK_UNBLOCK`, +`ALARM_CURRENT_ACK`). Example (`examples/CI-Eng-Sample/08_auth_group_df.qli`): + +``` +@FIELDS +NAME,DESCRIPTION,ACTION_NAME_1,ACTION_NAME_2,ACTION_NAME_3,ACTION_NAME_4 + +@AUTH_GROUP_DF +"CIENG_VIEWER","CI-Eng-Sample read-only viewer","ITEM_READ","SECTION_READ","ALARM_CURRENT_READ","ALARM_CHRONO_READ" +``` + +## User + +Required: `NAME` (≤ 32) and `AUTH_GROUP` (an existing group). Optional: `DESCRIPTION`, +`PROCESS_AREAS` (e.g. `"1-999"`), `LOGOFF_TIMEOUT` (minutes, 0–999), `INITIAL_DISPLAY`, +`LOCALE`, `ENTERPRISE`, playback fields. A password is **not** required on import; set it in +the Engineering Module (the user does this, not Claude). Template: + +``` +@FIELDS +NAME,DESCRIPTION,AUTH_GROUP,PROCESS_AREAS,LOGOFF_TIMEOUT + +@USER_DF +"","","CIENG_VIEWER","1-999",15 +``` + +Defaults filled in on import (seen): display authorization level 999, language *System*, +playback *HMI Client dependent* / *No*, merge priority 1. Changes take effect at the user's +next login. + +## Check and remove + +Filtered export (`@SELECT`, see `system-management` task `export-dataset.md`): + +``` +@SELECT +'NAME = ""' +@USER_DF +``` + +Remove users first, then the group, in one `NAME`-only file (`dssqld -r`): + +``` +@FIELDS +NAME + +@USER_DF +"" + +@AUTH_GROUP_DF +"CIENG_VIEWER" +``` + +## Test system (2026-09-30) + +Group `CIENG_VIEWER` and user `CIENG_TEST` (no password, logoff 15 min) loaded with 0 errors, +exported back as defined, then removed (1 + 1 removed, 0 errors). The group is part of +CI-Eng-Sample; the sample creates no users. diff --git a/.claude/skills/item-engineering/SKILL.md b/.claude/skills/item-engineering/SKILL.md index 5ac92fa..78628b3 100644 --- a/.claude/skills/item-engineering/SKILL.md +++ b/.claude/skills/item-engineering/SKILL.md @@ -3,8 +3,9 @@ name: item-engineering description: >- CI Server R1.03 sections, items and sub-items. Use when the user wants to create or change sections, items or sub-items (integrator, min-max, pulse, rate-of-change), set limits, - scale or value format, block or unblock items or sections, or understand item status and - option flags. Sources IM 36K10G10-01EN (Tutorial); to be extended with IM 36K10C10 in phase 5. + scale or value format, string item length, integrator time unit (integration granule), + PIT filter, block or unblock items or sections, or understand item status and option flags + (blk, off, uoff, ublk). Sources IM 36K10G10-01EN (Tutorial) and IM 36K10C10-01EN. --- # Item engineering (R1.03) @@ -21,3 +22,5 @@ Rules: |---|---|---| | Sub-items (integrator, min-max) | `tasks/sub-items.md` | verified | | Block / unblock an item; write to a blocked item | `tasks/block-item.md` | verified | +| String items: length limit (1–200) and truncation | `tasks/string-items.md` | verified | +| Item forms, limits, PIT filter, clamping, alarm tab, option bits, item statuses | `knowledge/manuals/IM36K10C10-01EN.md` §3–4 | from docs | diff --git a/.claude/skills/item-engineering/tasks/block-item.md b/.claude/skills/item-engineering/tasks/block-item.md index 581cd3e..706fa2e 100644 --- a/.claude/skills/item-engineering/tasks/block-item.md +++ b/.claude/skills/item-engineering/tasks/block-item.md @@ -33,4 +33,6 @@ dssqld -m block.qli -l block.qlo - `itmval -p -n -v ` on a blocked item is **silently ignored** (no error, value unchanged; `knowledge/issues.md` ISS-011). Add `-o` to overwrite: `itmval -p -n -v -o`. -- After unblocking, `blk` is replaced by `ublk` (meaning not yet confirmed, see ISS-001). +- After unblocking, `blk` is gone but `ublk` (option bit 16, *updated blocked*) remains: the + item was written by an application (`itmval -o`) while it was blocked (IM 36K10C10 §3.5, + ISS-001). diff --git a/.claude/skills/item-engineering/tasks/string-items.md b/.claude/skills/item-engineering/tasks/string-items.md new file mode 100644 index 0000000..d0134a8 --- /dev/null +++ b/.claude/skills/item-engineering/tasks/string-items.md @@ -0,0 +1,37 @@ +--- +task: String items: length limit and truncation +version: R1.03 +source: IM 36K10C10-01EN §3.3.4; data dictionary (`dssqld -f`); practiced on CI-Eng-Sample 2026-09-30 +status: verified +--- + +# String items + +A string item has a maximum length set when it is created (`ITEM_DF.STRING_LENGTH`). + +| Rule | Value (verified) | +|---|---| +| Allowed `STRING_LENGTH` | 1–200 (default 80); 201 is rejected with `DSS-E-VAL_RANGE` | +| Audit trailing (`AUDIT_INFO`) | no effect on the limit (200 loads with audit on) | +| Characters the item holds | **length − 1** (length 100 holds 99) | +| Value that fits | stored, status 9 NORMAL | +| Value too long | cut to length − 1, status **12 OVERRANGED**, no error from `itmval` | + +The manuals disagree (Engineering Module: max 100; Tutorial: 168); the installed software +allows 200 (`knowledge/issues.md` ISS-019). Multi-byte characters take more than one byte. + +Quick load (the section must exist): + +``` +@FIELDS +NAME,DESCRIPTION,ITEM_REP,STRING_LENGTH,AUDIT_INFO + +@ITEM_DF +"
.","Status text","String",120,0 +``` + +Write and read: `itmval -p -n
. -v "text"`, `itmval -g -n
.`. +After a write, check the status: 12 means the text was cut. + +The representation (type) and length cannot be changed on an existing item: remove and +load it again. diff --git a/.claude/skills/item-engineering/tasks/sub-items.md b/.claude/skills/item-engineering/tasks/sub-items.md index 1bd6453..16ebacc 100644 --- a/.claude/skills/item-engineering/tasks/sub-items.md +++ b/.claude/skills/item-engineering/tasks/sub-items.md @@ -1,7 +1,7 @@ --- task: Create sub-items (integrator, min-max) version: R1.03 -source: IM 36K10G10-01EN §3.1.5, §3.2.3; practiced with CI-Eng-Sample 2026-09-30 +source: IM 36K10G10-01EN §3.1.5, §3.2.3; IM 36K10C10-01EN §3.2; practiced with CI-Eng-Sample 2026-09-30 status: verified --- @@ -27,9 +27,13 @@ Load with `dssqld -i .qli -l .qlo`; remove with a `NAME`-only file a ## Behaviour (verified) -- **Integrator** adds *value × seconds*: with the main item at 1 it grows by 1 per second. - `TIME_UNIT` (e.g. `Hour`) made no difference (`knowledge/issues.md` ISS-010); to show hours, - divide by 3600 where the value is used. +- **Integrator** adds *value × time unit*: with the main item at 1 it grows by 1 per second + by default. The time unit is the **integration granule** `itm_int_secs` in `itm.sup` + (Setup File Editor label "Integration granule, sec."), **system-wide** for all integrators, + installed value 1. Setting 60 and restarting CI Server made it grow by 1 per minute + (verified 2026-09-30, ISS-010). Changing it is a setup-file change (skill `portal-setup`, + task `change-setup-file.md`); existing integrator values are not converted, so reset or + note them. `TIME_UNIT` on the sub-item has no effect on integrators. - **Min-Max** with `MIN_MAX` = `Maximum` (or `Minimum`) keeps the highest (lowest) value written to the main item: writing 30, 70, 50 gave 70. - `TIME_UNIT` (Second, Minute, Hour, Day) belongs to Rate-of-Change (from docs, not practiced). diff --git a/.claude/skills/system-management/tasks/read-write-item.md b/.claude/skills/system-management/tasks/read-write-item.md index f5feef4..ef32f54 100644 --- a/.claude/skills/system-management/tasks/read-write-item.md +++ b/.claude/skills/system-management/tasks/read-write-item.md @@ -32,9 +32,12 @@ Quality = 0 - **Status** is a number from `STATUS_DF` (export it with `dssqld -e status_df.qli -d STATUS_DF -c` to look numbers up). Common ones: 9 `NORMAL`, 13 `NOT INIT` (never written; new items start here), 4 / 5 `BOOLEAN 0` / `BOOLEAN 1`, 11 `HIGH HIGH`. -- **Options** lists item flags as words after the hex value, e.g. `ack` (acknowledged), - `off` (item's station not communicating). `uoff` also appears on station items after a write; - its meaning is not yet known (see `knowledge/issues.md` ISS-001). +- **Options** lists item flags as words after the hex value (option bits, IM 36K10C10 §3.5): + `blk` 1 blocked, `off` 2 offline (station not communicating), `uoff` 4 **updated offline** + (written by an application such as `itmval` while offline), `ack` 8 acknowledged, `ublk` 16 + **updated blocked** (written while blocked, e.g. with `-o`); 32/64 direct/delayed alarm. + So writing a station item whose station is down adds `uoff` (0x…8a → 0x…8e); internal items + (no station) never get it. ## Read limits diff --git a/examples/CI-Eng-Sample/02b_sub_item_df.qli b/examples/CI-Eng-Sample/02b_sub_item_df.qli index eff3969..3cb47fb 100644 --- a/examples/CI-Eng-Sample/02b_sub_item_df.qli +++ b/examples/CI-Eng-Sample/02b_sub_item_df.qli @@ -5,7 +5,7 @@ ENGLISH 1.03.00 ! CI-Eng-Sample sub-items (Tutorial IM 36K10G10-01EN 3.1.5, 3.2.3), CI Server R1.03.00 -! Integrator: adds value x seconds (RUNNING = 1 -> running seconds; TIME_UNIT has no effect, verified). +! Integrator: adds value x integration granule (itm_int_secs in itm.sup, default 1 s; TIME_UNIT has no effect, verified). ! Min-Max: keeps the maximum (or minimum) of the main item. @FIELDS NAME,DESCRIPTION,SUB_TYPE,TIME_UNIT,MIN_MAX diff --git a/examples/CI-Eng-Sample/08_auth_group_df.qli b/examples/CI-Eng-Sample/08_auth_group_df.qli new file mode 100644 index 0000000..eb0c8c0 --- /dev/null +++ b/examples/CI-Eng-Sample/08_auth_group_df.qli @@ -0,0 +1,13 @@ +@LANGUAGE +ENGLISH + +@VERSION +1.03.00 + +! CI-Eng-Sample read-only authorization group (IM 36K10C10-01EN 2.4), CI Server R1.03.00 +! Actions are NAME values from AUTH_ACTION_DF. +@FIELDS +NAME,DESCRIPTION,ACTION_NAME_1,ACTION_NAME_2,ACTION_NAME_3,ACTION_NAME_4 + +@AUTH_GROUP_DF +"CIENG_VIEWER","CI-Eng-Sample read-only viewer","ITEM_READ","SECTION_READ","ALARM_CURRENT_READ","ALARM_CHRONO_READ" diff --git a/examples/CI-Eng-Sample/85_remove_auth_group_df.qli b/examples/CI-Eng-Sample/85_remove_auth_group_df.qli new file mode 100644 index 0000000..1ad82be --- /dev/null +++ b/examples/CI-Eng-Sample/85_remove_auth_group_df.qli @@ -0,0 +1,12 @@ +@LANGUAGE +ENGLISH + +@VERSION +1.03.00 + +! Remove the CI-Eng-Sample authorization group (remove its users first) +@FIELDS +NAME + +@AUTH_GROUP_DF +"CIENG_VIEWER" diff --git a/examples/CI-Eng-Sample/README.md b/examples/CI-Eng-Sample/README.md index ab12d36..5b9d274 100644 --- a/examples/CI-Eng-Sample/README.md +++ b/examples/CI-Eng-Sample/README.md @@ -39,7 +39,7 @@ cmd /c "\examples\CI-Eng-Sample\remove.cmd" | `CI-Eng-Sample.SYSTEM.DISK_C` | Item, Real | Target for `intdskmon` (reports **used** %) | | `CI-Eng-Sample.SYSTEM.PING_LOCALHOST` | Item, Integer | Target for `inttcpmon` (1 = reachable) | | `CI-Eng-Sample.SYSTEM.PROC_ALM` | Item, Integer | Target for `intmon` (1 = `alm` process running) | -| `CI-Eng-Sample.PUMP1.RUNNING.RUN_SECONDS` | Sub-item, Integrator | Running time in seconds (adds value × seconds) | +| `CI-Eng-Sample.PUMP1.RUNNING.RUN_SECONDS` | Sub-item, Integrator | Running time in seconds (adds value × integration granule, `itm_int_secs` in `itm.sup`, default 1 s) | | `CI-Eng-Sample.TANK1.LEVEL.MAX` | Sub-item, Min-Max | Highest level seen | | `CI-Eng-Sample.DEMO` | Section | Tutorial examples | | `CI-Eng-Sample.DEMO.COUNTER` | Item, Integer | Counts 1…100, one step per second, written by `DEMO.INCR1` | @@ -47,6 +47,7 @@ cmd /c "\examples\CI-Eng-Sample\remove.cmd" | `CIENG_INCR` | Class (traditional) | Increments `DEMO.COUNTER`, wraps at 100; compiled on load | | `CI-Eng-Sample.DEMO.INCR1` | Object | Instance of `CIENG_INCR` | | `CIENG_EVENT` | Item storage group | Event/Item, lifetime 1 week, rollover 1 day | +| `CIENG_VIEWER` | Authorization group | Read-only: `ITEM_READ`, `SECTION_READ`, `ALARM_CURRENT_READ`, `ALARM_CHRONO_READ`. No users are created by the sample. | All items are internal (no station), so the project works without any PLC or simulator. New items start with status 13 (`NOT INIT`) until a value is written. @@ -61,7 +62,8 @@ New items start with status 13 (`NOT INIT`) until a value is written. | `03_his_group_df.qli` | Item storage group (`HIS_GROUP_DF`) | | `04_item_his_df.qli` | Items in the storage group (`ITEM_HIS_DF`, name `:`) | | `05_trigger_df.qli`, `06_class_df.qli`, `07_object_df.qli` | Trigger group, class (source in the `METHOD` memo, `@"` … `"@`, `COMPILE` 1), object | -| `86_`…`92_remove_*.qli` | Names to delete, in reverse order | +| `08_auth_group_df.qli` | Authorization group (`AUTH_GROUP_DF`) | +| `85_`…`92_remove_*.qli` | Names to delete, in reverse order | | `load.cmd`, `remove.cmd` | Run the steps in the right order | | `monitoring/*.sup.txt` | Setup-file lines for the monitoring processes (not applied by `load.cmd`) | diff --git a/examples/CI-Eng-Sample/load.cmd b/examples/CI-Eng-Sample/load.cmd index eee7df1..13b91e8 100644 --- a/examples/CI-Eng-Sample/load.cmd +++ b/examples/CI-Eng-Sample/load.cmd @@ -15,3 +15,5 @@ rem Processing: trigger group, class (compiled on load via COMPILE = 1), object dssqld -i 05_trigger_df.qli -l 05_trigger_df.qlo dssqld -i 06_class_df.qli -l 06_class_df.qlo dssqld -i 07_object_df.qli -l 07_object_df.qlo +rem Authorization: read-only group (no users are created by the sample) +dssqld -i 08_auth_group_df.qli -l 08_auth_group_df.qlo diff --git a/examples/CI-Eng-Sample/remove.cmd b/examples/CI-Eng-Sample/remove.cmd index 36c1154..b85f7f6 100644 --- a/examples/CI-Eng-Sample/remove.cmd +++ b/examples/CI-Eng-Sample/remove.cmd @@ -5,6 +5,7 @@ rem Order: object, class, trigger group, storage links, stop + delete storage gr 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. cd /d "%~dp0" +dssqld -r 85_remove_auth_group_df.qli -l 85_remove_auth_group_df.qlo 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 88_remove_trigger_df.qli -l 88_remove_trigger_df.qlo diff --git a/knowledge/issues.md b/knowledge/issues.md index dcc9f36..60dada3 100644 --- a/knowledge/issues.md +++ b/knowledge/issues.md @@ -19,7 +19,7 @@ development system (see "Test system" in `progress.md`); they do not exist on ot | ID | Date | Area | Issue | Status | Next step / resolution | Update on close | |---|---|---|---|---|---|---| -| ISS-001 | 2026-09-30 | ITEM (`itmval`) | Writing an item with `itmval -p -n AID.WRPS.SIM.INFLOW -v 400` added the `uoff` option flag (options 0x…8a → 0x…8e). The flag stayed after writing the original value back. Meaning of `uoff` unknown; not found in the EN manuals by text search. | open | 2026-09-30: writing internal sample items (`CI-Eng-Sample.*`, no station) does **not** set `uoff` (options stay 0x…88), so it is tied to station-connected items (the AID item was already `off`, its station not communicating). Still to find: meaning and how to clear it (ITEM Service IM 36K10L35/L36, Engineering Module I/O Processes IM 36K10C10). Revisit in phase 5 with a station item. 2026-09-30 later: unblocking a sample item left the flag `ublk` (after `blk` was cleared), so `u…` flags may mean "was …" (un-blocked / un-offline). Still unconfirmed. | `.claude/skills/system-management/tasks/read-write-item.md` (replace the `uoff` note under "Read the current value"); `knowledge/progress.md` row "Write an item with `itmval -p`" | +| ISS-001 | 2026-09-30 | ITEM (`itmval`) | Writing an item with `itmval -p -n AID.WRPS.SIM.INFLOW -v 400` added the `uoff` option flag (options 0x…8a → 0x…8e). The flag stayed after writing the original value back. Meaning of `uoff` unknown; not found in the EN manuals by text search. | closed | 2026-09-30 (phase 5): IM 36K10C10 §3.5 gives the option bits: 1 blocked, 2 offline, **4 updated offline** (written by an application while offline), 8 acknowledged, **16 updated blocked**, 32 direct alarm, 64 delayed alarm. 0x8a = offline + acknowledged (+0x80, not documented); +4 = 0x8e, so `uoff` = updated offline and `ublk` = updated blocked. Matches all observations. Not yet found: how to clear the flags (probably on the next update from the station). Closed 2026-09-30 (confirmed by user). Earlier notes: writing internal sample items (`CI-Eng-Sample.*`, no station) does **not** set `uoff` (options stay 0x…88), so it is tied to station-connected items (the AID item was already `off`, its station not communicating). Still to find: meaning and how to clear it (ITEM Service IM 36K10L35/L36, Engineering Module I/O Processes IM 36K10C10). Revisit in phase 5 with a station item. 2026-09-30 later: unblocking a sample item left the flag `ublk` (after `blk` was cleared), so `u…` flags may mean "was …" (un-blocked / un-offline). Still unconfirmed. | `.claude/skills/system-management/tasks/read-write-item.md` (replace the `uoff` note under "Read the current value"); `knowledge/progress.md` row "Write an item with `itmval -p`" | | ISS-002 | 2026-09-30 | DATABASE (`dsschk`) | `dsschk -d ITEM_DF -v` (check only) exits 0 with no console output and nothing new in `umhlog.log`. Where results are reported is unknown. | closed | Closed 2026-09-30 (confirmed by user). 2026-09-30: `dsschk -e -v` prints a start/end line per dataset (228 checked, no problems) and logs to `umhlog.log`. Plain `dsschk` only compares copies between nodes, so it prints nothing on a single-node system. `ismchk` needs a database file name (usage: `ismchk data_base_name`), not run yet. | Create `.claude/skills/system-management/tasks/consistency-check.md` and add it to that skill's `SKILL.md`; `knowledge/manuals/IM36K10J10-01EN.md` §4.1.1 consistency tools (add where output goes); `knowledge/progress.md` row "Consistency check" | | 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`" | @@ -29,11 +29,14 @@ development system (see "Test system" in `progress.md`); they do not exist on ot | 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 | -| ISS-010 | 2026-09-30 | ITEM (sub-items) | The Integrator sub-item adds value × seconds; setting `TIME_UNIT` = Hour made no difference (1 per second while the main item was 1). The Tutorial lists a time unit only for Rate-of-Change. | open | Confirm with ITEM Service manuals (IM 36K10L35/L36) in phase 5: is there a scaling option for integrators? | `examples/CI-Eng-Sample/02b_sub_item_df.qli`; `knowledge/manuals/IM36K10G10-01EN.md` | +| ISS-010 | 2026-09-30 | ITEM (sub-items) | The Integrator sub-item adds value × seconds; setting `TIME_UNIT` = Hour made no difference (1 per second while the main item was 1). The Tutorial lists a time unit only for Rate-of-Change. | closed | 2026-09-30 (phase 5): IM 36K10C10 §3.2 and `itm.sup` answer it: the integral is divided by the **integration granule** `itm_int_secs` (label "Integration granule, sec.") in `itm.sup` — **system-wide**, installed value 1 (seconds); 60 = minutes, 3600 = hours. `TIME_UNIT` only applies to Rate-of-Change. Practiced 2026-09-30: set to 60 and restarted → `CI-Eng-Sample.PUMP1.RUNNING.RUN_SECONDS` rose exactly 1.0 in 60 s; restored to 1 (file identical to backup) → 8 in 8 s. Existing integrator values are not converted when the granule changes. Closed 2026-09-30 (confirmed by user). | `examples/CI-Eng-Sample/02b_sub_item_df.qli`; `knowledge/manuals/IM36K10G10-01EN.md` | | ISS-011 | 2026-09-30 | ITEM (blocking) | A write to a blocked item with `itmval -p` (without `-o`) is silently ignored: no error message, value unchanged. | open | Check in phase 5 whether any status/return code signals this. | `.claude/skills/system-management/tasks/read-write-item.md` | | ISS-012 | 2026-09-30 | CI Portal setup files | IM 36K10R10 §4.4 names the alarm item/display relation setup file `wfla_displays.sup`; the installed file is `wfla_display.sup` (no `s`). | closed | Closed 2026-09-30 (user decision: the installed software and files are the reference). The repo uses `wfla_display.sup`. | `knowledge/manuals/IM36K10R10-01EN.md` §4; `.claude/skills/portal-setup/tasks/read-setup-file.md` | | ISS-013 | 2026-09-30 | CI Portal setup files | Installed values differ from the defaults stated in IM 36K10R10 §4.4: `wfla_display.sup` `DUR_QUEUE_SIZE = 1000` (manual 500 kB); `wflgdi.sup` `DUR_QUEUE_SIZE = 252` (manual 1000 kB); `wfla_display.sup` and `wflcdi.sup` set `TIMER_INTERVAL = 10` (manual: 1 s when not set). | closed | Closed 2026-09-30 (user decision: the installed software and files are the reference). The repo quotes the installed values as defaults. | `knowledge/manuals/IM36K10R10-01EN.md` §4 | | ISS-014 | 2026-09-30 | CI Portal setup files | `jwuiisg.sup` has a *Security* tab (`SECURITY_ENABLED`, `CORS_ENTRY`, `HEADER_ENTRY`) that IM 36K10R10 §4.3 does not describe. | closed | Closed 2026-09-30 (user decision: the installed software and files are the reference). Documented from the file's own `!KEYWORD`/`!HELP` text. Installed CORS allows all origins (`allowedOrigins "*"`); tightening it is a site security decision. | `knowledge/manuals/IM36K10R10-01EN.md` §4.3 | | ISS-015 | 2026-09-30 | Setup File Editor | In `wfla_display.sup` the seven main keywords (`RELATION_LOCATION` … `TIMER_INTERVAL`) come before the only tab line `!TAB = Debug`. By IM 36K10R20 §3.1, keywords before the first `!TAB` are not shown, yet IM 36K10R10 §4.4.1 shows them on a *General* tab. What the editor really shows is unknown. | closed | Closed 2026-09-30 (checked in the Setup File Editor by the user; installed software is the reference). The editor shows keywords placed before the first `!TAB` on a **General** tab, followed by the defined tabs: `wfla_display.sup` shows *General* (all 7 fields, values as in the file) and *Debug*. The manual's statement that such keywords are ignored does not hold in R1.03. | `knowledge/manuals/IM36K10R20-01EN.md` §3; `knowledge/manuals/IM36K10R10-01EN.md` §4; `.claude/skills/portal-setup/tasks/change-setup-file.md` | | ISS-016 | 2026-09-30 | Setup File Editor | The R1.03 editor has features IM 36K10R20 §2 does not describe: a *Templates* tab next to *Setup Files*; a *Status* column in the file list (e.g. "Default"); *Undo Field* and *Reset Field* buttons on the edit form besides OK/Cancel/Help; a status bar with the selected file's description and the time. | open | Installed software is the reference (user decision). 2026-09-30, tested on `wfla_display.sup` (`DUR_QUEUE_SIZE` 1000 → 2000): clicking **OK writes the file immediately** (only the active line changed; the manual says OK keeps the change in memory until Exit). Status becomes **Changed** when an active value differs from the file's `!DEFAULT` block; the changed field's label turns **blue**. *Reset Field* is enabled when the cursor is in a changed field; *Reset Field* + *OK* put the value back to the `!DEFAULT` value (2000 → 1000) and wrote the file at once (16:22:28); the rest of the file was unchanged. Still to find: what *Templates* holds and what *Undo Field* does. | `knowledge/manuals/IM36K10R20-01EN.md` §2; `.claude/skills/portal-setup/tasks/change-setup-file.md` | -| ISS-017 | 2026-09-30 | CI Portal setup files | IM 36K10R10 §4 says the logon method is the one user-interface setting normally changed, but the R1.03 `jwuiisg.sup` *Information* tab says the login method and login control settings have moved to `dssana.sup` (authentication and authorization). `dssana.sup` is not described in R10. | open | Installed software is the reference. 2026-09-30: `dssana.sup` ("Authentication and authorization setup") has tabs General, User Interfaces, Clients System Trust, Login control (`LOGIN_METHOD = , , , …`), Active Directory, Single Sign On, Password rules, Logging. Manuals mentioning it: IM 36K01A50 (5×), 36K10C10 (6×), 36K10J40 (13×), 36K10L45 (2×), 36K10L50 (3×). Cover it in phase 5 (C10) and phase 13 (J40). | `knowledge/manuals/IM36K10R10-01EN.md` §4; `.claude/skills/portal-setup/SKILL.md` | +| ISS-017 | 2026-09-30 | CI Portal setup files | IM 36K10R10 §4 says the logon method is the one user-interface setting normally changed, but the R1.03 `jwuiisg.sup` *Information* tab says the login method and login control settings have moved to `dssana.sup` (authentication and authorization). `dssana.sup` is not described in R10. | open | Installed software is the reference. 2026-09-30: `dssana.sup` ("Authentication and authorization setup") has tabs General, User Interfaces, Clients System Trust, Login control (`LOGIN_METHOD = , , , …`), Active Directory, Single Sign On, Password rules, Logging. Manuals mentioning it: IM 36K01A50 (5×), 36K10C10 (6×), 36K10J40 (13×), 36K10L45 (2×), 36K10L50 (3×). Cover it in phase 5 (C10) and phase 13 (J40). 2026-09-30: login methods (Automatic, Manual CI Server, Manual OS, No, SSO, Deny) now summarized from C10 §2.2 in `knowledge/manuals/IM36K10C10-01EN.md`; AD/SSO details remain for J40. | `knowledge/manuals/IM36K10R10-01EN.md` §4; `.claude/skills/portal-setup/SKILL.md` | +| 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` | diff --git a/knowledge/manuals/IM36K10C10-01EN.md b/knowledge/manuals/IM36K10C10-01EN.md new file mode 100644 index 0000000..a0dbc2d --- /dev/null +++ b/knowledge/manuals/IM36K10C10-01EN.md @@ -0,0 +1,247 @@ +--- +manual: IM 36K10C10-01EN +title: Engineering Module - I/O Processes +edition: 3rd Edition, Sep. 2023 +version: R1.03 +status: from docs; setup files and default datasets (users, authorization groups, schemes, trigger groups) checked read-only on the test system (2026-09-30) +--- + +# Engineering Module - I/O Processes (R1.03) + +The Engineering Module (Java GUI) defines what CI Server knows: users and rights, sections, +items and sub-items, equipment (lines, stations, points, scan types), item statuses, classes, +sequences and trigger groups. Section numbers refer to the manual. Command-line equivalents +used in this repo are given where they exist (quick load with `dssqld`, dataset names from +`dssqld -f`). + +## 1. Window (§1) + +Menu bar, toolbar, configuration tree (left), work area with property sheets, message area and +edit history (undo/redo of edits). +- *View → List*: List Items (item search), List Objects, item list of a section with values, + record layout list. +- *Archive*: automatic/manual archive, retrieve, mount/initialize/register storage media + (history, phase 9). +- *Playback*: record Engineering Module operations and open the recording viewer. +- Configuration tree areas: sections and items; I/O processing (equipment, classes, …); + alarms; reports; history; authorization; references. + +## 2. Authorization (§2) + +**Login setup lives in `dssana.sup`** (Setup File Editor), on **CI Core**, so each CI Portal / +user interface combination can have its own login method (tab *Login control*, +`LOGIN_METHOD = , , , , `). It also holds single sign-on, Active Directory and password rules (§2.1.1, §2.2). + +Login methods: + +| Method | Behaviour | +|---|---| +| Automatic | Windows user name = CI Server user name; no password | +| Manual CI Server | CI Server login form; user must exist in CI Server | +| Manual OS | Windows login form; with AD on, AD attributes pick the CI Server profile; with AD off the Windows name (without domain) must exist as CI Server user | +| No | No login; a no-login profile is applied. Only on CI Portal itself, not remote CI View. Protect that profile with a password. | +| SSO | AD single sign-on, no credentials; if SSO is off in `dssana.sup`, falls back to Manual CI Server | +| Deny | The user interface cannot be started | + +With AD, a user in several groups gets the merged profiles (priority per profile). If no users +exist yet, the Engineering Module asks you to define one instead of logging in. + +Test system (`dssana.sup` installed values): local Engineering/Edit Module, Operator +Interface etc. use **SSO**; remote Playback Viewer, Quickload and Display/Symbol utilities are +**Deny**; OPC UA/ODBC use *Manual CI Server*. The no-login profile named there is +`CI_NO_LOGIN` (the manual says `FT_NO_LOGIN`, ISS-018); no user of that name exists on the +test system. + +**Enterprise engineers (§2.3)** may maintain only their area: sections and everything in them, +definitions and deployments, authorization data, and equalization — and can deploy to a +server only if they have write rights there (e.g. on `ITEM_DF`). + +**Authorization groups (§2.4)** (`AUTH_GROUP_DF`, actions in `AUTH_ACTION_DF`): a group is a +list of allowed actions. Most are `_` for a dataset +category (e.g. `ITEM`, `SECTION`, `STATION`, `CLASS`, `OBJECT`, `USER`, `AUTH_GROUP`, +`TRIGGER_GROUP`, `HIS_GROUP`, `REPORT`, `DISPLAY`, `ALARM_*`, `AUD*`). Others are single +actions, e.g. `ITEM_MODIFY_VALUE`, `ITEM_MODIFY_LIMIT_HIGH`, `ITEM_MODIFY_BLOCKED_VALUE`, +`ITEM_ACK_ALARM`, `SECTION_BLOCK_UNBLOCK`, `STATION_ON_OFF_SCAN`, `ALARM_CURRENT_ACK`, +`REPORT_GENERATE_ADHOC`, `SYS_LOG_READ`, `EXECUTE_GENERAL_COMMANDS`, +`HIS_GROUP_FORCE_ROLLOVER`. Installed also: `AGGREGATION_OVERWRITE_*` (not in the manual). +Default groups on R1.03: `SYSTEM_MANAGER`, `ENGINEER`, `OPERATOR` (process areas 1–999) and +`GUEST`. + +**Users (§2.5)** (`USER_DF`); changes apply at the user's next login. Tabs: +- *General*: name, description, password (≤ 31 characters, case-sensitive), enterprise user + (must be deployed to every CI Core where needed), authorization group, process areas + (1–999, lists/ranges like `3 5 8 10-19`), locale (`en-US`, `ja-JP`; blank = Windows). +- *Directory services*: AD group mapping and profile priority (higher wins when merging). +- *Alarming*: alarm selection area, alarm shelving group. +- *Operator Interface*: logoff timeout (min, 0 = off), deployment folder (default + `%TLS_WAP_PATH%\cfg\operatorInterfaces\DEPLOY`), layout, initial display. +- *Destinations*: user's report printer for on-demand reports. +- *Playback*: recording on/off/"HMI Client dependent" (then set in + `%TLS_WAP_PATH%\cfg\playback\playback.xml` per client, application and user), and whether the + user may switch recording, change its properties, view, play all users' recordings, export. +Default users on R1.03: `ADMIN` (SYSTEM_MANAGER), `ADMINE` (enterprise admin), `OPER`, and +`CI_NO_LOGIN_OPCUAS` (anonymous OPC UA). + +**Schemes (§2.6)** (`SCHEME_DF`) hide Engineering Module folders and fields a project does not +need. Activating one restarts the Engineering Module (OK/Apply do not activate). Tabs: General +(multi-language, OPC server, playback, enterprise), I/O processing (PIT filter, STX-Bachmann, +hide item statuses), Alarming (e-mail notification, AOI, ASA, first-out, collection, groups, +diagnostic flag, OPC AE detection, predefined ack types only), Processing (control item, +sequences, priorities, extended reset, predefined trigger groups only), Reporting (item +trigger, priorities, lifetime), Historization (external archive, warning time, non-item +groups, direct storage), Authorization (process areas, predefined groups only). Installed: +`STARTER`, `STANDARD`, `ADVANCED`, none active. + +## 3. Items (§3) + +**Concepts (§3.1)**: an item holds value plus conversion, format, alarm parameters, I/O +authority, application info and status. Name `Section[.Sub-section…].Item`, max **255 bytes** +(multi-byte characters count more). An item can be connected to one I/O point on a station. +Raw values are converted to engineering units (e.g. linear `f(x)=ax+b` from electrical to +physical limits; overflow/underflow and a DELTA change limit give statuses; other conversions: +IM 36K10L41). + +**Limits and deadband**: up to four limits (none, H+L, or all four) plus one deadband on the +normal side; statuses LOWLOW, LOW, NORMAL, HIGH, HIGHHIGH. Scale high/low give +OVERRANGED/UNDERRANGED and override limit statuses. Booleans get status TRUE/FALSE +(BOOLEAN 1/0). + +**PIT filter** (reduces history events; used only if the application honours it): an update +passes when `(P OR I) AND NOT T`. +- P: |new − reference| > P. +- I: integral of (sample − reference) × seconds > I (1 s resolution). +- T: for T seconds after a pass, nothing passes. +- Each pass sets a new reference. + +**Sub-items (§3.2)**: Integrator, Pulse counter (Boolean main item, counts 0→1), Min/Max +indicator (runs until reset), Rate of change (time unit day/hour/minute/second chosen per +sub-item), Type-less (a free Real item written by PROCESS/REPORT services or applications). +- **Integrator**: `new = (t_now − t_prev) × previous value + old`, evaluated every second; + negative values subtract. The result is divided by the **integration granule** + `itm_int_secs` in `itm.sup` — **system-wide**, default and test-system value 1 (seconds); + 3600 gives hours (answers ISS-010). +- Sub-items have no Equipment tab and are **not** blocked with their main item. + +**Defining (§3.3)** — right-click node/section → Add. Sections: name cannot be changed (delete +and recreate; only possible when empty), new sections are UNBLOCKED; fields Blocked, Visible +via OPC, Alarm inhibit, plus read-only parent flags. Nesting is limited by the 255-character +path. Blocking a large section can take long. + +Item form tabs: General, Item Management, Limits and filtering (not for Boolean), Equipment, +Alarm (only if alarming on), Area of interest. Item name (tag): letters, digits, `_` +recommended; tag and type cannot be changed (delete and recreate). +- *General*: engineering units, value format (`9`, `0`, `+`, `.`, `EEEE`, date/time codes + `D DD M MM MMM Y YY YYYY h hh mm ss p`, `\` escapes a letter), representation (Boolean, + Integer 32-bit, Real 64-bit, String), alarming, audit trailing, *remember last value + immediately* (keep value/status/quality over a warm restart instead of NOT INIT), process + areas, comment 1/2, map position (WGS 84 latitude/longitude). +- *Item management*: blocked, OPC visible (+ read/write; also needs the section visible), + alarm inhibit, parent flags, data exposure aggregation interval (60 s–7 days, 0 = off). +- *Limits and filtering*: HH/H/L/LL, deadband (values may be rounded), scale high/low, limit + clamping (HH-LL, H-L, scale, none), out-of-range support, trend axis limits, PIT values. + String items: max length, default 80. The manual says max 100; the installed software + accepts 1–200 and stores length − 1 characters, cutting longer values with status 12 + OVERRANGED (verified, ISS-019). +- *Equipment*: pick an existing I/O point of a station, or define a new point here (created + with the item; delete it yourself when deleting the item). No connection = internal item. +- *Alarming*: OPC AE detection (AE station/event source) or CI Server detection, diagnostic + item, acknowledgment type, alarm collection, first-out group/item, delay time, repeat time, + per-status alarm state (None, Normal, Alarm 1–3), priority 0–15 (15 highest unless + `alm.sup` inverts it), text, colour, mnemonic, shelve enable. Ack types, collections and + first-out groups must exist first. +- *Areas of interest*: up to 16 labels used to filter alarms. + +**Blocking and offline (§3.4)**: blocked (manual, per item/sub-item, nested section or top +section) and offline (station connection lost) items are not updated by equipment. Unblocking +a section leaves items that were blocked individually still blocked. + +**Update value (§3.5)** (= `itmval -p`): value, status, quality code, *Overwrite blocked* +(= `itmval -o`), lock (user/terminal). **Option bits** (explains the `blk`/`off`/`uoff`/`ublk` +flags of `itmval -g`, ISS-001): + +| Bit | Value | Meaning | +|---|---|---| +| 0 | 1 | Blocked | +| 1 | 2 | Offline (no connection to equipment) | +| 2 | 4 | **Updated offline**: written by an application (object, this form, `itmval`) while offline | +| 3 | 8 | Acknowledged (last alarm event) | +| 4 | 16 | **Updated blocked**: written by an application while blocked | +| 5 | 32 | Direct alarm (alarm state reached, delay running) | +| 6 | 64 | Delayed alarm (after the delay; set together with bit 5) | + +Also on the form: force to normal / force to alarm, priority, colour, mnemonic, text. + +## 4. I/O processing (§4) + +**Equipment (§4.1)**: *lines* (protocol/connection), *stations* (controllers, identified +internally by equipment manager + slave number; up to 4095 per manager) and *points* (I/O +addresses). Details per station type: IM 36K10L40/L41. +- Station form: line, redundant lines and TCP/IP addresses, preferred line; **On scan** + (off-scan stops input updates for the whole station — cheaper than blocking each item; + outputs continue), **Suppress outputs**, output method (on change / on change and connect); + status items: general communication (1 good, 0 bad, status OFFSCAN when off-scan), line 1, + line 2 (typeless sub-items show sub-line states for Modbus TCP), line selection. +- Scan types (`SCAN_TYPE_DF`): name + interval (ms); intervals are multiples of the equipment + manager's tick. PLC reads are grouped using *maximum gap* and *maximum size*. +- *All equipment definitions* shows lines, stations, points and scan types read-only; + editing is done under each plug-in's own tree node. Points created from an item form are + shown as `[]`. + +**Item statuses (§4.2)** (`STATUS_DF`): numbers 0–255 mapped to a system text (fixed), +description (user text), mnemonic, alarm priority, alarm state, colour, shelve enable. +**100–127 are free**; the rest are reserved (34–99 and 128+ used for DCS/batch/HAC interfaces). +Common ones: 1 CALCULATE, 3 BLOCKED, 4/5 BOOLEAN 0/1, 6 UNDERRANGED, 7 LOW LOW, 8 LOW, +9 NORMAL, 10 HIGH, 11 HIGH HIGH, 12 OVERRANGED, 13 NOT INIT, 14 OFFLINE, 15 UPD OFFLINE, +16 UPD BLOCKED, 21 DELTA, 22 OFFSCAN, 23 OUT_SUPR, 24 BAD VALUE. + +**Classes (§4.3)** (`CLASS_DF`): templates in the PROCESS Service traditional language +(IM 36K10P10) or Java (IM 36K10P11); the language is fixed once created and the two cannot +reference each other. Changing a class needs a **reset** before objects use it. + +**Sequences (§4.4)** (`SEQUENCE_DF`): a one-off program (class and object in one) tied to a +**control item**; traditional language only. Compile, then set activation time, trigger +interval (or trigger once / event-driven `TRIGGER` on TIMER or ITEM), deactivation time, +daylight-saving correction. Blocking the control item puts the sequence off-line; the `STEP` +variable is the control item's value. Classes are preferred for maintainability. + +**Trigger groups (§4.5)** (`TRIGGER_DF`): name (≤ 15 characters, letter first, then letters, +digits, `_`), activation time (immediate or date), deactivation (infinite or date), trigger +once or interval (seconds … years), daylight-saving correction. Triggers fire at activation +time + n × interval. Editable except the name; deletable only when unused. Installed defaults: +`ONCE`, `ONE_SECOND`, `TWO_SECONDS`, `FIVE_SECONDS`, `TEN_SECONDS`, `THIRTY_SECONDS`, +`ONE_MINUTE`, `TWO_MINUTES`, `FIVE_MINUTES`, `TEN_MINUTES`, `THIRTY_MINUTES`, `ONE_HOUR`. + +## 5. Class and object engineering (§5) + +Flow: trigger group → class (code, compile) → object → test → (symbol → display → test). +PROCESS Service runs at 1-second resolution at best. +- **Class** (§5.2): name ≤ 15 characters (letter first); language; priority (load balancing, + ranges set in the PROCESS Service setup file); *Extended reset enabled*. Code tab (template, + Compile after reopening the form), Listing tab (errors start `**** ERROR:`; double-click to + jump), Trigger Groups tab. +- **Object** (§5.3): created under a section like an item; node (blank = local / control + item's node), priority 0–999 (0 = class priority), class, optional **control item** (object + runs when its status is on-line; BLOCKED disables methods; `STEP` = its value), map + position, up to 99 attribute prompts. Item management: *Items may exist* (reuse existing + items with identical attributes), *Leave items* (keep created items when deleting the + object), blocked, OPC visible, alarm inhibit. Object trigger groups override the class's. +- **Testing** (§5.4): `PRINT` statements go to the message log (remove afterwards); right-click + object → *Debug* collects a trace (triggers, methods, changed signals/attributes) shown when + debug is switched off. +- **Reset** (§5.5): compiled changes take effect only after resetting the class (all objects) + or single objects; control may be lost briefly; there is no indication which objects were + reset. *Normal reset* for body changes; *extended reset* when the **signature** changes + (traditional: prolog section; Java: attribute/signal declarations or `create()`); it may + create/modify/delete signal items. If the compiler misses a signature change, force it + (*Extended reset forced*). +- **Symbols** (§5.6–5.9): a symbol can be tied to a PROCESS Service class; its component + properties connect to class signals (e.g. fill colour via a threshold table); on a display + each symbol instance is pointed at an object (Edit Module, phase 10). + +## Differences from the installed software + +Logged in `knowledge/issues.md`; the installed software is taken as right: +- ISS-018: no-login profile `CI_NO_LOGIN` (manual: `FT_NO_LOGIN`). +- ISS-019 (closed): string item maximum length is 200 in the software (manual: 100; Tutorial: 168). +- Installed authorization actions include `AGGREGATION_OVERWRITE_*`, not listed in §2.4. diff --git a/knowledge/manuals/IM36K10G10-01EN.md b/knowledge/manuals/IM36K10G10-01EN.md index 5410079..d616f86 100644 --- a/knowledge/manuals/IM36K10G10-01EN.md +++ b/knowledge/manuals/IM36K10G10-01EN.md @@ -36,7 +36,9 @@ Module and Operator Interface. **Items (ch. 3)** - Full name `Section.Sub-section.Item` (max 255 bytes; no `:` or `.` inside a name; case insensitive). Sections can be blocked as a whole, e.g. for maintenance. -- Types: Boolean, Integer, Real, String (max length 80 by default, up to 168 without audit). +- Types: Boolean, Integer, Real, String (the Tutorial says max length 80 by default, up to 168 + without audit; the installed R1.03 allows `STRING_LENGTH` 1–200 with or without audit and + holds length − 1 characters, verified, ISS-019). - Four limits (LL, L, H, HH) plus a deadband set the status LOWLOW…HIGHHIGH; the deadband sits on the normal side of each limit. Scale high/low give OVERRANGED / UNDERRANGED. Booleans set status TRUE/FALSE. @@ -101,7 +103,7 @@ history storage groups and archiving (phase 9). | Tutorial step | Done with | Result | |---|---|---| | Sections and items (3.2) | `dssqld -i` `SECTION_DF`, `ITEM_DF` | loaded | -| Sub-items (3.2.3) | `SUB_ITEM_DF` | Min-Max keeps the maximum; **Integrator adds value × seconds; `TIME_UNIT` has no effect** | +| Sub-items (3.2.3) | `SUB_ITEM_DF` | Min-Max keeps the maximum; **Integrator adds value × integration granule (`itm_int_secs` in `itm.sup`, default 1 s, system-wide); `TIME_UNIT` has no effect** (ISS-010) | | Block item (3.3) | `dssqld -m` `ITEM_DF` `BLOCKED` 1/0 | option flag `blk` (status stays 9); writes without `-o` are **silently ignored**; after unblocking the flag `ublk` appears | | Trigger group (5.1) | `TRIGGER_DF` (`TRIGGER_INTERVAL` "1 seconds") | loaded | | Class (5.2) | `CLASS_DF` with `METHOD` memo and `COMPILE` 1 | compiled on load | diff --git a/knowledge/progress.md b/knowledge/progress.md index 0864c43..2ad984a 100644 --- a/knowledge/progress.md +++ b/knowledge/progress.md @@ -36,7 +36,7 @@ AID is not needed. | 3 | IM 36K10G10 | Tutorial | summarized ([notes](manuals/IM36K10G10-01EN.md)); command-line equivalents practiced on CI-Eng-Sample | | 4 | IM 36K10R10 | CI Portal Setup | done except separate CI Portal node (needs a second node); skill `portal-setup` ([notes](manuals/IM36K10R10-01EN.md)) | | 4 | IM 36K10R20 | Setup File Editor | done; Templates tab and Undo Field not explored ([notes](manuals/IM36K10R20-01EN.md), ISS-016) | -| 5 | IM 36K10C10 | Engineering Module - I/O Processes | not started | +| 5 | IM 36K10C10 | Engineering Module - I/O Processes | summarized ([notes](manuals/IM36K10C10-01EN.md)); default datasets checked read-only | | 5 | IM 36K10L40 | EQUIPMENT Service - Utilities | not started | | 5 | IM 36K10L41 | EQUIPMENT Service - Configuration | not started | | 5 | IM 36K10L35 | ITEM Service - ITH | not started | @@ -81,7 +81,7 @@ now come before classes and objects (phase 6), and the other interfaces follow a | J10 | Export a dataset with `dssqld` ([task](../.claude/skills/system-management/tasks/export-dataset.md)) | passed | n/a | Filtered export (`@SELECT`) passed ([ISS-003](issues.md), closed). | | J10 | Import and delete dataset records with `dssqld` (`-i`, `-r`) ([task](../.claude/skills/system-management/tasks/load-remove-records.md)) | passed | passed | Built CI-Eng-Sample: 3 sections + 4 items imported, removed and re-imported with 0 errors. 2026-09-30 later: `-m` (update, used to set a storage group stop time) and loading/removing storage groups passed; see [ISS-005](issues.md). | | J10 | Read an item with `itmval -g` ([task](../.claude/skills/system-management/tasks/read-write-item.md)) | passed | passed | Read `AID.WRPS.*` items. `-a 1..5` gave `ITM-E-WRONG_ATT` on an item without limits; works on items with limits ([ISS-004](issues.md), closed). | -| J10 | Write an item with `itmval -p` ([task](../.claude/skills/system-management/tasks/read-write-item.md)) | passed | passed | Sample: `TANK1.INFLOW` 120.5 then 130 with `-s 9`, `PUMP1.RUNNING` 1 (status 5 BOOLEAN 1); no `uoff` flag. AID: `AID.WRPS.SIM.INFLOW` 419.76 → 400 → 419.76. After the first write the item's options gained the `uoff` flag (0x8a → 0x8e), which stays after restoring the value. See [ISS-001](issues.md). | +| J10 | Write an item with `itmval -p` ([task](../.claude/skills/system-management/tasks/read-write-item.md)) | passed | passed | Sample: `TANK1.INFLOW` 120.5 then 130 with `-s 9`, `PUMP1.RUNNING` 1 (status 5 BOOLEAN 1); no `uoff` flag. AID: `AID.WRPS.SIM.INFLOW` 419.76 → 400 → 419.76. After the first write the item's options gained the `uoff` flag (0x8a → 0x8e) = *updated offline*, option bit 4 (written while its station was offline). See [ISS-001](issues.md), closed. | | J10 | Read the message log (`tls\log\umhlog.log`) | passed | n/a | | | J10 | Per-component version list (`tls\lst\tls_versions.lst`) | passed | n/a | | | J10 | Load history from CSV with `ithloahis`; read history back with `dssqld` ([task](../.claude/skills/system-management/tasks/load-history.md)) | passed | passed | Sample storage group `CIENG_EVENT` (Event/Item). SCAN file (LEVEL 61–63, INFLOW 101–103) and EVENT file (LEVEL 47, 48) stored and read back via `ITEM_HISTORY`. New groups need a CI Server restart before they store; samples dated before the current storage unit were not stored ([ISS-006](issues.md)). | @@ -98,9 +98,11 @@ now come before classes and objects (phase 6), and the other interfaces follow a | C10 | Vnet/IP drivers / Vnet/IP Interface Package | not practiced | n/a | No Vnet/IP card; not supported on Windows 10 Pro. | | C30 | IT Security Tool, Domain Link Management, account utilities | not practiced | n/a | Not installed and not supported on Windows 10 Pro. | | G10 | Sub-items: Integrator, Min-Max (`SUB_ITEM_DF`) ([task](../.claude/skills/item-engineering/tasks/sub-items.md)) | passed | passed | Integrator adds value × seconds; `TIME_UNIT` ignored. | -| G10 | Block / unblock an item (`ITEM_DF.BLOCKED` via `dssqld -m`); write with `itmval -o` ([task](../.claude/skills/item-engineering/tasks/block-item.md)) | passed | passed | `blk` flag, writes without `-o` silently ignored; `ublk` after unblock ([ISS-001](issues.md)). | +| G10 | Block / unblock an item (`ITEM_DF.BLOCKED` via `dssqld -m`); write with `itmval -o` ([task](../.claude/skills/item-engineering/tasks/block-item.md)) | passed | passed | `blk` flag, writes without `-o` silently ignored; `ublk` (*updated blocked*) after unblock ([ISS-001](issues.md), closed). | | G10 | Trigger group, class (compile on load), object via quick load ([task](../.claude/skills/class-object-engineering/tasks/load-class-object.md)) | passed | passed | `DEMO.COUNTER` counts every second; full remove/load cycle clean. | -| G10 | Authorization group and user creation | not practiced | n/a | Creates CI Server login accounts; left for the user or phase 5. | +| G10/C10 | Authorization group and user creation ([task](../.claude/skills/authorization/tasks/users-groups.md)) | passed | passed | Group `CIENG_VIEWER` (sample file `08_auth_group_df.qli`) loaded/removed by Claude; test user `CIENG_TEST` (no password) loaded by the user, checked and removed. The sample creates no users. | +| C10 | String items: length 1–200, holds length − 1 characters ([task](../.claude/skills/item-engineering/tasks/string-items.md)) | passed | passed | Tested with temporary `CI-Eng-Sample.DEMO.STR*` items (removed): 201 rejected; too-long writes cut, status 12 OVERRANGED ([ISS-019](issues.md)). | +| C10 | Integrator time unit: integration granule `itm_int_secs` in `itm.sup` ([task](../.claude/skills/item-engineering/tasks/sub-items.md)) | passed | passed | 60 → `RUN_SECONDS` +1 per minute; restored to 1 (file identical to backup), +1 per second again ([ISS-010](issues.md)). Elevated restarts run by the user. | | G10 | Displays, symbols, Operator Interface test | not practiced | pending | GUI (Edit Module); phase 10. | | G10 | Lines / stations / points, alarms, reports, audit, RDBMS, history | not practiced | pending | Covered in their own phases (5–12). | | R10/R20 | Read a setup file: active settings and keyword help ([task](../.claude/skills/portal-setup/tasks/read-setup-file.md)) | passed | n/a | Read-only. Compared with the Setup File Editor GUI for `wfla_display.sup`, `wflgdi.sup` and all 9 tabs of `jwuiisg.sup`: fields and values identical. Manual differences logged as ISS-012 to ISS-017 (installed software taken as the reference). |