Compare commits
3 commits
a3b1487c33
...
fafa68e988
| Author | SHA1 | Date | |
|---|---|---|---|
| fafa68e988 | |||
| b1fc552725 | |||
| e62d83b024 |
14 changed files with 698 additions and 208 deletions
|
|
@ -1,15 +1,18 @@
|
||||||
---
|
---
|
||||||
name: graphics
|
name: graphics
|
||||||
description: >-
|
description: >-
|
||||||
CI Server R1.03 operator graphics: displays, symbols, layouts and HTML displays. Use when the
|
CI Server R1.03 operator graphics for the Operator Interface (desktop) and the HTML display
|
||||||
|
(web): displays, symbols, layouts. Use when the
|
||||||
user wants to create or change a display or symbol in the Edit Module (number field, text,
|
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),
|
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
|
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,
|
web browser (localhost:8080/mobileoperator), validate, search or unlock displays (jwuiutl,
|
||||||
.lck files), find where displays, symbols and layouts are stored (DEPLOY folder,
|
.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
|
Layouts.xml), create or change layouts (operator window, navigation frame, main frame, alarm
|
||||||
|
banner, popup / faceplate window, kiosk or full-screen screen, menus, toolbars, status line,
|
||||||
|
frames, tabs, open a display in a frame or another layout), build dataset forms (*Dia.xml), or
|
||||||
use the AOG library (Advanced Operating Graphics, AOG_Style, AOG symbols, faceplates). Sources
|
use the AOG library (Advanced Operating Graphics, AOG_Style, AOG symbols, faceplates). Sources
|
||||||
IM 36K10C50-01EN, IM 36K10R30-01EN, IM 36K10C60-01EN.
|
IM 36K10C50-01EN, IM 36K10R30-01EN, IM 36K10C60-01EN and the installed Layouts.readme.
|
||||||
---
|
---
|
||||||
|
|
||||||
# Graphics: displays, symbols, layouts (R1.03)
|
# Graphics: displays, symbols, layouts (R1.03)
|
||||||
|
|
@ -27,13 +30,17 @@ Rules:
|
||||||
Reloading the browser page logs out — use the display menu *View > Reload*, and the display
|
Reloading the browser page logs out — use the display menu *View > Reload*, and the display
|
||||||
box to open other displays.
|
box to open other displays.
|
||||||
- `jwuiutl -vf`, `-u`, `-c`, `-a` rewrite or unlock files of **all** displays: only with approval.
|
- `jwuiutl -vf`, `-u`, `-c`, `-a` rewrite or unlock files of **all** displays: only with approval.
|
||||||
|
- Ask the user to close the Edit Module before CI Server is stopped or restarted: otherwise the
|
||||||
|
next start fails (skill `system-check`, §3).
|
||||||
|
- The Operator Interface (desktop) reads `Layouts.xml` only at start: after layout changes,
|
||||||
|
restart it (a running client falls back to the current window and just reloads the display).
|
||||||
|
|
||||||
| Task | File | Status |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| Operator layouts (`Layouts.xml`): windows, menus, toolbars, frames, popups, kiosk screens; open displays in frames and layouts | `tasks/layouts.md` | verified (dual screen, per-user layout from docs) |
|
||||||
| Dataset forms (`*Dia.xml`) and the form description language | R30 summary §3 | 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 |
|
| Symbols, parameters, actions, localisation, record/playback | C50 summary §1, §4, §5 | from docs |
|
||||||
| AOG library (styles, symbols, faceplates, templates) | C60 summary | from docs |
|
| AOG library (styles, symbols, faceplates, templates) | C60 summary | from docs |
|
||||||
|
|
|
||||||
122
.claude/skills/graphics/tasks/layouts.md
Normal file
122
.claude/skills/graphics/tasks/layouts.md
Normal file
|
|
@ -0,0 +1,122 @@
|
||||||
|
---
|
||||||
|
task: Configure operator layouts (Layouts.xml): windows, menus, toolbars, frames, popups; open displays in frames and layouts
|
||||||
|
version: R1.03
|
||||||
|
source: Layouts.readme (installed, %TLS_WAP_PATH%\cfg\operatorInterfaces\DEPLOY\layouts); IM 36K10R30-01EN §1, §4.7; IM 36K10C50-01EN §4.12; practiced with CI-Eng-Sample (layout CIENG_Operator) in the Operator Interface (desktop) and the HTML display 2026-10-01
|
||||||
|
status: verified
|
||||||
|
---
|
||||||
|
|
||||||
|
# Operator layouts
|
||||||
|
|
||||||
|
A **layout** is a window of the Operator Interface: optional menu and toolbars, a **frame set**
|
||||||
|
(required) holding displays, and a status line. All layouts of a deployment are in one file,
|
||||||
|
`%TLS_WAP_PATH%\cfg\operatorInterfaces\DEPLOY\layouts\Layouts.xml`, used by **both** the
|
||||||
|
Operator Interface (desktop) and the HTML display (web). The complete option and command
|
||||||
|
reference is `Layouts.readme` in the same folder; `Layouts-original.xml` is the factory copy.
|
||||||
|
|
||||||
|
## 1. Rules
|
||||||
|
|
||||||
|
- `Layouts.xml` is shared by every operator: back it up and change it only with the user's
|
||||||
|
approval. Keep project layouts in a marked block so they can be removed cleanly (sample:
|
||||||
|
`examples/CI-Eng-Sample/layouts/layout.ps1` + `CIENG_Operator.xml`; the script checks the XML
|
||||||
|
is well-formed, keeps UTF-8 without BOM and CRLF, and `-Remove` restores the file byte for byte).
|
||||||
|
- **The Operator Interface reads `Layouts.xml` only when it starts.** After a change, close and
|
||||||
|
restart it. A running client does not know a new layout: opening a display in it only reloads
|
||||||
|
the current window ("blink"). The Edit Module also needs a restart to offer the new name in
|
||||||
|
the *Open display* action.
|
||||||
|
- Name the main frame **`default`**: the factory and AOG displays (alarm lists, faceplates,
|
||||||
|
toolbar commands) open their targets in a frame called `default`.
|
||||||
|
|
||||||
|
## 2. Structure
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<layout name="<Name>" title="<text> $default" icon="poi.png" drawBorder="true"
|
||||||
|
sizingAllowed="true" minimizingAllowed="true" closingAllowed="true" alwaysOnTop="false"
|
||||||
|
initialPosition="centreScreen" initialSize="pixels" initialSizeWidth="1600"
|
||||||
|
initialSizeHeight="900" maximumOpen="1">
|
||||||
|
<menu> <menu-item name="m.file" label="File"> <menu-item … command="exit"/> </menu-item> … </menu>
|
||||||
|
<toolbar name="t1" floatable="false" position="top"> <toolbar-item icon="ciNavLeft32.png"
|
||||||
|
tooltip="Back to $" command="navigate back default"/> … </toolbar>
|
||||||
|
<frame-set rows="1*,fitDisplay"> <!-- main area, alarm banner below -->
|
||||||
|
<frame-set cols="fitDisplay,1*"> <!-- navigation left, main right -->
|
||||||
|
<frame name="nav" initialDisplay="<NavDisplay>" zoomingAllowed="false"/>
|
||||||
|
<frame name="default" initialDisplay="<Overview>" stackSize="10" zoom="fitDisplay"/>
|
||||||
|
</frame-set>
|
||||||
|
<frame name="alarmBannerFrame" initialDisplay="AOG_AlarmBanner" zoom="stretchDisplay"/>
|
||||||
|
</frame-set>
|
||||||
|
<status-line> <status-line-item type="statusText"/> <status-line-separator/> … </status-line>
|
||||||
|
</layout>
|
||||||
|
```
|
||||||
|
|
||||||
|
- `title`: `$<frame>` = title of the display in that frame (verified: *CI-Eng-Sample - Current
|
||||||
|
Alarm Overview*).
|
||||||
|
- Window: `initialPosition` (`centreScreen`, `atCursor`, `pixelsScreen2`, `centreLayout`, …),
|
||||||
|
`initialSize` (`pixels`, `screenSize`, `desktopSize`, `fitFrames`), `maximumOpen`, `modal`,
|
||||||
|
`alwaysOnTop`, print options.
|
||||||
|
- Frame sets: `rows` / `cols` with pixels, `n*` fractions or `fitDisplay`; nest freely; a `<tab>`
|
||||||
|
holds several frames as tabs (`tabPosition`, `maximumTabs`, `closeTabAllowed`). Frame options:
|
||||||
|
`name`, `initialDisplay` (= home display), `stackSize` (back/forward history), `zoom`
|
||||||
|
(`fitDisplay`, `stretchDisplay`, `<n>%`), `zoomingAllowed`, `scrollingAllowed`, `borderStyle`.
|
||||||
|
- Menu (max. two levels; `type` normal/check/radio/sub; `mnemonic`, `accelerator` like `F5`,
|
||||||
|
`CONTROL P`) and toolbar items (`icon` from the factory set such as `ciNavLeft32.png`,
|
||||||
|
`ciProAlar32.png`, `ciZoomFull32.png`; `type` combo/editableCombo/dropdownList) run commands:
|
||||||
|
|
||||||
|
| Command | Effect |
|
||||||
|
|---|---|
|
||||||
|
| `navigate to <frame> <display> [<zoom>] [<p>=<v>;…]` | Open a display in a frame (with parameters) |
|
||||||
|
| `navigate back/forward/up/home/history <frame>` | Frame history (`$` in the tooltip = target name) |
|
||||||
|
| `reload <frame>` / `reload all` | Reload displays (keeps the session in the HTML display) |
|
||||||
|
| `zoom <level> <frame>` | 0 = fit, 1 = 100 %, 10–1000 = relative % |
|
||||||
|
| `toggleSize fullScreen [n]` / `toggleSize x,y,WxH` | Full screen / given size and back |
|
||||||
|
| `print frame|frameWithSetup|preview|setup|selectFrame` | Printing (desktop only) |
|
||||||
|
| `login`, `logout`, `exit`, `toolbar`, `statusline`, `playback record|view`, `shell client|server <cmd>`, `lookfeel <class>`, `help` | |
|
||||||
|
|
||||||
|
The installed status line also uses item types `displayName`, `playbackIndicator` and
|
||||||
|
`dateTime`, which the readme does not list (ISS-042).
|
||||||
|
- `<translations name="nl">` blocks translate labels per locale (key = item name + `.label`).
|
||||||
|
|
||||||
|
## 3. Opening displays in frames and layouts
|
||||||
|
|
||||||
|
| From | How |
|
||||||
|
|---|---|
|
||||||
|
| Button / component (Edit Module, *Actions* sheet → *Open display*) | Display, **Layout** (empty = current window), **Frame**, parameters; stored as `<action type="actionActivateDisplay">` with `<type … value="ActivateSpecific"/>`, `<display>`, `<layout>`, `<layoutFrame>` |
|
||||||
|
| Menu / toolbar | `navigate to <frame> <display>` (current window only) |
|
||||||
|
| Login | User profile *Layout* and *Initial display* (Engineering Module, Authorization > Users); empty layout = `default` (from docs; not changed on the test system) |
|
||||||
|
| HTML display | URL `?d=<display>&l=<layout>` |
|
||||||
|
| Script on a component | *Execute command* with `ACTION <layout command>`, e.g. `ACTION toggleSize 50,50,710x520` |
|
||||||
|
|
||||||
|
Verified behaviour (desktop): a button with layout `CIENG_Operator` opened a **second window**
|
||||||
|
(1600 × 900, own menu/toolbar/frames); buttons without layout opened their display in the main
|
||||||
|
frame of the current window; **Back** returned. A button with layout `popup` opened a separate
|
||||||
|
window: always on top, only a close button, sized to the display (`fitFrames`), and minimised
|
||||||
|
together with the window that opened it — use popups only for small displays (faceplates,
|
||||||
|
setpoint dialogs).
|
||||||
|
|
||||||
|
## 4. Typical project layouts
|
||||||
|
|
||||||
|
- **Operator main window**: navigation frame + main frame `default` (+ tabs) + alarm banner,
|
||||||
|
project menu/toolbar, assigned to operators via the user profile *Layout*.
|
||||||
|
- **Kiosk / control-room screen**: `drawBorder="false"`, `alwaysOnTop="true"`,
|
||||||
|
`initialSize="screenSize"`, `closingAllowed="false"`, `minimizingAllowed="false"`.
|
||||||
|
`toggleSize fullScreen` covers the taskbar only when `alwaysOnTop="true"` (verified: with
|
||||||
|
`false` the title bar and taskbar stay).
|
||||||
|
- **Popups / faceplates**: small layout with one frame `default`, `initialSize="fitFrames"`,
|
||||||
|
`initialPosition="atCursor"`, `alwaysOnTop="true"`, `maximumOpen` > 1 for several faceplates
|
||||||
|
(factory: `popup`, `FixedPopup`, `ResizablePopup`, `faceplate`, `tuningpanel`, `Setpoint`,
|
||||||
|
`SelectMode`).
|
||||||
|
- **Several screens**: one layout per screen with `initialPosition="pixelsScreen2"` /
|
||||||
|
`centreScreen2`, or the dual-screen pattern of IM 36K10R30 §1.10.
|
||||||
|
|
||||||
|
## 5. HTML display differences
|
||||||
|
|
||||||
|
The browser window is the main layout (its size and window options are ignored); other layouts
|
||||||
|
open as windows inside the page; print, look-and-feel and the debug key are not supported; pick
|
||||||
|
the layout with `&l=`. Verified: `?d=CIENG_Tank&l=CIENG_Operator` showed the sample menu,
|
||||||
|
toolbar, navigation frame and banner.
|
||||||
|
|
||||||
|
## Verified (CI-Eng-Sample, 2026-10-01)
|
||||||
|
|
||||||
|
`layout.ps1` add / remove / add (removal identical to the original, backup kept); Operator
|
||||||
|
Interface restart required before the layout was found; desktop and web windows as described
|
||||||
|
above; F11 (`toggleSize fullScreen`) worked within the taskbar limits; after restarting the
|
||||||
|
Operator Interface the main window still used the factory `default` layout (Admin profile
|
||||||
|
unchanged).
|
||||||
|
|
@ -83,6 +83,14 @@ prompt. Setup files (`*.sup`) are plain text (CRLF); edit them with the Setup Fi
|
||||||
(observed 2026-10-01: a run started 17:25 ran out at 09:52 the next morning after a sleep);
|
(observed 2026-10-01: a run started 17:25 ran out at 09:52 the next morning after a sleep);
|
||||||
some processes (e.g. `umh`) stay attached, but `dssqld`/`itmval` fail and the log shows
|
some processes (e.g. `umh`) stay attached, but `dssqld`/`itmval` fail and the log shows
|
||||||
`ISF-F-LIC_PROB, DATABASE Service is not licensed`.
|
`ISF-F-LIC_PROB, DATABASE Service is not licensed`.
|
||||||
|
- **Close the Edit Module (and Engineering Module) before stopping CI Server.** A local Edit
|
||||||
|
Module is attached to the BUS Service (`JWUIGED<pid>`, a `java.exe` in the user's session) and
|
||||||
|
does not stop with the service. The next start then aborts at once; `%TLS_LOG_PATH%\ci_start.log`
|
||||||
|
shows `CI Server is already running` / `umh_panic: durwfp, CI Server has not been properly
|
||||||
|
stopped, kill the following processes …` with the list (seen 2026-10-01: `JWUIGED12760` kept
|
||||||
|
UMH, DURTIM, UMHLOG … listed). Fix: close the Edit Module (or end that `java.exe`), then start
|
||||||
|
again. Avoid `durstp -k -p *` unless the user approves. The Operator Interface (desktop) and the
|
||||||
|
HTML display connect through the web server and were not in the list.
|
||||||
|
|
||||||
## 4. Time synchronization
|
## 4. Time synchronization
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -99,8 +99,10 @@ 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`) |
|
| `equipment/eqpciengslv_start.cmd`, `_stop.cmd` | Start/stop the Modbus slave mirror (copy to `tls\com`) |
|
||||||
| `76_`…`93_remove_*.qli` | Names to delete, in reverse order (alarm definitions last, `93`) |
|
| `76_`…`93_remove_*.qli` | Names to delete, in reverse order (alarm definitions last, `93`) |
|
||||||
| `load.cmd`, `remove.cmd` | Run the steps in the right order |
|
| `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/CIENG_Tank.xml` | Display (HTML mode): title, number field on `TANK1.LEVEL`, alarm overview, trend of `TANK1.LEVEL`, button *Operator layout* |
|
||||||
| `displays/deploy_displays.cmd`, `remove_displays.cmd` | Copy the display into the operator interface and export its HTML version / delete both |
|
| `displays/CIENG_Menu.xml` | Navigation display (200 x 700): *Tank 1*, *Current Alarm* (main frame), *Tank 1 popup* (layout `popup`) |
|
||||||
|
| `layouts/CIENG_Operator.xml`, `layouts/layout.ps1` | Operator layout block and the script that adds/removes it in `Layouts.xml` |
|
||||||
|
| `displays/deploy_displays.cmd`, `remove_displays.cmd` | Copy the displays into the operator interface and export their HTML versions / delete them |
|
||||||
| `monitoring/*.sup.txt` | Setup-file lines for the monitoring processes (not applied by `load.cmd`) |
|
| `monitoring/*.sup.txt` | Setup-file lines for the monitoring processes (not applied by `load.cmd`) |
|
||||||
|
|
||||||
## Modbus slave mirror (for station CIENG_PLC)
|
## Modbus slave mirror (for station CIENG_PLC)
|
||||||
|
|
@ -143,11 +145,23 @@ 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
|
(`NAME`, `ACK` 1), write the level back below 80. See skill `alarm-management`, task
|
||||||
`item-alarming.md`.
|
`item-alarming.md`.
|
||||||
|
|
||||||
## Display (optional)
|
## Displays and layout (optional)
|
||||||
|
|
||||||
After `load.cmd`, run `displays\deploy_displays.cmd` (no admin rights) and open
|
No admin rights needed. After `load.cmd`:
|
||||||
`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
|
1. `displays\deploy_displays.cmd` copies `CIENG_Tank` and `CIENG_Menu` into the operator
|
||||||
|
interface and creates their HTML versions.
|
||||||
|
2. `powershell -ExecutionPolicy Bypass -File layouts\layout.ps1` adds the layout
|
||||||
|
`CIENG_Operator` to `Layouts.xml` (first run saves `Layouts-before-CIENG.xml`).
|
||||||
|
**Restart the Operator Interface** afterwards: it reads the layouts only at start.
|
||||||
|
3. Operator Interface (desktop): open `CIENG_Tank` from the display box and click
|
||||||
|
**Operator layout** - a second window opens with the sample menu (File / View / Displays),
|
||||||
|
toolbar, `CIENG_Menu` on the left, `CIENG_Tank` in the main frame `default` and the alarm
|
||||||
|
banner. HTML display (web): `http://localhost:8080/mobileoperator/?d=CIENG_Tank&l=CIENG_Operator`
|
||||||
|
(CI Server login).
|
||||||
|
|
||||||
|
Remove: `layouts\layout.ps1 -Remove` (restores the file exactly) and
|
||||||
|
`displays\remove_displays.cmd`. Close the displays in the Edit Module first. See skill
|
||||||
`graphics`.
|
`graphics`.
|
||||||
|
|
||||||
## Monitoring processes (optional)
|
## Monitoring processes (optional)
|
||||||
|
|
@ -161,7 +175,7 @@ testing. See the `system-management` skill, task `monitoring-processes.md`.
|
||||||
|
|
||||||
| Phase | Adds |
|
| Phase | Adds |
|
||||||
|---|---|
|
|---|---|
|
||||||
| 10 | A symbol (the display `CIENG_Tank` exists) |
|
| 10 | A symbol and a faceplate popup (displays and the operator layout exist) |
|
||||||
| 11 | A report |
|
| 11 | A report |
|
||||||
|
|
||||||
## Rules
|
## Rules
|
||||||
|
|
|
||||||
97
examples/CI-Eng-Sample/displays/CIENG_Menu.xml
Normal file
97
examples/CI-Eng-Sample/displays/CIENG_Menu.xml
Normal file
|
|
@ -0,0 +1,97 @@
|
||||||
|
<?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>200</width>
|
||||||
|
<height>700</height>
|
||||||
|
<referenceCheck>2</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 15:05:12.398 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>3</componentCountHint>
|
||||||
|
<button type="componentData" x="100.0" y="44.0" top="20.0" bottom="20.0" left="84.0" right="84.0" rotation="0.0" shear="0.0">
|
||||||
|
<htmlId>7</htmlId>
|
||||||
|
<label>Tank 1</label>
|
||||||
|
<data type="data">
|
||||||
|
<action type="actionActivateDisplay">
|
||||||
|
<event type="event" event="On action"/>
|
||||||
|
<display>CIENG_Tank</display>
|
||||||
|
</action>
|
||||||
|
</data>
|
||||||
|
</button>
|
||||||
|
<button type="componentData" x="100.0" y="108.0" top="20.0" bottom="20.0" left="84.0" right="84.0" rotation="0.0" shear="0.0">
|
||||||
|
<htmlId>8</htmlId>
|
||||||
|
<label>Current Alarm</label>
|
||||||
|
<data type="data">
|
||||||
|
<action type="actionActivateDisplay">
|
||||||
|
<event type="event" event="On action"/>
|
||||||
|
<display>AOG_AlarmCurrent</display>
|
||||||
|
</action>
|
||||||
|
</data>
|
||||||
|
</button>
|
||||||
|
<button type="componentData" x="100.0" y="180.0" top="20.0" bottom="20.0" left="84.0" right="84.0" rotation="0.0" shear="0.0">
|
||||||
|
<htmlId>9</htmlId>
|
||||||
|
<label>Tank 1 popup</label>
|
||||||
|
<data type="data">
|
||||||
|
<action type="actionActivateDisplay">
|
||||||
|
<event type="event" event="On action"/>
|
||||||
|
<type type="displayActivationType" value="ActivateSpecific"/>
|
||||||
|
<display>CIENG_Tank</display>
|
||||||
|
<layout>popup</layout>
|
||||||
|
<layoutFrame>default</layoutFrame>
|
||||||
|
</action>
|
||||||
|
</data>
|
||||||
|
</button>
|
||||||
|
</coreObjectDefinition>
|
||||||
|
</visualization>
|
||||||
|
|
@ -1,12 +1,23 @@
|
||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<visualization protocolVersion="1.3.0.0">
|
<visualization protocolVersion="1.3.0.0">
|
||||||
<globalSection/>
|
<globalSection>
|
||||||
|
<intRef id="17">
|
||||||
|
<sharedObject type="data">
|
||||||
|
<action type="actionInternalServiced"/>
|
||||||
|
</sharedObject>
|
||||||
|
</intRef>
|
||||||
|
<intRef id="20">
|
||||||
|
<sharedObject type="protection" active="false" password="">
|
||||||
|
<userProtection type="userProtection" user=""/>
|
||||||
|
</sharedObject>
|
||||||
|
</intRef>
|
||||||
|
</globalSection>
|
||||||
<coreObjectDefinition type="displayDefinition">
|
<coreObjectDefinition type="displayDefinition">
|
||||||
<version type="version" value="1.3.0.0"/>
|
<version type="version" value="1.3.0.0"/>
|
||||||
<html>true</html>
|
<html>true</html>
|
||||||
<width>1984</width>
|
<width>1984</width>
|
||||||
<height>760</height>
|
<height>760</height>
|
||||||
<referenceCheck>4</referenceCheck>
|
<referenceCheck>8</referenceCheck>
|
||||||
<defaultBgColor type="colorSet" r="255" g="255" b="255"/>
|
<defaultBgColor type="colorSet" r="255" g="255" b="255"/>
|
||||||
<defaultFgColor type="colorSet" r="0" g="0" b="0"/>
|
<defaultFgColor type="colorSet" r="0" g="0" b="0"/>
|
||||||
<defaultFont type="font" name="Tahoma" size="11" underline="false" strikethrough="false"/>
|
<defaultFont type="font" name="Tahoma" size="11" underline="false" strikethrough="false"/>
|
||||||
|
|
@ -59,7 +70,7 @@
|
||||||
<htmlId>1</htmlId>
|
<htmlId>1</htmlId>
|
||||||
<name>Layer1</name>
|
<name>Layer1</name>
|
||||||
</visualizationLayer>
|
</visualizationLayer>
|
||||||
<componentCountHint>4</componentCountHint>
|
<componentCountHint>5</componentCountHint>
|
||||||
<text type="componentData">
|
<text type="componentData">
|
||||||
<htmlId>7</htmlId>
|
<htmlId>7</htmlId>
|
||||||
<value>CI-Eng-Sample Tank 1</value>
|
<value>CI-Eng-Sample Tank 1</value>
|
||||||
|
|
@ -92,9 +103,7 @@
|
||||||
</numberField>
|
</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">
|
<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>
|
<htmlId>9</htmlId>
|
||||||
<data type="data">
|
<data ref="17"/>
|
||||||
<action type="actionInternalServiced"/>
|
|
||||||
</data>
|
|
||||||
</alarmOverview>
|
</alarmOverview>
|
||||||
<chart type="componentData">
|
<chart type="componentData">
|
||||||
<htmlId>10</htmlId>
|
<htmlId>10</htmlId>
|
||||||
|
|
@ -107,9 +116,7 @@
|
||||||
<toolbarPosition type="borderLayoutPosition" value="PositionNorth"/>
|
<toolbarPosition type="borderLayoutPosition" value="PositionNorth"/>
|
||||||
<shiftOffset>0</shiftOffset>
|
<shiftOffset>0</shiftOffset>
|
||||||
<shiftLength>0</shiftLength>
|
<shiftLength>0</shiftLength>
|
||||||
<protection type="protection" active="false" password="">
|
<protection ref="20"/>
|
||||||
<userProtection type="userProtection" user=""/>
|
|
||||||
</protection>
|
|
||||||
<enterpriseGroupLocation type="nodeName" node="$display$"/>
|
<enterpriseGroupLocation type="nodeName" node="$display$"/>
|
||||||
<chartPanel>
|
<chartPanel>
|
||||||
<name/>
|
<name/>
|
||||||
|
|
@ -198,9 +205,7 @@
|
||||||
<useSampleInterval>true</useSampleInterval>
|
<useSampleInterval>true</useSampleInterval>
|
||||||
<sampleInterval>0</sampleInterval>
|
<sampleInterval>0</sampleInterval>
|
||||||
<optimised>true</optimised>
|
<optimised>true</optimised>
|
||||||
<chartProtection type="protection" active="false" password="">
|
<chartProtection ref="20"/>
|
||||||
<userProtection type="userProtection" user=""/>
|
|
||||||
</chartProtection>
|
|
||||||
<pen type="pen">
|
<pen type="pen">
|
||||||
<type>256</type>
|
<type>256</type>
|
||||||
<color type="colorSet" r="65" g="105" b="225"/>
|
<color type="colorSet" r="65" g="105" b="225"/>
|
||||||
|
|
@ -468,20 +473,20 @@
|
||||||
<right>344.0</right>
|
<right>344.0</right>
|
||||||
<rotation>0.0</rotation>
|
<rotation>0.0</rotation>
|
||||||
<shear>0.0</shear>
|
<shear>0.0</shear>
|
||||||
|
<data ref="17"/>
|
||||||
|
</chart>
|
||||||
|
<button type="componentData" x="404.0" y="68.0" top="20.0" bottom="20.0" left="84.0" right="84.0" rotation="0.0" shear="0.0">
|
||||||
|
<htmlId>11</htmlId>
|
||||||
|
<label>Operator layout</label>
|
||||||
<data type="data">
|
<data type="data">
|
||||||
<action type="actionInternalServiced"/>
|
<action type="actionActivateDisplay">
|
||||||
<action type="actionConnectTo">
|
<event type="event" event="On action"/>
|
||||||
<property type="property" name="chart.attribute[00]"/>
|
<type type="displayActivationType" value="ActivateSpecific"/>
|
||||||
<filter type="filter">
|
<display>CIENG_Tank</display>
|
||||||
<value>0.0</value>
|
<layout>CIENG_Operator</layout>
|
||||||
</filter>
|
<layoutFrame>default</layoutFrame>
|
||||||
<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>
|
</action>
|
||||||
</data>
|
</data>
|
||||||
</chart>
|
</button>
|
||||||
</coreObjectDefinition>
|
</coreObjectDefinition>
|
||||||
</visualization>
|
</visualization>
|
||||||
|
|
@ -7,4 +7,6 @@ cd /d "%~dp0"
|
||||||
set WAP=%TLS_WAP_PATH%
|
set WAP=%TLS_WAP_PATH%
|
||||||
if not defined TLS_WAP_PATH set WAP=C:\Users\Public\Yokogawa\tls\wap
|
if not defined TLS_WAP_PATH set WAP=C:\Users\Public\Yokogawa\tls\wap
|
||||||
copy /y CIENG_Tank.xml "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\"
|
copy /y CIENG_Tank.xml "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\"
|
||||||
|
copy /y CIENG_Menu.xml "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\"
|
||||||
call jwuiutl.cmd -e HTML -i -f DEPLOY CIENG_Tank
|
call jwuiutl.cmd -e HTML -i -f DEPLOY CIENG_Tank
|
||||||
|
call jwuiutl.cmd -e HTML -i -f DEPLOY CIENG_Menu
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
@echo off
|
@echo off
|
||||||
rem Remove the CI-Eng-Sample displays (operator interface and HTML version). CI Server R1.03.00.
|
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.
|
rem Close CIENG_Tank and CIENG_Menu in the Edit Module first.
|
||||||
set WAP=%TLS_WAP_PATH%
|
set WAP=%TLS_WAP_PATH%
|
||||||
if not defined TLS_WAP_PATH set WAP=C:\Users\Public\Yokogawa\tls\wap
|
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%\cfg\operatorInterfaces\DEPLOY\displays\CIENG_Tank.xml"
|
||||||
del /q "%WAP%\mobileoperator\operatorInterfaces\DEPLOY\displays\CIENG_Tank.html"
|
del /q "%WAP%\mobileoperator\operatorInterfaces\DEPLOY\displays\CIENG_Tank.html"
|
||||||
|
del /q "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\CIENG_Menu.xml"
|
||||||
|
del /q "%WAP%\mobileoperator\operatorInterfaces\DEPLOY\displays\CIENG_Menu.html"
|
||||||
|
|
|
||||||
184
examples/CI-Eng-Sample/layouts/CIENG_Operator.xml
Normal file
184
examples/CI-Eng-Sample/layouts/CIENG_Operator.xml
Normal file
|
|
@ -0,0 +1,184 @@
|
||||||
|
<!-- CIENG-SAMPLE-BEGIN: CI-Eng-Sample operator layout (CI Server R1.03.00).
|
||||||
|
Added and removed by examples\CI-Eng-Sample\layouts\layout.ps1; do not edit inside Layouts.xml.
|
||||||
|
Window: menu, toolbar, navigation frame "nav" (left), main frame "default" (right),
|
||||||
|
alarm banner frame (bottom), status line. The main frame is called "default" because the
|
||||||
|
AOG displays (alarm lists, faceplates) open their targets in a frame named "default". -->
|
||||||
|
<layout
|
||||||
|
name="CIENG_Operator"
|
||||||
|
title="CI-Eng-Sample - $default"
|
||||||
|
icon="poi.png"
|
||||||
|
drawBorder="true"
|
||||||
|
sizingAllowed="true"
|
||||||
|
minimizingAllowed="true"
|
||||||
|
closingAllowed="true"
|
||||||
|
alwaysOnTop="false"
|
||||||
|
initialPosition="centreScreen"
|
||||||
|
initialPositionX="0"
|
||||||
|
initialPositionY="0"
|
||||||
|
initialSize="pixels"
|
||||||
|
initialSizeWidth="1600"
|
||||||
|
initialSizeHeight="900"
|
||||||
|
maximumOpen="1">
|
||||||
|
<menu>
|
||||||
|
<menu-item
|
||||||
|
name="cieng.menu.file"
|
||||||
|
label="File"
|
||||||
|
mnemonic="f">
|
||||||
|
<menu-item
|
||||||
|
name="cieng.menu.file.print"
|
||||||
|
label="Print..."
|
||||||
|
mnemonic="p"
|
||||||
|
tooltip="Print $"
|
||||||
|
command="print frameWithSetup"/>
|
||||||
|
<menu-separator/>
|
||||||
|
<menu-item
|
||||||
|
name="cieng.menu.file.exit"
|
||||||
|
label="Exit"
|
||||||
|
mnemonic="x"
|
||||||
|
tooltip="Close this window"
|
||||||
|
command="exit"/>
|
||||||
|
</menu-item>
|
||||||
|
<menu-item
|
||||||
|
name="cieng.menu.view"
|
||||||
|
label="View"
|
||||||
|
mnemonic="v">
|
||||||
|
<menu-item
|
||||||
|
name="cieng.menu.view.reload"
|
||||||
|
label="Reload"
|
||||||
|
mnemonic="r"
|
||||||
|
accelerator="F5"
|
||||||
|
tooltip="Reload $"
|
||||||
|
command="reload default"/>
|
||||||
|
<menu-item
|
||||||
|
name="cieng.menu.view.reload.all"
|
||||||
|
label="Reload All"
|
||||||
|
mnemonic="a"
|
||||||
|
tooltip="Reload all displays"
|
||||||
|
command="reload all"/>
|
||||||
|
<menu-separator/>
|
||||||
|
<menu-item
|
||||||
|
name="cieng.menu.view.fullscreen"
|
||||||
|
label="Full screen"
|
||||||
|
mnemonic="u"
|
||||||
|
accelerator="F11"
|
||||||
|
tooltip="Toggle full screen"
|
||||||
|
command="toggleSize fullScreen"/>
|
||||||
|
</menu-item>
|
||||||
|
<menu-item
|
||||||
|
name="cieng.menu.displays"
|
||||||
|
label="Displays"
|
||||||
|
mnemonic="d">
|
||||||
|
<menu-item
|
||||||
|
name="cieng.menu.displays.tank"
|
||||||
|
label="Tank 1"
|
||||||
|
mnemonic="t"
|
||||||
|
tooltip="Tank 1 overview"
|
||||||
|
command="navigate to default CIENG_Tank fitDisplay"/>
|
||||||
|
<menu-separator/>
|
||||||
|
<menu-item
|
||||||
|
name="cieng.menu.displays.alarmCurrent"
|
||||||
|
label="Current alarms"
|
||||||
|
mnemonic="c"
|
||||||
|
tooltip="Current alarm list"
|
||||||
|
command="navigate to default AOG_AlarmCurrent"/>
|
||||||
|
<menu-item
|
||||||
|
name="cieng.menu.displays.alarmHistory"
|
||||||
|
label="Alarm history"
|
||||||
|
mnemonic="h"
|
||||||
|
tooltip="Historical alarm list"
|
||||||
|
command="navigate to default AOG_AlarmHistory"/>
|
||||||
|
<menu-item
|
||||||
|
name="cieng.menu.displays.trend"
|
||||||
|
label="Trend"
|
||||||
|
mnemonic="r"
|
||||||
|
tooltip="Trend display"
|
||||||
|
command="navigate to default AOG_TrendOpen"/>
|
||||||
|
</menu-item>
|
||||||
|
</menu>
|
||||||
|
<toolbar
|
||||||
|
name="cieng.toolbar"
|
||||||
|
label="CI-Eng-Sample"
|
||||||
|
floatable="false"
|
||||||
|
position="top">
|
||||||
|
<toolbar-item
|
||||||
|
name="cieng.toolbar.back"
|
||||||
|
icon="ciNavLeft32.png"
|
||||||
|
label=""
|
||||||
|
tooltip="Back to $"
|
||||||
|
command="navigate back default"/>
|
||||||
|
<toolbar-item
|
||||||
|
name="cieng.toolbar.forward"
|
||||||
|
icon="ciNavRight32.png"
|
||||||
|
label=""
|
||||||
|
tooltip="Forward to $"
|
||||||
|
command="navigate forward default"/>
|
||||||
|
<toolbar-item
|
||||||
|
name="cieng.toolbar.home"
|
||||||
|
icon="ciOverview32.png"
|
||||||
|
label=""
|
||||||
|
tooltip="Home to $"
|
||||||
|
command="navigate home default"/>
|
||||||
|
<toolbar-item
|
||||||
|
name="cieng.toolbar.history"
|
||||||
|
tooltip="History"
|
||||||
|
label="History"
|
||||||
|
type="editableCombo"
|
||||||
|
command="navigate history default"/>
|
||||||
|
<toolbar-separator/>
|
||||||
|
<toolbar-item
|
||||||
|
name="cieng.toolbar.alarmCurrent"
|
||||||
|
icon="ciProAlar32.png"
|
||||||
|
label=""
|
||||||
|
tooltip="Current alarm list"
|
||||||
|
command="navigate to default AOG_AlarmCurrent"/>
|
||||||
|
<toolbar-item
|
||||||
|
name="cieng.toolbar.zoomFit"
|
||||||
|
icon="ciZoomFull32.png"
|
||||||
|
label=""
|
||||||
|
tooltip="Fit display"
|
||||||
|
command="zoom 0 default"/>
|
||||||
|
</toolbar>
|
||||||
|
<frame-set
|
||||||
|
rows="1*,fitDisplay"
|
||||||
|
borderStyle="none">
|
||||||
|
<frame-set
|
||||||
|
cols="fitDisplay,1*"
|
||||||
|
borderStyle="none">
|
||||||
|
<frame
|
||||||
|
name="nav"
|
||||||
|
stackSize="1"
|
||||||
|
zoomingAllowed="false"
|
||||||
|
scrollingAllowed="false"
|
||||||
|
initialDisplay="CIENG_Menu"
|
||||||
|
borderStyle="none"/>
|
||||||
|
<frame
|
||||||
|
name="default"
|
||||||
|
stackSize="10"
|
||||||
|
zoomingAllowed="true"
|
||||||
|
scrollingAllowed="true"
|
||||||
|
initialDisplay="CIENG_Tank"
|
||||||
|
borderStyle="line"
|
||||||
|
zoom="fitDisplay"/>
|
||||||
|
</frame-set>
|
||||||
|
<frame
|
||||||
|
name="alarmBannerFrame"
|
||||||
|
zoomingAllowed="false"
|
||||||
|
initialDisplay="AOG_AlarmBanner"
|
||||||
|
borderStyle="none"
|
||||||
|
zoom="stretchDisplay"/>
|
||||||
|
</frame-set>
|
||||||
|
<status-line>
|
||||||
|
<status-line-item
|
||||||
|
type="statusText"/>
|
||||||
|
<status-line-separator/>
|
||||||
|
<status-line-item
|
||||||
|
type="displayName"/>
|
||||||
|
<status-line-separator/>
|
||||||
|
<status-line-item
|
||||||
|
type="userName"/>
|
||||||
|
<status-line-separator/>
|
||||||
|
<status-line-item
|
||||||
|
type="dateTime"/>
|
||||||
|
</status-line>
|
||||||
|
</layout>
|
||||||
|
<!-- CIENG-SAMPLE-END -->
|
||||||
34
examples/CI-Eng-Sample/layouts/layout.ps1
Normal file
34
examples/CI-Eng-Sample/layouts/layout.ps1
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
# Add or remove the CI-Eng-Sample layout block in Layouts.xml (CI Server R1.03.00).
|
||||||
|
# Usage: powershell -ExecutionPolicy Bypass -File layout.ps1 [-Remove]
|
||||||
|
# The block between <!-- CIENG-SAMPLE-BEGIN and <!-- CIENG-SAMPLE-END --> is inserted after
|
||||||
|
# the last layout (before the translations; an existing block is replaced). The first run
|
||||||
|
# saves Layouts-before-CIENG.xml next to Layouts.xml.
|
||||||
|
# No admin rights needed. Reopen the Operator Interface (or View > Reload All) afterwards.
|
||||||
|
param([switch]$Remove)
|
||||||
|
|
||||||
|
$wap = $env:TLS_WAP_PATH
|
||||||
|
if (-not $wap) { $wap = 'C:\Users\Public\Yokogawa\tls\wap' }
|
||||||
|
$file = Join-Path $wap 'cfg\operatorInterfaces\DEPLOY\layouts\Layouts.xml'
|
||||||
|
$backup = Join-Path $wap 'cfg\operatorInterfaces\DEPLOY\layouts\Layouts-before-CIENG.xml'
|
||||||
|
$block = Join-Path $PSScriptRoot 'CIENG_Operator.xml'
|
||||||
|
|
||||||
|
if (-not (Test-Path $file)) { throw "Not found: $file" }
|
||||||
|
if (-not (Test-Path $backup)) { Copy-Item -LiteralPath $file -Destination $backup }
|
||||||
|
|
||||||
|
$text = [IO.File]::ReadAllText($file)
|
||||||
|
$pattern = '(?s)[ \t]*<!-- CIENG-SAMPLE-BEGIN.*?<!-- CIENG-SAMPLE-END -->\r?\n?'
|
||||||
|
$text = [regex]::Replace($text, $pattern, '')
|
||||||
|
|
||||||
|
if (-not $Remove) {
|
||||||
|
$add = [IO.File]::ReadAllText($block) -replace '(?<!\r)\n', "`r`n"
|
||||||
|
# Insert after the last layout: before the first <translations, else before </layouts>.
|
||||||
|
$m = [regex]::Match($text, '(?m)^[ \t]*<translations\b')
|
||||||
|
if ($m.Success) { $end = $m.Index } else { $end = $text.LastIndexOf('</layouts>') }
|
||||||
|
if ($end -lt 0) { throw 'No </layouts> in Layouts.xml' }
|
||||||
|
$text = $text.Substring(0, $end) + $add + $text.Substring($end)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check that the result is still well-formed XML before writing it.
|
||||||
|
[xml]$null = $text
|
||||||
|
[IO.File]::WriteAllText($file, $text, (New-Object Text.UTF8Encoding($false)))
|
||||||
|
if ($Remove) { 'CIENG_Operator layout removed' } else { 'CIENG_Operator layout added' }
|
||||||
|
|
@ -60,4 +60,5 @@ 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-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-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-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 |
|
| 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 <frame>` / `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 |
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ status: display CIENG_Tank built by the user in the Edit Module (text, number fi
|
||||||
|
|
||||||
# Edit Module (R1.03)
|
# Edit Module (R1.03)
|
||||||
|
|
||||||
The Edit Module draws displays and symbols for the operator interface (CI View) and the HTML
|
The Edit Module draws displays and symbols for the Operator Interface (desktop) and the HTML
|
||||||
display. Displays are XML files (`IM36K10R30-01EN.md` §1). Section numbers refer to the manual.
|
display. Displays are XML files (`IM36K10R30-01EN.md` §1). Section numbers refer to the manual.
|
||||||
|
|
||||||
## 1. Window and files (§1)
|
## 1. Window and files (§1)
|
||||||
|
|
@ -71,6 +71,14 @@ writable properties: value, item name parts, id, units, description, status numb
|
||||||
control status, option bits), layers, attributes, edit history (undo/redo), **actions** (open /
|
control status, option bits), layers, attributes, edit history (undo/redo), **actions** (open /
|
||||||
close display, execute command, read/write parameters; triggered by component events).
|
close display, execute command, read/write parameters; triggered by component events).
|
||||||
|
|
||||||
|
Open-display action (verified): `<action type="actionActivateDisplay">` with
|
||||||
|
`<type type="displayActivationType" value="ActivateSpecific"/>` (factory files also use
|
||||||
|
`ActivateReplace`), `<display>`, optional `<layout>` (empty = current window) and `<layoutFrame>`,
|
||||||
|
plus `<parameter>` entries for display parameters. Layout commands from a component:
|
||||||
|
*Execute command* `ACTION <command>` (e.g. `ACTION navigate back default`). A trend property
|
||||||
|
connected by mistake (`chart.attribute[00]` -> item) makes the Operator Interface show
|
||||||
|
*Short attribute name ... is invalid* when the display opens; remove the connection.
|
||||||
|
|
||||||
## 5. Symbols (§5)
|
## 5. Symbols (§5)
|
||||||
|
|
||||||
*File > New Symbol*; put it on a palette (attributes sheet); external user-defined parameters
|
*File > New Symbol*; put it on a palette (attributes sheet); external user-defined parameters
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ manual: IM 36K10R30-01EN
|
||||||
title: Graphic Display Setup
|
title: Graphic Display Setup
|
||||||
edition: 3rd Edition, Sep. 2023
|
edition: 3rd Edition, Sep. 2023
|
||||||
version: R1.03
|
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
|
status: HTML display (Mobile Operator) and a project layout (CIENG_Operator) verified in the Operator Interface (desktop) and the HTML display 2026-10-01; dataset forms, form language and dual screen from docs
|
||||||
---
|
---
|
||||||
|
|
||||||
# Graphic Display Setup (R1.03)
|
# Graphic Display Setup (R1.03)
|
||||||
|
|
@ -41,6 +41,10 @@ empty = `deploy`).
|
||||||
*Layout* field (Engineering Module, Authorization > Users); empty = `default`.
|
*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
|
- 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.
|
each banner open its main display in its own layout.
|
||||||
|
- **Verified (2026-10-01)**: sample layout `CIENG_Operator` (skill `graphics`, task `layouts.md`):
|
||||||
|
second window from an *Open display* action, own menu/toolbar/frames, `$default` title, popup
|
||||||
|
layout, F11; the Operator Interface reads `Layouts.xml` only at start. The installed
|
||||||
|
`Layouts.readme` is the full reference for options and commands.
|
||||||
- **Installed layouts**: `mobile`, `default`, `sxga1f/r`, `uxga1f/r`, `wxga1f/r`, `wsxga1f/r`,
|
- **Installed layouts**: `mobile`, `default`, `sxga1f/r`, `uxga1f/r`, `wxga1f/r`, `wsxga1f/r`,
|
||||||
`wsxgap1f/r`, `wuxga1f/r`, `ResizablePopup`, `FixedPopup`, `popup`, `Splash`, `tuningpanel`,
|
`wsxgap1f/r`, `wuxga1f/r`, `ResizablePopup`, `FixedPopup`, `popup`, `Splash`, `tuningpanel`,
|
||||||
`faceplate`, `SelectMode`, `Setpoint`, `mapviewer` (`f` fixed / `r` resizable per screen
|
`faceplate`, `SelectMode`, `Setpoint`, `mapviewer` (`f` fixed / `r` resizable per screen
|
||||||
|
|
@ -69,7 +73,7 @@ property files and language codes (§3.5).
|
||||||
`https://<host>:8443/auth/mbl`); user profile fields used: password, authorization group, ASA,
|
`https://<host>:8443/auth/mbl`); user profile fields used: password, authorization group, ASA,
|
||||||
shelving group, process areas, logoff timeout, deployment, initial display, locale (layout
|
shelving group, process areas, logoff timeout, deployment, initial display, locale (layout
|
||||||
not). Login control: `dssana.sup` interface *mobile operator*.
|
not). Login control: `dssana.sup` interface *mobile operator*.
|
||||||
- **Verified**: `http://localhost:8080/mobileoperator/?d=CIENG_Tank` showed the CI View-like
|
- **Verified**: `http://localhost:8080/mobileoperator/?d=CIENG_Tank` showed the operator
|
||||||
frame (menu, navigation buttons, alarm banner, status line) and the display; the number field
|
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
|
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
|
the session** (login again); use the display's own menu *View > Reload* instead (keeps the
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ 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)) |
|
| 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 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)) |
|
| 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 | done for HTML display and folders; layouts, dataset forms, form language from docs ([notes](manuals/IM36K10R30-01EN.md)); skill `graphics` |
|
| 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 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)) |
|
| 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 36K10L50 | Data Set Service Engineering | not started |
|
||||||
|
|
@ -132,4 +132,6 @@ now come before classes and objects (phase 6), and the other interfaces follow a
|
||||||
| 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. |
|
| 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 | 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). |
|
| 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. |
|
| 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<pid>` 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. |
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue