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 <noreply@anthropic.com>
This commit is contained in:
parent
95f0131a95
commit
ef543cde20
17 changed files with 470 additions and 22 deletions
29
.claude/skills/authorization/SKILL.md
Normal file
29
.claude/skills/authorization/SKILL.md
Normal file
|
|
@ -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 |
|
||||||
86
.claude/skills/authorization/tasks/users-groups.md
Normal file
86
.claude/skills/authorization/tasks/users-groups.md
Normal file
|
|
@ -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
|
||||||
|
"<USER>","<description>","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>"'
|
||||||
|
@USER_DF
|
||||||
|
```
|
||||||
|
|
||||||
|
Remove users first, then the group, in one `NAME`-only file (`dssqld -r`):
|
||||||
|
|
||||||
|
```
|
||||||
|
@FIELDS
|
||||||
|
NAME
|
||||||
|
|
||||||
|
@USER_DF
|
||||||
|
"<USER>"
|
||||||
|
|
||||||
|
@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.
|
||||||
|
|
@ -3,8 +3,9 @@ name: item-engineering
|
||||||
description: >-
|
description: >-
|
||||||
CI Server R1.03 sections, items and sub-items. Use when the user wants to create or change
|
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,
|
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
|
scale or value format, string item length, integrator time unit (integration granule),
|
||||||
option flags. Sources IM 36K10G10-01EN (Tutorial); to be extended with IM 36K10C10 in phase 5.
|
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)
|
# Item engineering (R1.03)
|
||||||
|
|
@ -21,3 +22,5 @@ Rules:
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| Sub-items (integrator, min-max) | `tasks/sub-items.md` | verified |
|
| Sub-items (integrator, min-max) | `tasks/sub-items.md` | verified |
|
||||||
| Block / unblock an item; write to a blocked item | `tasks/block-item.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 |
|
||||||
|
|
|
||||||
|
|
@ -33,4 +33,6 @@ dssqld -m block.qli -l block.qlo
|
||||||
- `itmval -p -n <item> -v <value>` on a blocked item is **silently ignored** (no error, value
|
- `itmval -p -n <item> -v <value>` on a blocked item is **silently ignored** (no error, value
|
||||||
unchanged; `knowledge/issues.md` ISS-011). Add `-o` to overwrite:
|
unchanged; `knowledge/issues.md` ISS-011). Add `-o` to overwrite:
|
||||||
`itmval -p -n <item> -v <value> -o`.
|
`itmval -p -n <item> -v <value> -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).
|
||||||
|
|
|
||||||
37
.claude/skills/item-engineering/tasks/string-items.md
Normal file
37
.claude/skills/item-engineering/tasks/string-items.md
Normal file
|
|
@ -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
|
||||||
|
"<Section>.<Tag>","Status text","String",120,0
|
||||||
|
```
|
||||||
|
|
||||||
|
Write and read: `itmval -p -n <Section>.<Tag> -v "text"`, `itmval -g -n <Section>.<Tag>`.
|
||||||
|
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.
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
task: Create sub-items (integrator, min-max)
|
task: Create sub-items (integrator, min-max)
|
||||||
version: R1.03
|
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
|
status: verified
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -27,9 +27,13 @@ Load with `dssqld -i <file>.qli -l <file>.qlo`; remove with a `NAME`-only file a
|
||||||
|
|
||||||
## Behaviour (verified)
|
## Behaviour (verified)
|
||||||
|
|
||||||
- **Integrator** adds *value × seconds*: with the main item at 1 it grows by 1 per second.
|
- **Integrator** adds *value × time unit*: 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,
|
by default. The time unit is the **integration granule** `itm_int_secs` in `itm.sup`
|
||||||
divide by 3600 where the value is used.
|
(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
|
- **Min-Max** with `MIN_MAX` = `Maximum` (or `Minimum`) keeps the highest (lowest) value
|
||||||
written to the main item: writing 30, 70, 50 gave 70.
|
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).
|
- `TIME_UNIT` (Second, Minute, Hour, Day) belongs to Rate-of-Change (from docs, not practiced).
|
||||||
|
|
|
||||||
|
|
@ -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`
|
- **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
|
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`.
|
here), 4 / 5 `BOOLEAN 0` / `BOOLEAN 1`, 11 `HIGH HIGH`.
|
||||||
- **Options** lists item flags as words after the hex value, e.g. `ack` (acknowledged),
|
- **Options** lists item flags as words after the hex value (option bits, IM 36K10C10 §3.5):
|
||||||
`off` (item's station not communicating). `uoff` also appears on station items after a write;
|
`blk` 1 blocked, `off` 2 offline (station not communicating), `uoff` 4 **updated offline**
|
||||||
its meaning is not yet known (see `knowledge/issues.md` ISS-001).
|
(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
|
## Read limits
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ ENGLISH
|
||||||
1.03.00
|
1.03.00
|
||||||
|
|
||||||
! CI-Eng-Sample sub-items (Tutorial IM 36K10G10-01EN 3.1.5, 3.2.3), CI Server R1.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.
|
! Min-Max: keeps the maximum (or minimum) of the main item.
|
||||||
@FIELDS
|
@FIELDS
|
||||||
NAME,DESCRIPTION,SUB_TYPE,TIME_UNIT,MIN_MAX
|
NAME,DESCRIPTION,SUB_TYPE,TIME_UNIT,MIN_MAX
|
||||||
|
|
|
||||||
13
examples/CI-Eng-Sample/08_auth_group_df.qli
Normal file
13
examples/CI-Eng-Sample/08_auth_group_df.qli
Normal file
|
|
@ -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"
|
||||||
12
examples/CI-Eng-Sample/85_remove_auth_group_df.qli
Normal file
12
examples/CI-Eng-Sample/85_remove_auth_group_df.qli
Normal file
|
|
@ -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"
|
||||||
|
|
@ -39,7 +39,7 @@ cmd /c "<repo>\examples\CI-Eng-Sample\remove.cmd"
|
||||||
| `CI-Eng-Sample.SYSTEM.DISK_C` | Item, Real | Target for `intdskmon` (reports **used** %) |
|
| `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.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.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.TANK1.LEVEL.MAX` | Sub-item, Min-Max | Highest level seen |
|
||||||
| `CI-Eng-Sample.DEMO` | Section | Tutorial examples |
|
| `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` |
|
| `CI-Eng-Sample.DEMO.COUNTER` | Item, Integer | Counts 1…100, one step per second, written by `DEMO.INCR1` |
|
||||||
|
|
@ -47,6 +47,7 @@ cmd /c "<repo>\examples\CI-Eng-Sample\remove.cmd"
|
||||||
| `CIENG_INCR` | Class (traditional) | Increments `DEMO.COUNTER`, wraps at 100; compiled on load |
|
| `CIENG_INCR` | Class (traditional) | Increments `DEMO.COUNTER`, wraps at 100; compiled on load |
|
||||||
| `CI-Eng-Sample.DEMO.INCR1` | Object | Instance of `CIENG_INCR` |
|
| `CI-Eng-Sample.DEMO.INCR1` | Object | Instance of `CIENG_INCR` |
|
||||||
| `CIENG_EVENT` | Item storage group | Event/Item, lifetime 1 week, rollover 1 day |
|
| `CIENG_EVENT` | Item storage group | Event/Item, lifetime 1 week, rollover 1 day |
|
||||||
|
| `CIENG_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.
|
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.
|
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`) |
|
| `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 `<group>:<item>`) |
|
| `04_item_his_df.qli` | Items in the storage group (`ITEM_HIS_DF`, name `<group>:<item>`) |
|
||||||
| `05_trigger_df.qli`, `06_class_df.qli`, `07_object_df.qli` | Trigger group, class (source in the `METHOD` memo, `@"` … `"@`, `COMPILE` 1), object |
|
| `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 |
|
| `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`) |
|
| `monitoring/*.sup.txt` | Setup-file lines for the monitoring processes (not applied by `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 05_trigger_df.qli -l 05_trigger_df.qlo
|
||||||
dssqld -i 06_class_df.qli -l 06_class_df.qlo
|
dssqld -i 06_class_df.qli -l 06_class_df.qlo
|
||||||
dssqld -i 07_object_df.qli -l 07_object_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
|
||||||
|
|
|
||||||
|
|
@ -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 A storage group with an active unit cannot be deleted (HIS-E-GROUPHASUNT), so the
|
||||||
rem group first gets a stop time one minute ahead; the script waits until it has passed.
|
rem group first gets a stop time one minute ahead; the script waits until it has passed.
|
||||||
cd /d "%~dp0"
|
cd /d "%~dp0"
|
||||||
|
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 86_remove_object_df.qli -l 86_remove_object_df.qlo
|
||||||
dssqld -r 87_remove_class_df.qli -l 87_remove_class_df.qlo
|
dssqld -r 87_remove_class_df.qli -l 87_remove_class_df.qlo
|
||||||
dssqld -r 88_remove_trigger_df.qli -l 88_remove_trigger_df.qlo
|
dssqld -r 88_remove_trigger_df.qli -l 88_remove_trigger_df.qlo
|
||||||
|
|
|
||||||
|
|
@ -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 |
|
| 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-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 <out> <filter>.qli`) failed with a guessed filter syntax (`@ITEM_DF`, `@FIELD`, `@SELECT`). | closed | Closed 2026-09-30 (confirmed by user). 2026-09-30: the quick load **data** format is now known and verified (`@LANGUAGE`, `@VERSION`, `@FIELDS`, `@<DATASET>`, quoted CSV records, `\` continuation, `!` comments; IM 36K10L45 §9.11). Filter syntax found (IM 36K10L50 §3.6) and practiced, awaiting confirmation: a file with `@SELECT`, then the filter in single quotes (strings in double quotes), then `@<DATASET>`; run `dssqld -e <out> <filter>.qli`. `ITEM_HISTORY` returns nothing unless the filter names `ITEM_NAME` and a `SAMPLE_TIME` range (`SAMPLE_TIME > "dd-mm-yyyy hh:mm:ss" and SAMPLE_TIME < ...`). | `.claude/skills/system-management/tasks/export-dataset.md` section "Filtered exports"; `knowledge/manuals/IM36K10J10-01EN.md` §5.6 step 1; `knowledge/progress.md` row "Export a dataset" |
|
| ISS-003 | 2026-09-30 | DATABASE (`dssqld`) | Filtered export (`dssqld -e <out> <filter>.qli`) failed with a guessed filter syntax (`@ITEM_DF`, `@FIELD`, `@SELECT`). | closed | Closed 2026-09-30 (confirmed by user). 2026-09-30: the quick load **data** format is now known and verified (`@LANGUAGE`, `@VERSION`, `@FIELDS`, `@<DATASET>`, quoted CSV records, `\` continuation, `!` comments; IM 36K10L45 §9.11). Filter syntax found (IM 36K10L50 §3.6) and practiced, awaiting confirmation: a file with `@SELECT`, then the filter in single quotes (strings in double quotes), then `@<DATASET>`; run `dssqld -e <out> <filter>.qli`. `ITEM_HISTORY` returns nothing unless the filter names `ITEM_NAME` and a `SAMPLE_TIME` range (`SAMPLE_TIME > "dd-mm-yyyy hh:mm:ss" and SAMPLE_TIME < ...`). | `.claude/skills/system-management/tasks/export-dataset.md` section "Filtered exports"; `knowledge/manuals/IM36K10J10-01EN.md` §5.6 step 1; `knowledge/progress.md` row "Export a dataset" |
|
||||||
| ISS-004 | 2026-09-30 | ITEM (`itmval`) | `itmval -g -a <1..5>` returns `ITM-E-WRONG_ATT` on `AID.WRPS.*` items, so reading limits is unproven. | closed | Closed 2026-09-30 (confirmed by user). On `CI-Eng-Sample.TANK1.LEVEL` (limits set) `-a 1..5` returned deadband 0, low 20, high 80, low-low 10, high-high 90. The error only occurs on items without limits. | `.claude/skills/system-management/tasks/read-write-item.md` (limits section); `knowledge/progress.md` row "Read an item with `itmval -g`" |
|
| ISS-004 | 2026-09-30 | ITEM (`itmval`) | `itmval -g -a <1..5>` returns `ITM-E-WRONG_ATT` on `AID.WRPS.*` items, so reading limits is unproven. | closed | Closed 2026-09-30 (confirmed by user). On `CI-Eng-Sample.TANK1.LEVEL` (limits set) `-a 1..5` returned deadband 0, low 20, high 80, low-low 10, high-high 90. The error only occurs on items without limits. | `.claude/skills/system-management/tasks/read-write-item.md` (limits section); `knowledge/progress.md` row "Read an item with `itmval -g`" |
|
||||||
|
|
@ -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-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-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-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-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-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-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-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-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 = <client>, <user interface>, <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 = <client>, <user interface>, <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 "<long absolute path>\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` |
|
||||||
|
|
|
||||||
247
knowledge/manuals/IM36K10C10-01EN.md
Normal file
247
knowledge/manuals/IM36K10C10-01EN.md
Normal file
|
|
@ -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 = <client>, <user interface>, <method>, <prompt to define users>, <no-login
|
||||||
|
profile>`). 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 `<CATEGORY>_<READ|INSERT|MODIFY|DELETE>` 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 name>]`.
|
||||||
|
|
||||||
|
**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.
|
||||||
|
|
@ -36,7 +36,9 @@ Module and Operator Interface.
|
||||||
**Items (ch. 3)**
|
**Items (ch. 3)**
|
||||||
- Full name `Section.Sub-section.Item` (max 255 bytes; no `:` or `.` inside a name; case
|
- 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.
|
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
|
- 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.
|
on the normal side of each limit. Scale high/low give OVERRANGED / UNDERRANGED.
|
||||||
Booleans set status TRUE/FALSE.
|
Booleans set status TRUE/FALSE.
|
||||||
|
|
@ -101,7 +103,7 @@ history storage groups and archiving (phase 9).
|
||||||
| Tutorial step | Done with | Result |
|
| Tutorial step | Done with | Result |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| Sections and items (3.2) | `dssqld -i` `SECTION_DF`, `ITEM_DF` | loaded |
|
| 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 |
|
| 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 |
|
| 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 |
|
| Class (5.2) | `CLASS_DF` with `METHOD` memo and `COMPILE` 1 | compiled on load |
|
||||||
|
|
|
||||||
|
|
@ -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 |
|
| 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 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) |
|
| 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 36K10L40 | EQUIPMENT Service - Utilities | not started |
|
||||||
| 5 | IM 36K10L41 | EQUIPMENT Service - Configuration | not started |
|
| 5 | IM 36K10L41 | EQUIPMENT Service - Configuration | not started |
|
||||||
| 5 | IM 36K10L35 | ITEM Service - ITH | 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 | 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 | 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 | 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 | 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 | 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)). |
|
| 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. |
|
| 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. |
|
| 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 | 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 | 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 | 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). |
|
| 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). |
|
| 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). |
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue