From 84228490dd12e42b2fd933aa3f14803d565f7f83 Mon Sep 17 00:00:00 2001 From: cliu Date: Thu, 1 Oct 2026 16:17:02 +1000 Subject: [PATCH 1/4] Add report device, destination and three reports to CI-Eng-Sample CIENG_FILE (file device built for the node at load time), CIENG_TANK1 (ad hoc with item parameter, daily 06:00), CIENG_INFLOW_HI (item trigger) and CIENG_HTML (HTML, cursor loop, logbook). remove.cmd clears the schedule first, since a scheduled report cannot be deleted. Co-Authored-By: Claude Opus 5.5 --- examples/CI-Eng-Sample/.gitignore | 1 + examples/CI-Eng-Sample/17_printer_df.ps1 | 16 ++++ examples/CI-Eng-Sample/17_printer_df.tpl | 23 ++++++ examples/CI-Eng-Sample/18_report_df.qli | 82 +++++++++++++++++++ .../CI-Eng-Sample/83_remove_report_df.qli | 15 ++++ examples/CI-Eng-Sample/83a_stop_report_df.qli | 13 +++ .../CI-Eng-Sample/84_remove_printer_df.qli | 19 +++++ examples/CI-Eng-Sample/README.md | 25 +++++- examples/CI-Eng-Sample/load.cmd | 5 ++ examples/CI-Eng-Sample/remove.cmd | 9 +- 10 files changed, 205 insertions(+), 3 deletions(-) create mode 100644 examples/CI-Eng-Sample/17_printer_df.ps1 create mode 100644 examples/CI-Eng-Sample/17_printer_df.tpl create mode 100644 examples/CI-Eng-Sample/18_report_df.qli create mode 100644 examples/CI-Eng-Sample/83_remove_report_df.qli create mode 100644 examples/CI-Eng-Sample/83a_stop_report_df.qli create mode 100644 examples/CI-Eng-Sample/84_remove_printer_df.qli diff --git a/examples/CI-Eng-Sample/.gitignore b/examples/CI-Eng-Sample/.gitignore index 3f93a26..7742c18 100644 --- a/examples/CI-Eng-Sample/.gitignore +++ b/examples/CI-Eng-Sample/.gitignore @@ -1 +1,2 @@ *.qlo +17_printer_df.qli diff --git a/examples/CI-Eng-Sample/17_printer_df.ps1 b/examples/CI-Eng-Sample/17_printer_df.ps1 new file mode 100644 index 0000000..af26ea5 --- /dev/null +++ b/examples/CI-Eng-Sample/17_printer_df.ps1 @@ -0,0 +1,16 @@ +# Build 17_printer_df.qli from 17_printer_df.tpl for this system (CI-Eng-Sample, CI Server R1.03.00). +# The printer device needs the CI Server node name (":FILE") and a literal output path, +# so they are filled in here: node name from LOCAL_NODE_DF, path from %TLS_LST_PATH%. +# Called by load.cmd; needs CI Server running. +$ErrorActionPreference = 'Stop' +Set-Location -LiteralPath $PSScriptRoot +$null = & dssqld -e 17_node.qlo -d LOCAL_NODE_DF -c +$node = $null +foreach ($row in (Import-Csv 17_node.qlo)) { if ($row.NAME -eq 'THIS_NODE') { $node = $row.NODE_NAME } } +Remove-Item 17_node.qlo +if (-not $node) { throw 'Node name not found in LOCAL_NODE_DF' } +$lst = $env:TLS_LST_PATH +if (-not $lst) { throw 'TLS_LST_PATH is not set' } +$text = (Get-Content -Raw 17_printer_df.tpl).Replace('', $node).Replace('', $lst) +Set-Content -Encoding ascii -NoNewline -Path 17_printer_df.qli -Value $text +Write-Output "17_printer_df.qli: node $node, path $lst" diff --git a/examples/CI-Eng-Sample/17_printer_df.tpl b/examples/CI-Eng-Sample/17_printer_df.tpl new file mode 100644 index 0000000..c8b64fd --- /dev/null +++ b/examples/CI-Eng-Sample/17_printer_df.tpl @@ -0,0 +1,23 @@ +@LANGUAGE +ENGLISH + +@VERSION +1.03.00 + +! CI-Eng-Sample report output device and destination, CI Server R1.03.00. +! TEMPLATE: load.cmd replaces with the CI Server node name (LOCAL_NODE_DF NODE_NAME) and +! with %TLS_LST_PATH%, writes 17_printer_df.qli and loads that. The output type must be +! ":FILE" (PRINTER_TYPE_DF) and the path must be a literal path (no %variables%). +! Every printed report overwrites \cieng_report.txt. +@FIELDS +NAME,DESCRIPTION,OUTPUT_TYPE,PARAMETERS,SUSPEND + +@PRINTER_DEV_DF +"CIENG_FILE","CI-Eng-Sample report file",":FILE","PATH,"""",FILE,""cieng_report.txt"",OVERWRITE,""Yes""",0 + +! Destination used by the sample reports; visible to operators (PRINTER_OPER_DEST_DF). +@FIELDS +NAME,DESCRIPTION,PRIMARY_DEVICE,POLICY,ALLOW_OPERATOR,PRIORITY + +@PRINTER_DEST_DF +"CIENG_FILE","CI-Eng-Sample report file","CIENG_FILE","None",1,0 diff --git a/examples/CI-Eng-Sample/18_report_df.qli b/examples/CI-Eng-Sample/18_report_df.qli new file mode 100644 index 0000000..0e85714 --- /dev/null +++ b/examples/CI-Eng-Sample/18_report_df.qli @@ -0,0 +1,82 @@ +@LANGUAGE +ENGLISH + +@VERSION +1.03.00 + +! CI-Eng-Sample reports (REPORT_DF), CI Server R1.03.00. Load after 17_printer_df (destination). +! Each report gets a storage group of type Report with the same name (lifetime = LIFE_TIME, +! rollover = GENERATION_INTERVAL, so a schedule must be at least 10 minutes). +! Report names: at most 16 characters. +! +! CIENG_TANK1 : values of all TANK1 items plus last-hour statistics of one item (parameter +! @p0, picked from a list of TANK1 items); daily at 06:00 local time and ad hoc. +! The activation time lies in the past; CI Server moves it to the next 06:00. +! CORRECT_DAYLIGHT 1 keeps 06:00 across daylight-saving changes (with 0 the +! interval runs in UTC and 06:00 in January became 05:00 in October). +! CIENG_INFLOW_HI: generated 5 s after TANK1.INFLOW rises above 400 (only when the condition +! becomes true, not again while it stays above). +! CIENG_HTML : HTML output (CONTAINS_HTML is set automatically), cursor loop, logbook text. +@FIELDS +NAME,DESCRIPTION,PRIORITY,ADHOC_ENABLED,LOGBOOK_ENABLED,LIFE_TIME,ACTIVATION_TIME,GENERATION_INTERVAL,CORRECT_DAYLIGHT,DEST_NAME,ADHOC_DEST,PARAM_PROMPT_1,QUERY + +@REPORT_DF +"CIENG_TANK1","CI-Eng-Sample tank 1 values",0,1,1,"1 Weeks","01-01-2026 06:00:00","1 Days",1,"CIENG_FILE","CIENG_FILE","[ITEM:NAME like ""CI-Eng-Sample.TANK1.*""]Item for statistics:",\ +@" +/* CI-Eng-Sample: current values of tank 1, then last-hour statistics of one item */ +column v as '9999.9' heading 'Value'; +select name, item_value v, status from item_val where name like 'CI-Eng-Sample.TANK1.%'; +select ''; +if @p0 = '' then + set @item 'CI-Eng-Sample.TANK1.LEVEL'; +else + set @item @p0; +endif; +select 'Last hour: ' || @item; +column n heading 'Samples'; +column mi as '9999.9' heading 'Min'; +column ma as '9999.9' heading 'Max'; +column av as '9999.9' heading 'Average'; +select count(item_value) n, min(item_value) mi, max(item_value) ma, avg(item_value) av + from item_history where item_name = @item and sample_time > @date - 3600; +"@ + +@FIELDS +NAME,DESCRIPTION,PRIORITY,ADHOC_ENABLED,LIFE_TIME,TRIGGER_ITEM,TRIGGER_CON_1,TRIGGER_VAL_1,DELAY,DEST_NAME,ADHOC_DEST,QUERY + +@REPORT_DF +"CIENG_INFLOW_HI","CI-Eng-Sample tank 1 inflow above 400",0,1,"1 Weeks","CI-Eng-Sample.TANK1.INFLOW","Greater Than",400,"5 Seconds","CIENG_FILE","CIENG_FILE",\ +@" +column t as 'DD-MMM-YYYY hh:mm:ss'; +select 'Tank 1 inflow high: ' || char(gpv_value('CI-Eng-Sample.TANK1.INFLOW', 0), '%.1f') || ' m3/h at', @date t; +"@ + +@FIELDS +NAME,DESCRIPTION,PRIORITY,ADHOC_ENABLED,LOGBOOK_ENABLED,LIFE_TIME,ADHOC_DEST,LOGBOOK,QUERY + +@REPORT_DF +"CIENG_HTML","CI-Eng-Sample tank 1 as HTML",0,1,1,"1 Weeks","CIENG_FILE",@" +Sample logbook text +"@,\ +@" +/* HTML output: no header/footer, no page breaks */ +header ''; +footer ''; +set @page_size 0; +set @width 512; +select '

CI-Eng-Sample tank 1

'; +set @n ''; +set @v 0.; +declare @c is select name, item_value from item_val where name like 'CI-Eng-Sample.TANK1.%'; +open @c; +loop + fetch @c into @n, @v; + if @rqlcount = 0 then + exit; + endif; + select ''; +endloop; +close @c; +declare; +select '
' || @n || '' || char(@v, '%.1f') || '

Logbook: ' || logbook_text('CIENG_HTML') || '

