Phase 10: Graphic Display Setup, Edit Module, Advanced Operating Graphics #10

Merged
cliu merged 4 commits from docs/phase-10-graphics into main 2026-10-01 14:53:40 +10:00
12 changed files with 1067 additions and 168 deletions

View file

@ -0,0 +1,39 @@
---
name: graphics
description: >-
CI Server R1.03 operator graphics: displays, symbols, layouts and HTML displays. Use when the
user wants to create or change a display or symbol in the Edit Module (number field, text,
alarm overview, trend, buttons, actions, parameters, connecting a component to an item),
deploy or remove display files, export displays to HTML / Mobile Operator, open a display in a
web browser (localhost:8080/mobileoperator), validate, search or unlock displays (jwuiutl,
.lck files), find where displays, symbols and layouts are stored (DEPLOY folder,
Layouts.xml), change layouts, menus, toolbars or frames, build dataset forms (*Dia.xml), or
use the AOG library (Advanced Operating Graphics, AOG_Style, AOG symbols, faceplates). Sources
IM 36K10C50-01EN, IM 36K10R30-01EN, IM 36K10C60-01EN.
---
# Graphics: displays, symbols, layouts (R1.03)
Background: `knowledge/manuals/IM36K10C50-01EN.md` (Edit Module, components, sheets, symbols,
`jwuiutl`, display file contents), `IM36K10R30-01EN.md` (folders, layouts, dataset forms, HTML
display), `IM36K10C60-01EN.md` (AOG library).
Rules:
- Drawing is done by the user in the **Edit Module** (GUI). Claude prepares the steps, checks the
saved XML, deploys/exports/validates files and checks the HTML display in the browser.
- Displays and layouts are shared by every operator: changing or deleting existing files only
with the user's approval; keep a copy first (`Layouts-original.xml` is the factory layout file).
- The HTML display needs a CI Server login: the user logs in; Claude never enters passwords.
Reloading the browser page logs out — use the display menu *View > Reload*, and the display
box to open other displays.
- `jwuiutl -vf`, `-u`, `-c`, `-a` rewrite or unlock files of **all** displays: only with approval.
| Task | File | Status |
|---|---|---|
| Build a display in the Edit Module (text, number field, alarm overview, trend) and check the saved XML | `tasks/create-display.md` | verified |
| Deploy / remove display files, export HTML, validate and search with `jwuiutl` | `tasks/deploy-displays.md` | verified |
| Open and check a display in the browser (HTML display / Mobile Operator) | `tasks/deploy-displays.md` §4 | verified |
| Layouts (`Layouts.xml`), menus, toolbars, frames, dual screen | R30 summary §2 | from docs |
| Dataset forms (`*Dia.xml`) and the form description language | R30 summary §3 | from docs |
| Symbols, parameters, actions, localisation, record/playback | C50 summary §1, §4, §5 | from docs |
| AOG library (styles, symbols, faceplates, templates) | C60 summary | from docs |

View file

@ -0,0 +1,50 @@
---
task: Build a display in the Edit Module and check the saved file
version: R1.03
source: IM 36K10C50-01EN §1.2, §1.7, §2, §4.8.1; practiced on CI-Eng-Sample (display CIENG_Tank) 2026-10-01
status: verified
---
# Build a display (Edit Module)
The user draws; Claude gives the steps and checks the result. Example = the sample display
`examples/CI-Eng-Sample/displays/CIENG_Tank.xml`.
## 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).
- The name is what counts: after the item was deleted and loaded again (new id) the display
still validated and a new session showed live values; already-open sessions kept showing the
old value until reopened.
## 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 (ISS-041).

View file

@ -0,0 +1,57 @@
---
task: Deploy, remove, export, validate and search displays; open them in the browser
version: R1.03
source: IM 36K10C50-01EN §1.5; IM 36K10R30-01EN §1.1, §4; practiced on CI-Eng-Sample 2026-10-01
status: verified
---
# Deploy and check displays
No admin rights needed (`C:\Users\Public\Yokogawa\tls\wap`). `jwuiutl.cmd` is in `tls\com`
(on `PATH`); call it through `cmd` (`cmd /c "jwuiutl.cmd …"`).
## 1. Deploy / remove (sample scripts)
`examples/CI-Eng-Sample/displays/deploy_displays.cmd`: copies `CIENG_Tank.xml` to
`%TLS_WAP_PATH%\cfg\operatorInterfaces\DEPLOY\displays\` and runs
`jwuiutl.cmd -e HTML -i -f DEPLOY CIENG_Tank` (HTML into
`%TLS_WAP_PATH%\mobileoperator\operatorInterfaces\DEPLOY\displays\`).
`remove_displays.cmd` deletes both files (close the display in the Edit Module first).
Deploy after `load.cmd` so the items exist.
For another display: copy `<name>.xml` into `DEPLOY\displays` and export it the same way.
Displays with symbols also need the symbol files in `DEPLOY\symbols`.
## 2. Validate (report only)
```
cmd /c "jwuiutl.cmd -d -v -i -l <scratch>\validate.txt"
```
Per display: `Validating <name>` then `Info: No problems found`, or `*** Validation failed for
display <name>:` with `Problem: <component>: Connected item is not found (<item>)`. Skipped:
`*** Display locked <name>` (open in the Edit Module or a stale `.lck`; `-u` unlocks — with
approval), displays saved by a newer version. `-vf` re-saves all displays — only with approval.
## 3. Search
```
cmd /c "jwuiutl.cmd -d -m <term> > <scratch>\match.txt 2>&1"
```
CSV `Type, File, Component` per match; `-M` adds actions and properties. Use it before deleting
or renaming items to find the displays that use them.
## 4. Open in the browser (HTML display)
`http://localhost:8080/mobileoperator/?d=<display>` (`&l=<layout>`). The user logs in with a CI
Server user. The page shows the operator frame (menu, navigation buttons, alarm banner, status
line). To switch displays type the name in the display box and press Enter. To refresh, use the
display menu **View > Reload** (keeps the session) — **reloading the browser page ends the
session** and needs a new login. Check live values by writing a test value (`itmval -p`, test items only).
## Verified (2026-10-01)
Remove → deploy recreated both files; `-e HTML` output identical to the Edit Module's HTML;
validation of `CIENG_Tank` *No problems found* (also after a sample reload with new item ids);
search worked; browser showed live values. HTML trend without line: ISS-041.

View file

