Add operator layout CIENG_Operator and navigation display CIENG_Menu to CI-Eng-Sample
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
a3b1487c33
commit
e62d83b024
7 changed files with 536 additions and 198 deletions
|
|
@ -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' }
|
||||||
Loading…
Add table
Reference in a new issue