ci-server-engineer/.claude/skills/graphics/tasks/create-display.md
cliu 516729ff24 R1.05 findings from a user project (tested only)
Tested on the R1.05 test server 2026-10-09..12 with a user project (own
objects only); not yet on CI-Eng-Sample (ISS-188). Only results that
were tested are included; inferences, code-only and manual-only points
and the untested sample layout change were left out.
- layouts: 'logout' is a secondary logout, always disabled on the R1.05
  web client; 'exit' closes the window and ends the session (ISS-182).
- create-display: R1.05 web client table (String items in text vs
  textField, fixed text alignment, start-hidden limits ISS-183, two
  visibility conditions, On entry display actions, rectangle blinking,
  verified connections, first load).
- java-class 4a: signal arrays at scale, write on change, attribute
  arrays, offline javac/javap check; change-reset-class: new signals need
  the object recreated, attributes lost (ISS-185); opcdbg reset in cmd,
  TRIGGER_1 via dssqld -m.
- string-items (ISS-187), users-groups, modbus-station (400 registers,
  comm loss), export-dataset (NAME range filter), item-alarming.
- new task system-management/package-project.md; tools/ModbusSim.java
  (tested on R1.05: FC03/04/06/16, exceptions, modes); AMSI (ISS-186).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 21:57:08 +11:00

13 KiB
Raw Blame History


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 web client: findings from a generated display (verified 2026-10-12, user project on the R1.05 test server, 2026-10-09 to 10-12)

A generated display with about 1,900 components (6 MB XML, 1 MB HTML) on the R1.05 web client:

Topic Finding
Text bound to a String item <text> with text.value ← ItemValue works. keepOriginalSize false stretches it to the box (as on R1.03, unreadable for changing text); true draws it centred at natural size, good for centred values. For left-aligned changing text use a <textField>: textField.value ← ItemValue, <editable>false, <borderType type="border" value="BorderEmpty"/>, justification TextJustificationLeft (or Right). <opaque>false is ignored: set backgroundColor to the colour behind it, or connect textField.backgroundColor through a threshold with output type ColorSet when the background changes.
Fixed text that must align A <text> is centred on its box at its natural width; on one viewer's client long lines started left of their box. A <textField> with a fixed <value> (no connection) is left-aligned (checked in the test browser).
Hidden at start <visible>false</visible> plus a *.visible connection: rectangles, texts and numbers appear when the condition becomes true; ellipses, textFields and numberFields stay hidden. Leave those visible at start. Without a start value every conditional component is drawn until the first values arrive.
Two conditions Two connections to the same *.visible property do not combine (numbers stayed visible after one of their two conditions became false). Encode the condition in one item (e.g. a state item the calculation writes).
Display actions on open Actions placed directly in coreObjectDefinition (before the first layer, as in the factory AOG_ItemFaceplate) with <event type="event" event="On entry"/> run when the display opens and on Reload; e.g. actionSetItemAttribute to reset a selection item.
Blinking rectangle.blinking ← item through a threshold (output Boolean) plus a blinkingPaint blinks (the component toggles visibility at the display's blinkDelay, 500 ms).
Also verified numberField with asDateTime on ItemValue (epoch seconds); text.fillPaint, rectangle.strokePaint, ellipse.strokePaint through thresholds; actionSetItemAttribute with event Clicked b1 on a rectangle and on a number (a number drawn on a clickable shape needs its own action, it catches the click).
Size and first load Once the first values took about a minute on a display this size; later loads took 3–10 s.

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, unless the host is added as frame-src in jwuiisg.sup (skill portal-setup, check-web-access.md; verified). 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).