@ -99,6 +99,8 @@ New items start with status 13 (`NOT INIT`) until a value is written.
| `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`) |
| `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` |
| `displays/deploy_displays.cmd`, `remove_displays.cmd` | Copy the display into the operator interface and export its HTML version / delete both |
| `monitoring/*.sup.txt` | Setup-file lines for the monitoring processes (not applied by `load.cmd`) |
## Modbus slave mirror (for station CIENG_PLC)
@ -141,6 +143,13 @@ priority 1). To try it on a test system: `itmval -p -n CI-Eng-Sample.TANK1.LEVEL
(`NAME`, `ACK` 1), write the level back below 80. See skill `alarm-management`, task
`item-alarming.md`.
## Display (optional)
After `load.cmd`, run `displays\deploy_displays.cmd` (no admin rights) and open
`http://localhost:8080/mobileoperator/?d=CIENG_Tank` (CI Server login), or open `CIENG_Tank` in
CI View / the Edit Module. `displays emove_displays.cmd` deletes it again. See skill
`graphics`.
## Monitoring processes (optional)
`monitoring/` holds the lines to add to the setup files in `%TLS_ROOT_PATH%\tls\sup\` so that
@ -152,7 +161,7 @@ testing. See the `system-management` skill, task `monitoring-processes.md`.
| Phase | Adds |
|---|---|
| 10 | A display and symbol |
| 10 | A symbol (the display `CIENG_Tank` exists) |
| 11 | A report |
## Rules

View file

@ -0,0 +1,487 @@
<?xml version="1.0" encoding="utf-8" ?>
<visualization protocolVersion="1.3.0.0">
<globalSection/>
<coreObjectDefinition type="displayDefinition">
<version type="version" value="1.3.0.0"/>
<html>true</html>
<width>1984</width>
<height>760</height>
<referenceCheck>4</referenceCheck>
<defaultBgColor type="colorSet" r="255" g="255" b="255"/>
<defaultFgColor type="colorSet" r="0" g="0" b="0"/>
<defaultFont type="font" name="Tahoma" size="11" underline="false" strikethrough="false"/>
<defaultStroke type="stroke" width="1.0"/>
<grid type="grid" gridVisible="true" snappingActive="true" verticalSnapInterval="8" horizontalSnapInterval="8" onTop="false">
<color type="colorSet" r="0" g="0" b="0"/>
</grid>
<revisionHistory type="revisionHistory">
<revision type="revision" who="ADMIN" when="2026.10.01 14:29:31.493 AEST" what="Created" where="PXiSEDev"/>
</revisionHistory>
<blinkDelay>500</blinkDelay>
<blinkEnabled>true</blinkEnabled>
<mousePassThrough>false</mousePassThrough>
<visibilityGroup type="componentData">
<htmlId>2</htmlId>
<name>Overview</name>
<description>Always shown</description>
<minimumZoomEnabled>true</minimumZoomEnabled>
<minimumZoomFactor>10.0</minimumZoomFactor>
</visibilityGroup>
<visibilityGroup type="componentData">
<htmlId>3</htmlId>
<name>Rough</name>
<description>Shown when viewing viewing a large area</description>
<minimumZoomEnabled>true</minimumZoomEnabled>
<minimumZoomFactor>25.0</minimumZoomFactor>
</visibilityGroup>
<visibilityGroup type="componentData">
<htmlId>4</htmlId>
<name>Standard</name>
<description>Shown when using the default view setting</description>
<minimumZoomEnabled>true</minimumZoomEnabled>
<minimumZoomFactor>100.0</minimumZoomFactor>
</visibilityGroup>
<visibilityGroup type="componentData">
<htmlId>5</htmlId>
<name>Detail</name>
<description>Shown only when viewing a small area</description>
<minimumZoomEnabled>true</minimumZoomEnabled>
<minimumZoomFactor>400.0</minimumZoomFactor>
</visibilityGroup>
<visibilityGroup type="componentData">
<htmlId>6</htmlId>
<name>Intricacies</name>
<description>Shown only when viewing a very small area</description>
<minimumZoomEnabled>true</minimumZoomEnabled>
<minimumZoomFactor>1000.0</minimumZoomFactor>
</visibilityGroup>
<visualizationLayer type="componentData">
<htmlId>1</htmlId>
<name>Layer1</name>
</visualizationLayer>
<componentCountHint>4</componentCountHint>
<text type="componentData">
<htmlId>7</htmlId>
<value>CI-Eng-Sample Tank 1</value>
<stroke type="stroke" width="1.0"/>
<keepOriginalSize>true</keepOriginalSize>
<x>124.734375</x>
<y>36.953125</y>
<top>5.3125</top>
<bottom>5.3125</bottom>
<left>52.375</left>
<right>52.375</right>
<rotation>0.0</rotation>
<shear>0.0</shear>
</text>
<numberField type="componentData" x="120.0" y="120.0" top="16.0" bottom="16.0" left="40.0" right="40.0" rotation="0.0" shear="0.0">
<htmlId>8</htmlId>
<data type="data">
<action type="actionConnectTo">
<property type="property" name="numberField.value"/>
<filter type="filter">
<value>0.0</value>
</filter>
<connection type="connection">
<itemName>CI-Eng-Sample.TANK1.LEVEL</itemName>
<itemId>1.1.268.0.0.1.1.7</itemId>
<itemAttribute>ItemValue</itemAttribute>
</connection>
</action>
</data>
</numberField>
<alarmOverview type="componentData" x="1020.0" y="296.0" top="72.0" bottom="72.0" left="964.0" right="964.0" rotation="0.0" shear="0.0">
<htmlId>9</htmlId>
<data type="data">
<action type="actionInternalServiced"/>
</data>
</alarmOverview>
<chart type="componentData">
<htmlId>10</htmlId>
<config type="graphicInfo">
<version type="version" value="1.3.0.0"/>
<backgroundBorder type="border" value="BorderEmpty"/>
<penPanelVisible>false</penPanelVisible>
<penPanelHeight>-1</penPanelHeight>
<toolbarVisible>true</toolbarVisible>
<toolbarPosition type="borderLayoutPosition" value="PositionNorth"/>
<shiftOffset>0</shiftOffset>
<shiftLength>0</shiftLength>
<protection type="protection" active="false" password="">
<userProtection type="userProtection" user=""/>
</protection>
<enterpriseGroupLocation type="nodeName" node="$display$"/>
<chartPanel>
<name/>
<author/>
<version type="version" value="1.3.0.0"/>
<description/>
<forAllUsers>false</forAllUsers>
<template>false</template>
<group>@NULL</group>
<XyMode>false</XyMode>
<x>0</x>
<y>0</y>
<width>800</width>
<heigth>400</heigth>
<iconized>false</iconized>
<backgroundBorder type="border" value="BorderEmpty"/>
<foregroundColor type="colorSet" r="0" g="0" b="0"/>
<backgroundPaint type="paint">
<paint type="colorSet" r="240" g="240" b="240"/>
</backgroundPaint>
<plotAreaBorder type="border" value="BorderEmpty"/>
<plotAreaTransparent>true</plotAreaTransparent>
<plotAreaIcon>@NULL</plotAreaIcon>
<plotAreaPaint type="paint">
<paint type="colorSet" r="255" g="255" b="255"/>
</plotAreaPaint>
<hairlineColor type="colorSet" r="0" g="0" b="0"/>
<hairlineVisible>false</hairlineVisible>
<antialiasingText>false</antialiasingText>
<antialiasingData>true</antialiasingData>
<renderMode type="chartRendering" value="Rendering2d"/>
<timeNavigatorVisible>true</timeNavigatorVisible>
<timeRangeControlVisible>true</timeRangeControlVisible>
<autoUpdateInterval>false</autoUpdateInterval>
<legendVisible>true</legendVisible>
<legendTitle/>
<legendHeading/>
<legendColor type="colorSet" r="0" g="0" b="0"/>
<legendBackgroundColor type="colorSet" r="240" g="240" b="240"/>
<legendFont type="font" name="Tahoma" size="11" underline="false" strikethrough="false"/>
<legendTransparancy>0.2705882352941177</legendTransparancy>
<legendBorderType type="border" value="BorderLine"/>
<legendPositionType type="position" value="PositionNorthEast"/>
<timeSliderVisible>true</timeSliderVisible>
<timeSliderAbove>false</timeSliderAbove>
<valueSliderVisible>true</valueSliderVisible>
<valueSliderLeft>false</valueSliderLeft>
<xAxisReversed>false</xAxisReversed>
<yAxisReversed>false</yAxisReversed>
<projectorReversed>false</projectorReversed>
<scalingFonts>false</scalingFonts>
<maximumPens>5</maximumPens>
<pensPerPack>0</pensPerPack>
<triggerPen>0</triggerPen>
<timeAxisVisible>true</timeAxisVisible>
<timeAxisMajorTickVisible>true</timeAxisMajorTickVisible>
<timeAxisMinorTickVisible>false</timeAxisMinorTickVisible>
<timeAxisColor type="colorSet" r="0" g="0" b="0"/>
<timeAxisFont type="font" name="Tahoma" size="11" underline="false" strikethrough="false"/>
<timeAxisLabelColor type="colorSet" r="0" g="0" b="0"/>
<timeAxisLabelVisible>true</timeAxisLabelVisible>
<timeAxisLongLabelVisible>true</timeAxisLongLabelVisible>
<timeAxisLabelRotation>0</timeAxisLabelRotation>
<timeAxisTitle/>
<timeAxisTitleRotation>0</timeAxisTitleRotation>
<timeAxisTitlePlacement>50</timeAxisTitlePlacement>
<timeAxisMajorGridVisible>true</timeAxisMajorGridVisible>
<timeAxisMajorGridColor type="colorSet" r="192" g="192" b="192"/>
<timeAxisMajorGridStroke type="stroke" width="1.0" endCap="butt" lineJoin="bevel"/>
<timeAxisMinorGridVisible>false</timeAxisMinorGridVisible>
<timeAxisMinorGridColor type="colorSet" r="192" g="192" b="192"/>
<timeAxisMinorGridStroke type="stroke" width="1.0" endCap="butt" lineJoin="bevel"/>
<headerText/>
<headerColor type="colorSet" r="0" g="0" b="0"/>
<headerFont type="font" name="Tahoma" size="11" underline="false" strikethrough="false"/>
<headerJustification type="jTextJustification" value="TextJustificationLeft"/>
<footerText/>
<footerColor type="colorSet" r="0" g="0" b="0"/>
<footerFont type="font" name="Tahoma" size="11" underline="false" strikethrough="false"/>
<footerJustification type="jTextJustification" value="TextJustificationLeft"/>
<enterprisePrimarySourceLocation type="nodeName" node="$default$"/>
<enterpriseSecondarySourceLocation type="nodeName" node="$default$"/>
<enterprisePrimaryHistoryLocation type="nodeName" node="$default$"/>
<enterpriseSecondaryHistoryLocation type="nodeName" node="$default$"/>
<updateFromHistory>true</updateFromHistory>
<useSampleInterval>true</useSampleInterval>
<sampleInterval>0</sampleInterval>
<optimised>true</optimised>
<chartProtection type="protection" active="false" password="">
<userProtection type="userProtection" user=""/>
</chartProtection>
<pen type="pen">
<type>256</type>
<color type="colorSet" r="65" g="105" b="225"/>
<stroke type="stroke" width="1.5"/>
<paint>@NULL</paint>
<visible>true</visible>
<visibleLegend>true</visibleLegend>
<source type="sourceID" uri="ci:/item/CI-Eng-Sample.TANK1.LEVEL?historygroup=CIENG_SCAN10S"/>
<axisVisible>false</axisVisible>
<axisPosition>0</axisPosition>
<labelVisible>true</labelVisible>
<majorTickVisible>true</majorTickVisible>
<minorTickVisible>true</minorTickVisible>
<axisColor>@NULL</axisColor>
<labelColor>@NULL</labelColor>
<scaleRangeType>0</scaleRangeType>
<minimum>NaN</minimum>
<maximum>NaN</maximum>
<procentual>false</procentual>
<title/>
<description>Tank 1 level (%)</description>
<legendText/>
<titlePlacement>0</titlePlacement>
<titleRotation>0</titleRotation>
<labelRotation>0</labelRotation>
<majorGridVisible>false</majorGridVisible>
<minorGridVisible>false</minorGridVisible>
<lowHighLimitGridVisible>false</lowHighLimitGridVisible>
<lowHighLimitGridAreaVisible>false</lowHighLimitGridAreaVisible>
<lowLowHighHighLimitGridVisible>false</lowLowHighHighLimitGridVisible>
<majorGridColor>@NULL</majorGridColor>
<minorGridColor>@NULL</minorGridColor>
<lowHighLimitGridColor>@NULL</lowHighLimitGridColor>
<lowHighLimitGridAreaColor>@NULL</lowHighLimitGridAreaColor>
<lowLowHighHighLimiGridColor>@NULL</lowLowHighHighLimiGridColor>
<majorGridStroke type="stroke" width="0.1"/>
<minorGridStroke type="stroke" width="0.1"/>
<lowHighLimitGridStroke type="stroke" width="0.1"/>
<lowLowHighHighLimiGridStroke type="stroke" width="0.1"/>
<lowLimit>20.0</lowLimit>
<highLimit>80.0</highLimit>
<lowLowLimit>10.0</lowLowLimit>
<highHighLimit>90.0</highHighLimit>
<annotationVisible>false</annotationVisible>
<timeShift>0</timeShift>
</pen>
<pen type="pen">
<type>256</type>
<color type="colorSet" r="241" g="76" b="20"/>
<stroke type="stroke" width="1.5"/>
<paint>@NULL</paint>
<visible>true</visible>
<visibleLegend>true</visibleLegend>
<source type="sourceID" uri=""/>
<axisVisible>false</axisVisible>
<axisPosition>0</axisPosition>
<labelVisible>true</labelVisible>
<majorTickVisible>true</majorTickVisible>
<minorTickVisible>true</minorTickVisible>
<axisColor>@NULL</axisColor>
<labelColor>@NULL</labelColor>
<scaleRangeType>0</scaleRangeType>
<minimum>NaN</minimum>
<maximum>NaN</maximum>
<procentual>false</procentual>
<title/>
<description/>
<legendText/>
<titlePlacement>0</titlePlacement>
<titleRotation>0</titleRotation>
<labelRotation>0</labelRotation>
<majorGridVisible>false</majorGridVisible>
<minorGridVisible>false</minorGridVisible>
<lowHighLimitGridVisible>false</lowHighLimitGridVisible>
<lowHighLimitGridAreaVisible>false</lowHighLimitGridAreaVisible>
<lowLowHighHighLimitGridVisible>false</lowLowHighHighLimitGridVisible>
<majorGridColor>@NULL</majorGridColor>
<minorGridColor>@NULL</minorGridColor>
<lowHighLimitGridColor>@NULL</lowHighLimitGridColor>
<lowHighLimitGridAreaColor>@NULL</lowHighLimitGridAreaColor>
<lowLowHighHighLimiGridColor>@NULL</lowLowHighHighLimiGridColor>
<majorGridStroke type="stroke" width="0.1"/>
<minorGridStroke type="stroke" width="0.1"/>
<lowHighLimitGridStroke type="stroke" width="0.1"/>
<lowLowHighHighLimiGridStroke type="stroke" width="0.1"/>
<lowLimit>NaN</lowLimit>
<highLimit>NaN</highLimit>
<lowLowLimit>NaN</lowLowLimit>
<highHighLimit>NaN</highHighLimit>
<annotationVisible>false</annotationVisible>
<timeShift>0</timeShift>
</pen>
<pen type="pen">
<type>256</type>
<color type="colorSet" r="127" g="255" b="0"/>
<stroke type="stroke" width="1.5"/>
<paint>@NULL</paint>
<visible>true</visible>
<visibleLegend>true</visibleLegend>
<source type="sourceID" uri=""/>
<axisVisible>false</axisVisible>
<axisPosition>0</axisPosition>
<labelVisible>true</labelVisible>
<majorTickVisible>true</majorTickVisible>
<minorTickVisible>true</minorTickVisible>
<axisColor>@NULL</axisColor>
<labelColor>@NULL</labelColor>
<scaleRangeType>0</scaleRangeType>
<minimum>NaN</minimum>
<maximum>NaN</maximum>
<procentual>false</procentual>
<title/>
<description/>
<legendText/>
<titlePlacement>0</titlePlacement>
<titleRotation>0</titleRotation>
<labelRotation>0</labelRotation>
<majorGridVisible>false</majorGridVisible>
<minorGridVisible>false</minorGridVisible>
<lowHighLimitGridVisible>false</lowHighLimitGridVisible>
<lowHighLimitGridAreaVisible>false</lowHighLimitGridAreaVisible>
<lowLowHighHighLimitGridVisible>false</lowLowHighHighLimitGridVisible>
<majorGridColor>@NULL</majorGridColor>
<minorGridColor>@NULL</minorGridColor>
<lowHighLimitGridColor>@NULL</lowHighLimitGridColor>
<lowHighLimitGridAreaColor>@NULL</lowHighLimitGridAreaColor>
<lowLowHighHighLimiGridColor>@NULL</lowLowHighHighLimiGridColor>
<majorGridStroke type="stroke" width="0.1"/>
<minorGridStroke type="stroke" width="0.1"/>
<lowHighLimitGridStroke type="stroke" width="0.1"/>
<lowLowHighHighLimiGridStroke type="stroke" width="0.1"/>
<lowLimit>NaN</lowLimit>
<highLimit>NaN</highLimit>
<lowLowLimit>NaN</lowLowLimit>
<highHighLimit>NaN</highHighLimit>
<annotationVisible>false</annotationVisible>
<timeShift>0</timeShift>
</pen>
<pen type="pen">
<type>256</type>
<color type="colorSet" r="0" g="0" b="139"/>
<stroke type="stroke" width="1.5"/>
<paint>@NULL</paint>
<visible>true</visible>
<visibleLegend>true</visibleLegend>
<source type="sourceID" uri=""/>
<axisVisible>false</axisVisible>
<axisPosition>0</axisPosition>
<labelVisible>true</labelVisible>
<majorTickVisible>true</majorTickVisible>
<minorTickVisible>true</minorTickVisible>
<axisColor>@NULL</axisColor>
<labelColor>@NULL</labelColor>
<scaleRangeType>0</scaleRangeType>
<minimum>NaN</minimum>
<maximum>NaN</maximum>
<procentual>false</procentual>
<title/>
<description/>
<legendText/>
<titlePlacement>0</titlePlacement>
<titleRotation>0</titleRotation>
<labelRotation>0</labelRotation>
<majorGridVisible>false</majorGridVisible>
<minorGridVisible>false</minorGridVisible>
<lowHighLimitGridVisible>false</lowHighLimitGridVisible>
<lowHighLimitGridAreaVisible>false</lowHighLimitGridAreaVisible>
<lowLowHighHighLimitGridVisible>false</lowLowHighHighLimitGridVisible>
<majorGridColor>@NULL</majorGridColor>
<minorGridColor>@NULL</minorGridColor>
<lowHighLimitGridColor>@NULL</lowHighLimitGridColor>
<lowHighLimitGridAreaColor>@NULL</lowHighLimitGridAreaColor>
<lowLowHighHighLimiGridColor>@NULL</lowLowHighHighLimiGridColor>
<majorGridStroke type="stroke" width="0.1"/>
<minorGridStroke type="stroke" width="0.1"/>
<lowHighLimitGridStroke type="stroke" width="0.1"/>
<lowLowHighHighLimiGridStroke type="stroke" width="0.1"/>
<lowLimit>NaN</lowLimit>
<highLimit>NaN</highLimit>
<lowLowLimit>NaN</lowLowLimit>
<highHighLimit>NaN</highHighLimit>
<annotationVisible>false</annotationVisible>
<timeShift>0</timeShift>
</pen>
<pen type="pen">
<type>256</type>
<color type="colorSet" r="199" g="9" b="16"/>
<stroke type="stroke" width="1.5"/>
<paint>@NULL</paint>
<visible>true</visible>
<visibleLegend>true</visibleLegend>
<source type="sourceID" uri=""/>
<axisVisible>false</axisVisible>
<axisPosition>0</axisPosition>
<labelVisible>true</labelVisible>
<majorTickVisible>true</majorTickVisible>
<minorTickVisible>true</minorTickVisible>
<axisColor>@NULL</axisColor>
<labelColor>@NULL</labelColor>
<scaleRangeType>0</scaleRangeType>
<minimum>NaN</minimum>
<maximum>NaN</maximum>
<procentual>false</procentual>
<title/>
<description/>
<legendText/>
<titlePlacement>0</titlePlacement>
<titleRotation>0</titleRotation>
<labelRotation>0</labelRotation>
<majorGridVisible>false</majorGridVisible>
<minorGridVisible>false</minorGridVisible>
<lowHighLimitGridVisible>false</lowHighLimitGridVisible>
<lowHighLimitGridAreaVisible>false</lowHighLimitGridAreaVisible>
<lowLowHighHighLimitGridVisible>false</lowLowHighHighLimitGridVisible>
<majorGridColor>@NULL</majorGridColor>
<minorGridColor>@NULL</minorGridColor>
<lowHighLimitGridColor>@NULL</lowHighLimitGridColor>
<lowHighLimitGridAreaColor>@NULL</lowHighLimitGridAreaColor>
<lowLowHighHighLimiGridColor>@NULL</lowLowHighHighLimiGridColor>
<majorGridStroke type="stroke" width="0.1"/>
<minorGridStroke type="stroke" width="0.1"/>
<lowHighLimitGridStroke type="stroke" width="0.1"/>
<lowLowHighHighLimiGridStroke type="stroke" width="0.1"/>
<lowLimit>NaN</lowLimit>
<highLimit>NaN</highLimit>
<lowLowLimit>NaN</lowLowLimit>
<highHighLimit>NaN</highHighLimit>
<annotationVisible>false</annotationVisible>
<timeShift>0</timeShift>
</pen>
<penPanelLayout type="xyPenPanelLayout">
<Height>417</Height>
<AutoSize>true</AutoSize>
<SplitLocation>-1</SplitLocation>
<column index="0" visible="true" width="20"/>
<column index="1" visible="true" width="20"/>
<column index="2" visible="true" width="150"/>
<column index="3" visible="true" width="120"/>
<column index="4" visible="true" width="60"/>
<column index="5" visible="false" width="120"/>
<column index="6" visible="false" width="120"/>
<column index="7" visible="false" width="60"/>
<column index="8" visible="true" width="60"/>
<column index="9" visible="true" width="60"/>
<column index="10" visible="false" width="20"/>
<column index="11" visible="true" width="90"/>
<column index="12" visible="false" width="130"/>
<column index="13" visible="true" width="200"/>
<column index="14" visible="false" width="240"/>
<column index="15" visible="false" width="280"/>
</penPanelLayout>
<timeRange type="timeRangeLast" count="1">
<type type="timeUnit" value="TimeUnitHour"/>
</timeRange>
<updateInterval>30</updateInterval>
<fillHistory>true</fillHistory>
<updating>false</updating>
</chartPanel>
</config>
<x>472.0</x>
<y>588.0</y>
<top>172.0</top>
<bottom>172.0</bottom>
<left>344.0</left>
<right>344.0</right>
<rotation>0.0</rotation>
<shear>0.0</shear>
<data type="data">
<action type="actionInternalServiced"/>
<action type="actionConnectTo">
<property type="property" name="chart.attribute[00]"/>
<filter type="filter">
<value>0.0</value>
</filter>
<connection type="connection">
<itemName>CI-Eng-Sample.TANK1.LEVEL</itemName>
<itemId>1.1.268.0.0.1.1.7</itemId>
<itemAttribute>ItemValue</itemAttribute>
</connection>
</action>
</data>
</chart>
</coreObjectDefinition>
</visualization>

View file

@ -0,0 +1,10 @@
@echo off
rem Deploy the CI-Eng-Sample displays into the operator interface (deployment DEPLOY).
rem CI Server R1.03.00. Load the sample (load.cmd) first; no admin rights needed.
rem Copies the display XML, then creates the HTML (Mobile Operator) version with jwuiutl;
rem without -o the HTML goes to %TLS_WAP_PATH%\mobileoperator\operatorInterfaces\DEPLOY.
cd /d "%~dp0"
set WAP=%TLS_WAP_PATH%
if not defined TLS_WAP_PATH set WAP=C:\Users\Public\Yokogawa\tls\wap
copy /y CIENG_Tank.xml "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\"
call jwuiutl.cmd -e HTML -i -f DEPLOY CIENG_Tank

View file

@ -0,0 +1,7 @@
@echo off
rem Remove the CI-Eng-Sample displays (operator interface and HTML version). CI Server R1.03.00.
rem Close CIENG_Tank in the Edit Module first.
set WAP=%TLS_WAP_PATH%
if not defined TLS_WAP_PATH set WAP=C:\Users\Public\Yokogawa\tls\wap
del /q "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\CIENG_Tank.xml"
del /q "%WAP%\mobileoperator\operatorInterfaces\DEPLOY\displays\CIENG_Tank.html"

View file

@ -60,3 +60,4 @@ development system (see "Test system" in `progress.md`); they do not exist on ot
| ISS-038 | 2026-10-01 | HISTORY (`ithloahis` + rollover) | An `ithloahis` sample that was dropped (dated 11:50, before the active unit) still became the **initial value** of the next unit: after a forced rollover at 12:05:26 `ITEM_HISTORY` shows `CI-Eng-Sample.TANK1.INFLOW` = 95 (`INITIAL_VALUE` 1) although the item's value was 112. History after loading old samples can therefore show a wrong value at the next rollover. | open | Accept as a caution (documented in `load-history.md`), or retest after a CI Server restart to see whether the wrong initial value persists. | `.claude/skills/system-management/tasks/load-history.md`; `knowledge/manuals/IM36K10C40-01EN.md` §3 |
| ISS-039 | 2026-10-01 | HISTORY (setup) | Installed vs manuals: `hisdbg` menu runs to option 22 (manual text: `-1 - 10`, list to 22) and lists history types 4 (`STATION_STAT`) and 36 (`SYS_LOG`) not in IM 36K10L20 §3.1; `ithsag.sup` keyword `run_interval` (manual: *Heartbeat*) and `queue_size` 500 KB (manual default 200); the option-type table in IM 36K10L20 §3.1 is garbled in the PDF (observed: Scan/Time `1 1`, Event/Item `2 2`, Aggregation `4 4`). | open | Installed software is the reference (standing user decision). Close when the user confirms. | `knowledge/manuals/IM36K10L20-01EN.md` §3; `knowledge/manuals/IM36K10C40-01EN.md` §2 |
| 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. | open | Check the same display in CI View (Java operator interface); try a trend with only one pen (remove the empty ones) or a Micro Trend; check the HTML-supported trend properties (IM 36K10R30 §4.8.7). | `.claude/skills/graphics/tasks/create-display.md`; `knowledge/manuals/IM36K10R30-01EN.md` §4 |

View file

@ -0,0 +1,98 @@
---
manual: IM 36K10C50-01EN
title: Edit Module
edition: 3rd Edition, Sep. 2023
version: R1.03
status: display CIENG_Tank built by the user in the Edit Module (text, number field, alarm overview, trend) and checked as XML and HTML 2026-10-01; jwuiutl search, validate and HTML export verified; other components, symbols, actions and the tutorial from docs
---
# Edit Module (R1.03)
The Edit Module draws displays and symbols for the operator interface (CI View) and the HTML
display. Displays are XML files (`IM36K10R30-01EN.md` §1). Section numbers refer to the manual.
## 1. Window and files (§1)
- Window: sheets, component bar, graphic sheet, symbols sheet, menu, toolbar, edit area.
- *File > New Display* (Ctrl+N), *New Symbol* (Ctrl+Shift+N), *Save* (Ctrl+S), *Save with
Revision Information* (who/when/why, kept in `revisionHistory`), *Save As*, *Save Selection
as* (new symbol or display), print area, print. Open displays are locked (`<name>.lck`);
autosave writes `<name>.xml.autosave`.
- *Edit > Find* searches the open display; `jwuiutl -m` searches all.
- **HTML display** check box (new display dialog / display properties): the editor then offers
only HTML-supported components, properties and actions, and saving also writes the HTML file.
HTML mode can be switched off later. Not for enterprise displays. The tab icon shows normal /
HTML / HTML with unsupported content.
- Localisation: *Tools > Configure Localization* → *Extract Text*, add locale, translate;
global and per-file tables; the operator's locale decides.
- *Playback > Record* records operator/editor sessions; *Open viewer* plays them back.
## 2. `jwuiutl` — batch operations (§1.5)
`jwuiutl.cmd` (in `tls\com`, Java; runs from a normal prompt):
| Option | Use |
|---|---|
| `-d` / `-s` | Only displays / only symbols (`-p <palette>`, `-g <group>`) |
| `-v` | Validate (connected items exist, components defined); report only. `-l <file>` writes the result, `-i` shows progress (`Validating <name>` / `Info: No problems found`) |
| `-vf` | Force validation and **save** every display/symbol |
| `-u` | Unlock locked files (`.lck` left by a crashed editor) |
| `-c` / `-a` | Clean up temporary files / validate + unlock + clean up |
| `-m <terms>` / `-M <terms>` | Print matching components (CSV) / with actions and properties |
| `-e HTML [-o <dir>] [-f <deployment>] [<display>]` | Export HTML displays |
| `-b`, `-z`, `-h true/false` | Also save `.xml.bin` (faster loading) / compressed / set HTML mode |
| `-un`, `-pw` | User for enterprise displays |
**Verified on the test system:** `-d -m TANK1` and `-d -v -i -l` ran without errors; locked
displays and displays saved by a newer version are skipped (`*** Display locked <name>`,
`… created with a newer version of CI Server (R1.04.0.0)`); `-e HTML -i -f DEPLOY CIENG_Tank`
wrote `mobileoperator\operatorInterfaces\DEPLOY\displays\CIENG_Tank.html`.
## 3. Components (§2)
Shapes (rectangle, ellipse, arc, polygon, spline, line, links), text / text field / text area
/ password field, number and number field, icon, rectangular and circular scales, radial, data
bar, spinner, slider, push/toggle button, check box, radio button, combo box, list box, date
and time field, **alarm overview** (current/historical; acknowledge, block, shelve, link display,
export; dialog tabs Types, Columns, Filter, Alarm link display, Appearance, Header and footer,
Fetching, Alarm Shelving, Enterprise, Advanced, Attributes), list of blocked items, alarm
sound, dataset tables (view/edit dataset records), report, **trend** (pens on items with
history; shows limits; time slider and controls; definitions can be saved from the operator
interface), DTS trend, micro trend, playback indicator, calculation/function, JavaScript
function, web browser, PDF viewer, navigation tree, display generator, map viewer.
## 4. Sheets (§4)
Visualization (displays/symbols tree), zoom, visibility groups (shown by zoom factor),
**parameters** (default read-only ones such as `name`, `attachedObject`, `client`, `server`,
`mouseX`; user-defined with scope; `$name` in command lines), messages, symbols, **properties**
(connect a property to an item attribute, parameter or dataset field; linear transformations;
writable properties: value, item name parts, id, units, description, status number/text,
control status, option bits), layers, attributes, edit history (undo/redo), **actions** (open /
close display, execute command, read/write parameters; triggered by component events).
## 5. Symbols (§5)
*File > New Symbol*; put it on a palette (attributes sheet); external user-defined parameters
become properties of each instance; after changing a symbol run *Tools > Validate all
Symbols* and *Validate all Displays* (with all tabs closed); a symbol can be linked to a
PROCESS Service class so each instance shows one object; data location (display, operator's
CI Portal, display's server, enterprise, node).
## 6. What the display file stores (verified with CIENG_Tank)
- `<coreObjectDefinition type="displayDefinition">` with `<html>true</html>`, `<width>`,
`<height>`, grid, revision history, visibility groups, layers.
- Components as elements (`text`, `numberField`, `alarmOverview`, `chart` = trend).
- Item connections in `<globalSection>`: `<itemName>CI-Eng-Sample.TANK1.LEVEL</itemName>` **and**
`<itemId>1.1.248.0.0.1.1.7</itemId>`. Trend pens: `<source uri="ci:/item/<item>"/>`; a new
trend has 5 empty pens.
- **After a sample remove/reload the item got id 268** while the file kept 248: `jwuiutl -v` still
reported *No problems found*, and a newly opened session showed the live value — the name is
what counts. Sessions that were already open kept the old binding (value frozen) until the
display was opened in a new session.
## 7. Tutorial (§6)
Builds wheels, faceplates, valve symbols, indicators, PID faceplates with mode and setpoint
dialogs, scales, limit colours, tag info and pinning buttons — a guided exercise in the GUI.

View file

@ -0,0 +1,54 @@
---
manual: IM 36K10C60-01EN
title: Advanced Operating Graphics
edition: 3rd Edition, Sep. 2023
version: R1.03
status: from docs; installed AOG displays checked read-only (DEPLOY\displays, mobileoperator) 2026-10-01
---
# Advanced Operating Graphics — AOG library (R1.03)
A ready-made library of symbols and displays in a consistent, high-performance HMI style,
used from the Edit Module's Visualization sheet. Section numbers refer to the manual.
## 1. Symbols (§1.1)
| Kind | Purpose | Palettes / examples |
|---|---|---|
| Equipment symbols | Static equipment, no live data | `AOG_ContainersAndVessels` (AOG_Tank, AOG_Vessel, AOG_Reactor, …), `AOG_HeatTransfer`, `AOG_Indicator`, `AOG_MaterialHandling`, `AOG_Mixing`, `AOG_Rotating` (pumps, compressors, turbine), `AOG_Separators`, `AOG_ValvesAndActuators`, `AOG_Electrical`, `AOG_Filters`, `AOG_Others` (Yokogawa systems such as AOG_CentumFCS, AOG_ProsafeRS, AOG_StardomFCN, AOG_FAM3, AOG_DTS; field devices; stations) |
| Item symbols | Show and change one or more item attributes | indicators (bar, needle, circular, radial, number, text, on/off, manual, alarm, trend), valves (2-way, 3-way, on/off), selection box, name/info |
| Object symbols (`AOG_O…`) | Same, driven by PROCESS Service object signals | e.g. `AOG_ONumberIndicator`, `AOG_OHorizontalBarIndicator` |
| Navigation symbol, components | Navigation between displays | |
## 2. Displays (§1.2)
Standard displays: `AOG_Default`, `AOG_DisplayTemplate` (start for new displays), `AOG_Style`
(global style parameters), `AOG_MenuMain`, alarm displays (`AOG_AlarmBanner`, `AOG_AlarmCurrent`,
`AOG_AlarmHistory`, `AOG_AlarmShelved`), `AOG_AuditTrail`, `AOG_ItemFaceplate`,
`AOG_ItemTuningPanel`, `AOG_ObjectFaceplate`, `AOG_ObjectTuningPanel`, `AOG_SetItemMode`,
`AOG_SetObjectMode`, `AOG_SetNumberPV/SV/SL/SH/SLL/SHH`, `AOG_LockStatus`, `AOG_TrendOpen`,
OPC UA method call displays; plus demo displays. **Installed**: these are in
`DEPLOY\displays`, and the alarm, audit, default, menu, style, trend and UA method displays also
exist as HTML displays.
## 3. Global style parameters (§1.1, §2.1.1)
Defined once on the `AOG_Style` display (*Parameters* tab) and used by all AOG symbols:
colours (`AOG_C…`: alarm high/medium/low/diagnostic/off, display background, equipment
running/off/not running, fluid and gas lines, indicator background/limit/normal/outline/signal,
manual control, selector, text 1–4), strokes (`AOG_S…`), fonts (`AOG_FT1–4`), engineering unit
texts (`AOG_EF1` flow, `AOG_EL1` level, `AOG_EP1` pressure, `AOG_ET1/2` temperature), on/off
texts, `AOG_BlinkOnNotAcknowledged`. Changing a value changes every symbol that uses it.
## 4. Building an HMI (§2)
Edit Module → (optionally) adjust `AOG_Style` and save → *New display* or start from
`AOG_DisplayTemplate` → place AOG symbols from the Visualization sheet → connect them to items
or objects → save → open in the operator interface. New symbols can be made in the same style.
## 5. Enterprise (§3)
Enterprise displays and AOG item/object symbols for enterprise engineering (items/objects on
several servers; locations chosen per symbol).
Not practiced: the sample display uses plain components; AOG symbols need the Edit Module GUI.

View file

@ -0,0 +1,84 @@
---
manual: IM 36K10R30-01EN
title: Graphic Display Setup
edition: 3rd Edition, Sep. 2023
version: R1.03
status: HTML display (Mobile Operator) verified with CI-Eng-Sample display CIENG_Tank 2026-10-01; layout file and form folders checked read-only; layout editing, dataset forms, form language and dual screen from docs
---
# Graphic Display Setup (R1.03)
How the operator interface is framed (layouts), how custom dataset forms are added, and how
displays run in a web browser (HTML display, "Mobile Operator"). Section numbers refer to the
manual. Building displays: `IM36K10C50-01EN.md`; AOG library: `IM36K10C60-01EN.md`.
## 1. Files and folders (installed)
| What | Where (`%TLS_WAP_PATH%` = `C:\Users\Public\Yokogawa\tls\wap`) |
|---|---|
| Displays (operator interface) | `cfg\operatorInterfaces\DEPLOY\displays\<name>.xml` (plus `.lck` while open in the Edit Module, `.autosave`) |
| Symbols | `cfg\operatorInterfaces\DEPLOY\symbols\` (≈ 3100 files incl. the AOG library) |
| Layouts | `cfg\operatorInterfaces\DEPLOY\layouts\Layouts.xml` (+ `Layouts.readme`, `Layouts-original.xml`) |
| Components, locales, thresholds | `cfg\operatorInterfaces\DEPLOY\components\`, `locales\`, `thresholds\` |
| HTML displays | `mobileoperator\operatorInterfaces\DEPLOY\displays\<name>.html` |
| Dataset forms | `cfg\dialog\dialogs\<name>Dia.xml` (components `<name>Com.xml`, definitions `JToolsGlobalDef.xml`); texts in `cfg\properties\` |
`DEPLOY` is the deployment name (a user's *Operator Interface Deployment* field selects another;
empty = `deploy`).
## 2. Layouts (§1)
- `Layouts.xml` holds several `<layout>` elements under `<layouts>` (common options such as
`debugActivationKey="CONTROL SHIFT F6"` for the graphics debugger, Java only). A layout =
menu, toolbar, **frame set (required)**, status line.
- Layout options: `name`, `icon`, `title` (`$<frame>` = title of the display in that frame),
`drawBorder`, `sizingAllowed`, `minimizingAllowed`, `closingAllowed`, `alwaysOnTop`, `modal`,
`lookAndFeel`, `initialPosition` (… `fitFrames`), `initialPositionX/Y`, `initialSize`,
`initialSizeWidth/Height`, `maximumOpen`, print orientation and margins (Java only).
- Menu items (§1.5, e.g. `menu.file.login`, `menu.view.reload`), toolbar (§1.6), status line
items (§1.7, e.g. graphics queue level), frames and tabs (§1.8), translations (§1.9).
- Which layout opens: *In layout* of an *Open display* action (Edit Module), or the user's
*Layout* field (Engineering Module, Authorization > Users); empty = `default`.
- Dual screen (§1.10): copy the layout and the banner display as `<name>_1` / `<name>_2` and let
each banner open its main display in its own layout.
- **Installed layouts**: `mobile`, `default`, `sxga1f/r`, `uxga1f/r`, `wxga1f/r`, `wsxga1f/r`,
`wsxgap1f/r`, `wuxga1f/r`, `ResizablePopup`, `FixedPopup`, `popup`, `Splash`, `tuningpanel`,
`faceplate`, `SelectMode`, `Setpoint`, `mapviewer` (`f` fixed / `r` resizable per screen
size). The test system's `Layouts.xml` also has a custom layout added by the author; keep a copy
of the original before editing.
## 3. Dataset forms (§2, §3)
Engineering-Module-style forms for operators: write `<name>Dia.xml` in `cfg\dialog\dialogs`
(never change the existing forms there), optionally a property file per language, then place a
*Dataset form* component on a display. Objects: `label`, `textField`, `checkBox`, `comboBox`,
`panel`, `component` (`JhmiRecordNameCom`, `JhmiTreeComboBoxCom`, `JhmiSelectAvailableCom`,
`JhmiTimeSelectorCom`); `meta` links an object to a dataset field: `field=`, `mixedValue=`,
`choices=<dataset>[,<field>[,<filter>]]`, `none=`, `available=`/`selected=`, `label=`,
`dateVisible=`, `visibility=`. Layout by `column`, `top="+"`, `right="*"`. Localisation via
property files and language codes (§3.5).
## 4. HTML display / Mobile Operator (§4)
- Export: Edit Module saves the HTML version automatically when the display has **HTML
display** ticked; or `jwuiutl -e HTML -i [-o <path>] [-f <deployment>] [<display>]` (without
`-o` it writes into `mobileoperator\operatorInterfaces\<deployment>`). **Verified**: both give
identical HTML (except a time stamp).
- Open: `http(s)://<host>:8080|8443/mobileoperator?d=<display>&l=<layout>&u=<user>` or *Open* of
*Mobile Operator* on the Remote Connect page. Login with a CI Server user (manual, or SSO via
`https://<host>:8443/auth/mbl`); user profile fields used: password, authorization group, ASA,
shelving group, process areas, logoff timeout, deployment, initial display, locale (layout
not). Login control: `dssana.sup` interface *mobile operator*.
- **Verified**: `http://localhost:8080/mobileoperator/?d=CIENG_Tank` showed the CI View-like
frame (menu, navigation buttons, alarm banner, status line) and the display; the number field
updated live; the alarm overview listed the sample's alarms. **Reloading the browser page ends
the session** (login again); use the display's own menu *View > Reload* instead (keeps the
session, confirmed by the user), and the display box to open other displays.
- Differences from the Java operator interface (§4.7): layout windows live inside the browser
window (no resizing of embedded layouts); displays need explicit width/height; names are
case-sensitive; zoom and pan not supported; some mouse/keyboard events and actions missing;
no enterprise displays. Components supported (§4.8): alarm overview, display, group, symbol,
trend, visibility group/layer, parameters, web browser (with listed properties).
- Full screen F11, Chrome shortcuts or `chrome.exe --app=http://<host>:<port>`.
- **Test system**: the HTML trend of `CIENG_Tank` drew no line although history existed; browser
console `Mismatch between number of labels … and number of columns in array (51)` (ISS-041).