'; +"@ diff --git a/examples/CI-Eng-Sample/83_remove_report_df.qli b/examples/CI-Eng-Sample/83_remove_report_df.qli new file mode 100644 index 0000000..3027d7a --- /dev/null +++ b/examples/CI-Eng-Sample/83_remove_report_df.qli @@ -0,0 +1,15 @@ +@LANGUAGE +ENGLISH + +@VERSION +1.03.00 + +! Remove CI-Eng-Sample reports. Also deletes each report's storage group (its generated +! reports) and logbook file (tls\dat\.lbk). +@FIELDS +NAME + +@REPORT_DF +"CIENG_TANK1" +"CIENG_INFLOW_HI" +"CIENG_HTML" diff --git a/examples/CI-Eng-Sample/83a_stop_report_df.qli b/examples/CI-Eng-Sample/83a_stop_report_df.qli new file mode 100644 index 0000000..e406d5c --- /dev/null +++ b/examples/CI-Eng-Sample/83a_stop_report_df.qli @@ -0,0 +1,13 @@ +@LANGUAGE +ENGLISH + +@VERSION +1.03.00 + +! Stop the schedule of CIENG_TANK1 (load with dssqld -m before 83_remove_report_df): +! a report with an active schedule cannot be deleted (RPT-E-ACTIVE). +@FIELDS +NAME,ACTIVATION_TIME,GENERATION_INTERVAL + +@REPORT_DF +"CIENG_TANK1","","" diff --git a/examples/CI-Eng-Sample/84_remove_printer_df.qli b/examples/CI-Eng-Sample/84_remove_printer_df.qli new file mode 100644 index 0000000..a38b730 --- /dev/null +++ b/examples/CI-Eng-Sample/84_remove_printer_df.qli @@ -0,0 +1,19 @@ +@LANGUAGE +ENGLISH + +@VERSION +1.03.00 + +! Remove the CI-Eng-Sample report destination, then its device (after 83_remove_report_df). +! The output file %TLS_LST_PATH%\cieng_report.txt is not deleted (remove.cmd deletes it). +@FIELDS +NAME + +@PRINTER_DEST_DF +"CIENG_FILE" + +@FIELDS +NAME + +@PRINTER_DEV_DF +"CIENG_FILE" diff --git a/examples/CI-Eng-Sample/README.md b/examples/CI-Eng-Sample/README.md index 146dc5e..496b55a 100644 --- a/examples/CI-Eng-Sample/README.md +++ b/examples/CI-Eng-Sample/README.md @@ -73,6 +73,10 @@ cmd /c "\examples\CI-Eng-Sample\remove.cmd" | `CIENG_TANKS` | Area of interest | Label for tank items (`TANK1.LEVEL` `AOI_1`) | | `CIENG_TANK1` | Alarm selection area | `SECTION = "CI-Eng-Sample.TANK1"`, compiled on load | | `CIENG_VIEWER` | Authorization group | Read-only: `ITEM_READ`, `SECTION_READ`, `ALARM_CURRENT_READ`, `ALARM_CHRONO_READ`. No users are created by the sample. | +| `CIENG_FILE` | Printer device + destination | FILE output to `%TLS_LST_PATH%\cieng_report.txt` (overwritten by each printed report); destination visible to operators | +| `CIENG_TANK1` | Report | Values of the `TANK1` items + last-hour statistics of one item (ad-hoc parameter, pick list of `TANK1` items, default `LEVEL`); daily 06:00 local time and ad hoc; output `CIENG_FILE`; lifetime 1 week | +| `CIENG_INFLOW_HI` | Report | Generated 5 s after `TANK1.INFLOW` rises above 400; output `CIENG_FILE` | +| `CIENG_HTML` | Report | Ad hoc; `TANK1` values as an HTML table (cursor loop) plus the logbook text | Items created by objects (`TANK1.CALC.VOLUME`, `TANK1.JFLOW.sPerMin`) and their sections are deleted with the objects; they are not in `02_item_df.qli`. @@ -96,8 +100,11 @@ New items start with status 13 (`NOT INIT`) until a value is written. | `13_opcua_line_df.qli`, `14_opcua_station_df.qli`, `15_item_opcua_df.qli` | OPC UA client line; station, subscription, points; connected items | | `01b_alarm_df.qli` | Alarm definitions: acknowledgement type, area of interest, alarm selection area (`ALARM_ACK_DF`, `ALARM_AOI_DF`, `ALARM_ASA_DF`) | | `16_item_alarm_df.qli` | Switch on alarming for `TANK1.LEVEL` (loaded with `dssqld -m`) | +| `17_printer_df.tpl`, `17_printer_df.ps1` | Report file device and destination; the script fills in this system's node name and `%TLS_LST_PATH%` and writes `17_printer_df.qli` (not in the repo) | +| `18_report_df.qli` | Reports (`REPORT_DF`, RQL in the `QUERY` memo) | +| `83a_stop_report_df.qli` | Clears the schedule of `CIENG_TANK1` before removal (a scheduled report cannot be deleted) | | `equipment/eqpciengslv_start.cmd`, `_stop.cmd` | Start/stop the Modbus slave mirror (copy to `tls\com`) | -| `76_`…`93_remove_*.qli` | Names to delete, in reverse order (alarm definitions last, `93`) | +| `76_`…`93_remove_*.qli` | Names to delete, in reverse order (reports and printer `83`/`84` first, alarm definitions last, `93`) | | `load.cmd`, `remove.cmd` | Run the steps in the right order | | `displays/CIENG_Tank.xml` | Display (HTML mode): title, number field on `TANK1.LEVEL`, alarm overview, trend of `TANK1.LEVEL`, button *Operator layout* | | `displays/CIENG_Menu.xml` | Navigation display (200 x 700): *Tank 1*, *Current Alarm* (main frame), *Tank 1 popup* (layout `popup`) | @@ -171,12 +178,26 @@ Remove: `layouts\layout.ps1 -Remove` (restores the file exactly) and These change the system's own setup files: back the files up first and restore them after testing. See the `system-management` skill, task `monitoring-processes.md`. +## Reports + +No admin rights needed. `load.cmd` creates the device, destination and three reports; each report +gets its own storage group of type *Report*. Try them (skill `reporting`, task `define-reports.md`): + +- Ad hoc: `REPORT_DF` `NAME,PARAM_VALUE_1,GENERATE` = `"CIENG_TANK1","CI-Eng-Sample.TANK1.INFLOW",1` + with `dssqld -m`, or in the Engineering Module *Configuration > Reporting > Reports* › right-click + › *Generate*. The output lands in `%TLS_LST_PATH%\cieng_report.txt` and in `REPORT_VAL`. +- Trigger: `itmval -p -n CI-Eng-Sample.TANK1.INFLOW -v 450` → `CIENG_INFLOW_HI` 5 s later; write a + value below 400 before the next test. +- `CIENG_TANK1` also runs every day at 06:00 (local time). + +`remove.cmd` clears the schedule, removes the reports (with their generated reports and logbook +files), the destination and device, and deletes `cieng_report.txt`. + ## Planned additions | Phase | Adds | |---|---| | 10 | A symbol and a faceplate popup (displays and the operator layout exist) | -| 11 | A report | ## Rules diff --git a/examples/CI-Eng-Sample/load.cmd b/examples/CI-Eng-Sample/load.cmd index c3d7666..c8f2dac 100644 --- a/examples/CI-Eng-Sample/load.cmd +++ b/examples/CI-Eng-Sample/load.cmd @@ -37,3 +37,8 @@ dssqld -i 14_opcua_station_df.qli -l 14_opcua_station_df.qlo dssqld -i 15_item_opcua_df.qli -l 15_item_opcua_df.qlo rem Alarming: switch on alarms for TANK1.LEVEL (modify existing record) dssqld -m 16_item_alarm_df.qli -l 16_item_alarm_df.qlo +rem Reports: file output device and destination (17_printer_df.qli is built for this node +rem from 17_printer_df.tpl), then the report definitions. +powershell -NoProfile -ExecutionPolicy Bypass -File 17_printer_df.ps1 +dssqld -i 17_printer_df.qli -l 17_printer_df.qlo +dssqld -i 18_report_df.qli -l 18_report_df.qlo diff --git a/examples/CI-Eng-Sample/remove.cmd b/examples/CI-Eng-Sample/remove.cmd index bab8255..9ccce96 100644 --- a/examples/CI-Eng-Sample/remove.cmd +++ b/examples/CI-Eng-Sample/remove.cmd @@ -1,10 +1,17 @@ @echo off rem Remove CI-Eng-Sample from a CI Server R1.03 TEST system (also deletes its history). rem Run in an elevated prompt while CI Server is running; call this script by full path. -rem Order: object, class, trigger group, storage links, stop + delete storage groups, items, sections (children first). +rem Order: reports, printer, OPC UA, Modbus, auth group, object, class, trigger group, storage links, stop + delete storage groups, items, sections (children first). 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" +rem Reports first (they refer to TANK1.INFLOW and the destination), then destination and device. +rem A scheduled report cannot be deleted, so its schedule is cleared first. +dssqld -m 83a_stop_report_df.qli -l 83a_stop_report_df.qlo +dssqld -r 83_remove_report_df.qli -l 83_remove_report_df.qlo +dssqld -r 84_remove_printer_df.qli -l 84_remove_printer_df.qlo +if exist "%TLS_LST_PATH%\cieng_report.txt" del "%TLS_LST_PATH%\cieng_report.txt" +if exist 17_printer_df.qli del 17_printer_df.qli dssqld -r 76_remove_item_opcua_df.qli -l 76_remove_item_opcua_df.qlo dssqld -r 77_remove_opcua_station_df.qli -l 77_remove_opcua_station_df.qlo dssqld -r 78_remove_opcua_line_df.qli -l 78_remove_opcua_line_df.qlo -- 2.45.3 From d7e30fa46e7f35d83a08ed30bb37778738e2f27c Mon Sep 17 00:00:00 2001 From: cliu Date: Thu, 1 Oct 2026 16:17:02 +1000 Subject: [PATCH 2/4] Add reporting skill and DSS tools task New skill reporting: REPORT Service checks, interactive RQL, report definitions by quick load, file output devices. New task system-management/dss-tools.md: DSS processes, dss.sup, quick load directives, dssutl, DSS compiler syntax check. Co-Authored-By: Claude Opus 5.5 --- .claude/skills/history-management/SKILL.md | 2 +- .claude/skills/reporting/SKILL.md | 45 ++++++ .../skills/reporting/tasks/define-reports.md | 132 ++++++++++++++++++ .../skills/reporting/tasks/output-devices.md | 75 ++++++++++ .../skills/reporting/tasks/report-checks.md | 68 +++++++++ .../skills/reporting/tasks/rql-interactive.md | 77 ++++++++++ .claude/skills/system-management/SKILL.md | 6 +- .../system-management/tasks/dss-tools.md | 81 +++++++++++ 8 files changed, 484 insertions(+), 2 deletions(-) create mode 100644 .claude/skills/reporting/SKILL.md create mode 100644 .claude/skills/reporting/tasks/define-reports.md create mode 100644 .claude/skills/reporting/tasks/output-devices.md create mode 100644 .claude/skills/reporting/tasks/report-checks.md create mode 100644 .claude/skills/reporting/tasks/rql-interactive.md create mode 100644 .claude/skills/system-management/tasks/dss-tools.md diff --git a/.claude/skills/history-management/SKILL.md b/.claude/skills/history-management/SKILL.md index 821a159..edb3a49 100644 --- a/.claude/skills/history-management/SKILL.md +++ b/.claude/skills/history-management/SKILL.md @@ -37,4 +37,4 @@ Rules: | Check groups, units, clients, rollover with `hisdbg` | `tasks/history-checks.md` | verified | | Archive / retrieve, `hasdbg` | C40 summary §4, L20 summary §5 | from docs (no archive device) | | Repair and recovery (`hisrep`, `hisrecover`, `isfrename`, `hiswrn`) | L20 summary §4 | from docs | -| Reading history from classes, reports, ODBC | C40 summary §5 | from docs (phases 6, 11) | +| Reading history from classes and reports; ODBC | C40 summary §5; reports: skill `reporting` | verified for reports (`rql-interactive.md`); ODBC from docs | diff --git a/.claude/skills/reporting/SKILL.md b/.claude/skills/reporting/SKILL.md new file mode 100644 index 0000000..d3b083f --- /dev/null +++ b/.claude/skills/reporting/SKILL.md @@ -0,0 +1,45 @@ +--- +name: reporting +description: >- + CI Server R1.03 REPORT Service, report definitions and RQL. Use when the user wants to create, + change, schedule or delete a report (daily / shift / hourly report, report triggered by an + item value or status, ad-hoc report with parameters such as an item, object, date or list), + write or debug an RQL query (SELECT from item_val, item_history, alarm_current, alarm_chrono, + audit_trail, unit_df …, COLUMN formats, HEADER/FOOTER, cursors DECLARE/FETCH, LOOP, GPV_VALUE, + @P0 parameters, @DATE), generate a report now (GENERATE), view, print or delete generated + reports (REPORT_VAL), output a report to a file, CSV (SPOOL, @EXPORT) or HTML, use a logbook, + set up report printers (printer device, destination, FILE / HARDCOPY output, PRINTER_DEV_DF, + PRINTER_DEST_DF), try queries in the interactive report generator (rptgen -s rptgen.rpt), stop + a hanging report (rptstp), check REPORT Service (rptman, rptge1, rptman.sup, rptge1.rpt, + report_start), use the system reports (ALARM_HISTORY, AUDIT_TRAIL, ITEM_HISTORY, SYSTEM_LOG …), + put a report component on a display, or use the Excel Add-in (DART) for reports. Sources + IM 36K10C30-01EN, IM 36K10P20-01EN, IM 36K10R40-01EN, IM 36K10E10-01EN. +--- + +# Reporting (R1.03) + +Background: `knowledge/manuals/IM36K10C30-01EN.md` (report definition fields, scheduling and +trigger behaviour, devices, generated reports, system reports), `IM36K10P20-01EN.md` (RQL), +`IM36K10R40-01EN.md` (REPORT Service processes and set-up files), `IM36K10E10-01EN.md` (Excel +Add-in), `IM36K10L50-01EN.md` (datasets, `dssqld`). + +Rules: +- Run `system-check` first; follow the user's chosen way of working. +- Report names ≤ 16 characters. Report queries only **read**, except `SPV_*` functions and + `GPV_VALUE(, )` (resets the item) — never use those without approval. +- A scheduled report runs on its own; schedule at least every 10 minutes and set a lifetime, or + generated reports pile up in history. +- Generator set-up files (`tls\sup\*.rpt`), `rptman.sup` and `report_start.cmd` need admin rights + and a restart: hand them to the user (skill `portal-setup`, `change-setup-file.md`). +- Example names come from `CI-Eng-Sample` (`CIENG_TANK1`, `CIENG_INFLOW_HI`, `CIENG_HTML`, + destination `CIENG_FILE`). + +| Task | File | Status | +|---|---|---| +| Check REPORT Service: processes, set-up files, system reports, stop a hanging report (`rptstp`) | `tasks/report-checks.md` | verified | +| Try RQL in the interactive generator (`rptgen -s rptgen.rpt`), CSV with `SPOOL` | `tasks/rql-interactive.md` | verified | +| Define reports by quick load (ad hoc with parameters, schedule, item trigger, HTML, logbook); generate, read, print, delete; remove | `tasks/define-reports.md` | verified (command line); Engineering Module forms awaiting the user's check | +| Report output to a file: printer device and destination | `tasks/output-devices.md` | verified | +| Report component on a display; Operator Interface generate/view | C30 summary §5 | from docs | +| Hardcopy printers, application devices, more generators, separate RPI servers | C30 summary §3, R40 summary §1, §3 | from docs | +| Excel Add-in (DART) | E10 summary | from docs (Excel not installed on the test system) | diff --git a/.claude/skills/reporting/tasks/define-reports.md b/.claude/skills/reporting/tasks/define-reports.md new file mode 100644 index 0000000..9f2f768 --- /dev/null +++ b/.claude/skills/reporting/tasks/define-reports.md @@ -0,0 +1,132 @@ +--- +task: Define reports by quick load (ad hoc with parameters, schedule, item trigger, HTML, logbook); generate, read, print and delete generated reports; remove reports +version: R1.03 +source: IM 36K10C30-01EN §2.1, §2.3.1, §3, App. 1; IM 36K10L50-01EN App. 1 (REPORT_DF, REPORT_VAL); IM 36K10P20-01EN; practiced on CI-Eng-Sample 2026-10-01 +status: verified (command line); Engineering Module forms awaiting the user's check +--- + +# Define and run reports + +Reports live in `REPORT_DF` (definitions) and `REPORT_VAL` (generated reports). This task uses +quick load (`dssqld`); the Engineering Module equivalent is *Configuration > Reporting > Reports* +(right-click › *Add*; tabs *General*, *Query*, *Time scheduling*, *Item triggering*). Field +meanings: `knowledge/manuals/IM36K10C30-01EN.md` §2. Test queries first in the interactive +generator (`rql-interactive.md`). Working examples: `examples/CI-Eng-Sample/18_report_df.qli`. + +## 1. Report definition file + +``` +@LANGUAGE +ENGLISH + +@FIELDS +NAME,DESCRIPTION,PRIORITY,ADHOC_ENABLED,LOGBOOK_ENABLED,LIFE_TIME,ACTIVATION_TIME,GENERATION_INTERVAL,CORRECT_DAYLIGHT,DEST_NAME,ADHOC_DEST,PARAM_PROMPT_1,QUERY + +@REPORT_DF +"","",0,1,1,"1 Weeks","01-01-2026 06:00:00","1 Days",1,"","","[ITEM:NAME like ""
.*""]Item:",\ +@" +select name, item_value, status from item_val where name like '
.%'; +if @p0 = '' then + set @item '
.'; +else + set @item @p0; +endif; +select count(item_value), avg(item_value) from item_history + where item_name = @item and sample_time > @date - 3600; +"@ +``` + +`dssqld -i .qli -l .qlo`, check `Errors` 0. Inside the query use single quotes for +strings; the memo runs from `@"` to `"@` and needs no `\` continuation. + +| Want | Fields | +|---|---| +| Ad hoc only | `ADHOC_ENABLED` 1; leave `ACTIVATION_TIME` / `GENERATION_INTERVAL` out | +| Parameters | `PARAM_PROMPT_n` (`[ITEM:]`, `[OBJECT::]`, `[DATE:TIME]`, `[LIST:a:b]` + text); the query reads `@P0`… (strings; `number(@p0)` for numbers and dates) | +| Schedule | `ACTIVATION_TIME` (first run, `dd-mm-yyyy hh:mm:ss`), `GENERATION_INTERVAL` **≥ 10 minutes** (`HIS-E-ROLLTOFAST` otherwise), `CORRECT_DAYLIGHT` 1 for a fixed local time | +| Item trigger | `TRIGGER_ITEM`, `TRIGGER_CON_1` (`Greater Than`, `Less Than`, `Equal To`, `Not Equal To`, `Greater Or Equal Than`, `Less Or Equal Than`), `TRIGGER_VAL_1`, optional second condition with `TRIGGER_COMB` `And`/`Or`, or status `TRIGGER_STAT_1/2`; `DELAY` e.g. `"5 Seconds"` | +| Output | `DEST_NAME` (scheduled and triggered runs) and `ADHOC_DEST` (ad-hoc runs): destinations from `output-devices.md` | +| Keep for | `LIFE_TIME` (also the lifetime of the report's storage group) | +| Logbook | `LOGBOOK_ENABLED` 1, text in `LOGBOOK` (memo); query: `logbook_text('')` | +| HTML | query writes `…` lines after `header ''; footer ''; set @page_size 0; set @width 512;` — `CONTAINS_HTML` becomes 1 by itself | + +Loading creates a storage group of type *Report* with the report's name (`HIS_GROUP_DF`). The page +header/footer come from `tls\sup\rptge1.rpt` (customer name, description, date, report name, page) +unless the query sets its own. + +Change a report: `dssqld -m` with `NAME` plus the fields to change. + +## 2. Generate now (ad hoc) + +``` +@FIELDS +NAME,PARAM_VALUE_1,GENERATE +@REPORT_DF +"","",1 +``` + +`dssqld -m`. `GENERATE` returns to 0 when finished (a second or two for small reports). The run is +made as user `FULL AUTHORIZATION` by `DSSQLD`; without `ADHOC_DEST` the manager then logs +`FSL-E-PRT_UNKUSER` (the report is still stored, ISS-045). + +## 3. Read generated reports + +``` +@FIELDS +NAME,GENERATION_TIME,DELETION_TIME,USER_NAME,ACTION_PROCESS,CONTAINS_HTML,REPORT +@SELECT +'REPORT_NAME = ""' +@REPORT_VAL +``` + +`dssqld -e out.qlo .qli` (no `-c`: the `REPORT` memo is multi-line). `NAME` is +`.`; `DELETION_TIME` = generation + lifetime; `ACTION_PROCESS` is +`RPTMAN` for scheduled/triggered runs. Engineering Module: expand the report, right-click a +generated report › *View*. + +## 4. Print / send a generated report to a destination + +``` +@FIELDS +NAME,DEST_NAME,PRINT +@REPORT_VAL +".01-OCT-26 15:57:53","",1 +``` + +`dssqld -m`; check `PRINTER_JOB_OVV` and `umhlog.log` (`output-devices.md` §4). + +## 5. Schedule and trigger behaviour (verified) + +- After each run `ACTIVATION_TIME` moves to the next slot. A start time in the past is moved + forward, not caught up. +- `CORRECT_DAYLIGHT` 0 counts in UTC: 06:00 set in summer time ran at 05:00 in winter time. +- An item trigger fires when the condition **becomes** true: 0 → 450 (limit 400) gave a report + after the 5 s delay; 450 → 430 did not; back to 0 and up again gave another. + +## 6. Delete generated reports and remove reports + +- One generated report: `dssqld -r` on `REPORT_VAL` with `@FIELDS NAME` and the full name (needs + `REPORT_DELETE_GENERATED_REPORT`). +- A report definition: **clear the schedule first** — a scheduled report cannot be deleted + (`RPT-E-ACTIVE`): + +``` +@FIELDS +NAME,ACTIVATION_TIME,GENERATION_INTERVAL +@REPORT_DF +"","","" +``` + + `dssqld -m`, then `dssqld -r` with `@FIELDS NAME` / `@REPORT_DF` / `""`. This also deletes + the report's storage group, all its generated reports and its logbook file + (`%TLS_DAT_PATH%\.lbk`). Remove reports before the trigger items and the destinations + they use. + +## Verified on CI-Eng-Sample (2026-10-01) + +`CIENG_TANK1` (parameter `[ITEM:…]`, daily 06:00 with `CORRECT_DAYLIGHT` 1, ad-hoc destination), +`CIENG_INFLOW_HI` (trigger `TANK1.INFLOW` > 400, delay 5 s) and `CIENG_HTML` (cursor loop, HTML, +logbook) loaded, generated (ad hoc with `@P0` = `TANK1.INFLOW`, by trigger 5 s after the write, by +schedule), read, printed to `CIENG_FILE`, deleted; full sample remove/reload with 0 errors. Not yet +checked by the user: the same reports in the Engineering Module forms (generate dialog with the +item pick list, *View* of the HTML report). diff --git a/.claude/skills/reporting/tasks/output-devices.md b/.claude/skills/reporting/tasks/output-devices.md new file mode 100644 index 0000000..c4fa3d3 --- /dev/null +++ b/.claude/skills/reporting/tasks/output-devices.md @@ -0,0 +1,75 @@ +--- +task: Send reports to a file - printer device and destination +version: R1.03 +source: IM 36K10C30-01EN §2.2; IM 36K10L50-01EN App. 1 (PRINTER_*); practiced on CI-Eng-Sample 2026-10-01 +status: verified +--- + +# Report output devices and destinations + +A report goes to a **destination** (`PRINTER_DEST_DF`), which sends it to a primary (and optional +secondary) **device** (`PRINTER_DEV_DF`). Devices: FILE, HARDCOPY (Windows printer queue), +APPLICATION. Engineering Module: *Configuration > Reporting > Printers > Device / Destinations*. +The printer manager is `FMFPRT`. + +## 1. Find the output types of this node + +``` +dssqld -e types.csv -d PRINTER_TYPE_DF -c +``` + +Names are `:FILE`, `:HARDCOPY`, `:APPLICATION` (`` = CI Server node name, +`NODE_NAME` in `LOCAL_NODE_DF`, e.g. `UNLICENCED` on an unlicensed system). A device needs the full +name; plain `FILE` is refused (`DSSP-E-NORELV`). + +## 2. File device and destination + +``` +@FIELDS +NAME,DESCRIPTION,OUTPUT_TYPE,PARAMETERS,SUSPEND +@PRINTER_DEV_DF +"","Report file",":FILE","PATH,"""",FILE,"".txt"",OVERWRITE,""Yes""",0 + +@FIELDS +NAME,DESCRIPTION,PRIMARY_DEVICE,POLICY,ALLOW_OPERATOR,PRIORITY +@PRINTER_DEST_DF +"","Report file","","None",1,0 +``` + +`dssqld -i`. `` must be a literal path that exists (no `%variables%`: `FSL-E-PRT_PAR, +Invalid device parameter` in `umhlog.log`). `OVERWRITE "Yes"` keeps one file with the latest +report (`"No"` not tried). `ALLOW_OPERATOR` 1 also lists the destination in +`PRINTER_OPER_DEST_DF` (needed for `ADHOC_DEST` and the operator's generate/print dialogs). +`CI-Eng-Sample` builds this file at load time from `17_printer_df.tpl` (node name and +`%TLS_LST_PATH%` filled in by `17_printer_df.ps1`). + +Printer instead of file: `OUTPUT_TYPE` `:HARDCOPY`, `PARAMETERS` +`TYPE,"WINDOWS",QUEUE,"\\\"` (+ `FONT`, `POINT`, `LINES`, `ORIENTATION`) — not +practiced (no printer). + +## 3. Use it + +Set `DEST_NAME` (scheduled/triggered runs) and `ADHOC_DEST` (ad-hoc runs) of the report to +``, or print a generated report (`define-reports.md` §4). + +## 4. Check + +``` +dssqld -e jobs.csv -d PRINTER_JOB_OVV -c (job, file, submitter, status, destination, device) +dssqld -e devs.csv -d PRINTER_DEV_OVV -c (device status, e.g. Ready) +``` + +A job can show *Finished* even when the device failed; also read `%TLS_LOG_PATH%\umhlog.log` +(`From: FMFPRT`, `FSL-E-…`). The output file holds the text report as generated (HTML reports as +HTML source). + +## 5. Remove + +Remove (or repoint) the reports that use the destination, then the destination, then the device +(`DSSP-E-NODEL … still in use` otherwise). The output file is not deleted. + +## Verified (2026-10-01) + +`CIENG_FILE` (`UNLICENCED:FILE`, `C:\Users\Public\Yokogawa\tls\lst\cieng_report.txt`, overwrite): +printed generated reports, scheduled, triggered and ad-hoc runs wrote the file; jobs *Finished*, +device *Ready*; `%TLS_LST_PATH%` in the path failed as above. diff --git a/.claude/skills/reporting/tasks/report-checks.md b/.claude/skills/reporting/tasks/report-checks.md new file mode 100644 index 0000000..3b66f8a --- /dev/null +++ b/.claude/skills/reporting/tasks/report-checks.md @@ -0,0 +1,68 @@ +--- +task: Check REPORT Service (processes, set-up files, system reports) and stop a hanging report +version: R1.03 +source: IM 36K10R40-01EN §1.3, §2.2, §2.3, §5; IM 36K10C30-01EN §4, App. 1.3; practiced on the test system 2026-10-01 +status: verified +--- + +# REPORT Service checks + +All read-only except `rptstp` (cancels one running report). + +## 1. Processes + +``` +durwfp -p rptman -t 0 (errorlevel 0 = running) +tasklist /FI "IMAGENAME eq rpt*" +``` + +Default: `rptman.exe` (manager) and one `rptgen.exe` attached as `RPTGE1`. The `rpi*` info servers +are linked into the generator, so they do **not** run as processes unless `report_start.cmd` was +changed. REPORT Service is started by `%TLS_ROOT_PATH%\tls\com\report_start.cmd` and only if +HISTORY Service (`his`) runs. + +## 2. Set-up files (`%TLS_ROOT_PATH%\tls\sup`) + +| File | For | What to read | +|---|---|---| +| `rptman.sup` | Manager | `his = 0, HIS, 0`, `dur_queue_size = 500` | +| `rptge1.rpt` | Background generator `RPTGE1` | Page layout (`@page_size 66`, `@width 120`, margins), default header/footer, `@workspace 500`, `dictionary rpidis.'tlsdic';`, `login rptman;` (priority 0) — every report starts with this | +| `rptgen.rpt` | Interactive generator | No `login` (= interactive), `@page_size 23`, `@formfeed 0` | +| `rptgsp.rpt` | Spare generator, priority 9 | Not started by default | + +Messages of the manager and printer manager go to `%TLS_LOG_PATH%\umhlog.log` (`--> From: +RPTMAN`, `FMFPRT`; codes `RPT-…`, `FSL-…`). + +## 3. Defined and generated reports + +``` +@FIELDS +NAME,DESCRIPTION,PRIORITY,ADHOC_ENABLED,LIFE_TIME,ACTIVATION_TIME,GENERATION_INTERVAL,DEST_NAME,ADHOC_DEST,PARAM_PROMPT_1 +@SELECT +@REPORT_DF +@FIELDS +NAME,REPORT_NAME,GENERATION_TIME,DELETION_TIME,USER_NAME,ACTION_PROCESS +@SELECT +@REPORT_VAL +``` + +`dssqld -e reports.csv .qli -c`. A fresh R1.03 system has 28 system reports (all ad hoc, +lifetime 1 week, priority 0), listed in `IM36K10C30-01EN.md` §8. Add `QUERY` to the field list +(without `-c`) to read their RQL — useful examples. + +## 4. Stop a hanging report + +A report in an endless loop keeps its generator busy (`REPORT_DF.GENERATE` stays 1). Stop it: + +``` +rptstp rptge1 +``` + +Verified: the loop stopped at once, `GENERATE` went back to 0, the generator stayed up and ran the +next report. An empty generated report remains; delete it (`define-reports.md` §6). From the +user side the manual names the *Cancel* button and `REPORT_DF.CANCEL` = 1 (not tried). + +## Verified (2026-10-01) + +`rptman` and `rptgen` running; `rpi*` lines commented out in `report_start.cmd`; set-up files as +above; 28 system reports; `rptstp rptge1` cancelled the test report `CIENG_LOOP`. diff --git a/.claude/skills/reporting/tasks/rql-interactive.md b/.claude/skills/reporting/tasks/rql-interactive.md new file mode 100644 index 0000000..ed83eec --- /dev/null +++ b/.claude/skills/reporting/tasks/rql-interactive.md @@ -0,0 +1,77 @@ +--- +task: Try RQL queries in the interactive report generator; write CSV with SPOOL +version: R1.03 +source: IM 36K10R40-01EN §4; IM 36K10P20-01EN §3–6, §9; IM 36K10C30-01EN §3.2.3; practiced on the test system and CI-Eng-Sample 2026-10-01 +status: verified +--- + +# RQL in the interactive generator + +`rptgen -s rptgen.rpt` starts a report generator in the console (prompt `RPT>`). It reads RQL, +prints results at once and needs no report definition — the quickest way to test a query or look +into a dataset. CI Server must be running. Read-only unless the query uses `SPV_*` or +`GPV_VALUE(…, )`. + +## 1. Run a query file + +Put the statements in a file (each ends with `;`) and pipe it in; end with `QUIT;`: + +``` +set @next 0; +set @width 132; +column t as 'DD-MMM-YYYY hh:mm:ss' heading 'Time'; +select name, item_value, status from item_val where name like 'CI-Eng-Sample.TANK1.%'; +select sample_time t, item_value, quality from item_history + where item_name = 'CI-Eng-Sample.TANK1.LEVEL' and group_name = 'CIENG_SCAN10S' + and sample_time > @date - 600 order by sample_time; +select count(item_value), min(item_value), max(item_value), avg(item_value) from item_history + where item_name = 'CI-Eng-Sample.TANK1.LEVEL' and sample_time > @date - 3600; +select gpv_value('CI-Eng-Sample.TANK1.LEVEL', 0), gpv_status('CI-Eng-Sample.TANK1.LEVEL'); +quit; +``` + +``` +rptgen -s rptgen.rpt < query.rql > query.out +``` + +(Git Bash: `timeout 60 rptgen -s rptgen.rpt < query.rql`; PowerShell does not support `<`, use +`cmd /c "rptgen -s rptgen.rpt < query.rql"`.) + +- `set @next 0;` first, otherwise output stops after each page (`Press to continue`). +- `rptgen.rpt` has `@page_size 23`, so headings repeat every 23 lines; `set @page_size 0;` for one + long list. +- Errors show the code and a caret under the position, e.g. `RPT-E-ALIASSEL` (an alias used twice + in one SELECT), `RPT-E-UNKFLDSPC` (unknown field). Field names: `dssqld -f -d `. +- `LOOP` does not work here (`RPT-E-LPNOTAL`); test loops and cursors in a report definition + (`define-reports.md`). +- `@P0`…`@P7` and `@NAME` do not exist here; `SET` them to test a report query. + +## 2. Dates + +RQL dates are seconds since 1970 in **local time**. `@date` is now; constants like +`01-Oct-2026 15:00` or `12:00` (today) need no quotes; `number('01-Oct-2026 15:00')` converts text. +Show them with a date format (`column t as 'DD-MMM-YYYY hh:mm:ss'`). `to_gmt(@date)` gives real +Unix time (10 h less on a UTC+10 system) — use it only when another program needs UTC. + +## 3. CSV file with SPOOL + +``` +spool 'C:\Users\Public\Yokogawa\tls\lst\cieng_levels.csv'; +set @export 1; +select name, item_value, status from item_val where name like 'CI-Eng-Sample.TANK1.%'; +spool; +set @export 0; +``` + +Result: one line per row, strings quoted (`"CI-Eng-Sample.TANK1.LEVEL",61,"NORMAL"`), no headings. +File name ≤ 79 characters, literal (no `%variables%`), overwritten each time, never cleaned up by +CI Server — delete it when done. The same statements work inside a report definition. + +## Verified (2026-10-01) + +Current values, history of `CIENG_EVENT` / `CIENG_SCAN10S` (count 299 in an hour at 10 s), group +functions, `GROUP BY` on `unit_df`, `GPV_VALUE`/`GPV_STATUS`/`GPV_QUALITY` (61, 9, 0), string and +date functions (`SUBSTR`, `DECODE`, `NUMBER`, `DRAW`, `LINE`, `MONTH_DAYS`, `TO_GMT`), integer vs +real arithmetic (`12/5+10.0` = 12), CSV via `SPOOL` (file removed afterwards). Aggregated history +(`interpolation = '30Minutes'`) returned no rows because the test system had no completed +aggregation periods (also empty through `dssqld`). diff --git a/.claude/skills/system-management/SKILL.md b/.claude/skills/system-management/SKILL.md index 9f1df69..28f6c51 100644 --- a/.claude/skills/system-management/SKILL.md +++ b/.claude/skills/system-management/SKILL.md @@ -8,7 +8,10 @@ description: >- a system, tune or debug CI Server, or plan a system layout (standalone, separate portal, HAC, host-to-host, enterprise) or time synchronization, check whether a CI Server process is running (durwfp), stop a single process (durstp), read the message log (umhlog), or check - BUS Service queues (adaptive queues, dur.sup). Sources IM 36K10J10-01EN, IM 36K10L30-01EN. + BUS Service queues (adaptive queues, dur.sup), or work with DSS / Data Set Services (dsssda, + dssevt, dssman, dss.sup, quick load macros and includes, memo fields from a file, dssutl, + DSS compiler dss, .dss files, data dictionary tlsdic_dss.dic). Sources IM 36K10J10-01EN, + IM 36K10L30-01EN, IM 36K10L50-01EN, IM 36K10P30-01EN. --- # System management (R1.03) @@ -34,3 +37,4 @@ Rules for every task: | Database consistency check (`dsschk`) | `tasks/consistency-check.md` | verified (check only) | | Tuning checks: limits and health snapshots | `tasks/tuning-checks.md` | verified (read-only) | | BUS Service utilities: is a process attached (`durwfp`), stop one process (`durstp`), message tools, adaptive queues | `tasks/bus-utilities.md` | verified (`durwfp`, read-only checks); message tools fail (ISS-030) | +| DSS checks and tools: DSS processes, `dss.sup`, quick load macros/includes/memo files, `dssutl`, DSS compiler syntax check | `tasks/dss-tools.md` | verified | diff --git a/.claude/skills/system-management/tasks/dss-tools.md b/.claude/skills/system-management/tasks/dss-tools.md new file mode 100644 index 0000000..b3b14a5 --- /dev/null +++ b/.claude/skills/system-management/tasks/dss-tools.md @@ -0,0 +1,81 @@ +--- +task: DSS (Data Set Services) checks and tools - processes, dss.sup, quick load directives, dssutl, DSS compiler syntax check +version: R1.03 +source: IM 36K10L50-01EN §1, §2.1, §2.2, §3, §4; IM 36K10P30-01EN §2, §3; practiced on the test system 2026-10-01 +status: verified +--- + +# DSS tools + +Everything here is read-only except where marked. Background: +`knowledge/manuals/IM36K10L50-01EN.md`, `IM36K10P30-01EN.md`. + +## 1. DSS processes and `dss.sup` + +`tasklist /FI "IMAGENAME eq dss*"` — expect `dsswth`, `dssana`, `dssanc`, `dssadb`, `dsslck`, +`dssman`, `dsschk` (server) and several `dsssda` / `dssevt` (10 and 7 on a default R1.03 node). +`durwfp -p dssman -t 0` tests one by its BUS Service name (`DSSSDA00`…, `DSSSDAOPC00`…, +`DSSEVT00`…). Started by `tls\com\database_start.cmd`; the number of general `DSSSDA` comes from +`%TLS_MAX_SDA_ID%` (default 3 → `DSSSDA00`–`03`). + +`%TLS_ROOT_PATH%\tls\sup\dss.sup` (Setup File Editor or text): queue sizes, heartbeats, `FLOWC`, +and `DSSSDA_SRV` / `DSSEVT_SRV` lines `, "", ""` that tie +clients to server instances (`*` = all others). Changing it needs admin rights and a restart. + +## 2. Quick load directives (`dssqld`) + +Besides `@FIELDS`, `@SELECT`, `@LANGUAGE` and `@` (tasks `export-dataset.md`, +`load-remove-records.md`): + +``` +@LANGUAGE +ENGLISH +@MACRO +RPT_FIELDS,NAME,DESCRIPTION,ADHOC_ENABLED,LIFE_TIME,QUERY +@INCLUDE +"part2" +``` + +with `part2.qli` in the current folder starting `@FIELDS` / `RPT_FIELDS` / `@` … — +macros must come before any data; includes and macros nest up to 10 deep. + +Memo fields (class methods, report queries, logbooks): inline `@"` … `"@` (preferred), empty +`@""@`, or `@""@`. The file form is read by the server side: use an **absolute path of at +most 82 characters** (relative names fail with `CRL-E-ENOENT`, longer ones with +`DSSG-E-STRBUFSMAL`; ISS-046). + +## 3. `dssutl` - read one record interactively + +Menu tool on the primary index. Pipe the answers (Git Bash): + +``` +printf '1\n\n2\n2\n1\n1\n\n-1\n-1\n-1\n-1\n-1\n-1\n' | timeout 30 dssutl +``` + += choose a data set › number from the list (first run `printf '1\n-1\n-1\n'` to see the +numbered list, e.g. `REPORT_DF` was 209) › choose a field set › all fields › read equal › enter +the key. Values are raw: dates in seconds since 1970 (local time), intervals as +`.` (`10.1` = 10 minutes, `1.3` = 1 day, `1.4` = 1 week), memos as the path of +their container file. The *Modify* menu writes to the running system — use `dssqld -m` instead +unless the user asks for `dssutl`. + +## 4. DSS compiler as a syntax checker + +To check a `.dss` file (custom dataset or an edited copy) without touching the dictionary: + +``` +mkdir \dss ; copy "%TLS_ROOT_PATH%\tls\src\*.dss" \dss (or only your file + dss_global.dss) +cd \dss +dss -l -w +``` + +Without `-d` the compiler only checks; results are in `tlsdic_dss.lst` (` (,): +` and ` errors found.`). **Never run `dss -d` without the user's approval**: it rewrites +`%TLS_DAT_PATH%\tlsdic_dss.dic` (host node only) and needs a restart. + +## Verified (2026-10-01) + +17 DSS processes as listed; installed `dss.sup` routing read; macro + include load of a report; +memo from file (relative fails, 125-character path fails, short absolute path works); `dssutl` +read of `REPORT_DF` record `CIENG_TANK1`; compiler check of all 253 installed files (0 errors, +dictionary unchanged) and of a test file with a missing `>` (1 error, line/column shown). -- 2.45.3 From 5e77aada8e9887a65670381e08724accd150ab71 Mon Sep 17 00:00:00 2001 From: cliu Date: Thu, 1 Oct 2026 16:17:02 +1000 Subject: [PATCH 3/4] Record phase 11 manuals, progress and issues ISS-043 to ISS-047 Summaries of IM 36K10L50, P30, P20, R40, C30 and E10 (R1.03). Co-Authored-By: Claude Opus 5.5 --- knowledge/issues.md | 5 + knowledge/manuals/IM36K10C30-01EN.md | 141 +++++++++++++++++++++++++++ knowledge/manuals/IM36K10E10-01EN.md | 55 +++++++++++ knowledge/manuals/IM36K10L50-01EN.md | 126 ++++++++++++++++++++++++ knowledge/manuals/IM36K10P20-01EN.md | 134 +++++++++++++++++++++++++ knowledge/manuals/IM36K10P30-01EN.md | 64 ++++++++++++ knowledge/manuals/IM36K10R40-01EN.md | 77 +++++++++++++++ knowledge/progress.md | 21 ++-- 8 files changed, 616 insertions(+), 7 deletions(-) create mode 100644 knowledge/manuals/IM36K10C30-01EN.md create mode 100644 knowledge/manuals/IM36K10E10-01EN.md create mode 100644 knowledge/manuals/IM36K10L50-01EN.md create mode 100644 knowledge/manuals/IM36K10P20-01EN.md create mode 100644 knowledge/manuals/IM36K10P30-01EN.md create mode 100644 knowledge/manuals/IM36K10R40-01EN.md diff --git a/knowledge/issues.md b/knowledge/issues.md index 28c85b7..8fd4281 100644 --- a/knowledge/issues.md +++ b/knowledge/issues.md @@ -62,3 +62,8 @@ development system (see "Test system" in `progress.md`); they do not exist on ot | ISS-040 | 2026-10-01 | HISTORY (aggregation) | Aggregation group `CIENG_AGG` (30 min + hour, `TANK1.LEVEL` max/min/avg) ran (`ithsag.log`: *Aggregation Completed*) but stored no values: retrieval gave `0x09 = ITM error` per period. `TANK1.LEVEL` was in `CIENG_EVENT` and `CIENG_SCAN10S`, both priority 0. Also `INTERPOLATION = "30 minutes"` is refused by `dssqld`; the installed name is `30Minutes`. | closed | Closed 2026-10-01 (confirmed by user). 2026-10-01 14:02: after `CIENG_SCAN10S` got `PRIORITY` 10, the 13:30–14:00 period stored max 77, min 33, avg 52.7, quality 1000 (`ithdbg` 20 and `dssqld` with `INTERPOLATION = "30Minutes"`). Cause: equal source priorities (C40 §2.1 says the highest-priority group is the source, but not that a tie gives nothing). Sample fixed (priority 10). The hourly value for 13:00–14:00 was not stored (first half had no source); not rechecked. Proposed close. | `.claude/skills/history-management/tasks/storage-groups.md` §4 (done); `knowledge/manuals/IM36K10C40-01EN.md` §3 (done); `examples/CI-Eng-Sample/03_his_group_df.qli`, `README.md` (done) | | ISS-041 | 2026-10-01 | GRAPHICS (HTML trend) | In the HTML display (`localhost:8080/mobileoperator/?d=CIENG_Tank`) the trend shows the pen legend `CI-Eng-Sample.TANK1.LEVEL [CIENG_SCAN10S]` and time axis but draws no line, although `ITEM_HISTORY` has 420 samples in the shown hour. Browser console: `Mismatch between number of labels (Time,CI-Eng-Sample.TANK1.LEVEL [CIENG_SCAN10S]) and number of columns in array (51)`. The trend has 4 further empty pens. 2026-10-01 later: the trend also had the property `chart.attribute[00]` connected to `TANK1.LEVEL` (added by mistake with the pen); the Operator Interface (desktop) showed *Short attribute name ( 61.0) is invalid*. After removing it the desktop trend draws the line, but the HTML trend still logs the mismatch error. | open | HTML only: try a trend with one pen (remove the empty ones) or a Micro Trend; check the HTML-supported trend properties (IM 36K10R30 §4.8.7); check whether the browser still uses a cached copy (`MO_CACHE_DISPLAYS` in `jwuiisg.sup`). | `.claude/skills/graphics/tasks/create-display.md`; `knowledge/manuals/IM36K10R30-01EN.md` §4 | | ISS-042 | 2026-10-01 | GRAPHICS (layouts) | Installed vs `Layouts.readme`: the factory layouts use status line item types `displayName`, `playbackIndicator` and `dateTime` and the commands `reload ` / `reload all`, none of which the readme lists (readme: `statusText`, `userName`, `progresBar`, `graphicsQueueLevel`, `connectionState`); the readme also writes `zooom` for the zoom command (factory files use `zoom`). | open | Installed software is the reference (standing user decision). Close when the user confirms. | `.claude/skills/graphics/tasks/layouts.md` §2 | +| ISS-043 | 2026-10-01 | REPORT (system reports) | IM 36K10C30 App. 1.3 names two system reports `ALM_ATTS_CUR` and `ALM_ATRS_HIS`; the installed reports are `ALM_ATTRS_CUR` and `ALM_ATTRS_HIS`. The other 26 names match. | open | Installed software is the reference (standing user decision). Close when the user confirms. | `knowledge/manuals/IM36K10C30-01EN.md` §8 (done) | +| ISS-044 | 2026-10-01 | REPORT (scheduling) | Behaviour not in the manuals, found by quick load: a generation interval below 10 minutes is refused (`HIS-E-ROLLTOFAST`, the interval is the rollover of the report's storage group); a scheduled report cannot be deleted (`RPT-E-ACTIVE`) until `ACTIVATION_TIME` and `GENERATION_INTERVAL` are cleared; `CORRECT_DAYLIGHT` 0 counts intervals in UTC (06:00 set for January ran at 05:00 in October); a past activation time moves to the next slot - once (modify, past time within the lifetime) a single report labelled with the old time was generated, at insert with an older time none. | open | Documented as verified behaviour; the one-off generation for a past activation time is not fully understood. Close when the user confirms. | `.claude/skills/reporting/tasks/define-reports.md` §1, §5, §6; `knowledge/manuals/IM36K10C30-01EN.md` §2; `examples/CI-Eng-Sample/83a_stop_report_df.qli`, `18_report_df.qli` | +| ISS-045 | 2026-10-01 | REPORT (ad hoc from `dssqld`) | Generating ad hoc with `REPORT_DF.GENERATE` = 1 from `dssqld` (user `FULL AUTHORIZATION`) on a report without `ADHOC_DEST` logs `FSL-E-PRT_UNKUSER, Job submitted by unknown user (FULL AUTHORIZATION)` and `RPT-I-TRYPRINT` in `umhlog.log`; the generated report is stored normally. With `ADHOC_DEST` set no error appears and the device gets the output. Related to the R1.03 known issue on report generation and default printers (IM 36K01A50, REPORT 1.11). | open | Workaround documented (set `ADHOC_DEST`). Check whether an ad-hoc run from the Engineering Module as a real user behaves the same. | `.claude/skills/reporting/tasks/define-reports.md` §2; `knowledge/manuals/IM36K10C30-01EN.md` §6 | +| ISS-046 | 2026-10-01 | DATABASE (`dssqld` memo) | A memo field loaded from a file (`@""@`, IM 36K10L50 §3.10) fails with a relative name (`CRL-E-ENOENT`, the file is read on the server side) and with a long absolute path (`DSSG-E-STRBUFSMAL`, buffer 83); a short absolute path works. The manual gives no limits. | open | Documented: use inline memos, or an absolute path ≤ 82 characters. Close when the user confirms. | `.claude/skills/system-management/tasks/dss-tools.md` §2; `knowledge/manuals/IM36K10L50-01EN.md` §4 | +| ISS-047 | 2026-10-01 | REPORT (RQL manuals) | The manuals disagree: default `@WORKSPACE` 500 KB (IM 36K10R40 §2.2.2) vs 16 KB (IM 36K10C30 table 2.1-1, IM 36K10P20 §9.6); maximum `@WIDTH` 512 (R40, P20 §4) vs 5000 (P20 §9.6); `@FORMFEED` described with opposite meanings (C30: not 1 = form feed; P20: 0 = blank lines, default 1). Installed set-up files set `@workspace` explicitly (500 in `rptge1.rpt`, 100 in `rptgen.rpt`) and `@formfeed 0` for the interactive generator. | open | Not tested (no printer); the set-up files make the defaults irrelevant in practice. | `knowledge/manuals/IM36K10R40-01EN.md` §2; `knowledge/manuals/IM36K10P20-01EN.md` §3 | diff --git a/knowledge/manuals/IM36K10C30-01EN.md b/knowledge/manuals/IM36K10C30-01EN.md new file mode 100644 index 0000000..aa6f711 --- /dev/null +++ b/knowledge/manuals/IM36K10C30-01EN.md @@ -0,0 +1,141 @@ +--- +manual: IM 36K10C30-01EN +title: Engineering Module - Reporting +edition: 3rd Edition, Sep. 2023 +version: R1.03 +status: report definitions (ad hoc with parameters, schedule, item trigger, HTML, logbook), generated reports, file device and destination verified by quick load on CI-Eng-Sample 2026-10-01; Engineering Module forms awaiting the user's check; report component in displays and hardcopy printers from docs +--- + +# Engineering Module - Reporting (R1.03) + +Defining, generating and viewing reports. Language: `IM36K10P20-01EN.md`; REPORT Service +processes: `IM36K10R40-01EN.md`. Section numbers refer to the manual; dataset fields were read +with `dssqld -f` on the installed system. + +## 1. Flow (§1) + +Define (Engineering Module *Configuration > Reporting > Reports*, or quick load `REPORT_DF`) → +generate (schedule, item trigger, or ad hoc from the Engineering Module, a display or +`REPORT_DF.GENERATE`) → output (destination device: file, printer, application; or `SPOOL` in +the query) → kept as a generated report (`REPORT_VAL`) in the report's own storage group for its +lifetime. + +## 2. Report definition (§2.1, dataset `REPORT_DF`) + +| Form field | `REPORT_DF` field | Notes (installed) | +|---|---|---| +| Name | `NAME` | max 16 characters | +| Description | `DESCRIPTION` | max 80; printed in the default header | +| Report destination | `DEST_NAME` | a `PRINTER_DEST_DF` name; used by scheduled/triggered runs | +| Ad-hoc destination | `ADHOC_DEST` | a `PRINTER_OPER_DEST_DF` name; used by ad-hoc runs | +| Priority | `PRIORITY` | 0–9, higher first; generators only take reports ≥ their login priority | +| Lifetime | `LIFE_TIME` | interval, e.g. `"1 Weeks"`; empty = keep forever (manual); also the storage group's lifetime | +| Logbook information | `LOGBOOK_ENABLED`, `LOGBOOK` (memo) | operator memo stored in `%TLS_DAT_PATH%\.lbk`; read in RQL with `LOGBOOK_TEXT('')` | +| Process area | `PROCESS_LIST` | e.g. `3 5 8 10-19`; empty = everyone | +| Ad-hoc generation | `ADHOC_ENABLED` | | +| Ad-hoc parameters | `PARAM_PROMPT_1`–`8`, answers `PARAM_VALUE_1`–`8` | prompts → `@P0`–`@P7` (strings) | +| Query | `QUERY` (memo) | RQL | +| Time scheduling | `ACTIVATION_TIME`, `GENERATION_INTERVAL`, `CORRECT_DAYLIGHT` | see below | +| Item triggering | `TRIGGER_ITEM`, `TRIGGER_CON_1/2`, `TRIGGER_VAL_1/2`, `TRIGGER_COMB` (`And`/`Or`), `TRIGGER_STAT_1/2` (status names), `DELAY` | | +| — | `GENERATE`, `CANCEL` | set 1 to generate / cancel; back to 0 when done | +| — | `CONTAINS_HTML` | read-only, set automatically when the query writes HTML (verified) | +| — | `DESTINATION` (hidden) | old field: `File Only`, `Printer 1`, `Message`, `Printer mgmnt` | + +Parameter prompt meta-information (makes a pick list in the generate dialog): `[ITEM:]`, +`[OBJECT::]`, `[DATE]`, `[TIME]`, `[DATE:TIME]`, `[LIST:a:b:c]`, followed by the +prompt text, e.g. `[ITEM:NAME like "CI-Eng-Sample.TANK1.*"]Item for statistics:`. The installed +system reports use lower case (`[item]`, `[date:time]`, `[list:Days:Hours:Minutes]`). + +Query editor: *Ctrl+Space* lists keywords, datasets and fields. Basics of RQL (§2.1) are +summarised in `IM36K10P20-01EN.md`. + +### Scheduling — verified behaviour (not in the manual) + +- `GENERATION_INTERVAL` is also the rollover interval of the report's storage group, so it must + be at least **10 minutes** (`HIS-E-ROLLTOFAST`). +- `ACTIVATION_TIME` is the first run; after each run CI Server moves it on by the interval. An + activation time in the past is moved to the next future slot (no catch-up). One test (past time + within the lifetime, set by modify) generated a single report labelled with the old time; at + insert with a time older than the lifetime nothing was generated. +- `CORRECT_DAYLIGHT 0` counts intervals in UTC: a daily 06:00 set for January (summer time) ran at + 05:00 in October. Use `1` for fixed local times. +- **A scheduled report cannot be deleted** (`RPT-E-ACTIVE`): clear `ACTIVATION_TIME` and + `GENERATION_INTERVAL` first (`dssqld -m`), then delete. + +### Item triggering — verified behaviour + +The report is generated `DELAY` after the condition **becomes** true (edge): writing 420 then 430 +above a limit of 400 gave one report; going below and above again gave a second one. + +## 3. Devices and destinations (§2.2) + +| Dataset | Form | Fields (installed) | +|---|---|---| +| `PRINTER_DEV_DF` | *Reporting > Printers > Device* | `NAME`, `DESCRIPTION`, `OUTPUT_TYPE` (`:FILE`, `:HARDCOPY`, `:APPLICATION` from `PRINTER_TYPE_DF`), `PARAMETERS`, `STATUS_ITEM` (0 initial, 1 ready, 2 busy, 3 warning, 4 unavailable), `SUSPEND` | +| `PRINTER_DEST_DF` | *Reporting > Printers > Destinations* | `NAME`, `PRIMARY_DEVICE`, `SECONDARY_DEVICE`, `POLICY` (`None` primary only, `Both`, `Automatic` = secondary when primary unavailable), `ALLOW_OPERATOR` (appears in `PRINTER_OPER_DEST_DF`), `PRIORITY` (high) | + +Parameters, written `NAME,"value",NAME,"value"`: FILE `PATH`, `FILE`, `OVERWRITE` (`Yes`/`No`); +HARDCOPY `TYPE` (`WINDOWS` on Windows), `QUEUE` (e.g. `\\PrintServer\prt001`), `FONT`, `POINT`, +`LINES` (76), `ORIENTATION`, `N-UP`; APPLICATION `PROGRAM`, `ARGUMENTS`. + +**Installed:** `OUTPUT_TYPE` must include the node name (plain `FILE` is refused, +`DSSP-E-NORELV`); the path must be literal (`%TLS_LST_PATH%` gave `FSL-E-PRT_PAR` in the log while +the job still showed *Finished*). Factory destinations `ALARMS`, `AUDIT_TRAIL`, `DEFAULT`, +`MESSAGES`, `PRINTER_1`, `SCREEN_CAPTURE` exist with no device. Job and device status: +`PRINTER_JOB_OVV`, `PRINTER_DEV_OVV` (printer manager `FMFPRT`). + +## 4. Report storage groups (§2.3.1) + +Creating a report creates a storage group of type *Report* with the same name (*Historisation > +Other storage groups*); its lifetime is linked to the report's lifetime; *Exclude from archive* +is available. **Installed:** deleting the report deletes the group, its generated reports and its +`.lbk` file. Generated reports are stored in `tls\his\h…*.his` unit files. + +## 5. Report component in displays (§2.3.2) + +The Edit Module report component has a report list, a generated-report list, a *Generate* form +(report, destination, logbook text, parameters) and a *View* form (report, generated report, +printer). Properties: show/hide and enable/disable each part; *Advanced*: a variable that starts +generation (back to false when done), logbook variable (string), report and selection filter. +Logbook on a display needs *Logbook Enabled* and *Visible* in the report. Not practiced. + +## 6. Generating and viewing (§3) + +- Engineering Module: right-click a report › *Generate* (choose destination, answer + parameters) › right-click a generated report › *View* (*Scroll Form-Feeds* for multi-page). +- Operator interface: display with the report component (*Generate* / *View* tabs, print). +- Command line: `REPORT_DF` `NAME,PARAM_VALUE_1,GENERATE` = `"","",1` with + `dssqld -m`; read `REPORT_VAL` (`NAME` = `.`, `REPORT` memo, + `USER_NAME`, `ACTION_PROCESS`, `DELETION_TIME`); print with `NAME,DEST_NAME,PRINT`; delete with + `dssqld -r` (needs `REPORT_DELETE_GENERATED_REPORT`; users only delete their own ad-hoc ones). +- `rptgen -s rptgen.rpt` for trying RQL (`IM36K10R40-01EN.md` §6). + +**Verified:** ad-hoc runs from `dssqld` are made by user `FULL AUTHORIZATION`; without an ad-hoc +destination `RPTMAN` then logs `FSL-E-PRT_UNKUSER, Job submitted by unknown user` (the report is +still stored; ISS-045). With `ADHOC_DEST` set the output went to the device without errors. +Scheduled and triggered runs are made by `RPTMAN` and print to `DEST_NAME`. + +## 7. Tuning (§4) + +`rptman.sup`, generator `.rpt` files and `report_start.cmd` as in `IM36K10R40-01EN.md`; one +generator `RPTGE1` by default; add generators for priorities, large reports or load; restart CI +Server after changes. Query tip: filter on the primary key `NAME` (e.g. `NAME > (@obj || ':') AND +NAME < (@obj || ';')` on `object_attr_val`) instead of other fields. + +## 8. Formats and system reports (Appendix 1) + +- HTML: write the HTML with `SELECT '…';` lines, `HEADER ''; FOOTER ''; SET @PAGE_SIZE 0; SET + @WIDTH 512;`. The Engineering Module and displays render it; a destination receives the HTML + source. +- CSV: `SPOOL ''; SET @EXPORT 1; SELECT …; SPOOL;`. +- System reports (installed, 28, all ad hoc, lifetime 1 week): `ALARM_COUNT`, `ALARM_CURRENT`, + `ALARM_EXT_CURR`, `ALARM_HISTORY`, `ALARM_SHELVE`, `ALM_ATTRS_CUR`, `ALM_ATTRS_HIS` (manual: + `ALM_ATTS_CUR`, `ALM_ATRS_HIS`, ISS-043), `AUDIT_TRAIL`, `AUTH_GROUP`, `ITEM_ACK`, `ITEM_ALM`, + `ITEM_EQP`, `ITEM_FO`, `ITEM_HISTORY`, `ITEM_HISTORY_AG`, `ITEM_ID`, `ITEM_ITM`, `ITEM_OTH`, + `ITEM_TYPE`, `ITEM_VAL_STA`, `ITM_VAL_CSV`, `STATION`, `STATION_STATS`, `SYSTEM_LOG`, + `SYSTEM_LOG_HTML`, `UA_SERVER_AUDIT`, `USER`, `USER_VAL`. Their queries are good RQL examples + (`dssqld -e` on `REPORT_DF` with `QUERY`). Enterprise engineering servers add `EES_*` reports. + +Known issues (IM 36K01A50): with Active Directory and printer management, generation can fail +looking for the user's default printer (use a destination without device as the user's +default); report features of schemes need an Engineering Module restart. diff --git a/knowledge/manuals/IM36K10E10-01EN.md b/knowledge/manuals/IM36K10E10-01EN.md new file mode 100644 index 0000000..502c0c2 --- /dev/null +++ b/knowledge/manuals/IM36K10E10-01EN.md @@ -0,0 +1,55 @@ +--- +manual: IM 36K10E10-01EN +title: Excel Add-in Data Analysis and Reporting +edition: 3rd Edition, Sep. 2023 +version: R1.03 +status: from docs only — Microsoft Excel and the add-in are not installed on the test system (checked 2026-10-01) +--- + +# Excel Add-in — DART (R1.03) + +DART (Data Analysis and Reporting Tool) is a Microsoft Excel add-in that reads CI Server data into +worksheets for reports and analysis. It connects through CI Portal (web ports 8080 local / +8443 remote) and logs in as a CI Server user, so the user's authorizations limit what it sees. +Section numbers refer to the manual. + +## 1. Install (§2) + +Admin rights; close Excel; run `Windows\EngineeringTools\ExcelAddIn\ExcelAddInfoForReports_x64.exe` +from the CI Server DVD (SmartScreen: *More info › Run anyway*), accept the licence, *Install*. A +*CI Server* ribbon tab appears. Uninstall: *Programs and Features › CI Server Excel Add-in*. +Remote CI Portal on another machine needs SSL certificates. + +## 2. Ribbon functions (§3) + +| Group | Command | Gives | +|---|---|---| +| Connections | Connection Manager | Connect (server name/IP, default `localhost`; login dialog depends on the `dssana.sup` login method) / disconnect | +| Item Search | Item Search | Items by name and description filters (`*`, `?`, both filters ANDed); paste vertically or horizontally | +| Current Data | Current Data / Item Attribute Value | Latest value (optional time stamp left or above); description, data type, engineering unit, status, quality, update time (one attribute per call) | +| History Data | Single / Constant Interval / Timestamp Based / Fixed Duration–Fixed Count | Value at a time; values at an interval (optional slope interpolation); values at another item's sample times; all samples in a period or N samples | +| Calculated Data | Aggregation Data | Values of an Aggregation storage group: maximum, minimum, average, standard deviation, counter, integration, differential summation per 30 min, hour, shift, day, week, month, year (only what the group stores; time stamp = start of the period) | +| Refresh Data | Refresh UDF / Refresh Workbook | Re-create the array formula at the cursor (needed when the number of values changes) / recalculate all | +| Others | Settings, About, Help | Number and date formats, interpolation (previous or next value), ports | + +Cells hold user-defined array functions, so workbooks refresh themselves (Excel calculation +*Automatic*). Fetch options when no sample exists at a time: *Next*, *Actual* ("No Data"), +*Interpolated* (previous/next per Settings); edge options for periods: *Actual*, *Nearest*, +*Interpolated*. + +## 3. Times (§5) + +Absolute: `n` now, `t` today 00:00, `y` yesterday, `b` first of the month, weekday names, +`MM/dd/yyyy H:mm:ss`, `dd`, `HH:`, `dd HH:`, `H:mm:ss` (type a leading `'` in a cell). Relative: +`+/-` with `s`, `m`, `h`, `d`, `w`, `M` (months), `y` units, one unit per term (`t+2h`, `y+23h`, +`n-15s`). Intervals for constant-interval history use the same units. A daily report of yesterday: +start `y`, end `y+23h`, interval `1h`. + +## 4. Tips and errors (§4, §6, §7) + +Keep the number of values per formula constant (fixed start/end relative to `y`) so the workbook +refreshes without *Refresh UDF*; format time cells as text or `H:mm` for charts. The manual's +error list explains connection, login, item and time-format errors. + +Known issue (IM 36K01A50): Excel via ODBC cannot write to CI Server R1.03; the add-in (read) is +the supported Excel route. diff --git a/knowledge/manuals/IM36K10L50-01EN.md b/knowledge/manuals/IM36K10L50-01EN.md new file mode 100644 index 0000000..4776893 --- /dev/null +++ b/knowledge/manuals/IM36K10L50-01EN.md @@ -0,0 +1,126 @@ +--- +manual: IM 36K10L50-01EN +title: Data Set Service Engineering +edition: 3rd Edition, Sep. 2023 +version: R1.03 +status: process layout, dss.sup, dssqld directives (macro, include, memo from file), dssutl read and the dataset notes checked on the test system 2026-10-01; dssana.sup tabs from docs (covered by skill authorization); dsschk see IM36K10J10 notes +--- + +# Data Set Service Engineering (R1.03) + +DSS (Data Set Services) is the layer through which every CI Server tool and user interface reads +and changes configuration and run-time data: items, alarms, classes, users, history, reports … +all appear as **datasets** (tables of records with fields). `dssqld`, the Engineering Module, +REPORT Service, ODBC and the Java/PROCESS APIs are all DSS clients. Section numbers refer to the +manual; "installed" means checked on the R1.03.00 test system. + +## 1. Building blocks (§1) + +| Part | Process / file | Job | +|---|---|---| +| API | linked into every client | Opens datasets, talks to the core over the BUS Service (DUR/MDUR) | +| Manager | `DSSMAN` (one per node) | Hands each client a `DSSSDA`/`DSSEVT` instance (the one it already uses, else the least loaded) and cleans up when clients or servers disappear | +| Data access | `DSSSDA` (several, `-n `) | Executes read / insert / update / delete through the mapping layer | +| Events | `DSSEVT` (several, `-n `) | Event channels (change notifications, flow control) to clients | +| Locks | `DSSLCK` (`-c` clears all locks) | Record locks on the dataset's primary node; frees locks of vanished processes/nodes | +| Watch | `DSSWTH` | Creates the DSS shared memory and the authorization/user files, copies dictionary changes from the host node to other nodes, cleans up after crashed clients, moves memo "file containers" | +| Mapping layer | PML + data access servers (`dsilib:dsid_das_*`) | Maps a dataset onto ISAM files or another service (ITEM, HISTORY, ALARM …) | +| Data dictionary | `%TLS_DAT_PATH%\tlsdic_dss.dic` | Description of every dataset and field; built by the DSS compiler (`IM36K10P30-01EN.md`) on the host node only | +| Tools | `dssqld`, `dssutl`, `dsschk`, `dssxdb` | Quick load/export, interactive read/modify, consistency check/repair, debugger (service use) | + +DSS processes start with DATABASE Service (`tls\com\database_start.cmd`). **Installed:** besides +`DSSWTH`, `DSSANA`, `DSSANC`, `DSSADB`, `DSSLCK`, `DSSMAN` and the `dsschk -s` server, the script +starts `DSSSDA00`–`03` (count from `%TLS_MAX_SDA_ID%`, default 3), `DSSSDAOPC00`–`03`, +`DSSSDAPRC`, `DSSSDAOPX` (and `DSSSDAEEM` on an enterprise engineering server) and `DSSEVT00`–`03`, +`DSSEVTOPC`, `DSSEVTPRC`, `DSSEVTFTE` — 10 `dsssda.exe` and 7 `dssevt.exe` on the test system, +more than the manual's "about 5 per node" advice. On the very first start (`database.new`) the +script compiles all `tls\src\*.dss` into the dictionary (`dss -d -q -u`). + +## 2. Tuning — `dss.sup` (§2.2) + +Heartbeats and DUR queue sizes per process (`DSSEVT_HBEAT`, `DSSSDA_QUESZ` …), PML dataset cache +time (`DATASET_CACHE_TIME`, 600 s), client event slots (`EVENT_Q_SLOTS`, 100), flow-control +interval (`FLOWC`). `DSSSDA_SRV = , "", ""` ties clients to a +dedicated `DSSSDA` (start that instance in the start script first). + +**Installed `dss.sup`:** `DSSEVT_QUESZ = 1000`, `DSSSDA_QUESZ = 252`, `FLOWC = 120`; `DSSSDA_SRV` +routes `OPCEXE1`–`4`, `OPCACT`, `OPCJACT`, `OPCLOA`, `ALNMGR` to `DSSSDAOPC00`–`03`, `OPX*` to +`DSSSDAOPX`, `PRC*` to `DSSSDAPRC`, everything else (`*`) to `DSSSDA00`–`03`; `DSSEVT_SRV` lines do +the same for events. Further undocumented keywords: `EXCL_ACC_EXCEPTION_PROCESS`, +`CLOG_EXCEPTION_PROCESS`, `CLOG_EXCEPTION_DATASET` (a long list of run-time datasets). + +## 3. Authentication — `dssana.sup` (§2.3) + +`DSSANA` keeps the list of logged-in users and decides who may start which user interface from +where. The Setup File Editor tabs: **General** (logout retain time 1440 min, max logged-in / +logged-out users, max 5 UIs per remote client, password hashing *Maximal*), **User Interfaces** +(each UI, e.g. `JWUIGED` = Edit Module, with the hosts/logins allowed and the authorization +action needed), **Clients System Trust** (host/IP list, *Always* or *Deny*, top-down, `` / +`` last), **Login control** (per client and UI: *Automatic*, *Manual CI Server*, *Manual +OS*, *No*, *SSO*, *Deny*; profile for *No* login; failed-login delay 5 s), **Active Directory** +and **Single Sign On** (phase 13), **Password rules** (length, digits, punctuation, mixed case; +all off by default), **Logging** (*Basic*/*Extended*/*Maxima* into `tls\log\dssana.log`, cyclic, +10 MB). Practical use: skill `authorization` (`users-groups.md`, login methods). + +## 4. Quick load files and `dssqld` (§3) + +File format (`.qli`): `!` comment lines; marker lines starting with `@` (`@`, `@MACRO`, +`@INCLUDE`, `@LANGUAGE`, `@SELECT`, `@FIELDS`); data lines with comma-separated fields; `\` at the +end of a line continues it. Unquoted text is upper-cased, quoted text kept; `""` inside a string +is a quote. Escape character, separator and continuation character can be changed in +`dssqld.sup`. + +| Directive | Use | Verified | +|---|---|---| +| `@FIELDS` | Field list for the **next** dataset block only; missing fields get defaults (`dssqld -f`) | yes (all phases) | +| `@SELECT` | Filter for the next dataset on export only, in single quotes, strings in double quotes | yes (ISS-003) | +| `@MACRO` | `,`; later occurrences of the name are replaced (nesting ≤ 10); must come before the data | yes: field list as macro | +| `@INCLUDE` | One file name per line (`.qli` default), nesting ≤ 10 | yes | +| `@LANGUAGE` | `ENGLISH` makes a file load on any language version | yes (all sample files) | + +Field types: string, number, date/time (exported as `"dd-mm-yyyy hh:mm:ss"`, the form to load), +interval (`"10 Minutes"`, `"1 Days"`, `"1 Weeks"`), **memo** (`@""@` empty, `@"` … `"@` inline +text, or `@""@` text from a file). + +**Installed — memo from a file:** the file name is read on the server side, so a relative name +fails (`CRL-E-ENOENT`); an absolute path works but is limited to 82 characters +(`DSSG-E-STRBUFSMAL`). Inline memos are the safer choice (ISS-046). + +Options: `-i` insert, `-m` modify, `-r` remove, `-e []` export (all datasets except the +`NO-EXPORT` list in `dssqld.sup`, or what the qli names), `-c` CSV, `-a` concealed fields, `-d` +one dataset, `-f` dictionary report, `-l` listing, `-s` setup file. Exports may need reordering +before re-import (circular references: stations ↔ items, first-out groups, classes). +`%TLS_DAT_PATH%\dss_export.qli` is a ready-made export list. Task files: skill `system-management` +(`export-dataset.md`, `load-remove-records.md`). + +## 5. `dssutl` (§4) + +Interactive menu tool to read and modify single records via the primary index: choose a dataset +(numbered list), a field set (*Primary index only*, *All fields* or a saved selection of ≤ 20 +fields), then *Read equal*, *Read sequential* or *Modify* (change fields, *Perform update*). +**Installed:** works with piped answers; values are shown raw (dates as seconds since 1970 in +local time, intervals as `.`, e.g. `10.1` = 10 minutes, `1.3` = 1 day; memos as their +file path). Modifying data on a running system affects running applications — prefer `dssqld -m`. +Task: skill `system-management`, `dss-tools.md`. + +## 6. Consistency (`dsschk`, §5) + +`dsschk -s` (server, started per node) and the client `dsschk [-d ] [-n ] [-e] [-r] +[-v]` (extended test, repair, verbose). See `IM36K10J10-01EN.md` and task +`consistency-check.md`. + +## 7. Dataset notes (Appendix 1) + +Special behaviour per dataset (only the ones not covered elsewhere): `ALARM_ASA_DF` compiles when +`COMPILE` is set; `ALARM_CURRENT` only `ACK` can change; `ARCHIVE_COMMAND` drives the archive +engine (initialise/mount/register tape, manual archive, retrieve, cancel; phase 9 notes); +`AUDIT_EVENT_CLAS_DF` only `STORAGE` changes; `AUTH_ACTION_DF`, `DATASET_*`, `HOST_NODE_DF`, +`LOCAL_NODE_DF` read-only; `CLASS_DF` `COMPILE`/`RESET`; `DISPLAY_DF` / `SYMBOL_DF` names only, +insert copies a template, `REBUILD`; `FOLDER_DF` deletable only when empty; `HIS_GROUP_DF` only +item groups can be added, `FORCE_ROLLOVER`; `HIS_UNITS` deleting a record deletes the unit; +`ITEM_HISTORY` always needs `ITEM_NAME`, inserts only into *Direct* groups, no events; `ITEM_VAL` +value/status/quality (`BLOCKED_UPDATE` for blocked items, status must be written too over ODBC); +`OBJECT_DF` prompts via `ATTR_VALUE_n`, `DEBUG`; `OPC_SERVER_DF` / `OPC_STATION_TAG_DF` read with +mandatory filter; `PRINTER_*` devices/destinations (written by the printer manager for `_OVV` +and `_TYPE`); `REPORT_DF` / `REPORT_VAL` see `IM36K10C30-01EN.md`; `SEQUENCE_DF` `COMPILE`; +`STATION_DF` `REDUN_LINE`. diff --git a/knowledge/manuals/IM36K10P20-01EN.md b/knowledge/manuals/IM36K10P20-01EN.md new file mode 100644 index 0000000..b0e8030 --- /dev/null +++ b/knowledge/manuals/IM36K10P20-01EN.md @@ -0,0 +1,134 @@ +--- +manual: IM 36K10P20-01EN +title: Report Generation Language +edition: 3rd Edition, Sep. 2023 +version: R1.03 +status: SELECT/WHERE/ORDER/GROUP BY, COLUMN, HEADER/FOOTER, SET, IF, LOOP, cursors, SPOOL with @EXPORT, functions (GPV_*, CHAR, DECODE, SUBSTR, NUMBER, DRAW, LINE, LOGBOOK_TEXT, TO_GMT …) and dates verified in the interactive generator and in loaded reports on the test system 2026-10-01; SEND/RECEIVE, BREAK, INCLUDE, FLAG PAGE, SPV_* from docs +--- + +# Report Generation Language — RQL (R1.03) + +RQL is the SQL-like language of REPORT Service. A report definition (`REPORT_DF.QUERY`) is a list +of RQL statements, each ending with `;`. Data comes from datasets (`IM36K10L50-01EN.md`). +REPORT Service setup: `IM36K10R40-01EN.md`; report definitions in the Engineering Module: +`IM36K10C30-01EN.md`. Section numbers refer to the manual. + +## 1. Basics (§1, §2, §9.2–9.5) + +- A report description: layout statements, calculations, queries, end. A **set-up description** + (`tls\sup\rptge1.rpt` etc.) runs once when a generator starts and sets defaults for every report + (layout, header/footer, dictionary, `LOGIN`). Output of a SELECT in it goes to the system log. +- Names: letters, digits, `_`; variables start with `@` (≤ 32 characters); report names ≤ 16. + Reserved words (list with `SHOW RESERVED;`) can be used as field names in double quotes. +- Data types: string (`'text'`, `''` for an apostrophe, max 512 characters), integer, real + (needs a decimal point: `12.`). **Dates are integers**: seconds since 1970 in **local time** + (verified: `@DATE` was 10 h ahead of Unix time on a UTC+10 system; `TO_GMT()` gives Unix time). + Date constants without quotes: `01-Oct-2026 15:00`, `12:00` (today), `12-Jan-90` (years < 70 + are 20xx). +- Dataset field types become: char → string; boolean/short/ushort/long/ulong/ubyte → integer; + float/double → real. Hidden fields need `SET @CONCEAL 0;`. +- Errors in a statement stop that statement (some stop the report); they are written into the + report (`RPT-E-…`, with a caret under the position in interactive mode). Fatal errors go to the + system log. + +## 2. Queries (§3, §9.12 SELECT) + +``` +SELECT [DISTINCT] [], … [FROM [], …] + [WHERE ] [ORDER BY [ASC|DESC]] | [GROUP BY … [HAVING ]]; +``` + +- Operators: `= != <> > >= < <= LIKE` (`%` any, `_` one character; change with `@WC_ANY`, + `@WC_SINGLE`), `AND`, `OR`, parentheses. String values are case-sensitive. +- Joins: list several datasets; the first is primary; join conditions (`a.f = b.f`) come first in + WHERE, joined by `AND`. +- `SELECT 'text', @var;` without FROM just prints (no headings). +- Group functions `AVG COUNT MAX MIN STDDEV SUM VARIANCE` (null values ignored, `DISTINCT` + allowed) cannot be mixed with plain columns without GROUP BY and cannot be used in WHERE; put + their result into a variable first (`SELECT SET @max MAX(item_value) FROM …;`). +- **Verified:** an alias may appear only once per SELECT (`RPT-E-ALIASSEL`); with no matching + rows a group function prints the count 0 and blanks. +- Reading history: `FROM item_history WHERE item_name = '' AND sample_time > @date - 3600`; + add `group_name = ''` to read one storage group (else rows of all groups the item is in); + aggregates with `interpolation = '30Minutes'|'Hour'|…` and `attribute = 'Maximum'|…` + (`IM36K10C40-01EN.md` §5). Do not use `OR` with `item_name` (DSS appendix). + +## 3. Layout (§4) + +| Statement / variable | Effect | +|---|---| +| `COLUMN [AT n] [AS ''] [HEADING 'a|b'];` | Format of a column (`|` splits the heading) | +| `HEADER` / `FOOTER [AT n|LEFT|CENTER|RIGHT] [AS ''] [SKIP n], …;` | Page header/footer; empty `HEADER '';` removes it | +| `BREAK [SKIP n|SKIP PAGE] [CALCULATE SUM|AVG|… ];` | Group breaks with subtotals | +| `FLAG PAGE '';` | Text file printed before everything | +| `@PAGE_SIZE` (0 = no page breaks), `@WIDTH` (40–512 per R40; 40–5000 per §9.6), `@TOP_MARGIN`, `@BOTTOM_MARGIN`, `@LEFT_MARGIN`, `@RIGHT_MARGIN` | Page geometry | +| `@EXPORT 1` | Comma-separated output: only rows, strings quoted | +| `@DECIMAL 44` | Decimal comma | + +Formats: numbers `9` digit, `0` leading zero, `+` sign, `.` decimal point, `EEEE` exponent; +dates `D DD DDD M MM MMM Y YY YYYY hh mm ss` (e.g. `'DD-MMM-YYYY hh:mm:ss'`); strings `A…`, `R` +right, `C` centre, `A20`; `\` copies the next character; C formats (`%5d`, `%.1f`, `%s`). An integer +with a real format prints oddly (e.g. `+99.9` on 12 → `+12.12`); formats are minimum widths. + +## 4. Flow control and cursors (§5) + +`IF THEN … [ELSE …] ENDIF;` (no field names in the condition), `LOOP … ENDLOOP;` with +`EXIT;` — loops only work in stored reports (verified: typed or piped into the interactive +generator they give `RPT-E-LPNOTAL, LOOP only allowed in report definition FILES and DIRECT +mode`). Cursors: + +``` +SET @n ''; SET @v 0.; +DECLARE @c IS SELECT name, item_value FROM item_val WHERE name LIKE 'CI-Eng-Sample.TANK1.%'; +OPEN @c; +LOOP FETCH @c INTO @n, @v; IF @rqlcount = 0 THEN EXIT; ENDIF; SELECT @n, @v; ENDLOOP; +CLOSE @c; DECLARE; /* DECLARE without arguments removes all cursors - always end with it */ +``` + +Variables used in `FETCH … INTO` must exist first (`SET`). `@RQLCOUNT` = rows of the last +SELECT/FETCH; `@RQLERROR` counts errors. Verified in `CIENG_HTML`. + +## 5. Data manipulation (§6, §9.11) + +Arithmetic `+ - * /` (integer arithmetic until a real appears: `12/5+10.0` = 12, `12/5.0+10.0` = +12.4, verified), `||` concatenation, variables (`SET @v ;`, type follows the value; some +system variables are read-only). Functions verified on R1.03: `GPV_VALUE(, 0)` (second +argument non-zero **resets the item to 0** after reading — use 0), `GPV_STATUS` (status number, +e.g. 9), `GPV_QUALITY`, `CHAR([, ''])`, `NUMBER('')`, `DECODE`, `SUBSTR`, +`UPPER`, `LOWER`, `LENGTH`, `LINE(n)`, `DRAW(n, '*')`, `MONTH_DAYS`, `TO_GMT`, `LOGBOOK_TEXT('')`. +Also documented: `ABS`, `ADD_MONTHS`, `ASCII_FILE` (≤ 511 characters), `BAND/BOR/BXOR/BNOT/BSHIFT`, +`CHR`, `TO_LCT`, `TO_INTEGER`, `TO_REAL`, `SPV_VALUE/SPV_STATUS/SPV_QUALITY` (**write** an item — +only with approval). + +System variables: `@DATE`/`@TIME` (now), `@GEN_TIME` (scheduled time of this generation), +`@PAGE`, `@LINE`, `@CUSTOMER`, `@VERSION` (`'1.03.00'`), `@NAME`, `@DESCRIPTION`, `@P0`–`@P7` +(ad-hoc parameters, strings, not available in the interactive generator), `@NEXT` (1 = pause each +page in interactive mode), `@WORKSPACE`, `@SORTSPACE`, `@FORMFEED`. + +## 6. Output to files (§6, §9.12 SPOOL) + +``` +SPOOL 'C:\Users\Public\Yokogawa\tls\lst\cieng_levels.csv'; +SET @EXPORT 1; +SELECT name, item_value, status FROM item_val WHERE name LIKE 'CI-Eng-Sample.TANK1.%'; +SPOOL; +SET @EXPORT 0; +``` + +Verified: the file gets `"name",value,"status"` lines; the output also still appears in the +report. File name ≤ 79 characters, overwritten if it exists, never deleted by CI Server. +Environment variables are not expanded. + +## 7. Communication and miscellaneous (§7, §8) + +`SEND [:] [REPLY] [CODE n] [NO] PACKING AS 'I1|I2|I4|F4|F8|Ann', …;` and +`RECEIVE [FROM …] [CODE n] [NO] PACKING [TIMEOUT s] @v AS '…', …;` exchange BUS Service messages +with applications (system integrators). `DICTIONARY rpidis.'tlsdic';` (default), +`INCLUDE '' | FILE '';`, `LOGIN rptman[, ];` (set-up files only, last +statement), `QUIT;`, `SHOW [FULL] VARS|COLUMN|CURSOR|HEADER|FOOTER|BREAKS|RESERVED|STAT|WORKSPACE|*;`. + +## 8. Building queries (Appendix 1) + +Field names: `dssqld -f -d `, the `.dss` files in `tls\src`, or *Ctrl+Space* in the +Engineering Module query editor (keywords, datasets, fields). Example in the appendix: current +alarms from `alarm_current` with a header. diff --git a/knowledge/manuals/IM36K10P30-01EN.md b/knowledge/manuals/IM36K10P30-01EN.md new file mode 100644 index 0000000..b71faaf --- /dev/null +++ b/knowledge/manuals/IM36K10P30-01EN.md @@ -0,0 +1,64 @@ +--- +manual: IM 36K10P30-01EN +title: Data Set Service Language +edition: 3rd Edition, Sep. 2023 +version: R1.03 +status: compiler run as a syntax check on a copy of the installed DSS files and on a deliberately broken test file (2026-10-01); defining new datasets and updating the dictionary from docs only +--- + +# Data Set Service Language (R1.03) + +The DSS language describes datasets; the DSS compiler (`dss.exe`) checks the descriptions and +builds the data dictionary (`%TLS_DAT_PATH%\tlsdic_dss.dic`) and C include files. It is a system +integrator's tool: **changing the dictionary changes CI Server itself** and is only needed for +custom datasets, custom report destinations (`IM36K10R40-01EN.md` §3.3) or custom data access +servers. Section numbers refer to the manual. + +## 1. DSS files (§2) + +- Plain text, one dataset per file recommended, extension `.dss`. The installed descriptions are + in `%TLS_ROOT_PATH%\tls\src\` (253 `.dss` files on the test system, plus `.c` sources of the + data access servers and `.umh` message files). Reading them is the best way to learn a + dataset's fields, ranges, lists and defaults (`dssqld -f` shows the same information). +- Syntax: `` or ` …>`; keywords case-insensitive; strings in + double quotes with `""` for a quote; `/* */` and `//` comments. +- Order in a file: includes (``), constants + (` >`), macros, field templates, storage nodes, then + ` … … … + > > …>`. +- A dataset needs a name (not an SQL keyword, unique), at least one field and one unique index. +- Texts (descriptions, headings, list entries) can carry translations (English, Dutch, German, + French). +- Field properties: data type or field template, description, heading, format, transformation, + basic operations, range/step, list (` >`), required, hidden, + concealed, default, character restrictions/operations, password-encrypted, "maps upon" + (relational field to another dataset), enabled, validate, group. Relational and compound + (composed) fields and physical fields have their own sentences; indexes may be unique. + +## 2. Compiler (§3) + +Run `dss` in the folder that holds the `.dss` files; it compiles **all** of them. + +| Flag | Effect | +|---|---| +| none | Syntax check only (errors on screen) | +| `-d[]` | Create/update a dictionary (default `tlsdic_dss.dic` in `%TLS_DAT_PATH%`) — host node only; other nodes get the change through `DSSWTH` | +| `-i` | Write C include files (`.dsh`) | +| `-l[]` | List file (default `tlsdic_dss.lst` next to the files) | +| `-q` / `-w` / `-b` | Quiet / no warnings / no boundary check | + +**Installed (verified):** a copy of the 253 installed files compiled in 2 s with no errors +(`dss -l -w`, 251 files plus the two include files) and `tlsdic_dss.dic` was not touched. A test +file with a missing `>` gave `cieng_test_df.dss (15,2): EOF is not expected, expected 1 +end-of-sentence characters ('>')` and `1 errors found.` The start script uses an undocumented +`-u` (compile without the DSS shared memory) on the first start. `dssxdb` has a "beautify DSS +dictionary source" function to find unbalanced `<` `>` (`IM36K10L50-01EN.md` §1.2). + +To add a value to an existing list (e.g. a report destination, R40 §3.3): edit the `.dss` in +`tls\src`, run `dss -d` in that folder, restart CI Server. Not practiced (would change the test +system's dictionary). + +## 3. Include files (§4) + +The `.dsh` output holds constants, dataset information, a C record structure and index +information for programs that use the DSS API. Not needed for engineering work. diff --git a/knowledge/manuals/IM36K10R40-01EN.md b/knowledge/manuals/IM36K10R40-01EN.md new file mode 100644 index 0000000..f87543f --- /dev/null +++ b/knowledge/manuals/IM36K10R40-01EN.md @@ -0,0 +1,77 @@ +--- +manual: IM 36K10R40-01EN +title: Report Server Setup +edition: 3rd Edition, Sep. 2023 +version: R1.03 +status: processes, start/stop scripts, rptman.sup and the generator set-up files checked on the test system; interactive generator and rptstp verified 2026-10-01; separate server processes, extra generators and custom destinations from docs +--- + +# Report Server Setup (R1.03) + +How REPORT Service is built and configured. Writing reports: `IM36K10P20-01EN.md` (RQL) and +`IM36K10C30-01EN.md` (Engineering Module). Section numbers refer to the manual. + +## 1. Parts (§1) + +| Block | Process | Job | +|---|---|---| +| Manager | `RPTMAN` | Stores report definitions, schedules (through HISTORY Service), event triggers and ad-hoc requests; hands generation to a generator; manages generated reports | +| Generator | `RPTGE1` (executable `rptgen`) | Runs the RQL of a report and writes the result; ad-hoc queries use copies of the generator | +| Report stopper | `rptstp …` | Cancels the report a generator is working on | +| Info servers (RPI) | `rpidic`, `rpidis` (DSS dictionary), `rpidix` (DSS data), `rpifil`, `rpiitm`, `rpihis`, `rpialm`, `rpievt`, `rpiopc`, `rpicif` | Fetch data for the generator; **linked into the generator by default** — separate processes only when the data lives on another node | + +Default layout (installed): one node, servers linked into `rptgen`; `report_start.cmd` (in +`tls\com`) refuses to start when HISTORY Service is not running, then starts `rptman` and +`rptgen -n rptge1`. The separate `rpi*` lines and a second generator (`rptge2`) and `rptgsp` +are present but commented out. `report_stop.cmd` stops `rpt*` and `rpi*` with `durstp`. +Full functionality needs BUS, DATABASE, HISTORY, ITEM, AUDIT, PROCESS Services and INTEGRATION. + +## 2. Setup files (§2.2) + +- `tls\sup\rptman.sup` (manager): `HIS = , , ` (default `0, HIS, 0`), + `DUR_QUEUE_SIZE` (500 KB). `FPATH`/`SPATH` are not used. **Installed:** `his = 0, HIS, 0`, + `dur_queue_size = 500`. Also present: `rptini.sup` (only a licence-like value, undocumented). +- Generator set-up descriptions are RQL files with extension `.rpt`, named after the instance: + - `rptge1.rpt` (background generator) — installed: `@workspace 500`, `@page_size 66`, + `@width 120`, `@left_margin 1`, `@top_margin 1`, header (line, customer name centred, + description right, `Report of DD-MMM-YY`, line), footer (line, report name, `page n`, line), + `dictionary rpidis.'tlsdic';`, `login rptman;` (priority 0). Every background report gets + this layout unless its query overrides it. + - `rptgen.rpt` (interactive) — no `LOGIN` (that is what makes the generator interactive), + `@page_size 23`, `@formfeed 0`, `@workspace 100`. + - `rptgsp.rpt` — a spare generator with `login rptman, 9` (not started by default). + Documented defaults when a variable is not set: top 3, bottom 6, left/right 0, width 80 + (40–512), page 72 (20–255), sort space 100 KB, workspace 500 KB (C30 and P20 say 16 KB, ISS-047). +- `DICTIONARY` in the set-up file chooses the dictionary server/node; default `rpidis.'tlsdic'` + (file `%TLS_DAT_PATH%\tlsdic_dss.dic`). + +## 3. More generators (§2.4) + +Add `start /B /NORMAL %TLS_ROOT_PATH%\tls\exe\rptgen -n rptge2` to `report_start.cmd` and a +`tls\sup\rptge2.rpt` ending with `LOGIN rptman,

