Phase 5: I/O processes, equipment and ITEM Service; authorization and equipment skills #5

Merged
cliu merged 4 commits from docs/phase-5-io-items into main 2026-09-30 17:29:48 +10:00
17 changed files with 470 additions and 22 deletions
Showing only changes of commit ef543cde20 - Show all commits

View 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 |

View 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.

View file

@ -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 |

View file

@ -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
unchanged; `knowledge/issues.md` ISS-011). Add `-o` to overwrite:
`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).

View 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.

View file

@ -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 <file>.qli -l <file>.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).

View file

@ -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

View file

@ -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

View 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"

View 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"

View file

@ -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.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 "<repo>\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 `<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 |
| `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`) |

View file

@ -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

View file

@ -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

View file

@ -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 <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`" |
@ -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 = <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` |

View 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.

View file

@ -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 |

View file

@ -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). |