View file

@ -53,9 +53,9 @@ AID is not needed.
| 8 | IM 36K10E30 | Alarm System Performance Analysis | summarized, from docs (ASPA GUI not practiced; launcher and fetch limits checked) ([notes](manuals/IM36K10E30-01EN.md)) |
| 9 | IM 36K10L20 | History Management Engineering | done for `hisdbg` checks, files and rollover; archive and repair utilities from docs ([notes](manuals/IM36K10L20-01EN.md)); skill `history-management` |
| 9 | IM 36K10C40 | Engineering Module - Historical | done by quick load for Event/Item, Scan/Time and Aggregation groups (aggregation needs a higher-priority source group, ISS-040); archive from docs ([notes](manuals/IM36K10C40-01EN.md)) |
| 10 | IM 36K10R30 | Graphic Display Setup | not started |
| 10 | IM 36K10C50 | Edit Module | not started |
| 10 | IM 36K10C60 | Advanced Operating Graphics | not started |
| 10 | IM 36K10R30 | Graphic Display Setup | done for HTML display and folders; layouts, dataset forms, form language 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 |
@ -107,7 +107,7 @@ now come before classes and objects (phase 6), and the other interfaces follow a
| G10/C10 | Authorization group and user creation ([task](../.claude/skills/authorization/tasks/users-groups.md)) | passed | passed | Group `CIENG_VIEWER` (sample file `08_auth_group_df.qli`) loaded/removed by Claude; test user `CIENG_TEST` (no password) loaded by the user, checked and removed. The sample creates no users. |
| C10 | String items: length 1–200, holds length − 1 characters ([task](../.claude/skills/item-engineering/tasks/string-items.md)) | passed | passed | Tested with temporary `CI-Eng-Sample.DEMO.STR*` items (removed): 201 rejected; too-long writes cut, status 12 OVERRANGED ([ISS-019](issues.md)). |
| C10 | Integrator time unit: integration granule `itm_int_secs` in `itm.sup` ([task](../.claude/skills/item-engineering/tasks/sub-items.md)) | passed | passed | 60 → `RUN_SECONDS` +1 per minute; restored to 1 (file identical to backup), +1 per second again ([ISS-010](issues.md)). Elevated restarts run by the user. |
| G10 | Displays, symbols, Operator Interface test | not practiced | pending | GUI (Edit Module); phase 10. |
| G10 | 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). |
| 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). |
@ -130,3 +130,6 @@ now come before classes and objects (phase 6), and the other interfaces follow a
| L20 | `hisdbg` read-only checks and forced rollover ([task](../.claude/skills/history-management/tasks/history-checks.md)) | passed | passed | 45 groups, 30 clients; group/unit info; rollover of `CIENG_EVENT` closed unit 3,1. Extra history types 4 and 36 (ISS-039). |
| L20/L35 | `ithloahis` into older units ([task](../.claude/skills/system-management/tasks/load-history.md)) | passed | passed | Samples in the active unit or a unit closed after the restart stored; older ones dropped silently (ISS-006); dropped sample became the next unit's initial value (ISS-038). |
| L20/C40 | Archive and retrieve, `hasdbg`, `hisrecover`, `hiswrn`, `hisrep` by hand | not practiced | n/a | No archive device configured (`has.sup`); would change history administration. |
| C50 | Build a display in the Edit Module, check the XML ([task](../.claude/skills/graphics/tasks/create-display.md)) | passed | passed | User built `CIENG_Tank` (HTML mode): text, number field, alarm overview, trend. File stores item name + id; after a sample reload (id 248 → 268) validation still passed and a new session showed live values. |
| C50/R30 | Deploy/remove, `jwuiutl` HTML export, validate, search; HTML display in the browser ([task](../.claude/skills/graphics/tasks/deploy-displays.md)) | passed | passed | Scripts `displays/deploy_displays.cmd` / `remove_displays.cmd`; command-line HTML identical to the Edit Module's. Number field live in the browser; HTML trend draws no line (ISS-041). Browser page reload ends the session; the display menu *View > Reload* keeps it (user). |
| R30/C50/C60 | Layouts, dataset forms, symbols, actions, AOG library | not practiced | n/a | GUI work in the Edit Module; layouts are shared system files. |