;`. A generator only takes reports with a +priority ≥ its own; one generator must keep priority 0. Higher-priority reports are generated +first. Admin rights and a restart needed (not practiced). + +## 4. Layout defaults (§3.1, §3.2) + +Put shared header/footer/margins in the set-up file (or a new `.rpt` given with `-s`). +`@export 1` gives comma-separated output (for files read by other programs). Memory: `@workspace` +(strings, records), `@sortspace` (ORDER/GROUP BY; spills to `tls\lst` when too small). + +## 5. Destinations (§3.3) + +The Engineering Module offers file, printer and system log destinations; R1.03 adds printer +management devices and destinations (`IM36K10C30-01EN.md` §3). Adding a new built-in destination +means changing `rpt_print.c` (not shipped as buildable on the test system), re-linking `rptman` +and adding a list entry to `report_val.dss` (`dss -d`) — system integrator work, not practiced. + +## 6. Interactive mode (§4) and stopping (§5) + +`rptgen -s rptgen.rpt` starts a foreground generator (prompt `RPT>`); end with `QUIT;`. Useful to +try RQL and inspect datasets without defining a report. `rptstp rptge1` cancels the running +report of `RPTGE1` (also the *Cancel* button / `REPORT_DF.CANCEL`). + +**Verified 2026-10-01:** piped input works (`rptgen -s rptgen.rpt < query.rql`), set +`SET @NEXT 0;` first or every page waits for Enter. `rptstp rptge1` stopped an endless loop +report within seconds; `GENERATE` went back to 0, an empty generated report was stored, the +generator stayed running and took the next report normally. Task: skill `reporting`. diff --git a/knowledge/progress.md b/knowledge/progress.md index f8d6241..2b6a4d7 100644 --- a/knowledge/progress.md +++ b/knowledge/progress.md @@ -56,12 +56,12 @@ AID is not needed. | 10 | IM 36K10R30 | Graphic Display Setup | done for HTML display, folders and layouts (phase 10b: desktop and web); dataset forms, form language, dual screen from docs ([notes](manuals/IM36K10R30-01EN.md)); skill `graphics` | | 10 | IM 36K10C50 | Edit Module | done for one display (built by the user) and `jwuiutl` validate/search/export; other components, symbols, actions from docs ([notes](manuals/IM36K10C50-01EN.md)) | | 10 | IM 36K10C60 | Advanced Operating Graphics | summarized, from docs (AOG displays checked read-only) ([notes](manuals/IM36K10C60-01EN.md)) | -| 11 | IM 36K10L50 | Data Set Service Engineering | not started | -| 11 | IM 36K10P30 | Data Set Service Language | not started | -| 11 | IM 36K10P20 | Report Generation Language | not started | -| 11 | IM 36K10R40 | Report Server Setup | not started | -| 11 | IM 36K10C30 | Engineering Module - Reporting | not started | -| 11 | IM 36K10E10 | Excel Add-in | not started | +| 11 | IM 36K10L50 | Data Set Service Engineering | done for DSS processes, `dss.sup`, quick load directives (macro, include, memo from file), `dssutl` read; `dssana.sup` covered by skill `authorization` ([notes](manuals/IM36K10L50-01EN.md)); task `system-management/dss-tools.md` | +| 11 | IM 36K10P30 | Data Set Service Language | summarized; compiler used as syntax check on a copy (no dictionary change) ([notes](manuals/IM36K10P30-01EN.md)) | +| 11 | IM 36K10P20 | Report Generation Language | done for queries, layout, cursors/loops, functions, SPOOL/CSV, HTML; SEND/RECEIVE, BREAK, INCLUDE, FLAG PAGE from docs ([notes](manuals/IM36K10P20-01EN.md)); skill `reporting` | +| 11 | IM 36K10R40 | Report Server Setup | done for processes, set-up files, interactive generator, `rptstp`; extra generators, separate RPI servers, custom destinations from docs ([notes](manuals/IM36K10R40-01EN.md)) | +| 11 | IM 36K10C30 | Engineering Module - Reporting | done by quick load for report definitions (ad hoc + parameters, schedule, item trigger, HTML, logbook), generated reports and a file device/destination; Engineering Module forms awaiting the user's check; report component in displays and hardcopy printers from docs ([notes](manuals/IM36K10C30-01EN.md)) | +| 11 | IM 36K10E10 | Excel Add-in | summarized, from docs (Excel not installed on the test system) ([notes](manuals/IM36K10E10-01EN.md)) | | 12 | IM 36K10L25 | Audit Trail Management | not started | | 13 | IM 36K10J20 | High Availability Computing | not started (needs two servers) | | 13 | IM 36K10J40 | Active Directory Integration | not started (needs a domain) | @@ -109,7 +109,7 @@ now come before classes and objects (phase 6), and the other interfaces follow a | 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 | display done (phase 10); symbols not practiced | display added | Display `CIENG_Tank` built in the Edit Module and checked in the HTML display. | | L41/C10 | Modbus TCP line, station, scan type, points, connected items by quick load ([task](../.claude/skills/equipment/tasks/modbus-station.md)) | passed | passed | Loopback to CI Server's own Modbus slave (`eqpmdcmem` + `eqpmdcslvtcp` on 5020, started by hand). Line load created and started `EQPCIENG`; removal stopped it and deleted its files. Write/read-back, off-scan/on-scan checked; full remove/reload from sample files. Protocol must be Open Modbus/TCP ([ISS-024](issues.md)). Mirror start files copied to `tls\com` by the user; after a restart everything came back under the CI Service and the setpoint was re-sent on connect. | -| G10 | Alarms, reports, audit, RDBMS, history | alarms done (phase 8); others not practiced | alarms added | Covered in their own phases (7–12). | +| G10 | Alarms, reports, audit, RDBMS, history | alarms (phase 8), history (phase 9), reports (phase 11) done; audit, RDBMS not practiced | alarms, history, reports added | Covered in their own phases (7–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 | Check web access for CI View: ports, Remote Connect page, `DEPLOY` folder ([task](../.claude/skills/portal-setup/tasks/check-web-access.md)) | passed | n/a | 8080/8443 listening, page 200, six `DEPLOY` folders. | | R10/R20 | Change a setup file safely ([task](../.claude/skills/portal-setup/tasks/change-setup-file.md)) | passed | n/a | `jwuiisg.sup` HTTP port 8080 → 8081 (text edit, elevated restart): 8081 served the page, 8080 refused; restored, hash identical to backup. Editor: *OK* writes at once, *Reset Field* restores the default (ISS-016). | @@ -135,3 +135,10 @@ now come before classes and objects (phase 6), and the other interfaces follow a | R30/C50 | Operator layout `CIENG_Operator` (menu, toolbar, navigation/main/banner frames, status line) added with `layout.ps1`; navigation display `CIENG_Menu`; open displays in frames, layouts and the `popup` layout ([task](../.claude/skills/graphics/tasks/layouts.md)) | passed | passed | Desktop: second 1600 x 900 window, frame navigation and Back, popup on top and minimised with its parent, F11 within taskbar limits; the Operator Interface must be restarted after `Layouts.xml` changes; factory `default` layout unchanged for Admin. Web: `?d=CIENG_Tank&l=CIENG_Operator`. Status line/command names not in the readme (ISS-042). A stray trend property connection caused a desktop error (ISS-041 update). | | J10/C50 | Restart CI Server with the Edit Module open | observed | n/a | Start aborted: `JWUIGED` still attached to the BUS Service (`ci_start.log`); closing the Edit Module fixed it (skill `system-check`). | | R30/C50/C60 | Dataset forms, symbols, AOG library, dual screen, per-user layouts | not practiced | n/a | GUI work; user profiles not changed. | +| R40/C30 | REPORT Service checks: processes, set-up files (`rptman.sup`, `rptge1.rpt`, `rptgen.rpt`), system reports, `rptstp` ([task](../.claude/skills/reporting/tasks/report-checks.md)) | passed | n/a | Read-only plus one cancel: `rptstp rptge1` stopped the endless-loop test report `CIENG_LOOP` (removed). 28 system reports; two names differ from the manual (ISS-043). | +| R40/P20 | RQL in the interactive generator (`rptgen -s rptgen.rpt`), CSV with `SPOOL` ([task](../.claude/skills/reporting/tasks/rql-interactive.md)) | passed | passed | Piped query files (bash `<`, PowerShell via `cmd /c`); `@NEXT 0` needed; dates are local-time seconds; LOOP refused interactively (`RPT-E-LPNOTAL`); aggregated history empty on the test system. | +| C30/P20 | Report definitions by quick load: ad hoc with parameters, daily schedule, item trigger, HTML with cursor loop, logbook; generate, read, print, delete; remove ([task](../.claude/skills/reporting/tasks/define-reports.md)) | practiced, awaiting confirmation | passed | `CIENG_TANK1`, `CIENG_INFLOW_HI`, `CIENG_HTML` + destination `CIENG_FILE`; full sample remove/reload 0 errors. Schedule ≥ 10 min, scheduled report not deletable until the schedule is cleared, `CORRECT_DAYLIGHT` (ISS-044); `dssqld` ad hoc without `ADHOC_DEST` logs a print error (ISS-045). Engineering Module forms still to be checked by the user. | +| C30 | File printer device and destination ([task](../.claude/skills/reporting/tasks/output-devices.md)) | passed | passed | Output type needs the node name (`:FILE`); literal path only (`%TLS_LST_PATH%` failed). Sample builds the file at load (`17_printer_df.ps1`). | +| L50/P30 | DSS tools: processes, `dss.sup`, quick load macro/include/memo file, `dssutl` read, DSS compiler syntax check ([task](../.claude/skills/system-management/tasks/dss-tools.md)) | passed | n/a | Memo from file: absolute path ≤ 82 characters only (ISS-046). Dictionary untouched. | +| C30 | Report component on a display, hardcopy printer, extra report generators | not practiced | n/a | GUI / no printer / admin restart. | +| E10 | Excel Add-in (DART) | not practiced | n/a | Excel not installed on the test system. | -- 2.45.3 From 0bff3698c2888061e99ba64eec35c516076b3e47 Mon Sep 17 00:00:00 2001 From: cliu Date: Thu, 1 Oct 2026 16:47:49 +1000 Subject: [PATCH 4/4] Record the Engineering Module check of the phase 11 reports User checked the report forms, the generate dialog and viewing text and HTML reports. The [ITEM:...] prompt filter does not limit the item browser (ISS-048). system-check: Stop-Service error while CI Server still restarts. Co-Authored-By: Claude Opus 5.5 --- .claude/skills/reporting/SKILL.md | 2 +- .claude/skills/reporting/tasks/define-reports.md | 16 ++++++++++++---- .claude/skills/system-check/SKILL.md | 4 ++++ examples/CI-Eng-Sample/18_report_df.qli | 2 +- examples/CI-Eng-Sample/README.md | 2 +- knowledge/issues.md | 3 ++- knowledge/manuals/IM36K10C30-01EN.md | 15 ++++++++++----- knowledge/progress.md | 4 ++-- 8 files changed, 33 insertions(+), 15 deletions(-) diff --git a/.claude/skills/reporting/SKILL.md b/.claude/skills/reporting/SKILL.md index d3b083f..6c58019 100644 --- a/.claude/skills/reporting/SKILL.md +++ b/.claude/skills/reporting/SKILL.md @@ -38,7 +38,7 @@ Rules: |---|---|---| | Check REPORT Service: processes, set-up files, system reports, stop a hanging report (`rptstp`) | `tasks/report-checks.md` | verified | | Try RQL in the interactive generator (`rptgen -s rptgen.rpt`), CSV with `SPOOL` | `tasks/rql-interactive.md` | verified | -| Define reports by quick load (ad hoc with parameters, schedule, item trigger, HTML, logbook); generate, read, print, delete; remove | `tasks/define-reports.md` | verified (command line); Engineering Module forms awaiting the user's check | +| Define reports by quick load (ad hoc with parameters, schedule, item trigger, HTML, logbook); generate, read, print, delete; remove | `tasks/define-reports.md` | verified (command line and Engineering Module) | | Report output to a file: printer device and destination | `tasks/output-devices.md` | verified | | Report component on a display; Operator Interface generate/view | C30 summary §5 | from docs | | Hardcopy printers, application devices, more generators, separate RPI servers | C30 summary §3, R40 summary §1, §3 | from docs | diff --git a/.claude/skills/reporting/tasks/define-reports.md b/.claude/skills/reporting/tasks/define-reports.md index 9f2f768..8714967 100644 --- a/.claude/skills/reporting/tasks/define-reports.md +++ b/.claude/skills/reporting/tasks/define-reports.md @@ -2,7 +2,7 @@ task: Define reports by quick load (ad hoc with parameters, schedule, item trigger, HTML, logbook); generate, read, print and delete generated reports; remove reports version: R1.03 source: IM 36K10C30-01EN §2.1, §2.3.1, §3, App. 1; IM 36K10L50-01EN App. 1 (REPORT_DF, REPORT_VAL); IM 36K10P20-01EN; practiced on CI-Eng-Sample 2026-10-01 -status: verified (command line); Engineering Module forms awaiting the user's check +status: verified --- # Define and run reports @@ -127,6 +127,14 @@ NAME,ACTIVATION_TIME,GENERATION_INTERVAL `CIENG_TANK1` (parameter `[ITEM:…]`, daily 06:00 with `CORRECT_DAYLIGHT` 1, ad-hoc destination), `CIENG_INFLOW_HI` (trigger `TANK1.INFLOW` > 400, delay 5 s) and `CIENG_HTML` (cursor loop, HTML, logbook) loaded, generated (ad hoc with `@P0` = `TANK1.INFLOW`, by trigger 5 s after the write, by -schedule), read, printed to `CIENG_FILE`, deleted; full sample remove/reload with 0 errors. Not yet -checked by the user: the same reports in the Engineering Module forms (generate dialog with the -item pick list, *View* of the HTML report). +schedule), read, printed to `CIENG_FILE`, deleted; full sample remove/reload with 0 errors. + +Engineering Module (checked by the user 2026-10-01): the forms show the loaded fields (General: +*Report destination* = `DEST_NAME`, no field for `ADHOC_DEST`; Query with Structure / Keywords / +Datasets panes; Time scheduling with *Correct for daylight saving*; Item triggering). Right-click › +*Generate* opens a dialog with *Destination* (preset ``, `ADHOC_DEST` is not pre-selected) and +one field per parameter prompt; an `[ITEM:…]` prompt gives an item tree browser, but the filter did +**not** limit it (whole tree shown, ISS-048). The run is made by the logged-in user (`ADMIN`, process +`JHMISET…`) and printed to the chosen destination without errors. Generated reports are listed under +the report by local time; *View* has its own *Destination* box and *Export…*; HTML reports render as +HTML. diff --git a/.claude/skills/system-check/SKILL.md b/.claude/skills/system-check/SKILL.md index c2a15c8..bc69542 100644 --- a/.claude/skills/system-check/SKILL.md +++ b/.claude/skills/system-check/SKILL.md @@ -83,6 +83,10 @@ prompt. Setup files (`*.sup`) are plain text (CRLF); edit them with the Setup Fi (observed 2026-10-01: a run started 17:25 ran out at 09:52 the next morning after a sleep); some processes (e.g. `umh`) stay attached, but `dssqld`/`itmval` fail and the log shows `ISF-F-LIC_PROB, DATABASE Service is not licensed`. +- `Stop-Service StartCIServer` can fail with *Cannot stop StartCIServer service* although CI + Server does restart (seen 2026-10-01: the error was shown, the service stayed *Running*, and all + processes had new PIDs and a new `STARTUP_TIME` in `LOCAL_NODE_DF` within a minute). Check + `STARTUP_TIME` before retrying. - **Close the Edit Module (and Engineering Module) before stopping CI Server.** A local Edit Module is attached to the BUS Service (`JWUIGED`, a `java.exe` in the user's session) and does not stop with the service. The next start then aborts at once; `%TLS_LOG_PATH%\ci_start.log` diff --git a/examples/CI-Eng-Sample/18_report_df.qli b/examples/CI-Eng-Sample/18_report_df.qli index 0e85714..1d602a9 100644 --- a/examples/CI-Eng-Sample/18_report_df.qli +++ b/examples/CI-Eng-Sample/18_report_df.qli @@ -10,7 +10,7 @@ ENGLISH ! Report names: at most 16 characters. ! ! CIENG_TANK1 : values of all TANK1 items plus last-hour statistics of one item (parameter -! @p0, picked from a list of TANK1 items); daily at 06:00 local time and ad hoc. +! @p0, chosen in an item browser; its filter does not limit it, ISS-048); daily at 06:00. ! The activation time lies in the past; CI Server moves it to the next 06:00. ! CORRECT_DAYLIGHT 1 keeps 06:00 across daylight-saving changes (with 0 the ! interval runs in UTC and 06:00 in January became 05:00 in October). diff --git a/examples/CI-Eng-Sample/README.md b/examples/CI-Eng-Sample/README.md index 496b55a..6f822ed 100644 --- a/examples/CI-Eng-Sample/README.md +++ b/examples/CI-Eng-Sample/README.md @@ -74,7 +74,7 @@ cmd /c "\examples\CI-Eng-Sample\remove.cmd" | `CIENG_TANK1` | Alarm selection area | `SECTION = "CI-Eng-Sample.TANK1"`, compiled on load | | `CIENG_VIEWER` | Authorization group | Read-only: `ITEM_READ`, `SECTION_READ`, `ALARM_CURRENT_READ`, `ALARM_CHRONO_READ`. No users are created by the sample. | | `CIENG_FILE` | Printer device + destination | FILE output to `%TLS_LST_PATH%\cieng_report.txt` (overwritten by each printed report); destination visible to operators | -| `CIENG_TANK1` | Report | Values of the `TANK1` items + last-hour statistics of one item (ad-hoc parameter, pick list of `TANK1` items, default `LEVEL`); daily 06:00 local time and ad hoc; output `CIENG_FILE`; lifetime 1 week | +| `CIENG_TANK1` | Report | Values of the `TANK1` items + last-hour statistics of one item (ad-hoc parameter chosen in an item browser, default `LEVEL`); daily 06:00 local time and ad hoc; output `CIENG_FILE`; lifetime 1 week | | `CIENG_INFLOW_HI` | Report | Generated 5 s after `TANK1.INFLOW` rises above 400; output `CIENG_FILE` | | `CIENG_HTML` | Report | Ad hoc; `TANK1` values as an HTML table (cursor loop) plus the logbook text | diff --git a/knowledge/issues.md b/knowledge/issues.md index 8fd4281..00bed27 100644 --- a/knowledge/issues.md +++ b/knowledge/issues.md @@ -64,6 +64,7 @@ development system (see "Test system" in `progress.md`); they do not exist on ot | ISS-042 | 2026-10-01 | GRAPHICS (layouts) | Installed vs `Layouts.readme`: the factory layouts use status line item types `displayName`, `playbackIndicator` and `dateTime` and the commands `reload ` / `reload all`, none of which the readme lists (readme: `statusText`, `userName`, `progresBar`, `graphicsQueueLevel`, `connectionState`); the readme also writes `zooom` for the zoom command (factory files use `zoom`). | open | Installed software is the reference (standing user decision). Close when the user confirms. | `.claude/skills/graphics/tasks/layouts.md` §2 | | ISS-043 | 2026-10-01 | REPORT (system reports) | IM 36K10C30 App. 1.3 names two system reports `ALM_ATTS_CUR` and `ALM_ATRS_HIS`; the installed reports are `ALM_ATTRS_CUR` and `ALM_ATTRS_HIS`. The other 26 names match. | open | Installed software is the reference (standing user decision). Close when the user confirms. | `knowledge/manuals/IM36K10C30-01EN.md` §8 (done) | | ISS-044 | 2026-10-01 | REPORT (scheduling) | Behaviour not in the manuals, found by quick load: a generation interval below 10 minutes is refused (`HIS-E-ROLLTOFAST`, the interval is the rollover of the report's storage group); a scheduled report cannot be deleted (`RPT-E-ACTIVE`) until `ACTIVATION_TIME` and `GENERATION_INTERVAL` are cleared; `CORRECT_DAYLIGHT` 0 counts intervals in UTC (06:00 set for January ran at 05:00 in October); a past activation time moves to the next slot - once (modify, past time within the lifetime) a single report labelled with the old time was generated, at insert with an older time none. | open | Documented as verified behaviour; the one-off generation for a past activation time is not fully understood. Close when the user confirms. | `.claude/skills/reporting/tasks/define-reports.md` §1, §5, §6; `knowledge/manuals/IM36K10C30-01EN.md` §2; `examples/CI-Eng-Sample/83a_stop_report_df.qli`, `18_report_df.qli` | -| ISS-045 | 2026-10-01 | REPORT (ad hoc from `dssqld`) | Generating ad hoc with `REPORT_DF.GENERATE` = 1 from `dssqld` (user `FULL AUTHORIZATION`) on a report without `ADHOC_DEST` logs `FSL-E-PRT_UNKUSER, Job submitted by unknown user (FULL AUTHORIZATION)` and `RPT-I-TRYPRINT` in `umhlog.log`; the generated report is stored normally. With `ADHOC_DEST` set no error appears and the device gets the output. Related to the R1.03 known issue on report generation and default printers (IM 36K01A50, REPORT 1.11). | open | Workaround documented (set `ADHOC_DEST`). Check whether an ad-hoc run from the Engineering Module as a real user behaves the same. | `.claude/skills/reporting/tasks/define-reports.md` §2; `knowledge/manuals/IM36K10C30-01EN.md` §6 | +| ISS-045 | 2026-10-01 | REPORT (ad hoc from `dssqld`) | Generating ad hoc with `REPORT_DF.GENERATE` = 1 from `dssqld` (user `FULL AUTHORIZATION`) on a report without `ADHOC_DEST` logs `FSL-E-PRT_UNKUSER, Job submitted by unknown user (FULL AUTHORIZATION)` and `RPT-I-TRYPRINT` in `umhlog.log`; the generated report is stored normally. With `ADHOC_DEST` set no error appears and the device gets the output. Related to the R1.03 known issue on report generation and default printers (IM 36K01A50, REPORT 1.11). | open | Workaround documented (set `ADHOC_DEST`). 2026-10-01: generating from the Engineering Module as user `ADMIN` with destination `CIENG_FILE` printed without errors, so it only affects runs from `dssqld`. Close when the user confirms. | `.claude/skills/reporting/tasks/define-reports.md` §2; `knowledge/manuals/IM36K10C30-01EN.md` §6 | | ISS-046 | 2026-10-01 | DATABASE (`dssqld` memo) | A memo field loaded from a file (`@""@`, IM 36K10L50 §3.10) fails with a relative name (`CRL-E-ENOENT`, the file is read on the server side) and with a long absolute path (`DSSG-E-STRBUFSMAL`, buffer 83); a short absolute path works. The manual gives no limits. | open | Documented: use inline memos, or an absolute path ≤ 82 characters. Close when the user confirms. | `.claude/skills/system-management/tasks/dss-tools.md` §2; `knowledge/manuals/IM36K10L50-01EN.md` §4 | | ISS-047 | 2026-10-01 | REPORT (RQL manuals) | The manuals disagree: default `@WORKSPACE` 500 KB (IM 36K10R40 §2.2.2) vs 16 KB (IM 36K10C30 table 2.1-1, IM 36K10P20 §9.6); maximum `@WIDTH` 512 (R40, P20 §4) vs 5000 (P20 §9.6); `@FORMFEED` described with opposite meanings (C30: not 1 = form feed; P20: 0 = blank lines, default 1). Installed set-up files set `@workspace` explicitly (500 in `rptge1.rpt`, 100 in `rptgen.rpt`) and `@formfeed 0` for the interactive generator. | open | Not tested (no printer); the set-up files make the defaults irrelevant in practice. | `knowledge/manuals/IM36K10R40-01EN.md` §2; `knowledge/manuals/IM36K10P20-01EN.md` §3 | +| ISS-048 | 2026-10-01 | REPORT (ad-hoc parameters) | The prompt `[ITEM:NAME like "CI-Eng-Sample.TANK1.*"]Item for statistics:` (filter form as in IM 36K10C30 §2.1) gives an item tree browser in the Engineering Module generate dialog, but the tree shows all sections, not only `TANK1` items (checked by the user). | open | Try other filter forms (`%` wildcard, `SECTION = …`, `[ITEM:TAG="…"]`) and the display report component. | `.claude/skills/reporting/tasks/define-reports.md`; `knowledge/manuals/IM36K10C30-01EN.md` §2; `examples/CI-Eng-Sample/18_report_df.qli` comment | diff --git a/knowledge/manuals/IM36K10C30-01EN.md b/knowledge/manuals/IM36K10C30-01EN.md index aa6f711..21f8813 100644 --- a/knowledge/manuals/IM36K10C30-01EN.md +++ b/knowledge/manuals/IM36K10C30-01EN.md @@ -3,7 +3,7 @@ manual: IM 36K10C30-01EN title: Engineering Module - Reporting edition: 3rd Edition, Sep. 2023 version: R1.03 -status: report definitions (ad hoc with parameters, schedule, item trigger, HTML, logbook), generated reports, file device and destination verified by quick load on CI-Eng-Sample 2026-10-01; Engineering Module forms awaiting the user's check; report component in displays and hardcopy printers from docs +status: report definitions (ad hoc with parameters, schedule, item trigger, HTML, logbook), generated reports, file device and destination verified by quick load on CI-Eng-Sample 2026-10-01; Engineering Module forms, generate and view checked by the user; report component in displays and hardcopy printers from docs --- # Engineering Module - Reporting (R1.03) @@ -43,7 +43,9 @@ lifetime. Parameter prompt meta-information (makes a pick list in the generate dialog): `[ITEM:]`, `[OBJECT::]`, `[DATE]`, `[TIME]`, `[DATE:TIME]`, `[LIST:a:b:c]`, followed by the -prompt text, e.g. `[ITEM:NAME like "CI-Eng-Sample.TANK1.*"]Item for statistics:`. The installed +prompt text, e.g. `[ITEM:NAME like "CI-Eng-Sample.TANK1.*"]Item for statistics:`. **Installed:** the +`[ITEM:…]` prompt opens an item tree browser in the generate dialog, but the filter did not limit +the tree (ISS-048). The installed system reports use lower case (`[item]`, `[date:time]`, `[list:Days:Hours:Minutes]`). Query editor: *Ctrl+Space* lists keywords, datasets and fields. Basics of RQL (§2.1) are @@ -101,8 +103,8 @@ Logbook on a display needs *Logbook Enabled* and *Visible* in the report. Not pr ## 6. Generating and viewing (§3) -- Engineering Module: right-click a report › *Generate* (choose destination, answer - parameters) › right-click a generated report › *View* (*Scroll Form-Feeds* for multi-page). +- Engineering Module: right-click a report › *Generate* (choose destination - preset ``, the + report's `ADHOC_DEST` is not pre-selected - and answer parameters) › right-click a generated report › *View* (*Scroll Form-Feeds* for multi-page). - Operator interface: display with the report component (*Generate* / *View* tabs, print). - Command line: `REPORT_DF` `NAME,PARAM_VALUE_1,GENERATE` = `"","",1` with `dssqld -m`; read `REPORT_VAL` (`NAME` = `.`, `REPORT` memo, @@ -113,7 +115,10 @@ Logbook on a display needs *Logbook Enabled* and *Visible* in the report. Not pr **Verified:** ad-hoc runs from `dssqld` are made by user `FULL AUTHORIZATION`; without an ad-hoc destination `RPTMAN` then logs `FSL-E-PRT_UNKUSER, Job submitted by unknown user` (the report is still stored; ISS-045). With `ADHOC_DEST` set the output went to the device without errors. -Scheduled and triggered runs are made by `RPTMAN` and print to `DEST_NAME`. +Scheduled and triggered runs are made by `RPTMAN` and print to `DEST_NAME`. Generated from the +Engineering Module the run is made by the logged-in user (`ADMIN`, process `JHMISET…`) and printed +to the chosen destination without errors; *View* lists generated reports by local time and has a +*Destination* box and *Export…*. ## 7. Tuning (§4) diff --git a/knowledge/progress.md b/knowledge/progress.md index 2b6a4d7..11777ee 100644 --- a/knowledge/progress.md +++ b/knowledge/progress.md @@ -60,7 +60,7 @@ AID is not needed. | 11 | IM 36K10P30 | Data Set Service Language | summarized; compiler used as syntax check on a copy (no dictionary change) ([notes](manuals/IM36K10P30-01EN.md)) | | 11 | IM 36K10P20 | Report Generation Language | done for queries, layout, cursors/loops, functions, SPOOL/CSV, HTML; SEND/RECEIVE, BREAK, INCLUDE, FLAG PAGE from docs ([notes](manuals/IM36K10P20-01EN.md)); skill `reporting` | | 11 | IM 36K10R40 | Report Server Setup | done for processes, set-up files, interactive generator, `rptstp`; extra generators, separate RPI servers, custom destinations from docs ([notes](manuals/IM36K10R40-01EN.md)) | -| 11 | IM 36K10C30 | Engineering Module - Reporting | done by quick load for report definitions (ad hoc + parameters, schedule, item trigger, HTML, logbook), generated reports and a file device/destination; Engineering Module forms awaiting the user's check; report component in displays and hardcopy printers from docs ([notes](manuals/IM36K10C30-01EN.md)) | +| 11 | IM 36K10C30 | Engineering Module - Reporting | done by quick load for report definitions (ad hoc + parameters, schedule, item trigger, HTML, logbook), generated reports and a file device/destination; Engineering Module forms, generate and view checked by the user; report component in displays and hardcopy printers from docs ([notes](manuals/IM36K10C30-01EN.md)) | | 11 | IM 36K10E10 | Excel Add-in | summarized, from docs (Excel not installed on the test system) ([notes](manuals/IM36K10E10-01EN.md)) | | 12 | IM 36K10L25 | Audit Trail Management | not started | | 13 | IM 36K10J20 | High Availability Computing | not started (needs two servers) | @@ -137,7 +137,7 @@ now come before classes and objects (phase 6), and the other interfaces follow a | R30/C50/C60 | Dataset forms, symbols, AOG library, dual screen, per-user layouts | not practiced | n/a | GUI work; user profiles not changed. | | R40/C30 | REPORT Service checks: processes, set-up files (`rptman.sup`, `rptge1.rpt`, `rptgen.rpt`), system reports, `rptstp` ([task](../.claude/skills/reporting/tasks/report-checks.md)) | passed | n/a | Read-only plus one cancel: `rptstp rptge1` stopped the endless-loop test report `CIENG_LOOP` (removed). 28 system reports; two names differ from the manual (ISS-043). | | R40/P20 | RQL in the interactive generator (`rptgen -s rptgen.rpt`), CSV with `SPOOL` ([task](../.claude/skills/reporting/tasks/rql-interactive.md)) | passed | passed | Piped query files (bash `<`, PowerShell via `cmd /c`); `@NEXT 0` needed; dates are local-time seconds; LOOP refused interactively (`RPT-E-LPNOTAL`); aggregated history empty on the test system. | -| C30/P20 | Report definitions by quick load: ad hoc with parameters, daily schedule, item trigger, HTML with cursor loop, logbook; generate, read, print, delete; remove ([task](../.claude/skills/reporting/tasks/define-reports.md)) | practiced, awaiting confirmation | passed | `CIENG_TANK1`, `CIENG_INFLOW_HI`, `CIENG_HTML` + destination `CIENG_FILE`; full sample remove/reload 0 errors. Schedule ≥ 10 min, scheduled report not deletable until the schedule is cleared, `CORRECT_DAYLIGHT` (ISS-044); `dssqld` ad hoc without `ADHOC_DEST` logs a print error (ISS-045). Engineering Module forms still to be checked by the user. | +| C30/P20 | Report definitions by quick load: ad hoc with parameters, daily schedule, item trigger, HTML with cursor loop, logbook; generate, read, print, delete; remove ([task](../.claude/skills/reporting/tasks/define-reports.md)) | passed | passed | `CIENG_TANK1`, `CIENG_INFLOW_HI`, `CIENG_HTML` + destination `CIENG_FILE`; full sample remove/reload 0 errors. Schedule ≥ 10 min, scheduled report not deletable until the schedule is cleared, `CORRECT_DAYLIGHT` (ISS-044); `dssqld` ad hoc without `ADHOC_DEST` logs a print error (ISS-045). User checked the Engineering Module: forms, generate dialog (item browser not filtered, ISS-048), view of text and HTML reports. | | C30 | File printer device and destination ([task](../.claude/skills/reporting/tasks/output-devices.md)) | passed | passed | Output type needs the node name (`:FILE`); literal path only (`%TLS_LST_PATH%` failed). Sample builds the file at load (`17_printer_df.ps1`). | | L50/P30 | DSS tools: processes, `dss.sup`, quick load macro/include/memo file, `dssutl` read, DSS compiler syntax check ([task](../.claude/skills/system-management/tasks/dss-tools.md)) | passed | n/a | Memo from file: absolute path ≤ 82 characters only (ISS-046). Dictionary untouched. | | C30 | Report component on a display, hardcopy printer, extra report generators | not practiced | n/a | GUI / no printer / admin restart. | -- 2.45.3