With the user's approval two temporary displays were deployed, viewed in the web client and removed (display folders identical before/after): - a 2-pen trend draws on the R1.05 web client (ISS-096 closed; ISS-041 fixed on R1.05); - the default R1.05 Content-Security-Policy blocks external pages in a web browser component; same-origin pages load (ISS-111). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
99 lines
10 KiB
Markdown
99 lines
10 KiB
Markdown
---
|
||
task: Build a display in the Edit Module and check the saved file
|
||
version: R1.05 (first written for R1.03)
|
||
source: IM 36K10C50-01EN (R1.03 3rd ed. Sep. 2023; R1.05 5th ed. Feb. 2026) §1.2, §1.7, §2, §2.22, §2.25, §2.31–2.33, §4.8.1, §4.12; practiced on CI-Eng-Sample (display CIENG_Tank) 2026-10-01; display XML written by the sample generator and checked on desktop and web 2026-10-02 to 2026-10-06 (installed web client code, component definitions in DEPLOY\components)
|
||
status: verified on R1.03 (Edit Module steps, saved XML, generator rules). R1.05: manual re-checked 2026-10-08 (section R1.05 below, from docs); not re-tested on the R1.05 test server (shared server, no displays may be deployed; component list comparison awaiting user verification)
|
||
---
|
||
|
||
# Build a display (Edit Module)
|
||
|
||
The user draws; Claude gives the steps and checks the result. The sample displays
|
||
`examples/CI-Eng-Sample/displays/CIENG_*.xml` are not drawn but written by a generator
|
||
(`displays/generator/`); *Writing display XML directly* lists the rules they follow.
|
||
|
||
## Steps for the user
|
||
|
||
1. Start the Edit Module and log in.
|
||
2. *File > New Display*, name `<DisplayName>`; tick **HTML display** if it should also run in a
|
||
browser (the editor then hides unsupported components and properties).
|
||
3. Add components from the component bar, for example:
|
||
- **Text** — title.
|
||
- **Number field** — in the Properties sheet click **Value**, open the connection dialog,
|
||
*Items* tab, pick `<Section>.<Tag>`.
|
||
- **Alarm Overview** — right-click > *Component Properties*; *Filter* tab for an ASA, section
|
||
or tag filter; *Types* tab for current/historical.
|
||
- **Trend** — component properties, pen 1 = `<Section>.<Tag>` (a new trend has 5 empty pens;
|
||
the item must be in a storage group).
|
||
4. *File > Save* (or *Save with Revision Information*). Close the tab when done: an open
|
||
display is locked (`<DisplayName>.lck`) and `jwuiutl` skips it.
|
||
|
||
## Check the saved file
|
||
|
||
Folder `%TLS_WAP_PATH%\cfg\operatorInterfaces\DEPLOY\displays\` (and with HTML mode also
|
||
`%TLS_WAP_PATH%\mobileoperator\operatorInterfaces\DEPLOY\displays\<DisplayName>.html`).
|
||
|
||
```
|
||
grep -n "<html>\|<width>\|<height>\|itemName\|itemId\|<source" <DisplayName>.xml
|
||
```
|
||
|
||
- `<html>true</html>` = HTML mode; `<width>`/`<height>` must be set for the HTML display.
|
||
- Item connections: `<itemName>` + `<itemId>` (node.group.number…); trend pens:
|
||
`<source type="sourceID" uri="ci:/item/<item>"/>` (`uri=""` = empty pen).
|
||
- Write a fixed value with a button (verified in the HTML display, buttons *Manual* / *Auto* on
|
||
the former `CIENG_Tank` and, since 2026-10-06, on `CIENG_Control`): `<button>` › `<data>` › `<action type="actionSetItemAttribute">` with
|
||
`<event type="event" event="On action"/>`, `<filter type="filter"><value>1.0</value></filter>`
|
||
and a `<connection>` with `<direction>2</direction>`, `<itemName>`, `<itemAttribute>ItemValue`
|
||
(the factory popups use `ItemValueOW`, presumably the overwrite variant like `itmval -o`; not tested). The factory popup `AOG_SetNumberPV` uses the
|
||
same action behind its *Apply* button.
|
||
- After the item is deleted and loaded again it gets a **new id**; the display still validates,
|
||
but on 2026-10-01 the HTML display showed **0** and the popup `ITM-E-NO_MAIN, No main item
|
||
found` for a number field whose stored `<itemId>` was stale, also in a fresh session. Deleting
|
||
the `<itemId>` line (keeping `<itemName>`) and redeploying fixed it: the field binds by name.
|
||
Sample displays therefore carry no `<itemId>`; for displays made in the Edit Module, reconnect
|
||
or remove the ids after reloading items (ISS-052).
|
||
|
||
## Writing display XML directly (verified 2026-10-02 to 2026-10-06)
|
||
|
||
The Edit Module stores one element per component (`<text>`, `<number>`, `<rectangle>`, `<arc>`,
|
||
`<button>`, `<slider>` …, names as in `DEPLOY\components\*.xml`), its position as centre plus half
|
||
sizes, and the connections in `<data>`. Files written by hand or by a script load in the Edit
|
||
Module, the Operator Interface and the HTML display, if these rules are kept (sample generator:
|
||
`examples/CI-Eng-Sample/displays/generator/`):
|
||
|
||
| Topic | Rule (R1.03.00) |
|
||
|---|---|
|
||
| Text / number size | With `<keepOriginalSize>false` the HTML export **scales the text to its box** (e.g. `scale(0.98, 3.80)` in a 40 px box); with `true` it is drawn at its font size, centred on the box (tested 2026-10-06) |
|
||
| Rectangle rounding | `roundingX` / `roundingY` are a **fraction 0..1** of the half width / height; values above 1 draw an ellipse, on the desktop and on the web (tested 2026-10-06) |
|
||
| Arc angles | `startAngle` / `extentAngle` in degrees **clockwise** from 3 o'clock (screen y down), negative values allowed; the same on both clients, fixed or connected (tested 2026-10-06: 0/90 = lower-right quarter) |
|
||
| Click on a shape | event `Clicked b1` (buttons: `On action`), e.g. an *Open display* action on a rectangle (2026-10-02) |
|
||
| Item attributes for the web | `ItemValue`, `ItemDesc`, `ItemStatusMnemonic`, `ItemUpdTime` (epoch seconds), `ItemHHL` / `ItemHL` / `ItemLL` / `ItemLLL` (limits), `ItemName` (micro trend pens), list in the web client code; `ItemDescription` does not exist (sample faceplate and Control tab, 2026-10-06) |
|
||
| Showing a time | number field with `<asDateTime>true` connected to `ItemUpdTime`; a `dateTimeField` shows the value on the web only when editable (2026-10-02/06) |
|
||
| Server-side command | `<action type="actionExecuteCommand">` with `<command>` and `<onServer>true</onServer>` runs on the CI Server node as the service account `CIX_PROCESS`, also from the web; a user in the factory group `OPERATOR` may use it (tested 2026-10-06, sample live-data *Start*) |
|
||
| Alarm overview | `autoFit` true in a tab that is hidden while loading squeezes all columns to ~0 px on the web: set `autoFit` false and give `column<Name>Width`; `column…Visible` for `AlarmAttribute` is an array property (a plain value fails the HTML export with `ClassCastException`); the empty part of the list stays **white** on both clients (no property; web: `jquery.dataTables.css` forces it); web rows are 20 px at a 14 px font (2026-10-02/06) |
|
||
|
||
## R1.05: component changes since R1.03 (from docs, IM 36K10C50-01EN 5th ed.)
|
||
|
||
| Component / sheet | Change (version) |
|
||
|---|---|
|
||
| *Calculation/Function* → **Generic Functions** (§2.31) | Renamed (R1.05 manual). Timing now documented: *Date and Time* runs every 200 ms; other operations check their inputs every 100 ms and run on a change, and also when the display is loaded or reloaded. |
|
||
| Generic Functions: **Password Check** (R1.04) | Inputs T[I1] user name, T[I2] password; B[O] TRUE and T[O] = user name if the pair is valid, else FALSE and the DSS error text (e.g. `DSS-E-UNK_USER`). Needs the login method *Manual CI Server* or *Manual OS* for the Password Check function in `dssana.sup` (*Login control* tab; skill `authorization`). Not tested. |
|
||
| Generic Functions: **RDP Connect** (R1.05) | When triggered, writes an `.rdp` file and starts a Remote Desktop session to T[I1] (host or IP). Optional T[I2] RemoteApp alias/program, T[I3] RemoteApp command line, T[I4] RD Gateway (`host[:port]`, default 443). T[O] receives the generated file name. Installed helper: `%TLS_ROOT_PATH%\tls\com\connectrdp.cmd`. Not tested (needs a remote desktop target). |
|
||
| JavaScript Function (§2.32) | Wording: inputs checked every 100 ms, script runs on a change and also when the display is loaded/reloaded (R1.03 text implied no run at load). |
|
||
| Alarm overview (§2.22, R1.04/R1.05) | New *[Acknowledgement]* properties: **Use Custom Acknowledgement** (acknowledge from a user-made window instead of the overview) enables *Acknowledge Event*, *Acknowledged Alarm*, *Acknowledged Alarm Text*, *Acknowledged Alarm Time*; *Selected Alarm Key*; *[External Acknowledgement]* (*Alarm Key*, *Approver*, *Reason*, *Trigger*); *[Enterprise Alarm Locations]* for enterprise displays. |
|
||
| Actions sheet (§4.12, R1.04) | *Update item/parameter* on an item, object signal or parameter can carry **Reason** (≤ 256 chars) and **Approver** (≤ 128 chars); they land in `AUDIT_TRAIL` fields `APPROVAL_REASON` / `APPROVER` (skill `audit-trail`). Two documented recipes for alarm acknowledgement with reason/approver: via an item parameter (attribute *Acknowledged* = 1, item alarms only) or via the overview's *External Acknowledgement* properties (item and external alarms). Not tested. |
|
||
| Dataset tables (§2.25, R1.05) | Column **Icon**, *Icon filter* (`<v>`, `!<v>`, `&<v>` bit test), *Icon tooltip*; *Operator can use column sorters*; *Operator can select row(s)* / *multiple rows*; *[Enterprise Dataset Locations]*; enterprise location supported on the HTML display. |
|
||
| Report (§2.26, R1.05) | New *[Enterprise]* category (primary / secondary data location). |
|
||
| Web Browser (§2.33, R1.05) — **web client: external pages are blocked** by the R1.05 default Content-Security-Policy (verified 2026-10-09, ISS-111); only pages from the CI Server itself load. Component type `extendedIExplorer` (class `WebBrowserChromium`), property `url` | New browser engine: protocols WebRTC, HTTPS, WebSocket, HTTP/2, HTTP/3; codecs VP8, VP9, WebM, Opus, Vorbis, PCM. Content that played on R1.04 or earlier may not play after the upgrade. Right-click menu; new properties *Go Home/Stop/Reload*, *[Printing]*, *[Status]*, *[Security]* (*Enable Microphone/Camera*, *Allow Insecure Certificates*, *Allow Local file access*). Local files for CI Mobile View must be placed under `%TLS_ALLUSERS_PATH%\wap` and opened by URL. |
|
||
| Display generator (§2.36) | The note "not supported on HTML displays" was removed in the R1.05 manual; R30 §4.8 does not list it. Treat web support as unconfirmed. |
|
||
| `jwuiutl -m` / `-M` (§1.5) | Output now described as space-separated (R1.03 manual: CSV). On R1.03 `-m` printed comma-separated lines (verified); R1.05 output not checked (ISS-094). |
|
||
|
||
## Verified (CIENG_Tank, 2026-10-01)
|
||
|
||
Text `CI-Eng-Sample Tank 1`, number field on `TANK1.LEVEL` (live: 72 → 61), alarm overview
|
||
(no filter; listed the TANK1.LEVEL alarms), trend pen `TANK1.LEVEL` (legend
|
||
`CI-Eng-Sample.TANK1.LEVEL [CIENG_SCAN10S]` = highest-priority storage group). In the HTML
|
||
display the trend drew no line: a trend needs 50 visible pens to draw on the web (ISS-041;
|
||
workaround and all trend settings in `trend.md`). The sample file is now padded with
|
||
`add_trend_spares.ps1` (49 spares) and draws in the browser too. `CIENG_Tank` was replaced by the
|
||
generated `CIENG_*` displays on 2026-10-06; they carry no `<itemId>` and found the recreated items
|
||
after a full `remove.cmd` / `load.cmd` cycle in a fresh session (2026-10-06).
|