From 5e77aada8e9887a65670381e08724accd150ab71 Mon Sep 17 00:00:00 2001 From: cliu Date: Thu, 1 Oct 2026 16:17:02 +1000 Subject: [PATCH] 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. |