Sample: CIENG_* operator HMI displays, generator and CIENG_Operator / CIENG_Popup layouts
- displays/CIENG_{Header,Overview,Control,Trends,Alarms,System,AlarmBanner,TankFaceplate}.xml:
dark dashboard in HTML mode (desktop + web), generated by displays/generator/build.py
(cixml.py component library; README.md describes the tool and the R1.03 rules it follows)
- layouts/CIENG_Operator.xml now holds CIENG_Operator (menu, navigation toolbar, header frame,
5-tab set, alarm banner, status line; navigate commands with stretchDisplay) and CIENG_Popup
(faceplate); layout.ps1 message updated
- deploy_displays.cmd / remove_displays.cmd for the 8 new displays
- Live-data Start runs C:\Users\Public\CI-Eng-Sample\feed\cieng_feed_start.cmd on the server
- Tested on CI Server R1.03.00 2026-10-06 (ADMIN with ?l=CIENG_Operator / jwuipoi -layout):
web layout, tabs, popup, faceplate navigation, combo write, server-side Start as CIX_PROCESS;
desktop layout, stretched tabs, Start/Stop
- Old CIENG_Tank / CIENG_Menu / CIENG_TrendLab still present (removed in the next stage)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
d299bdf312
commit
c9d2ead5d9
16 changed files with 1604 additions and 168 deletions
38
examples/CI-Eng-Sample/displays/CIENG_AlarmBanner.xml
Normal file
38
examples/CI-Eng-Sample/displays/CIENG_AlarmBanner.xml
Normal file
File diff suppressed because one or more lines are too long
39
examples/CI-Eng-Sample/displays/CIENG_Alarms.xml
Normal file
39
examples/CI-Eng-Sample/displays/CIENG_Alarms.xml
Normal file
File diff suppressed because one or more lines are too long
96
examples/CI-Eng-Sample/displays/CIENG_Control.xml
Normal file
96
examples/CI-Eng-Sample/displays/CIENG_Control.xml
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
<?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"/>
|
||||
<title>Process control</title>
|
||||
<html>true</html>
|
||||
<width>1880</width>
|
||||
<height>760</height>
|
||||
<referenceCheck>72</referenceCheck>
|
||||
<backgroundColor type="colorSet" r="13" g="17" b="23"/>
|
||||
<backgroundColorOn>true</backgroundColorOn>
|
||||
<defaultBgColor type="colorSet" r="13" g="17" b="23"/>
|
||||
<defaultFgColor type="colorSet" r="230" g="237" b="243"/>
|
||||
<defaultFont type="font" name="Segoe UI" size="12" underline="false" strikethrough="false"/>
|
||||
<defaultStroke type="stroke" width="1.0"/>
|
||||
<grid type="grid" gridVisible="true" snappingActive="true" verticalSnapInterval="4" horizontalSnapInterval="4" onTop="false"><color type="colorSet" r="51" g="59" b="71"/></grid>
|
||||
<revisionHistory type="revisionHistory"><revision type="revision" who="ADMIN" when="2026.10.02 12:00:00.000 AEST" what="Generated by displays/generator/build.py" where="localhost"/></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>66</componentCountHint>
|
||||
<rectangle type="componentData"><htmlId>7</htmlId><x>940.0</x><y>380.0</y><top>380.0</top><bottom>380.0</bottom><left>940.0</left><right>940.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="13" g="17" b="23"/></fillPaint></rectangle>
|
||||
<rectangle type="componentData"><htmlId>8</htmlId><roundingX>0.0216</roundingX><roundingY>0.0551</roundingY><x>472.5</x><y>192.8</y><top>181.6</top><bottom>181.6</bottom><left>462.5</left><right>462.5</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></strokePaint><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="28" g="35" b="45"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>9</htmlId><value>SETPOINT -> PLC1 (MODBUS LOOPBACK)</value><font type="font" name="Segoe UI" bold="true" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>134.8</x><y>36.9</y><top>11.0</top><bottom>11.0</bottom><left>104.8</left><right>104.8</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>10</htmlId><value>Slider, spinner and input field write PLC1.SETPOINT; READBACK returns through Modbus</value><font type="font" name="Segoe UI" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="88" g="100" b="116"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>218.2</x><y>59.2</y><top>9.0</top><bottom>9.0</bottom><left>188.2</left><right>188.2</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<slider type="componentData" x="340.0" y="114.0" top="32.0" bottom="32.0" left="300.0" right="300.0" rotation="0.0" shear="0.0"><htmlId>11</htmlId><maximum>100.0</maximum><minimum>0.0</minimum><value>0.0</value><majorTickSpacing>10.0</majorTickSpacing><minorTickSpacing>5.0</minorTickSpacing><paintLabels>true</paintLabels><paintTicks>true</paintTicks><trackDrag>false</trackDrag><font type="font" name="Segoe UI" size="10" underline="false" strikethrough="false"/><opaque>false</opaque><foregroundColor type="colorSet" r="139" g="152" b="168"/><data type="data"><action type="actionConnectTo"><property type="property" name="slider.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><itemName>CI-Eng-Sample.PLC1.SETPOINT</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></slider>
|
||||
<text type="componentData"><htmlId>12</htmlId><value>SPINNER</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>61.0</x><y>176.6</y><top>8.0</top><bottom>8.0</bottom><left>21.0</left><right>21.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<spinner type="componentData" x="110.0" y="210.1" top="18.0" bottom="18.0" left="70.0" right="70.0" rotation="0.0" shear="0.0"><htmlId>13</htmlId><editable>true</editable><step>5.0</step><minimum>0.0</minimum><maximum>100.0</maximum><font type="font" name="Consolas" bold="true" size="14" underline="false" strikethrough="false"/><foregroundColor type="colorSet" r="230" g="237" b="243"/><backgroundColor type="colorSet" r="36" g="45" b="57"/><zoomEnabled>false</zoomEnabled><data type="data"><action type="actionConnectTo"><property type="property" name="spinner.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><itemName>CI-Eng-Sample.PLC1.SETPOINT</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></spinner>
|
||||
<text type="componentData"><htmlId>14</htmlId><value>INPUT FIELD</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>228.3</x><y>176.6</y><top>8.0</top><bottom>8.0</bottom><left>28.3</left><right>28.3</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<numberField type="componentData" x="270.0" y="210.1" top="18.0" bottom="18.0" left="70.0" right="70.0" rotation="0.0" shear="0.0"><htmlId>15</htmlId><font type="font" name="Consolas" bold="true" size="16" underline="false" strikethrough="false"/><format>999</format><editable>true</editable><foregroundColor type="colorSet" r="230" g="237" b="243"/><backgroundColor type="colorSet" r="36" g="45" b="57"/><justification type="jTextJustification" value="TextJustificationRight"/><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.PLC1.SETPOINT</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></numberField>
|
||||
<text type="componentData"><htmlId>16</htmlId><value>SETPOINT</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>383.4</x><y>176.6</y><top>8.0</top><bottom>8.0</bottom><left>23.4</left><right>23.4</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<number type="componentData"><htmlId>17</htmlId><value>0.0</value><format>999</format><font type="font" name="Consolas" bold="true" size="28" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="59" g="130" b="246"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>381.9</x><y>210.1</y><top>20.0</top><bottom>20.0</bottom><left>21.9</left><right>21.9</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PLC1.SETPOINT</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<text type="componentData"><htmlId>18</htmlId><value>READBACK (data bar + scale)</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>105.8</x><y>261.5</y><top>8.0</top><bottom>8.0</bottom><left>65.8</left><right>65.8</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<dataBar type="componentData" x="340.0" y="287.2" top="9.0" bottom="9.0" left="300.0" right="300.0" rotation="0.0" shear="0.0"><htmlId>19</htmlId><fillOn>true</fillOn><background type="paint"><paint type="colorSet" r="40" g="50" b="64"/></background><foreground type="paint"><paint type="colorSet" r="59" g="130" b="246"/></foreground><borderColor type="paint"><paint type="colorSet" r="40" g="50" b="64"/></borderColor><foregroundBorderColor type="paint"><paint type="colorSet" r="59" g="130" b="246"/></foregroundBorderColor><lowLimit>0.0</lowLimit><highLimit>100.0</highLimit><growthDirection type="growthDirection" value="GrowthDirectionRight"/><data type="data"><action type="actionConnectTo"><property type="property" name="dataBar.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PLC1.READBACK</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></dataBar>
|
||||
<rectangularScale type="componentData" x="340.0" y="319.6" top="18.0" bottom="18.0" left="300.0" right="300.0" rotation="0.0" shear="0.0"><htmlId>20</htmlId><maximum>100.0</maximum><minimum>0.0</minimum><majorTickSpacing>10.0</majorTickSpacing><minorTickSpacing>5.0</minorTickSpacing><format>999</format><vertical>false</vertical><color type="colorSet" r="139" g="152" b="168"/><font type="font" name="Segoe UI" size="10" underline="false" strikethrough="false"/></rectangularScale>
|
||||
<arc type="componentData"><htmlId>21</htmlId><startAngle>45.0</startAngle><extentAngle>270.0</extentAngle><closed>false</closed><x>790.0</x><y>195.6</y><top>95.0</top><bottom>95.0</bottom><left>95.0</left><right>95.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="12.0" endCap="butt"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="40" g="50" b="64"/></strokePaint><fillOn>false</fillOn></arc>
|
||||
<arc type="componentData"><htmlId>22</htmlId><startAngle>179.8</startAngle><extentAngle>0.5</extentAngle><closed>false</closed><x>790.0</x><y>195.6</y><top>95.0</top><bottom>95.0</bottom><left>95.0</left><right>95.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="12.0" endCap="butt"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="59" g="130" b="246"/></strokePaint><fillOn>false</fillOn><data type="data"><action type="actionConnectTo"><property type="property" name="arc.extentAngle"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationLinear"><inputType>java.lang.Double</inputType><outputType>java.lang.Double</outputType><inputValueStart>0.0</inputValueStart><inputValueEnd>100.0</inputValueEnd><outputValueStart>0.5</outputValueStart><outputValueEnd>270.0</outputValueEnd></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PLC1.READBACK</itemName><itemAttribute>ItemValue</itemAttribute></connection></action><action type="actionConnectTo"><property type="property" name="arc.startAngle"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationLinear"><inputType>java.lang.Double</inputType><outputType>java.lang.Double</outputType><inputValueStart>0.0</inputValueStart><inputValueEnd>100.0</inputValueEnd><outputValueStart>179.75</outputValueStart><outputValueEnd>45.0</outputValueEnd></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PLC1.READBACK</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></arc>
|
||||
<number type="componentData"><htmlId>23</htmlId><value>0.0</value><format>999</format><font type="font" name="Consolas" bold="true" size="26" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>790.0</x><y>191.1</y><top>18.0</top><bottom>18.0</bottom><left>81.0</left><right>81.0</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PLC1.READBACK</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<text type="componentData"><htmlId>24</htmlId><value></value><font type="font" name="Segoe UI" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>790.0</x><y>223.5</y><top>9.0</top><bottom>9.0</bottom><left>40.0</left><right>40.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>25</htmlId><value>Readback</value><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>790.0</x><y>306.2</y><top>10.0</top><bottom>10.0</bottom><left>95.0</left><right>95.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<ellipse type="componentData"><htmlId>26</htmlId><x>706.0</x><y>40.2</y><top>6.0</top><bottom>6.0</bottom><left>6.0</left><right>6.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="239" g="68" b="68"/></fillPaint><data type="data"><action type="actionConnectTo"><property type="property" name="ellipse.fillPaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Boolean</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>false</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut><thresholdIn>true</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="34" g="197" b="94"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PLC1.COMM_OK</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></ellipse>
|
||||
<text type="componentData"><htmlId>27</htmlId><value>station CIENG_PLC</value><font type="font" name="Segoe UI" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>762.9</x><y>39.1</y><top>9.0</top><bottom>9.0</bottom><left>44.9</left><right>44.9</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<rectangle type="componentData"><htmlId>28</htmlId><roundingX>0.0216</roundingX><roundingY>0.0551</roundingY><x>1407.5</x><y>192.8</y><top>181.6</top><bottom>181.6</bottom><left>462.5</left><right>462.5</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></strokePaint><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="28" g="35" b="45"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>29</htmlId><value>DIGITAL COMMAND -> PLC1.CMD</value><font type="font" name="Segoe UI" bold="true" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1052.8</x><y>36.9</y><top>11.0</top><bottom>11.0</bottom><left>87.8</left><right>87.8</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>30</htmlId><value>Toggle and push buttons write the coil; FEEDBACK is read back from the input bit</value><font type="font" name="Segoe UI" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="88" g="100" b="116"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1139.0</x><y>59.2</y><top>9.0</top><bottom>9.0</bottom><left>174.0</left><right>174.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<toggleButton type="componentData" x="1075.0" y="116.2" top="24.0" bottom="24.0" left="100.0" right="100.0" rotation="0.0" shear="0.0"><htmlId>31</htmlId><label>CMD (toggle)</label><font type="font" name="Segoe UI" bold="true" size="14" underline="false" strikethrough="false"/><foregroundColor type="colorSet" r="230" g="237" b="243"/><backgroundColor type="colorSet" r="36" g="45" b="57"/><data type="data"><action type="actionConnectTo"><property type="property" name="toggleButton.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><itemName>CI-Eng-Sample.PLC1.CMD</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></toggleButton>
|
||||
<button type="componentData" x="1022.5" y="190.0" top="20.0" bottom="20.0" left="47.5" right="47.5" rotation="0.0" shear="0.0"><htmlId>32</htmlId><label>Set ON</label><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><foregroundColor type="colorSet" r="255" g="255" b="255"/><backgroundColor type="colorSet" r="34" g="197" b="94"/><data type="data"><action type="actionSetItemAttribute"><event type="event" event="On action"/><filter type="filter"><value>1.0</value></filter><connection type="connection"><direction>2</direction><location type="nodeName" node="$default$"/><itemName>CI-Eng-Sample.PLC1.CMD</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></button>
|
||||
<button type="componentData" x="1127.5" y="190.0" top="20.0" bottom="20.0" left="47.5" right="47.5" rotation="0.0" shear="0.0"><htmlId>33</htmlId><label>Set OFF</label><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><foregroundColor type="colorSet" r="230" g="237" b="243"/><backgroundColor type="colorSet" r="36" g="45" b="57"/><data type="data"><action type="actionSetItemAttribute"><event type="event" event="On action"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>2</direction><location type="nodeName" node="$default$"/><itemName>CI-Eng-Sample.PLC1.CMD</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></button>
|
||||
<ellipse type="componentData"><htmlId>34</htmlId><x>1360.0</x><y>156.5</y><top>60.0</top><bottom>60.0</bottom><left>60.0</left><right>60.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="3.0"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></strokePaint><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="71" g="85" b="105"/></fillPaint><data type="data"><action type="actionConnectTo"><property type="property" name="ellipse.fillPaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Boolean</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>false</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="71" g="85" b="105"/></thresholdOut><thresholdIn>true</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="34" g="197" b="94"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PLC1.FEEDBACK</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></ellipse>
|
||||
<text type="componentData"><htmlId>35</htmlId><value>FEEDBACK</value><font type="font" name="Segoe UI" bold="true" size="13" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="255" g="255" b="255"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1360.0</x><y>156.5</y><top>12.0</top><bottom>12.0</bottom><left>60.0</left><right>60.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>36</htmlId><value>LAST CHANGE OF FEEDBACK</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1525.3</x><y>109.5</y><top>8.0</top><bottom>8.0</bottom><left>65.3</left><right>65.3</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<dateTimeField type="componentData" x="1610.0" y="141.9" top="15.0" bottom="15.0" left="150.0" right="150.0" rotation="0.0" shear="0.0"><htmlId>37</htmlId><font type="font" name="Segoe UI" size="13" underline="false" strikethrough="false"/><foregroundColor type="colorSet" r="230" g="237" b="243"/><editable>true</editable><secondsVisible>true</secondsVisible><backgroundColor type="colorSet" r="36" g="45" b="57"/><data type="data"><action type="actionConnectTo"><property type="property" name="dateTimeField.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PLC1.FEEDBACK</itemName><itemAttribute>ItemUpdTime</itemAttribute></connection></action></data></dateTimeField>
|
||||
<text type="componentData"><htmlId>38</htmlId><value>STATUS</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1478.5</x><y>187.8</y><top>8.0</top><bottom>8.0</bottom><left>18.5</left><right>18.5</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>39</htmlId><value>NORMAL</value><font type="font" name="Segoe UI" bold="true" size="16" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1493.6</x><y>214.6</y><top>12.0</top><bottom>12.0</bottom><left>33.6</left><right>33.6</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="text.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PLC1.FEEDBACK</itemName><itemAttribute>ItemStatusMnemonic</itemAttribute></connection></action></data></text>
|
||||
<rectangle type="componentData"><htmlId>40</htmlId><roundingX>0.0216</roundingX><roundingY>0.0551</roundingY><x>472.5</x><y>567.2</y><top>181.6</top><bottom>181.6</bottom><left>462.5</left><right>462.5</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></strokePaint><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="28" g="35" b="45"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>41</htmlId><value>PUMP 1</value><font type="font" name="Segoe UI" bold="true" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>50.5</x><y>411.3</y><top>11.0</top><bottom>11.0</bottom><left>20.5</left><right>20.5</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>42</htmlId><value>Combo box, buttons and check box write PUMP1.MODE / PUMP1.RUNNING (mode changes are audited)</value><font type="font" name="Segoe UI" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="88" g="100" b="116"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>257.7</x><y>433.6</y><top>9.0</top><bottom>9.0</bottom><left>227.7</left><right>227.7</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>43</htmlId><value>MODE (COMBO BOX)</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>90.2</x><y>456.0</y><top>8.0</top><bottom>8.0</bottom><left>50.2</left><right>50.2</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<comboBox type="componentData" x="140.0" y="488.4" top="17.0" bottom="17.0" left="100.0" right="100.0" rotation="0.0" shear="0.0"><htmlId>44</htmlId><label>0;Manual;1;Auto</label><font type="font" name="Segoe UI" size="14" underline="false" strikethrough="false"/><foregroundColor type="colorSet" r="230" g="237" b="243"/><data type="data"><action type="actionConnectTo"><property type="property" name="comboBox.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><itemName>CI-Eng-Sample.PUMP1.MODE</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></comboBox>
|
||||
<button type="componentData" x="315.0" y="488.4" top="17.0" bottom="17.0" left="55.0" right="55.0" rotation="0.0" shear="0.0"><htmlId>45</htmlId><label>Manual</label><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><foregroundColor type="colorSet" r="230" g="237" b="243"/><backgroundColor type="colorSet" r="36" g="45" b="57"/><data type="data"><action type="actionSetItemAttribute"><event type="event" event="On action"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>2</direction><location type="nodeName" node="$default$"/><itemName>CI-Eng-Sample.PUMP1.MODE</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></button>
|
||||
<button type="componentData" x="435.0" y="488.4" top="17.0" bottom="17.0" left="55.0" right="55.0" rotation="0.0" shear="0.0"><htmlId>46</htmlId><label>Auto</label><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><foregroundColor type="colorSet" r="255" g="255" b="255"/><backgroundColor type="colorSet" r="59" g="130" b="246"/><data type="data"><action type="actionSetItemAttribute"><event type="event" event="On action"/><filter type="filter"><value>1.0</value></filter><connection type="connection"><direction>2</direction><location type="nodeName" node="$default$"/><itemName>CI-Eng-Sample.PUMP1.MODE</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></button>
|
||||
<text type="componentData"><htmlId>47</htmlId><value>RUN COMMAND (CHECK BOX, MANUAL MODE)</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>152.1</x><y>543.2</y><top>8.0</top><bottom>8.0</bottom><left>112.1</left><right>112.1</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<checkBox type="componentData" x="160.0" y="574.5" top="16.0" bottom="16.0" left="120.0" right="120.0" rotation="0.0" shear="0.0"><htmlId>48</htmlId><label>Pump running</label><font type="font" name="Segoe UI" size="14" underline="false" strikethrough="false"/><opaque>false</opaque><foregroundColor type="colorSet" r="230" g="237" b="243"/><backgroundColor type="colorSet" r="28" g="35" b="45"/><data type="data"><action type="actionConnectTo"><property type="property" name="checkBox.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><itemName>CI-Eng-Sample.PUMP1.RUNNING</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></checkBox>
|
||||
<text type="componentData"><htmlId>49</htmlId><value>DESCRIPTION (TEXT FIELD)</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>102.4</x><y>625.9</y><top>8.0</top><bottom>8.0</bottom><left>62.4</left><right>62.4</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<textField type="componentData" x="265.0" y="656.1" top="15.0" bottom="15.0" left="225.0" right="225.0" rotation="0.0" shear="0.0"><htmlId>50</htmlId><font type="font" name="Segoe UI" size="13" underline="false" strikethrough="false"/><editable>false</editable><foregroundColor type="colorSet" r="230" g="237" b="243"/><backgroundColor type="colorSet" r="36" g="45" b="57"/><data type="data"><action type="actionConnectTo"><property type="property" name="textField.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PUMP1.MODE</itemName><itemAttribute>ItemDesc</itemAttribute></connection></action></data></textField>
|
||||
<ellipse type="componentData"><htmlId>51</htmlId><x>655.0</x><y>530.9</y><top>55.0</top><bottom>55.0</bottom><left>55.0</left><right>55.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="3.0"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></strokePaint><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="71" g="85" b="105"/></fillPaint><data type="data"><action type="actionConnectTo"><property type="property" name="ellipse.fillPaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Boolean</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>false</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="71" g="85" b="105"/></thresholdOut><thresholdIn>true</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="34" g="197" b="94"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PUMP1.RUNNING</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></ellipse>
|
||||
<text type="componentData"><htmlId>52</htmlId><value>P1</value><font type="font" name="Segoe UI" bold="true" size="18" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="255" g="255" b="255"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>655.0</x><y>529.8</y><top>12.0</top><bottom>12.0</bottom><left>55.0</left><right>55.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>53</htmlId><value>RUN TIME (INTEGRATOR)</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>670.0</x><y>621.4</y><top>8.0</top><bottom>8.0</bottom><left>110.0</left><right>110.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<number type="componentData"><htmlId>54</htmlId><value>0.0</value><format>9999999</format><font type="font" name="Consolas" bold="true" size="24" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>705.6</x><y>651.6</y><top>17.0</top><bottom>17.0</bottom><left>44.4</left><right>44.4</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PUMP1.RUNNING.RUN_SECONDS</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<text type="componentData"><htmlId>55</htmlId><value>s</value><font type="font" name="Segoe UI" size="12" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>756.4</x><y>653.8</y><top>9.0</top><bottom>9.0</bottom><left>2.4</left><right>2.4</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<rectangle type="componentData"><htmlId>56</htmlId><roundingX>0.0216</roundingX><roundingY>0.0551</roundingY><x>1407.5</x><y>567.2</y><top>181.6</top><bottom>181.6</bottom><left>462.5</left><right>462.5</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></strokePaint><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="28" g="35" b="45"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>57</htmlId><value>TANK 1 - ALARM TEST</value><font type="font" name="Segoe UI" bold="true" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1021.5</x><y>411.3</y><top>11.0</top><bottom>11.0</bottom><left>56.5</left><right>56.5</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>58</htmlId><value>Stop live data first, then drive TANK1.LEVEL across its limits (H 80 / HH 90 / L 20 / LL 10)</value><font type="font" name="Segoe UI" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="88" g="100" b="116"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1150.2</x><y>433.6</y><top>9.0</top><bottom>9.0</bottom><left>185.2</left><right>185.2</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<slider type="componentData" x="1255.0" y="494.0" top="32.0" bottom="32.0" left="280.0" right="280.0" rotation="0.0" shear="0.0"><htmlId>59</htmlId><maximum>100.0</maximum><minimum>0.0</minimum><value>0.0</value><majorTickSpacing>10.0</majorTickSpacing><minorTickSpacing>5.0</minorTickSpacing><paintLabels>true</paintLabels><paintTicks>true</paintTicks><trackDrag>false</trackDrag><font type="font" name="Segoe UI" size="10" underline="false" strikethrough="false"/><opaque>false</opaque><foregroundColor type="colorSet" r="139" g="152" b="168"/><data type="data"><action type="actionConnectTo"><property type="property" name="slider.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></slider>
|
||||
<button type="componentData" x="1028.0" y="580.1" top="19.0" bottom="19.0" left="53.0" right="53.0" rotation="0.0" shear="0.0"><htmlId>60</htmlId><label>Low-Low 5</label><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><foregroundColor type="colorSet" r="255" g="255" b="255"/><backgroundColor type="colorSet" r="239" g="68" b="68"/><data type="data"><action type="actionSetItemAttribute"><event type="event" event="On action"/><filter type="filter"><value>5.0</value></filter><connection type="connection"><direction>2</direction><location type="nodeName" node="$default$"/><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></button>
|
||||
<button type="componentData" x="1142.0" y="580.1" top="19.0" bottom="19.0" left="53.0" right="53.0" rotation="0.0" shear="0.0"><htmlId>61</htmlId><label>Low 15</label><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><foregroundColor type="colorSet" r="255" g="255" b="255"/><backgroundColor type="colorSet" r="245" g="158" b="11"/><data type="data"><action type="actionSetItemAttribute"><event type="event" event="On action"/><filter type="filter"><value>15.0</value></filter><connection type="connection"><direction>2</direction><location type="nodeName" node="$default$"/><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></button>
|
||||
<button type="componentData" x="1256.0" y="580.1" top="19.0" bottom="19.0" left="53.0" right="53.0" rotation="0.0" shear="0.0"><htmlId>62</htmlId><label>Normal 50</label><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><foregroundColor type="colorSet" r="255" g="255" b="255"/><backgroundColor type="colorSet" r="20" g="184" b="166"/><data type="data"><action type="actionSetItemAttribute"><event type="event" event="On action"/><filter type="filter"><value>50.0</value></filter><connection type="connection"><direction>2</direction><location type="nodeName" node="$default$"/><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></button>
|
||||
<button type="componentData" x="1370.0" y="580.1" top="19.0" bottom="19.0" left="53.0" right="53.0" rotation="0.0" shear="0.0"><htmlId>63</htmlId><label>High 85</label><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><foregroundColor type="colorSet" r="255" g="255" b="255"/><backgroundColor type="colorSet" r="245" g="158" b="11"/><data type="data"><action type="actionSetItemAttribute"><event type="event" event="On action"/><filter type="filter"><value>85.0</value></filter><connection type="connection"><direction>2</direction><location type="nodeName" node="$default$"/><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></button>
|
||||
<button type="componentData" x="1484.0" y="580.1" top="19.0" bottom="19.0" left="53.0" right="53.0" rotation="0.0" shear="0.0"><htmlId>64</htmlId><label>High-High 95</label><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><foregroundColor type="colorSet" r="255" g="255" b="255"/><backgroundColor type="colorSet" r="239" g="68" b="68"/><data type="data"><action type="actionSetItemAttribute"><event type="event" event="On action"/><filter type="filter"><value>95.0</value></filter><connection type="connection"><direction>2</direction><location type="nodeName" node="$default$"/><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></button>
|
||||
<text type="componentData"><htmlId>65</htmlId><value>LEVEL</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>988.2</x><y>641.5</y><top>8.0</top><bottom>8.0</bottom><left>13.2</left><right>13.2</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<number type="componentData"><htmlId>66</htmlId><value>0.0</value><format>999.9</format><font type="font" name="Consolas" bold="true" size="38" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1026.2</x><y>680.6</y><top>25.0</top><bottom>25.0</bottom><left>51.2</left><right>51.2</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action><action type="actionConnectTo"><property type="property" name="number.fillPaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Double</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>0.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut><thresholdIn>10.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="245" g="158" b="11"/></thresholdOut><thresholdIn>20.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="20" g="184" b="166"/></thresholdOut><thresholdIn>80.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="245" g="158" b="11"/></thresholdOut><thresholdIn>90.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<text type="componentData"><htmlId>67</htmlId><value>ITEM STATUS</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1211.7</x><y>641.5</y><top>8.0</top><bottom>8.0</bottom><left>31.7</left><right>31.7</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>68</htmlId><value>NORMAL</value><font type="font" name="Segoe UI" bold="true" size="22" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1226.3</x><y>678.4</y><top>17.0</top><bottom>17.0</bottom><left>46.3</left><right>46.3</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="text.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemStatusMnemonic</itemAttribute></connection></action><action type="actionConnectTo"><property type="property" name="text.fillPaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Double</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>0.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut><thresholdIn>10.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="245" g="158" b="11"/></thresholdOut><thresholdIn>20.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="20" g="184" b="166"/></thresholdOut><thresholdIn>80.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="245" g="158" b="11"/></thresholdOut><thresholdIn>90.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></text>
|
||||
<arc type="componentData"><htmlId>69</htmlId><startAngle>45.0</startAngle><extentAngle>270.0</extentAngle><closed>false</closed><x>1720.0</x><y>581.2</y><top>90.0</top><bottom>90.0</bottom><left>90.0</left><right>90.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="14.0" endCap="butt"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="40" g="50" b="64"/></strokePaint><fillOn>false</fillOn></arc>
|
||||
<arc type="componentData"><htmlId>70</htmlId><startAngle>179.8</startAngle><extentAngle>0.5</extentAngle><closed>false</closed><x>1720.0</x><y>581.2</y><top>90.0</top><bottom>90.0</bottom><left>90.0</left><right>90.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="14.0" endCap="butt"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="20" g="184" b="166"/></strokePaint><fillOn>false</fillOn><data type="data"><action type="actionConnectTo"><property type="property" name="arc.extentAngle"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationLinear"><inputType>java.lang.Double</inputType><outputType>java.lang.Double</outputType><inputValueStart>0.0</inputValueStart><inputValueEnd>100.0</inputValueEnd><outputValueStart>0.5</outputValueStart><outputValueEnd>270.0</outputValueEnd></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action><action type="actionConnectTo"><property type="property" name="arc.startAngle"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationLinear"><inputType>java.lang.Double</inputType><outputType>java.lang.Double</outputType><inputValueStart>0.0</inputValueStart><inputValueEnd>100.0</inputValueEnd><outputValueStart>179.75</outputValueStart><outputValueEnd>45.0</outputValueEnd></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action><action type="actionConnectTo"><property type="property" name="arc.strokePaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Double</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>0.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut><thresholdIn>10.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="245" g="158" b="11"/></thresholdOut><thresholdIn>20.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="20" g="184" b="166"/></thresholdOut><thresholdIn>80.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="245" g="158" b="11"/></thresholdOut><thresholdIn>90.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></arc>
|
||||
<circularScale type="componentData" x="1720.0" y="581.2" top="120.0" bottom="120.0" left="120.0" right="120.0" rotation="0.0" shear="0.0"><htmlId>71</htmlId><maximum>100.0</maximum><minimum>0.0</minimum><majorTickSpacing>20.0</majorTickSpacing><minorTickSpacing>5.0</minorTickSpacing><format>999</format><startAngle>225.0</startAngle><extentAngle>-270.0</extentAngle><color type="colorSet" r="139" g="152" b="168"/><font type="font" name="Segoe UI" size="9" underline="false" strikethrough="false"/></circularScale>
|
||||
<number type="componentData"><htmlId>72</htmlId><value>0.0</value><format>999.9</format><font type="font" name="Consolas" bold="true" size="26" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1720.0</x><y>581.2</y><top>20.0</top><bottom>20.0</bottom><left>60.0</left><right>60.0</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
</coreObjectDefinition>
|
||||
</visualization>
|
||||
67
examples/CI-Eng-Sample/displays/CIENG_Header.xml
Normal file
67
examples/CI-Eng-Sample/displays/CIENG_Header.xml
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
<?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"/>
|
||||
<title>Header</title>
|
||||
<html>true</html>
|
||||
<width>1920</width>
|
||||
<height>96</height>
|
||||
<referenceCheck>43</referenceCheck>
|
||||
<backgroundColor type="colorSet" r="22" g="27" b="34"/>
|
||||
<backgroundColorOn>true</backgroundColorOn>
|
||||
<defaultBgColor type="colorSet" r="22" g="27" b="34"/>
|
||||
<defaultFgColor type="colorSet" r="230" g="237" b="243"/>
|
||||
<defaultFont type="font" name="Segoe UI" size="12" underline="false" strikethrough="false"/>
|
||||
<defaultStroke type="stroke" width="1.0"/>
|
||||
<grid type="grid" gridVisible="true" snappingActive="true" verticalSnapInterval="4" horizontalSnapInterval="4" onTop="false"><color type="colorSet" r="51" g="59" b="71"/></grid>
|
||||
<revisionHistory type="revisionHistory"><revision type="revision" who="ADMIN" when="2026.10.02 12:00:00.000 AEST" what="Generated by displays/generator/build.py" where="localhost"/></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>37</componentCountHint>
|
||||
<rectangle type="componentData"><htmlId>7</htmlId><x>960.0</x><y>48.0</y><top>48.0</top><bottom>48.0</bottom><left>960.0</left><right>960.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="22" g="27" b="34"/></fillPaint></rectangle>
|
||||
<rectangle type="componentData"><htmlId>8</htmlId><x>960.0</x><y>95.0</y><top>0.5</top><bottom>0.5</bottom><left>960.0</left><right>960.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></fillPaint></rectangle>
|
||||
<rectangle type="componentData"><htmlId>9</htmlId><roundingX>0.4667</roundingX><roundingY>0.4667</roundingY><x>50.0</x><y>48.0</y><top>30.0</top><bottom>30.0</bottom><left>30.0</left><right>30.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="59" g="130" b="246"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>10</htmlId><value>CI</value><font type="font" name="Segoe UI" bold="true" size="22" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="255" g="255" b="255"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>50.0</x><y>48.0</y><top>14.0</top><bottom>14.0</bottom><left>30.0</left><right>30.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>11</htmlId><value>CI-Eng-Sample</value><font type="font" name="Segoe UI" bold="true" size="22" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>171.1</x><y>33.0</y><top>15.0</top><bottom>15.0</bottom><left>75.1</left><right>75.1</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>12</htmlId><value>Operations dashboard | Tank farm demo</value><font type="font" name="Segoe UI" size="12" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>201.8</x><y>62.0</y><top>10.0</top><bottom>10.0</bottom><left>105.8</left><right>105.8</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<rectangle type="componentData"><htmlId>13</htmlId><roundingX>0.0952</roundingX><roundingY>0.2353</roundingY><x>604.0</x><y>48.0</y><top>34.0</top><bottom>34.0</bottom><left>84.0</left><right>84.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></strokePaint><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="28" g="35" b="45"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>14</htmlId><value>TANK LEVEL</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>561.8</x><y>30.0</y><top>8.0</top><bottom>8.0</bottom><left>27.8</left><right>27.8</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<number type="componentData"><htmlId>15</htmlId><value>0.0</value><format>999.9</format><font type="font" name="Consolas" bold="true" size="22" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>563.2</x><y>56.0</y><top>16.0</top><bottom>16.0</bottom><left>29.2</left><right>29.2</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action><action type="actionConnectTo"><property type="property" name="number.fillPaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Double</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>0.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut><thresholdIn>10.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="245" g="158" b="11"/></thresholdOut><thresholdIn>20.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="20" g="184" b="166"/></thresholdOut><thresholdIn>80.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="245" g="158" b="11"/></thresholdOut><thresholdIn>90.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<text type="componentData"><htmlId>16</htmlId><value>%</value><font type="font" name="Segoe UI" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>642.4</x><y>59.0</y><top>9.0</top><bottom>9.0</bottom><left>4.4</left><right>4.4</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<rectangle type="componentData"><htmlId>17</htmlId><roundingX>0.0952</roundingX><roundingY>0.2353</roundingY><x>784.0</x><y>48.0</y><top>34.0</top><bottom>34.0</bottom><left>84.0</left><right>84.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></strokePaint><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="28" g="35" b="45"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>18</htmlId><value>INFLOW</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>733.0</x><y>30.0</y><top>8.0</top><bottom>8.0</bottom><left>19.0</left><right>19.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<number type="componentData"><htmlId>19</htmlId><value>0.0</value><format>9999.9</format><font type="font" name="Consolas" bold="true" size="22" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>749.1</x><y>56.0</y><top>16.0</top><bottom>16.0</bottom><left>35.1</left><right>35.1</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.INFLOW</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<text type="componentData"><htmlId>20</htmlId><value>m3/h</value><font type="font" name="Segoe UI" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>830.2</x><y>59.0</y><top>9.0</top><bottom>9.0</bottom><left>12.2</left><right>12.2</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<rectangle type="componentData"><htmlId>21</htmlId><roundingX>0.0952</roundingX><roundingY>0.2353</roundingY><x>964.0</x><y>48.0</y><top>34.0</top><bottom>34.0</bottom><left>84.0</left><right>84.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></strokePaint><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="28" g="35" b="45"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>22</htmlId><value>VOLUME</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>914.5</x><y>30.0</y><top>8.0</top><bottom>8.0</bottom><left>20.5</left><right>20.5</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<number type="componentData"><htmlId>23</htmlId><value>0.0</value><format>9999.9</format><font type="font" name="Consolas" bold="true" size="22" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>929.1</x><y>56.0</y><top>16.0</top><bottom>16.0</bottom><left>35.1</left><right>35.1</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.CALC.VOLUME</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<text type="componentData"><htmlId>24</htmlId><value>m3</value><font type="font" name="Segoe UI" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1005.3</x><y>59.0</y><top>9.0</top><bottom>9.0</bottom><left>7.3</left><right>7.3</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<rectangle type="componentData"><htmlId>25</htmlId><roundingX>0.0952</roundingX><roundingY>0.2353</roundingY><x>1144.0</x><y>48.0</y><top>34.0</top><bottom>34.0</bottom><left>84.0</left><right>84.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></strokePaint><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="28" g="35" b="45"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>26</htmlId><value>PUMP 1</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1092.5</x><y>30.0</y><top>8.0</top><bottom>8.0</bottom><left>18.5</left><right>18.5</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<ellipse type="componentData"><htmlId>27</htmlId><x>1083.0</x><y>57.0</y><top>9.0</top><bottom>9.0</bottom><left>9.0</left><right>9.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="71" g="85" b="105"/></fillPaint><data type="data"><action type="actionConnectTo"><property type="property" name="ellipse.fillPaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Boolean</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>false</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="71" g="85" b="105"/></thresholdOut><thresholdIn>true</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="34" g="197" b="94"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PUMP1.RUNNING</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></ellipse>
|
||||
<text type="componentData"><htmlId>28</htmlId><value>RUNNING</value><font type="font" name="Segoe UI" bold="true" size="14" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="34" g="197" b="94"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1132.2</x><y>56.0</y><top>12.0</top><bottom>12.0</bottom><left>32.2</left><right>32.2</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="text.visible"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Boolean</inputType><outputType>java.lang.Boolean</outputType><thresholdTable type="thresholdTable"><thresholdIn>false</thresholdIn><thresholdOut>false</thresholdOut><thresholdIn>true</thresholdIn><thresholdOut>true</thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PUMP1.RUNNING</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></text>
|
||||
<text type="componentData"><htmlId>29</htmlId><value>STOPPED</value><font type="font" name="Segoe UI" bold="true" size="14" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1130.2</x><y>56.0</y><top>12.0</top><bottom>12.0</bottom><left>30.2</left><right>30.2</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="text.visible"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Boolean</inputType><outputType>java.lang.Boolean</outputType><thresholdTable type="thresholdTable"><thresholdIn>false</thresholdIn><thresholdOut>true</thresholdOut><thresholdIn>true</thresholdIn><thresholdOut>false</thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PUMP1.RUNNING</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></text>
|
||||
<rectangle type="componentData"><htmlId>30</htmlId><roundingX>0.0952</roundingX><roundingY>0.2353</roundingY><x>1324.0</x><y>48.0</y><top>34.0</top><bottom>34.0</bottom><left>84.0</left><right>84.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></strokePaint><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="28" g="35" b="45"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>31</htmlId><value>COMMUNICATION</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1297.9</x><y>30.0</y><top>8.0</top><bottom>8.0</bottom><left>43.9</left><right>43.9</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<ellipse type="componentData"><htmlId>32</htmlId><x>1261.0</x><y>57.0</y><top>7.0</top><bottom>7.0</bottom><left>7.0</left><right>7.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="239" g="68" b="68"/></fillPaint><data type="data"><action type="actionConnectTo"><property type="property" name="ellipse.fillPaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Boolean</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>false</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut><thresholdIn>true</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="34" g="197" b="94"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PLC1.COMM_OK</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></ellipse>
|
||||
<text type="componentData"><htmlId>33</htmlId><value>PLC1</value><font type="font" name="Segoe UI" size="12" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1286.7</x><y>56.0</y><top>10.0</top><bottom>10.0</bottom><left>12.7</left><right>12.7</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<ellipse type="componentData"><htmlId>34</htmlId><x>1337.0</x><y>57.0</y><top>7.0</top><bottom>7.0</bottom><left>7.0</left><right>7.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="239" g="68" b="68"/></fillPaint><data type="data"><action type="actionConnectTo"><property type="property" name="ellipse.fillPaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Boolean</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>false</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut><thresholdIn>true</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="34" g="197" b="94"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.UA.COMM_OK</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></ellipse>
|
||||
<text type="componentData"><htmlId>35</htmlId><value>OPC UA</value><font type="font" name="Segoe UI" size="12" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1370.5</x><y>56.0</y><top>10.0</top><bottom>10.0</bottom><left>20.5</left><right>20.5</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<rectangle type="componentData"><htmlId>36</htmlId><roundingX>0.0640</roundingX><roundingY>0.2353</roundingY><x>1549.0</x><y>48.0</y><top>34.0</top><bottom>34.0</bottom><left>125.0</left><right>125.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></strokePaint><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="28" g="35" b="45"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>37</htmlId><value>LIVE DATA</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1462.4</x><y>30.0</y><top>8.0</top><bottom>8.0</bottom><left>24.4</left><right>24.4</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<ellipse type="componentData"><htmlId>38</htmlId><x>1542.0</x><y>29.0</y><top>6.0</top><bottom>6.0</bottom><left>6.0</left><right>6.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="71" g="85" b="105"/></fillPaint><data type="data"><action type="actionConnectTo"><property type="property" name="ellipse.fillPaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Boolean</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>false</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="71" g="85" b="105"/></thresholdOut><thresholdIn>true</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="34" g="197" b="94"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.DEMO.FEED_ON</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></ellipse>
|
||||
<button type="componentData" x="1490.0" y="59.0" top="15.0" bottom="15.0" left="52.0" right="52.0" rotation="0.0" shear="0.0"><htmlId>39</htmlId><toolTipText>Start the live-data feed (cieng_feed.ps1) on the server</toolTipText><label>Start</label><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><foregroundColor type="colorSet" r="255" g="255" b="255"/><backgroundColor type="colorSet" r="34" g="197" b="94"/><data type="data"><action type="actionSetItemAttribute"><event type="event" event="On action"/><filter type="filter"><value>1.0</value></filter><connection type="connection"><direction>2</direction><location type="nodeName" node="$default$"/><itemName>CI-Eng-Sample.DEMO.FEED_ON</itemName><itemAttribute>ItemValue</itemAttribute></connection></action><action type="actionExecuteCommand"><event type="event" event="On action"/><command>cmd /c "C:\Users\Public\CI-Eng-Sample\feed\cieng_feed_start.cmd"</command><onServer>true</onServer></action></data></button>
|
||||
<button type="componentData" x="1606.0" y="59.0" top="15.0" bottom="15.0" left="52.0" right="52.0" rotation="0.0" shear="0.0"><htmlId>40</htmlId><toolTipText>Stop the feed (ends within 5 s)</toolTipText><label>Stop</label><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><foregroundColor type="colorSet" r="230" g="237" b="243"/><backgroundColor type="colorSet" r="36" g="45" b="57"/><data type="data"><action type="actionSetItemAttribute"><event type="event" event="On action"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>2</direction><location type="nodeName" node="$default$"/><itemName>CI-Eng-Sample.DEMO.FEED_ON</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></button>
|
||||
<button type="componentData" x="1734.0" y="48.0" top="34.0" bottom="34.0" left="46.0" right="46.0" rotation="0.0" shear="0.0"><htmlId>41</htmlId><toolTipText>Open the Tank 1 faceplate popup</toolTipText><label>Tank 1</label><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><foregroundColor type="colorSet" r="255" g="255" b="255"/><backgroundColor type="colorSet" r="59" g="130" b="246"/><data type="data"><action type="actionActivateDisplay"><event type="event" event="On action"/><type type="displayActivationType" value="ActivateSpecific"/><display>CIENG_TankFaceplate</display><layout>CIENG_Popup</layout><layoutFrame>default</layoutFrame></action></data></button>
|
||||
<text type="componentData"><htmlId>42</htmlId><value>LAST UPDATE</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1823.7</x><y>30.0</y><top>8.0</top><bottom>8.0</bottom><left>31.7</left><right>31.7</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<numberField type="componentData" x="1853.0" y="58.0" top="14.0" bottom="14.0" left="61.0" right="61.0" rotation="0.0" shear="0.0"><htmlId>43</htmlId><font type="font" name="Consolas" bold="true" size="9" underline="false" strikethrough="false"/><format></format><editable>false</editable><asDateTime>true</asDateTime><foregroundColor type="colorSet" r="230" g="237" b="243"/><backgroundColor type="colorSet" r="36" g="45" b="57"/><justification type="jTextJustification" value="TextJustificationRight"/><data type="data"><action type="actionConnectTo"><property type="property" name="numberField.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.DEMO.COUNTER</itemName><itemAttribute>ItemUpdTime</itemAttribute></connection></action></data></numberField>
|
||||
</coreObjectDefinition>
|
||||
</visualization>
|
||||
100
examples/CI-Eng-Sample/displays/CIENG_Overview.xml
Normal file
100
examples/CI-Eng-Sample/displays/CIENG_Overview.xml
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
<?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"/>
|
||||
<title>Overview</title>
|
||||
<html>true</html>
|
||||
<width>1880</width>
|
||||
<height>760</height>
|
||||
<referenceCheck>76</referenceCheck>
|
||||
<backgroundColor type="colorSet" r="13" g="17" b="23"/>
|
||||
<backgroundColorOn>true</backgroundColorOn>
|
||||
<defaultBgColor type="colorSet" r="13" g="17" b="23"/>
|
||||
<defaultFgColor type="colorSet" r="230" g="237" b="243"/>
|
||||
<defaultFont type="font" name="Segoe UI" size="12" underline="false" strikethrough="false"/>
|
||||
<defaultStroke type="stroke" width="1.0"/>
|
||||
<grid type="grid" gridVisible="true" snappingActive="true" verticalSnapInterval="4" horizontalSnapInterval="4" onTop="false"><color type="colorSet" r="51" g="59" b="71"/></grid>
|
||||
<revisionHistory type="revisionHistory"><revision type="revision" who="ADMIN" when="2026.10.02 12:00:00.000 AEST" what="Generated by displays/generator/build.py" where="localhost"/></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>70</componentCountHint>
|
||||
<rectangle type="componentData"><htmlId>7</htmlId><x>940.0</x><y>380.0</y><top>380.0</top><bottom>380.0</bottom><left>940.0</left><right>940.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="13" g="17" b="23"/></fillPaint></rectangle>
|
||||
<rectangle type="componentData"><htmlId>8</htmlId><roundingX>0.0180</roundingX><roundingY>0.0271</roundingY><x>565.0</x><y>380.0</y><top>368.8</top><bottom>368.8</bottom><left>555.0</left><right>555.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></strokePaint><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="28" g="35" b="45"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>9</htmlId><value>PROCESS - TANK 1</value><font type="font" name="Segoe UI" bold="true" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>76.8</x><y>36.9</y><top>11.0</top><bottom>11.0</bottom><left>46.8</left><right>46.8</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>10</htmlId><value>Click the tank for its faceplate</value><font type="font" name="Segoe UI" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="88" g="100" b="116"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>92.4</x><y>59.2</y><top>9.0</top><bottom>9.0</bottom><left>62.4</left><right>62.4</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<rectangle type="componentData"><htmlId>11</htmlId><x>250.0</x><y>377.8</y><top>8.0</top><bottom>8.0</bottom><left>190.0</left><right>190.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="40" g="50" b="64"/></fillPaint></rectangle>
|
||||
<rectangle type="componentData"><htmlId>12</htmlId><x>250.0</x><y>377.8</y><top>5.0</top><bottom>5.0</bottom><left>190.0</left><right>190.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="20" g="184" b="166"/></fillPaint><data type="data"><action type="actionConnectTo"><property type="property" name="rectangle.visible"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Double</inputType><outputType>java.lang.Boolean</outputType><thresholdTable type="thresholdTable"><thresholdIn>0.0</thresholdIn><thresholdOut>false</thresholdOut><thresholdIn>5.0</thresholdIn><thresholdOut>true</thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.INFLOW</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></rectangle>
|
||||
<text type="componentData"><htmlId>13</htmlId><value>INFLOW</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>79.0</x><y>288.4</y><top>8.0</top><bottom>8.0</bottom><left>19.0</left><right>19.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<number type="componentData"><htmlId>14</htmlId><value>0.0</value><format>9999.9</format><font type="font" name="Consolas" bold="true" size="30" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>109.7</x><y>321.9</y><top>20.0</top><bottom>20.0</bottom><left>49.7</left><right>49.7</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.INFLOW</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<text type="componentData"><htmlId>15</htmlId><value>m3/h</value><font type="font" name="Segoe UI" size="12" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>227.7</x><y>326.4</y><top>10.0</top><bottom>10.0</bottom><left>13.7</left><right>13.7</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<rectangle type="componentData"><htmlId>16</htmlId><toolTipText>Tank 1 - click for the faceplate</toolTipText><roundingX>0.1500</roundingX><roundingY>0.0671</roundingY><x>560.0</x><y>380.0</y><top>268.2</top><bottom>268.2</bottom><left>120.0</left><right>120.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="2.0"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></strokePaint><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="22" g="27" b="34"/></fillPaint><data type="data"><action type="actionActivateDisplay"><event type="event" event="Clicked b1"/><type type="displayActivationType" value="ActivateSpecific"/><display>CIENG_TankFaceplate</display><layout>CIENG_Popup</layout><layoutFrame>default</layoutFrame></action></data></rectangle>
|
||||
<rectangle type="componentData"><htmlId>17</htmlId><roundingX>0.1091</roundingX><roundingY>0.0467</roundingY><x>560.0</x><y>380.0</y><top>257.1</top><bottom>257.1</bottom><left>110.0</left><right>110.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="59" g="130" b="246"/></fillPaint><fillAmount>0.5</fillAmount><fillDirection type="fillDirection" value="FillDirectionUp"/><data type="data"><action type="actionConnectTo"><property type="property" name="rectangle.fillAmount"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationLinear"><inputType>java.lang.Double</inputType><outputType>java.lang.Double</outputType><inputValueStart>0.0</inputValueStart><inputValueEnd>100.0</inputValueEnd><outputValueStart>0.0</outputValueStart><outputValueEnd>1.0</outputValueEnd></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action><action type="actionConnectTo"><property type="property" name="rectangle.fillPaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Double</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>0.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="185" g="28" b="28"/></thresholdOut><thresholdIn>10.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="180" g="83" b="9"/></thresholdOut><thresholdIn>20.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="37" g="99" b="235"/></thresholdOut><thresholdIn>80.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="180" g="83" b="9"/></thresholdOut><thresholdIn>90.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="185" g="28" b="28"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action><action type="actionActivateDisplay"><event type="event" event="Clicked b1"/><type type="displayActivationType" value="ActivateSpecific"/><display>CIENG_TankFaceplate</display><layout>CIENG_Popup</layout><layoutFrame>default</layoutFrame></action></data></rectangle>
|
||||
<text type="componentData"><htmlId>18</htmlId><value>TANK 1</value><font type="font" name="Segoe UI" bold="true" size="16" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>560.0</x><y>82.7</y><top>14.0</top><bottom>14.0</bottom><left>110.0</left><right>110.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<number type="componentData"><htmlId>19</htmlId><value>0.0</value><format>999.9</format><font type="font" name="Consolas" bold="true" size="40" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="255" g="255" b="255"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>560.0</x><y>363.2</y><top>25.0</top><bottom>25.0</bottom><left>100.0</left><right>100.0</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<text type="componentData"><htmlId>20</htmlId><value>% level</value><font type="font" name="Segoe UI" size="12" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>560.0</x><y>404.6</y><top>10.0</top><bottom>10.0</bottom><left>100.0</left><right>100.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<rectangle type="componentData"><htmlId>21</htmlId><x>691.0</x><y>174.4</y><top>1.0</top><bottom>1.0</bottom><left>9.0</left><right>9.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="239" g="68" b="68"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>22</htmlId><value>HH 90</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="239" g="68" b="68"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>721.1</x><y>174.4</y><top>9.0</top><bottom>9.0</bottom><left>15.1</left><right>15.1</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<rectangle type="componentData"><htmlId>23</htmlId><x>691.0</x><y>225.8</y><top>1.0</top><bottom>1.0</bottom><left>9.0</left><right>9.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="245" g="158" b="11"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>24</htmlId><value>H 80</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="245" g="158" b="11"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>717.2</x><y>225.8</y><top>9.0</top><bottom>9.0</bottom><left>11.2</left><right>11.2</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<rectangle type="componentData"><htmlId>25</htmlId><x>691.0</x><y>534.2</y><top>1.0</top><bottom>1.0</bottom><left>9.0</left><right>9.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="245" g="158" b="11"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>26</htmlId><value>L 20</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="245" g="158" b="11"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>715.8</x><y>534.2</y><top>9.0</top><bottom>9.0</bottom><left>9.8</left><right>9.8</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<rectangle type="componentData"><htmlId>27</htmlId><x>691.0</x><y>585.6</y><top>1.0</top><bottom>1.0</bottom><left>9.0</left><right>9.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="239" g="68" b="68"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>28</htmlId><value>LL 10</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="239" g="68" b="68"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>718.2</x><y>585.6</y><top>9.0</top><bottom>9.0</bottom><left>12.2</left><right>12.2</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<button type="componentData" x="560.0" y="681.8" top="16.0" bottom="16.0" left="90.0" right="90.0" rotation="0.0" shear="0.0"><htmlId>29</htmlId><label>Open faceplate</label><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><foregroundColor type="colorSet" r="255" g="255" b="255"/><backgroundColor type="colorSet" r="59" g="130" b="246"/><data type="data"><action type="actionActivateDisplay"><event type="event" event="On action"/><type type="displayActivationType" value="ActivateSpecific"/><display>CIENG_TankFaceplate</display><layout>CIENG_Popup</layout><layoutFrame>default</layoutFrame></action></data></button>
|
||||
<rectangle type="componentData"><htmlId>30</htmlId><x>755.0</x><y>603.5</y><top>8.0</top><bottom>8.0</bottom><left>75.0</left><right>75.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="40" g="50" b="64"/></fillPaint></rectangle>
|
||||
<rectangle type="componentData"><htmlId>31</htmlId><x>755.0</x><y>603.5</y><top>5.0</top><bottom>5.0</bottom><left>75.0</left><right>75.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="20" g="184" b="166"/></fillPaint><data type="data"><action type="actionConnectTo"><property type="property" name="rectangle.visible"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PUMP1.RUNNING</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></rectangle>
|
||||
<ellipse type="componentData"><htmlId>32</htmlId><x>875.0</x><y>603.5</y><top>45.0</top><bottom>45.0</bottom><left>45.0</left><right>45.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="2.0"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></strokePaint><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="71" g="85" b="105"/></fillPaint><data type="data"><action type="actionConnectTo"><property type="property" name="ellipse.fillPaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Boolean</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>false</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="71" g="85" b="105"/></thresholdOut><thresholdIn>true</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="34" g="197" b="94"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PUMP1.RUNNING</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></ellipse>
|
||||
<text type="componentData"><htmlId>33</htmlId><value>P1</value><font type="font" name="Segoe UI" bold="true" size="16" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="255" g="255" b="255"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>875.0</x><y>603.5</y><top>12.0</top><bottom>12.0</bottom><left>45.0</left><right>45.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<rectangle type="componentData"><htmlId>34</htmlId><x>1005.0</x><y>603.5</y><top>8.0</top><bottom>8.0</bottom><left>85.0</left><right>85.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="40" g="50" b="64"/></fillPaint></rectangle>
|
||||
<rectangle type="componentData"><htmlId>35</htmlId><x>1005.0</x><y>603.5</y><top>5.0</top><bottom>5.0</bottom><left>85.0</left><right>85.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="20" g="184" b="166"/></fillPaint><data type="data"><action type="actionConnectTo"><property type="property" name="rectangle.visible"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PUMP1.RUNNING</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></rectangle>
|
||||
<text type="componentData"><htmlId>36</htmlId><value>PUMP 1</value><font type="font" name="Segoe UI" bold="true" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>875.0</x><y>680.6</y><top>9.0</top><bottom>9.0</bottom><left>75.0</left><right>75.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>37</htmlId><value>AUTO</value><font type="font" name="Segoe UI" bold="true" size="13" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="20" g="184" b="166"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>875.0</x><y>704.1</y><top>10.0</top><bottom>10.0</bottom><left>75.0</left><right>75.0</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="text.visible"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Double</inputType><outputType>java.lang.Boolean</outputType><thresholdTable type="thresholdTable"><thresholdIn>0.0</thresholdIn><thresholdOut>false</thresholdOut><thresholdIn>1.0</thresholdIn><thresholdOut>true</thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PUMP1.MODE</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></text>
|
||||
<text type="componentData"><htmlId>38</htmlId><value>MANUAL</value><font type="font" name="Segoe UI" bold="true" size="13" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="245" g="158" b="11"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>875.0</x><y>704.1</y><top>10.0</top><bottom>10.0</bottom><left>75.0</left><right>75.0</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="text.visible"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Double</inputType><outputType>java.lang.Boolean</outputType><thresholdTable type="thresholdTable"><thresholdIn>0.0</thresholdIn><thresholdOut>true</thresholdOut><thresholdIn>1.0</thresholdIn><thresholdOut>false</thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PUMP1.MODE</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></text>
|
||||
<rectangle type="componentData"><htmlId>39</htmlId><roundingX>0.0696</roundingX><roundingY>0.0434</roundingY><x>975.0</x><y>285.0</y><top>184.4</top><bottom>184.4</bottom><left>115.0</left><right>115.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></strokePaint><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="22" g="27" b="34"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>40</htmlId><value>VOLUME (TANK1.CALC)</value><font type="font" name="Segoe UI" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>926.2</x><y>125.2</y><top>8.0</top><bottom>8.0</bottom><left>50.2</left><right>50.2</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<number type="componentData"><htmlId>41</htmlId><value>0.0</value><format>9999.9</format><font type="font" name="Consolas" bold="true" size="22" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>911.1</x><y>153.1</y><top>15.0</top><bottom>15.0</bottom><left>35.1</left><right>35.1</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.CALC.VOLUME</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<text type="componentData"><htmlId>42</htmlId><value>m3</value><font type="font" name="Segoe UI" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1035.3</x><y>155.4</y><top>9.0</top><bottom>9.0</bottom><left>7.3</left><right>7.3</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>43</htmlId><value>FLOW PER SECOND (JFLOW)</value><font type="font" name="Segoe UI" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>938.4</x><y>196.7</y><top>8.0</top><bottom>8.0</bottom><left>62.4</left><right>62.4</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<number type="componentData"><htmlId>44</htmlId><value>0.0</value><format>999.99</format><font type="font" name="Consolas" bold="true" size="22" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>911.1</x><y>224.6</y><top>15.0</top><bottom>15.0</bottom><left>35.1</left><right>35.1</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.JFLOW.sPerMin</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<text type="componentData"><htmlId>45</htmlId><value>m3/s</value><font type="font" name="Segoe UI" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1039.7</x><y>226.9</y><top>9.0</top><bottom>9.0</bottom><left>11.7</left><right>11.7</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>46</htmlId><value>LEVEL MAXIMUM</value><font type="font" name="Segoe UI" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>914.0</x><y>268.2</y><top>8.0</top><bottom>8.0</bottom><left>38.0</left><right>38.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<number type="componentData"><htmlId>47</htmlId><value>0.0</value><format>999.9</format><font type="font" name="Consolas" bold="true" size="22" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>905.2</x><y>296.2</y><top>15.0</top><bottom>15.0</bottom><left>29.2</left><right>29.2</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL.MAX</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<text type="componentData"><htmlId>48</htmlId><value>%</value><font type="font" name="Segoe UI" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1032.4</x><y>298.4</y><top>9.0</top><bottom>9.0</bottom><left>4.4</left><right>4.4</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>49</htmlId><value>COUNTER (DEMO.INCR1)</value><font type="font" name="Segoe UI" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>930.1</x><y>339.8</y><top>8.0</top><bottom>8.0</bottom><left>54.1</left><right>54.1</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<number type="componentData"><htmlId>50</htmlId><value>0.0</value><format>999</format><font type="font" name="Consolas" bold="true" size="22" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>893.5</x><y>367.7</y><top>15.0</top><bottom>15.0</bottom><left>17.6</left><right>17.6</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.DEMO.COUNTER</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<text type="componentData"><htmlId>51</htmlId><value></value><font type="font" name="Segoe UI" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1030.0</x><y>369.9</y><top>9.0</top><bottom>9.0</bottom><left>2.0</left><right>2.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<dataBar type="componentData" x="975.0" y="399.0" top="5.0" bottom="5.0" left="99.0" right="99.0" rotation="0.0" shear="0.0"><htmlId>52</htmlId><fillOn>true</fillOn><background type="paint"><paint type="colorSet" r="40" g="50" b="64"/></background><foreground type="paint"><paint type="colorSet" r="139" g="92" b="246"/></foreground><borderColor type="paint"><paint type="colorSet" r="40" g="50" b="64"/></borderColor><foregroundBorderColor type="paint"><paint type="colorSet" r="139" g="92" b="246"/></foregroundBorderColor><lowLimit>0.0</lowLimit><highLimit>100.0</highLimit><growthDirection type="growthDirection" value="GrowthDirectionRight"/><data type="data"><action type="actionConnectTo"><property type="property" name="dataBar.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.DEMO.COUNTER</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></dataBar>
|
||||
<text type="componentData"><htmlId>53</htmlId><value>PUMP RUN TIME</value><font type="font" name="Segoe UI" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>913.0</x><y>429.2</y><top>8.0</top><bottom>8.0</bottom><left>37.0</left><right>37.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<number type="componentData"><htmlId>54</htmlId><value>0.0</value><format>9999999</format><font type="font" name="Consolas" bold="true" size="16" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>906.7</x><y>451.5</y><top>12.0</top><bottom>12.0</bottom><left>30.7</left><right>30.7</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PUMP1.RUNNING.RUN_SECONDS</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<text type="componentData"><htmlId>55</htmlId><value>s</value><font type="font" name="Segoe UI" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1032.4</x><y>452.6</y><top>9.0</top><bottom>9.0</bottom><left>2.4</left><right>2.4</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<rectangle type="componentData"><htmlId>56</htmlId><roundingX>0.0270</roundingX><roundingY>0.0542</roundingY><x>1500.0</x><y>195.6</y><top>184.4</top><bottom>184.4</bottom><left>370.0</left><right>370.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></strokePaint><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="28" g="35" b="45"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>57</htmlId><value>KEY FIGURES</value><font type="font" name="Segoe UI" bold="true" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1182.7</x><y>36.9</y><top>11.0</top><bottom>11.0</bottom><left>32.7</left><right>32.7</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<arc type="componentData"><htmlId>58</htmlId><startAngle>45.0</startAngle><extentAngle>270.0</extentAngle><closed>false</closed><x>1255.0</x><y>195.6</y><top>95.0</top><bottom>95.0</bottom><left>95.0</left><right>95.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="12.0" endCap="butt"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="40" g="50" b="64"/></strokePaint><fillOn>false</fillOn></arc>
|
||||
<arc type="componentData"><htmlId>59</htmlId><startAngle>179.8</startAngle><extentAngle>0.5</extentAngle><closed>false</closed><x>1255.0</x><y>195.6</y><top>95.0</top><bottom>95.0</bottom><left>95.0</left><right>95.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="12.0" endCap="butt"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="20" g="184" b="166"/></strokePaint><fillOn>false</fillOn><data type="data"><action type="actionConnectTo"><property type="property" name="arc.extentAngle"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationLinear"><inputType>java.lang.Double</inputType><outputType>java.lang.Double</outputType><inputValueStart>0.0</inputValueStart><inputValueEnd>100.0</inputValueEnd><outputValueStart>0.5</outputValueStart><outputValueEnd>270.0</outputValueEnd></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action><action type="actionConnectTo"><property type="property" name="arc.startAngle"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationLinear"><inputType>java.lang.Double</inputType><outputType>java.lang.Double</outputType><inputValueStart>0.0</inputValueStart><inputValueEnd>100.0</inputValueEnd><outputValueStart>179.75</outputValueStart><outputValueEnd>45.0</outputValueEnd></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action><action type="actionConnectTo"><property type="property" name="arc.strokePaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Double</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>0.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut><thresholdIn>10.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="245" g="158" b="11"/></thresholdOut><thresholdIn>20.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="20" g="184" b="166"/></thresholdOut><thresholdIn>80.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="245" g="158" b="11"/></thresholdOut><thresholdIn>90.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></arc>
|
||||
<number type="componentData"><htmlId>60</htmlId><value>0.0</value><format>999.9</format><font type="font" name="Consolas" bold="true" size="26" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1255.0</x><y>191.1</y><top>18.0</top><bottom>18.0</bottom><left>81.0</left><right>81.0</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action><action type="actionConnectTo"><property type="property" name="number.fillPaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Double</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>0.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut><thresholdIn>10.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="245" g="158" b="11"/></thresholdOut><thresholdIn>20.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="20" g="184" b="166"/></thresholdOut><thresholdIn>80.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="245" g="158" b="11"/></thresholdOut><thresholdIn>90.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<text type="componentData"><htmlId>61</htmlId><value>%</value><font type="font" name="Segoe UI" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1255.0</x><y>223.5</y><top>9.0</top><bottom>9.0</bottom><left>40.0</left><right>40.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>62</htmlId><value>Level</value><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1255.0</x><y>306.2</y><top>10.0</top><bottom>10.0</bottom><left>95.0</left><right>95.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<arc type="componentData"><htmlId>63</htmlId><startAngle>45.0</startAngle><extentAngle>270.0</extentAngle><closed>false</closed><x>1500.0</x><y>195.6</y><top>95.0</top><bottom>95.0</bottom><left>95.0</left><right>95.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="12.0" endCap="butt"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="40" g="50" b="64"/></strokePaint><fillOn>false</fillOn></arc>
|
||||
<arc type="componentData"><htmlId>64</htmlId><startAngle>179.8</startAngle><extentAngle>0.5</extentAngle><closed>false</closed><x>1500.0</x><y>195.6</y><top>95.0</top><bottom>95.0</bottom><left>95.0</left><right>95.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="12.0" endCap="butt"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="139" g="92" b="246"/></strokePaint><fillOn>false</fillOn><data type="data"><action type="actionConnectTo"><property type="property" name="arc.extentAngle"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationLinear"><inputType>java.lang.Double</inputType><outputType>java.lang.Double</outputType><inputValueStart>0.0</inputValueStart><inputValueEnd>500.0</inputValueEnd><outputValueStart>0.5</outputValueStart><outputValueEnd>270.0</outputValueEnd></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.INFLOW</itemName><itemAttribute>ItemValue</itemAttribute></connection></action><action type="actionConnectTo"><property type="property" name="arc.startAngle"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationLinear"><inputType>java.lang.Double</inputType><outputType>java.lang.Double</outputType><inputValueStart>0.0</inputValueStart><inputValueEnd>500.0</inputValueEnd><outputValueStart>179.75</outputValueStart><outputValueEnd>45.0</outputValueEnd></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.INFLOW</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></arc>
|
||||
<number type="componentData"><htmlId>65</htmlId><value>0.0</value><format>9999</format><font type="font" name="Consolas" bold="true" size="26" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1500.0</x><y>191.1</y><top>18.0</top><bottom>18.0</bottom><left>81.0</left><right>81.0</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.INFLOW</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<text type="componentData"><htmlId>66</htmlId><value>m3/h</value><font type="font" name="Segoe UI" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1500.0</x><y>223.5</y><top>9.0</top><bottom>9.0</bottom><left>40.0</left><right>40.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>67</htmlId><value>Inflow</value><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1500.0</x><y>306.2</y><top>10.0</top><bottom>10.0</bottom><left>95.0</left><right>95.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<arc type="componentData"><htmlId>68</htmlId><startAngle>45.0</startAngle><extentAngle>270.0</extentAngle><closed>false</closed><x>1745.0</x><y>195.6</y><top>95.0</top><bottom>95.0</bottom><left>95.0</left><right>95.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="12.0" endCap="butt"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="40" g="50" b="64"/></strokePaint><fillOn>false</fillOn></arc>
|
||||
<arc type="componentData"><htmlId>69</htmlId><startAngle>179.8</startAngle><extentAngle>0.5</extentAngle><closed>false</closed><x>1745.0</x><y>195.6</y><top>95.0</top><bottom>95.0</bottom><left>95.0</left><right>95.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="12.0" endCap="butt"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="59" g="130" b="246"/></strokePaint><fillOn>false</fillOn><data type="data"><action type="actionConnectTo"><property type="property" name="arc.extentAngle"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationLinear"><inputType>java.lang.Double</inputType><outputType>java.lang.Double</outputType><inputValueStart>0.0</inputValueStart><inputValueEnd>200.0</inputValueEnd><outputValueStart>0.5</outputValueStart><outputValueEnd>270.0</outputValueEnd></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.CALC.VOLUME</itemName><itemAttribute>ItemValue</itemAttribute></connection></action><action type="actionConnectTo"><property type="property" name="arc.startAngle"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationLinear"><inputType>java.lang.Double</inputType><outputType>java.lang.Double</outputType><inputValueStart>0.0</inputValueStart><inputValueEnd>200.0</inputValueEnd><outputValueStart>179.75</outputValueStart><outputValueEnd>45.0</outputValueEnd></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.CALC.VOLUME</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></arc>
|
||||
<number type="componentData"><htmlId>70</htmlId><value>0.0</value><format>999.9</format><font type="font" name="Consolas" bold="true" size="26" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1745.0</x><y>191.1</y><top>18.0</top><bottom>18.0</bottom><left>81.0</left><right>81.0</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.CALC.VOLUME</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<text type="componentData"><htmlId>71</htmlId><value>m3</value><font type="font" name="Segoe UI" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1745.0</x><y>223.5</y><top>9.0</top><bottom>9.0</bottom><left>40.0</left><right>40.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>72</htmlId><value>Volume</value><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1745.0</x><y>306.2</y><top>10.0</top><bottom>10.0</bottom><left>95.0</left><right>95.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<rectangle type="componentData"><htmlId>73</htmlId><roundingX>0.0270</roundingX><roundingY>0.0559</roundingY><x>1500.0</x><y>570.0</y><top>178.8</top><bottom>178.8</bottom><left>370.0</left><right>370.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></strokePaint><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="28" g="35" b="45"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>74</htmlId><value>LAST 10 MINUTES</value><font type="font" name="Segoe UI" bold="true" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1195.3</x><y>416.9</y><top>11.0</top><bottom>11.0</bottom><left>45.3</left><right>45.3</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>75</htmlId><value>Micro trend: level (teal, 0-100 %) and inflow (violet, 0-500 m3/h)</value><font type="font" name="Segoe UI" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="88" g="100" b="116"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1284.5</x><y>439.2</y><top>9.0</top><bottom>9.0</bottom><left>134.5</left><right>134.5</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<microTrend type="componentData" x="1500.0" y="592.4" top="134.1" bottom="134.1" left="350.0" right="350.0" rotation="0.0" shear="0.0"><htmlId>76</htmlId><numberOfPens>2</numberOfPens><realTime>true</realTime><fillWithHistory>true</fillWithHistory><microTrendBackgroundFillOn>true</microTrendBackgroundFillOn><lowHighFillOn>false</lowHighFillOn><microTrendBackgroundFillColor type="colorSet" r="22" g="27" b="34"/><microTrendBackgroundColor type="colorSet" r="48" g="61" b="77"/><property type="componentProperty"><name>itemName[0]</name><value/></property><property type="componentProperty"><name>scaleMin[0]</name><value>0.0</value></property><property type="componentProperty"><name>scaleMax[0]</name><value>100.0</value></property><property type="componentProperty"><name>color[0]</name><value type="colorSet" r="20" g="184" b="166"/></property><property type="componentProperty"><name>stroke[0]</name><value type="stroke" width="2.0"/></property><property type="componentProperty"><name>itemName[1]</name><value/></property><property type="componentProperty"><name>scaleMin[1]</name><value>0.0</value></property><property type="componentProperty"><name>scaleMax[1]</name><value>500.0</value></property><property type="componentProperty"><name>color[1]</name><value type="colorSet" r="139" g="92" b="246"/></property><property type="componentProperty"><name>stroke[1]</name><value type="stroke" width="2.0"/></property><data type="data"><action type="actionInternalServiced"/><action type="actionConnectTo"><property type="property" name="microTrend.itemName[0]"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemName</itemAttribute></connection></action><action type="actionConnectTo"><property type="property" name="microTrend.itemName[1]"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.INFLOW</itemName><itemAttribute>ItemName</itemAttribute></connection></action></data></microTrend>
|
||||
</coreObjectDefinition>
|
||||
</visualization>
|
||||
84
examples/CI-Eng-Sample/displays/CIENG_System.xml
Normal file
84
examples/CI-Eng-Sample/displays/CIENG_System.xml
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
<?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"/>
|
||||
<title>System</title>
|
||||
<html>true</html>
|
||||
<width>1880</width>
|
||||
<height>760</height>
|
||||
<referenceCheck>60</referenceCheck>
|
||||
<backgroundColor type="colorSet" r="13" g="17" b="23"/>
|
||||
<backgroundColorOn>true</backgroundColorOn>
|
||||
<defaultBgColor type="colorSet" r="13" g="17" b="23"/>
|
||||
<defaultFgColor type="colorSet" r="230" g="237" b="243"/>
|
||||
<defaultFont type="font" name="Segoe UI" size="12" underline="false" strikethrough="false"/>
|
||||
<defaultStroke type="stroke" width="1.0"/>
|
||||
<grid type="grid" gridVisible="true" snappingActive="true" verticalSnapInterval="4" horizontalSnapInterval="4" onTop="false"><color type="colorSet" r="51" g="59" b="71"/></grid>
|
||||
<revisionHistory type="revisionHistory"><revision type="revision" who="ADMIN" when="2026.10.02 12:00:00.000 AEST" what="Generated by displays/generator/build.py" where="localhost"/></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>54</componentCountHint>
|
||||
<rectangle type="componentData"><htmlId>7</htmlId><x>940.0</x><y>380.0</y><top>380.0</top><bottom>380.0</bottom><left>940.0</left><right>940.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="13" g="17" b="23"/></fillPaint></rectangle>
|
||||
<rectangle type="componentData"><htmlId>8</htmlId><roundingX>0.0333</roundingX><roundingY>0.0559</roundingY><x>310.0</x><y>190.0</y><top>178.8</top><bottom>178.8</bottom><left>300.0</left><right>300.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></strokePaint><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="28" g="35" b="45"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>9</htmlId><value>SERVER HEALTH</value><font type="font" name="Segoe UI" bold="true" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>70.9</x><y>36.9</y><top>11.0</top><bottom>11.0</bottom><left>40.9</left><right>40.9</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>10</htmlId><value>Real values of this PC, written by the live-data feed</value><font type="font" name="Segoe UI" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="88" g="100" b="116"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>137.2</x><y>59.2</y><top>9.0</top><bottom>9.0</bottom><left>107.2</left><right>107.2</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<arc type="componentData"><htmlId>11</htmlId><startAngle>45.0</startAngle><extentAngle>270.0</extentAngle><closed>false</closed><x>160.0</x><y>201.2</y><top>100.0</top><bottom>100.0</bottom><left>100.0</left><right>100.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="12.0" endCap="butt"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="40" g="50" b="64"/></strokePaint><fillOn>false</fillOn></arc>
|
||||
<arc type="componentData"><htmlId>12</htmlId><startAngle>179.8</startAngle><extentAngle>0.5</extentAngle><closed>false</closed><x>160.0</x><y>201.2</y><top>100.0</top><bottom>100.0</bottom><left>100.0</left><right>100.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="12.0" endCap="butt"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="20" g="184" b="166"/></strokePaint><fillOn>false</fillOn><data type="data"><action type="actionConnectTo"><property type="property" name="arc.extentAngle"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationLinear"><inputType>java.lang.Double</inputType><outputType>java.lang.Double</outputType><inputValueStart>0.0</inputValueStart><inputValueEnd>100.0</inputValueEnd><outputValueStart>0.5</outputValueStart><outputValueEnd>270.0</outputValueEnd></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.SYSTEM.CPU_LOAD</itemName><itemAttribute>ItemValue</itemAttribute></connection></action><action type="actionConnectTo"><property type="property" name="arc.startAngle"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationLinear"><inputType>java.lang.Double</inputType><outputType>java.lang.Double</outputType><inputValueStart>0.0</inputValueStart><inputValueEnd>100.0</inputValueEnd><outputValueStart>179.75</outputValueStart><outputValueEnd>45.0</outputValueEnd></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.SYSTEM.CPU_LOAD</itemName><itemAttribute>ItemValue</itemAttribute></connection></action><action type="actionConnectTo"><property type="property" name="arc.strokePaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Double</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>0.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="20" g="184" b="166"/></thresholdOut><thresholdIn>80.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="245" g="158" b="11"/></thresholdOut><thresholdIn>90.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.SYSTEM.CPU_LOAD</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></arc>
|
||||
<number type="componentData"><htmlId>13</htmlId><value>0.0</value><format>999.9</format><font type="font" name="Consolas" bold="true" size="26" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>160.0</x><y>196.7</y><top>18.0</top><bottom>18.0</bottom><left>86.0</left><right>86.0</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.SYSTEM.CPU_LOAD</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<text type="componentData"><htmlId>14</htmlId><value>%</value><font type="font" name="Segoe UI" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>160.0</x><y>229.1</y><top>9.0</top><bottom>9.0</bottom><left>40.0</left><right>40.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>15</htmlId><value>CPU load</value><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>160.0</x><y>317.4</y><top>10.0</top><bottom>10.0</bottom><left>100.0</left><right>100.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<arc type="componentData"><htmlId>16</htmlId><startAngle>45.0</startAngle><extentAngle>270.0</extentAngle><closed>false</closed><x>450.0</x><y>201.2</y><top>100.0</top><bottom>100.0</bottom><left>100.0</left><right>100.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="12.0" endCap="butt"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="40" g="50" b="64"/></strokePaint><fillOn>false</fillOn></arc>
|
||||
<arc type="componentData"><htmlId>17</htmlId><startAngle>179.8</startAngle><extentAngle>0.5</extentAngle><closed>false</closed><x>450.0</x><y>201.2</y><top>100.0</top><bottom>100.0</bottom><left>100.0</left><right>100.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="12.0" endCap="butt"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="59" g="130" b="246"/></strokePaint><fillOn>false</fillOn><data type="data"><action type="actionConnectTo"><property type="property" name="arc.extentAngle"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationLinear"><inputType>java.lang.Double</inputType><outputType>java.lang.Double</outputType><inputValueStart>0.0</inputValueStart><inputValueEnd>100.0</inputValueEnd><outputValueStart>0.5</outputValueStart><outputValueEnd>270.0</outputValueEnd></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.SYSTEM.DISK_C</itemName><itemAttribute>ItemValue</itemAttribute></connection></action><action type="actionConnectTo"><property type="property" name="arc.startAngle"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationLinear"><inputType>java.lang.Double</inputType><outputType>java.lang.Double</outputType><inputValueStart>0.0</inputValueStart><inputValueEnd>100.0</inputValueEnd><outputValueStart>179.75</outputValueStart><outputValueEnd>45.0</outputValueEnd></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.SYSTEM.DISK_C</itemName><itemAttribute>ItemValue</itemAttribute></connection></action><action type="actionConnectTo"><property type="property" name="arc.strokePaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Double</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>0.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="20" g="184" b="166"/></thresholdOut><thresholdIn>80.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="245" g="158" b="11"/></thresholdOut><thresholdIn>90.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.SYSTEM.DISK_C</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></arc>
|
||||
<number type="componentData"><htmlId>18</htmlId><value>0.0</value><format>999.9</format><font type="font" name="Consolas" bold="true" size="26" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>450.0</x><y>196.7</y><top>18.0</top><bottom>18.0</bottom><left>86.0</left><right>86.0</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.SYSTEM.DISK_C</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<text type="componentData"><htmlId>19</htmlId><value>%</value><font type="font" name="Segoe UI" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>450.0</x><y>229.1</y><top>9.0</top><bottom>9.0</bottom><left>40.0</left><right>40.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>20</htmlId><value>Disk C: used</value><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>450.0</x><y>317.4</y><top>10.0</top><bottom>10.0</bottom><left>100.0</left><right>100.0</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<rectangle type="componentData"><htmlId>21</htmlId><roundingX>0.0333</roundingX><roundingY>0.0559</roundingY><x>920.0</x><y>190.0</y><top>178.8</top><bottom>178.8</bottom><left>300.0</left><right>300.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></strokePaint><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="28" g="35" b="45"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>22</htmlId><value>COMMUNICATION AND PROCESSES</value><font type="font" name="Segoe UI" bold="true" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>731.6</x><y>36.9</y><top>11.0</top><bottom>11.0</bottom><left>91.6</left><right>91.6</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<rectangle type="componentData"><htmlId>23</htmlId><roundingX>0.0214</roundingX><roundingY>0.2440</roundingY><x>920.0</x><y>91.6</y><top>24.6</top><bottom>24.6</bottom><left>280.0</left><right>280.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="22" g="27" b="34"/></fillPaint></rectangle>
|
||||
<ellipse type="componentData"><htmlId>24</htmlId><x>665.0</x><y>91.6</y><top>9.0</top><bottom>9.0</bottom><left>9.0</left><right>9.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="239" g="68" b="68"/></fillPaint><data type="data"><action type="actionConnectTo"><property type="property" name="ellipse.fillPaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Boolean</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>false</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut><thresholdIn>true</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="34" g="197" b="94"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PLC1.COMM_OK</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></ellipse>
|
||||
<text type="componentData"><htmlId>25</htmlId><value>Modbus station CIENG_PLC</value><font type="font" name="Segoe UI" size="13" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>765.5</x><y>91.6</y><top>10.0</top><bottom>10.0</bottom><left>77.5</left><right>77.5</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>26</htmlId><value>NORMAL</value><font type="font" name="Segoe UI" size="12" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1165.6</x><y>91.6</y><top>10.0</top><bottom>10.0</bottom><left>24.4</left><right>24.4</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="text.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.PLC1.COMM_OK</itemName><itemAttribute>ItemStatusMnemonic</itemAttribute></connection></action></data></text>
|
||||
<rectangle type="componentData"><htmlId>27</htmlId><roundingX>0.0214</roundingX><roundingY>0.2440</roundingY><x>920.0</x><y>149.8</y><top>24.6</top><bottom>24.6</bottom><left>280.0</left><right>280.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="22" g="27" b="34"/></fillPaint></rectangle>
|
||||
<ellipse type="componentData"><htmlId>28</htmlId><x>665.0</x><y>149.8</y><top>9.0</top><bottom>9.0</bottom><left>9.0</left><right>9.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="239" g="68" b="68"/></fillPaint><data type="data"><action type="actionConnectTo"><property type="property" name="ellipse.fillPaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Boolean</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>false</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut><thresholdIn>true</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="34" g="197" b="94"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.UA.COMM_OK</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></ellipse>
|
||||
<text type="componentData"><htmlId>29</htmlId><value>OPC UA client station CIENG_UA</value><font type="font" name="Segoe UI" size="13" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>778.7</x><y>149.8</y><top>10.0</top><bottom>10.0</bottom><left>90.7</left><right>90.7</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>30</htmlId><value>NORMAL</value><font type="font" name="Segoe UI" size="12" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1165.6</x><y>149.8</y><top>10.0</top><bottom>10.0</bottom><left>24.4</left><right>24.4</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="text.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.UA.COMM_OK</itemName><itemAttribute>ItemStatusMnemonic</itemAttribute></connection></action></data></text>
|
||||
<rectangle type="componentData"><htmlId>31</htmlId><roundingX>0.0214</roundingX><roundingY>0.2440</roundingY><x>920.0</x><y>207.9</y><top>24.6</top><bottom>24.6</bottom><left>280.0</left><right>280.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="22" g="27" b="34"/></fillPaint></rectangle>
|
||||
<ellipse type="componentData"><htmlId>32</htmlId><x>665.0</x><y>207.9</y><top>9.0</top><bottom>9.0</bottom><left>9.0</left><right>9.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="71" g="85" b="105"/></fillPaint><data type="data"><action type="actionConnectTo"><property type="property" name="ellipse.fillPaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Double</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>0.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="34" g="197" b="94"/></thresholdOut><thresholdIn>0.5</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.UA.SRV_STATE</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></ellipse>
|
||||
<text type="componentData"><htmlId>33</htmlId><value>OPC UA server state (0 = running)</value><font type="font" name="Segoe UI" size="13" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>784.5</x><y>207.9</y><top>10.0</top><bottom>10.0</bottom><left>96.5</left><right>96.5</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>34</htmlId><value>NORMAL</value><font type="font" name="Segoe UI" size="12" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1165.6</x><y>207.9</y><top>10.0</top><bottom>10.0</bottom><left>24.4</left><right>24.4</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="text.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.UA.SRV_STATE</itemName><itemAttribute>ItemStatusMnemonic</itemAttribute></connection></action></data></text>
|
||||
<rectangle type="componentData"><htmlId>35</htmlId><roundingX>0.0214</roundingX><roundingY>0.2440</roundingY><x>920.0</x><y>266.0</y><top>24.6</top><bottom>24.6</bottom><left>280.0</left><right>280.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="22" g="27" b="34"/></fillPaint></rectangle>
|
||||
<ellipse type="componentData"><htmlId>36</htmlId><x>665.0</x><y>266.0</y><top>9.0</top><bottom>9.0</bottom><left>9.0</left><right>9.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="71" g="85" b="105"/></fillPaint><data type="data"><action type="actionConnectTo"><property type="property" name="ellipse.fillPaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Double</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>0.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut><thresholdIn>0.5</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="34" g="197" b="94"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.SYSTEM.PING_LOCALHOST</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></ellipse>
|
||||
<text type="componentData"><htmlId>37</htmlId><value>localhost reachable</value><font type="font" name="Segoe UI" size="13" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>743.1</x><y>266.0</y><top>10.0</top><bottom>10.0</bottom><left>55.1</left><right>55.1</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>38</htmlId><value>NORMAL</value><font type="font" name="Segoe UI" size="12" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1165.6</x><y>266.0</y><top>10.0</top><bottom>10.0</bottom><left>24.4</left><right>24.4</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="text.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.SYSTEM.PING_LOCALHOST</itemName><itemAttribute>ItemStatusMnemonic</itemAttribute></connection></action></data></text>
|
||||
<rectangle type="componentData"><htmlId>39</htmlId><roundingX>0.0214</roundingX><roundingY>0.2440</roundingY><x>920.0</x><y>324.1</y><top>24.6</top><bottom>24.6</bottom><left>280.0</left><right>280.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="22" g="27" b="34"/></fillPaint></rectangle>
|
||||
<ellipse type="componentData"><htmlId>40</htmlId><x>665.0</x><y>324.1</y><top>9.0</top><bottom>9.0</bottom><left>9.0</left><right>9.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="71" g="85" b="105"/></fillPaint><data type="data"><action type="actionConnectTo"><property type="property" name="ellipse.fillPaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Double</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>0.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut><thresholdIn>0.5</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="34" g="197" b="94"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.SYSTEM.PROC_ALM</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></ellipse>
|
||||
<text type="componentData"><htmlId>41</htmlId><value>ALARM process (alm) running</value><font type="font" name="Segoe UI" size="13" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>772.3</x><y>324.1</y><top>10.0</top><bottom>10.0</bottom><left>84.3</left><right>84.3</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>42</htmlId><value>NORMAL</value><font type="font" name="Segoe UI" size="12" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1165.6</x><y>324.1</y><top>10.0</top><bottom>10.0</bottom><left>24.4</left><right>24.4</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="text.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.SYSTEM.PROC_ALM</itemName><itemAttribute>ItemStatusMnemonic</itemAttribute></connection></action></data></text>
|
||||
<rectangle type="componentData"><htmlId>43</htmlId><roundingX>0.0312</roundingX><roundingY>0.0559</roundingY><x>1550.0</x><y>190.0</y><top>178.8</top><bottom>178.8</bottom><left>320.0</left><right>320.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></strokePaint><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="28" g="35" b="45"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>44</htmlId><value>OPC UA LOOPBACK</value><font type="font" name="Segoe UI" bold="true" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1299.7</x><y>36.9</y><top>11.0</top><bottom>11.0</bottom><left>49.7</left><right>49.7</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>45</htmlId><value>TANK1.LEVEL read back through CI Server's own OPC UA server</value><font type="font" name="Segoe UI" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="88" g="100" b="116"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1385.5</x><y>59.2</y><top>9.0</top><bottom>9.0</bottom><left>135.5</left><right>135.5</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>46</htmlId><value>TANK1.LEVEL</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1290.7</x><y>87.2</y><top>8.0</top><bottom>8.0</bottom><left>30.7</left><right>30.7</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<number type="componentData"><htmlId>47</htmlId><value>0.0</value><format>999.9</format><font type="font" name="Consolas" bold="true" size="32" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="20" g="184" b="166"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1303.9</x><y>125.2</y><top>22.0</top><bottom>22.0</bottom><left>43.9</left><right>43.9</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<dataBar type="componentData" x="1390.0" y="177.7" top="9.0" bottom="9.0" left="130.0" right="130.0" rotation="0.0" shear="0.0"><htmlId>48</htmlId><fillOn>true</fillOn><background type="paint"><paint type="colorSet" r="40" g="50" b="64"/></background><foreground type="paint"><paint type="colorSet" r="20" g="184" b="166"/></foreground><borderColor type="paint"><paint type="colorSet" r="40" g="50" b="64"/></borderColor><foregroundBorderColor type="paint"><paint type="colorSet" r="20" g="184" b="166"/></foregroundBorderColor><lowLimit>0.0</lowLimit><highLimit>100.0</highLimit><growthDirection type="growthDirection" value="GrowthDirectionRight"/><data type="data"><action type="actionConnectTo"><property type="property" name="dataBar.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></dataBar>
|
||||
<text type="componentData"><htmlId>49</htmlId><value>LAST UPDATE</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1291.7</x><y>212.4</y><top>8.0</top><bottom>8.0</bottom><left>31.7</left><right>31.7</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<numberField type="componentData" x="1390.0" y="241.4" top="14.0" bottom="14.0" left="130.0" right="130.0" rotation="0.0" shear="0.0"><htmlId>50</htmlId><font type="font" name="Consolas" bold="true" size="13" underline="false" strikethrough="false"/><format></format><editable>false</editable><asDateTime>true</asDateTime><foregroundColor type="colorSet" r="230" g="237" b="243"/><backgroundColor type="colorSet" r="36" g="45" b="57"/><justification type="jTextJustification" value="TextJustificationRight"/><data type="data"><action type="actionConnectTo"><property type="property" name="numberField.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemUpdTime</itemAttribute></connection></action></data></numberField>
|
||||
<text type="componentData"><htmlId>51</htmlId><value>UA.LEVEL_COPY</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1596.1</x><y>87.2</y><top>8.0</top><bottom>8.0</bottom><left>36.1</left><right>36.1</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<number type="componentData"><htmlId>52</htmlId><value>0.0</value><format>999.9</format><font type="font" name="Consolas" bold="true" size="32" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="59" g="130" b="246"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1603.9</x><y>125.2</y><top>22.0</top><bottom>22.0</bottom><left>43.9</left><right>43.9</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.UA.LEVEL_COPY</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<dataBar type="componentData" x="1690.0" y="177.7" top="9.0" bottom="9.0" left="130.0" right="130.0" rotation="0.0" shear="0.0"><htmlId>53</htmlId><fillOn>true</fillOn><background type="paint"><paint type="colorSet" r="40" g="50" b="64"/></background><foreground type="paint"><paint type="colorSet" r="59" g="130" b="246"/></foreground><borderColor type="paint"><paint type="colorSet" r="40" g="50" b="64"/></borderColor><foregroundBorderColor type="paint"><paint type="colorSet" r="59" g="130" b="246"/></foregroundBorderColor><lowLimit>0.0</lowLimit><highLimit>100.0</highLimit><growthDirection type="growthDirection" value="GrowthDirectionRight"/><data type="data"><action type="actionConnectTo"><property type="property" name="dataBar.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.UA.LEVEL_COPY</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></dataBar>
|
||||
<text type="componentData"><htmlId>54</htmlId><value>LAST UPDATE</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>1591.7</x><y>212.4</y><top>8.0</top><bottom>8.0</bottom><left>31.7</left><right>31.7</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<numberField type="componentData" x="1690.0" y="241.4" top="14.0" bottom="14.0" left="130.0" right="130.0" rotation="0.0" shear="0.0"><htmlId>55</htmlId><font type="font" name="Consolas" bold="true" size="13" underline="false" strikethrough="false"/><format></format><editable>false</editable><asDateTime>true</asDateTime><foregroundColor type="colorSet" r="230" g="237" b="243"/><backgroundColor type="colorSet" r="36" g="45" b="57"/><justification type="jTextJustification" value="TextJustificationRight"/><data type="data"><action type="actionConnectTo"><property type="property" name="numberField.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.UA.LEVEL_COPY</itemName><itemAttribute>ItemUpdTime</itemAttribute></connection></action></data></numberField>
|
||||
<rectangularScale type="componentData" x="1540.0" y="298.4" top="17.0" bottom="17.0" left="280.0" right="280.0" rotation="0.0" shear="0.0"><htmlId>56</htmlId><maximum>100.0</maximum><minimum>0.0</minimum><majorTickSpacing>10.0</majorTickSpacing><minorTickSpacing>5.0</minorTickSpacing><format>999</format><vertical>false</vertical><color type="colorSet" r="139" g="152" b="168"/><font type="font" name="Segoe UI" size="10" underline="false" strikethrough="false"/></rectangularScale>
|
||||
<rectangle type="componentData"><htmlId>57</htmlId><roundingX>0.0108</roundingX><roundingY>0.0542</roundingY><x>940.0</x><y>564.4</y><top>184.4</top><bottom>184.4</bottom><left>930.0</left><right>930.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>true</strokeOn><strokePaint type="paint"><paint type="colorSet" r="48" g="61" b="77"/></strokePaint><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="28" g="35" b="45"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>58</htmlId><value>REPORTS</value><font type="font" name="Segoe UI" bold="true" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>52.9</x><y>405.7</y><top>11.0</top><bottom>11.0</bottom><left>22.9</left><right>22.9</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>59</htmlId><value>Report component: select CIENG_TANK1 or CIENG_HTML, generate and view</value><font type="font" name="Segoe UI" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="88" g="100" b="116"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>193.3</x><y>428.1</y><top>9.0</top><bottom>9.0</bottom><left>163.3</left><right>163.3</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<reporting type="componentData" x="940.0" y="586.8" top="150.9" bottom="150.9" left="920.0" right="920.0" rotation="0.0" shear="0.0"><htmlId>60</htmlId><data type="data"><action type="actionInternalServiced"/></data></reporting>
|
||||
</coreObjectDefinition>
|
||||
</visualization>
|
||||
66
examples/CI-Eng-Sample/displays/CIENG_TankFaceplate.xml
Normal file
66
examples/CI-Eng-Sample/displays/CIENG_TankFaceplate.xml
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
<?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"/>
|
||||
<title>Tank 1 faceplate</title>
|
||||
<html>true</html>
|
||||
<width>420</width>
|
||||
<height>600</height>
|
||||
<referenceCheck>42</referenceCheck>
|
||||
<backgroundColor type="colorSet" r="28" g="35" b="45"/>
|
||||
<backgroundColorOn>true</backgroundColorOn>
|
||||
<defaultBgColor type="colorSet" r="28" g="35" b="45"/>
|
||||
<defaultFgColor type="colorSet" r="230" g="237" b="243"/>
|
||||
<defaultFont type="font" name="Segoe UI" size="12" underline="false" strikethrough="false"/>
|
||||
<defaultStroke type="stroke" width="1.0"/>
|
||||
<grid type="grid" gridVisible="true" snappingActive="true" verticalSnapInterval="4" horizontalSnapInterval="4" onTop="false"><color type="colorSet" r="51" g="59" b="71"/></grid>
|
||||
<revisionHistory type="revisionHistory"><revision type="revision" who="ADMIN" when="2026.10.02 12:00:00.000 AEST" what="Generated by displays/generator/build.py" where="localhost"/></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>36</componentCountHint>
|
||||
<rectangle type="componentData"><htmlId>7</htmlId><x>210.0</x><y>300.0</y><top>300.0</top><bottom>300.0</bottom><left>210.0</left><right>210.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="28" g="35" b="45"/></fillPaint></rectangle>
|
||||
<rectangle type="componentData"><htmlId>8</htmlId><x>210.0</x><y>26.0</y><top>26.0</top><bottom>26.0</bottom><left>210.0</left><right>210.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="36" g="45" b="57"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>9</htmlId><value>TANK 1 | LEVEL</value><font type="font" name="Segoe UI" bold="true" size="15" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>77.5</x><y>26.0</y><top>12.0</top><bottom>12.0</bottom><left>57.5</left><right>57.5</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<button type="componentData" x="388.0" y="26.0" top="16.0" bottom="16.0" left="18.0" right="18.0" rotation="0.0" shear="0.0"><htmlId>10</htmlId><toolTipText>Close</toolTipText><label>X</label><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><foregroundColor type="colorSet" r="230" g="237" b="243"/><backgroundColor type="colorSet" r="28" g="35" b="45"/><data type="data"><action type="actionExitDisplay"><event type="event" event="On action"/></action></data></button>
|
||||
<text type="componentData"><htmlId>11</htmlId><value>Tank 1 level (%)</value><font type="font" name="Segoe UI" size="11" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>57.0</x><y>73.0</y><top>9.0</top><bottom>9.0</bottom><left>37.0</left><right>37.0</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="text.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemDesc</itemAttribute></connection></action></data></text>
|
||||
<number type="componentData"><htmlId>12</htmlId><value>0.0</value><format>999.9</format><font type="font" name="Consolas" bold="true" size="44" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>78.5</x><y>114.0</y><top>28.0</top><bottom>28.0</bottom><left>58.5</left><right>58.5</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action><action type="actionConnectTo"><property type="property" name="number.fillPaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Double</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>0.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut><thresholdIn>10.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="245" g="158" b="11"/></thresholdOut><thresholdIn>20.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="20" g="184" b="166"/></thresholdOut><thresholdIn>80.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="245" g="158" b="11"/></thresholdOut><thresholdIn>90.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<text type="componentData"><htmlId>13</htmlId><value>%</value><font type="font" name="Segoe UI" size="16" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>230.3</x><y>118.0</y><top>12.0</top><bottom>12.0</bottom><left>6.3</left><right>6.3</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>14</htmlId><value>STATUS</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>381.5</x><y>100.0</y><top>8.0</top><bottom>8.0</bottom><left>18.5</left><right>18.5</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<text type="componentData"><htmlId>15</htmlId><value>NORMAL</value><font type="font" name="Segoe UI" bold="true" size="16" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>366.4</x><y>123.0</y><top>13.0</top><bottom>13.0</bottom><left>33.6</left><right>33.6</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="text.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemStatusMnemonic</itemAttribute></connection></action><action type="actionConnectTo"><property type="property" name="text.fillPaint"/><filter type="filter"><value>0.0</value></filter><transformation type="transformationThreshold"><inputType>java.lang.Double</inputType><outputType>fasttools.jwui.common.property.paint.PaintSet</outputType><thresholdTable type="thresholdTable"><thresholdIn>0.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut><thresholdIn>10.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="245" g="158" b="11"/></thresholdOut><thresholdIn>20.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="20" g="184" b="166"/></thresholdOut><thresholdIn>80.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="245" g="158" b="11"/></thresholdOut><thresholdIn>90.0</thresholdIn><thresholdOut type="paint"><paint type="colorSet" r="239" g="68" b="68"/></thresholdOut></thresholdTable></transformation><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></text>
|
||||
<dataBar type="componentData" x="70.0" y="300.0" top="140.0" bottom="140.0" left="30.0" right="30.0" rotation="0.0" shear="0.0"><htmlId>16</htmlId><fillOn>true</fillOn><background type="paint"><paint type="colorSet" r="40" g="50" b="64"/></background><foreground type="paint"><paint type="colorSet" r="59" g="130" b="246"/></foreground><borderColor type="paint"><paint type="colorSet" r="40" g="50" b="64"/></borderColor><foregroundBorderColor type="paint"><paint type="colorSet" r="59" g="130" b="246"/></foregroundBorderColor><lowLimit>0.0</lowLimit><highLimit>100.0</highLimit><growthDirection type="growthDirection" value="GrowthDirectionUp"/><data type="data"><action type="actionConnectTo"><property type="property" name="dataBar.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></dataBar>
|
||||
<rectangularScale type="componentData" x="126.0" y="300.0" top="140.0" bottom="140.0" left="22.0" right="22.0" rotation="0.0" shear="0.0"><htmlId>17</htmlId><maximum>100.0</maximum><minimum>0.0</minimum><majorTickSpacing>20.0</majorTickSpacing><minorTickSpacing>5.0</minorTickSpacing><format>999</format><vertical>true</vertical><color type="colorSet" r="139" g="152" b="168"/><font type="font" name="Segoe UI" size="10" underline="false" strikethrough="false"/></rectangularScale>
|
||||
<text type="componentData"><htmlId>18</htmlId><value>ALARM LIMITS</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>225.1</x><y>168.0</y><top>8.0</top><bottom>8.0</bottom><left>35.1</left><right>35.1</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<rectangle type="componentData"><htmlId>19</htmlId><roundingX>0.0571</roundingX><roundingY>0.3529</roundingY><x>295.0</x><y>203.0</y><top>17.0</top><bottom>17.0</bottom><left>105.0</left><right>105.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="22" g="27" b="34"/></fillPaint></rectangle>
|
||||
<rectangle type="componentData"><htmlId>20</htmlId><x>193.0</x><y>203.0</y><top>17.0</top><bottom>17.0</bottom><left>3.0</left><right>3.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="239" g="68" b="68"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>21</htmlId><value>High-High</value><font type="font" name="Segoe UI" size="12" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>233.8</x><y>203.0</y><top>9.0</top><bottom>9.0</bottom><left>27.8</left><right>27.8</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<number type="componentData"><htmlId>22</htmlId><value>0.0</value><format>999.9</format><font type="font" name="Consolas" bold="true" size="16" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="239" g="68" b="68"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>368.1</x><y>203.0</y><top>13.0</top><bottom>13.0</bottom><left>21.9</left><right>21.9</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemHHL</itemAttribute></connection></action></data></number>
|
||||
<rectangle type="componentData"><htmlId>23</htmlId><roundingX>0.0571</roundingX><roundingY>0.3529</roundingY><x>295.0</x><y>243.0</y><top>17.0</top><bottom>17.0</bottom><left>105.0</left><right>105.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="22" g="27" b="34"/></fillPaint></rectangle>
|
||||
<rectangle type="componentData"><htmlId>24</htmlId><x>193.0</x><y>243.0</y><top>17.0</top><bottom>17.0</bottom><left>3.0</left><right>3.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="245" g="158" b="11"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>25</htmlId><value>High</value><font type="font" name="Segoe UI" size="12" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>218.7</x><y>243.0</y><top>9.0</top><bottom>9.0</bottom><left>12.7</left><right>12.7</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<number type="componentData"><htmlId>26</htmlId><value>0.0</value><format>999.9</format><font type="font" name="Consolas" bold="true" size="16" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="245" g="158" b="11"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>368.1</x><y>243.0</y><top>13.0</top><bottom>13.0</bottom><left>21.9</left><right>21.9</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemHL</itemAttribute></connection></action></data></number>
|
||||
<rectangle type="componentData"><htmlId>27</htmlId><roundingX>0.0571</roundingX><roundingY>0.3529</roundingY><x>295.0</x><y>283.0</y><top>17.0</top><bottom>17.0</bottom><left>105.0</left><right>105.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="22" g="27" b="34"/></fillPaint></rectangle>
|
||||
<rectangle type="componentData"><htmlId>28</htmlId><x>193.0</x><y>283.0</y><top>17.0</top><bottom>17.0</bottom><left>3.0</left><right>3.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="245" g="158" b="11"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>29</htmlId><value>Low</value><font type="font" name="Segoe UI" size="12" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>216.7</x><y>283.0</y><top>9.0</top><bottom>9.0</bottom><left>10.7</left><right>10.7</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<number type="componentData"><htmlId>30</htmlId><value>0.0</value><format>999.9</format><font type="font" name="Consolas" bold="true" size="16" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="245" g="158" b="11"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>368.1</x><y>283.0</y><top>13.0</top><bottom>13.0</bottom><left>21.9</left><right>21.9</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemLL</itemAttribute></connection></action></data></number>
|
||||
<rectangle type="componentData"><htmlId>31</htmlId><roundingX>0.0571</roundingX><roundingY>0.3529</roundingY><x>295.0</x><y>323.0</y><top>17.0</top><bottom>17.0</bottom><left>105.0</left><right>105.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="22" g="27" b="34"/></fillPaint></rectangle>
|
||||
<rectangle type="componentData"><htmlId>32</htmlId><x>193.0</x><y>323.0</y><top>17.0</top><bottom>17.0</bottom><left>3.0</left><right>3.0</right><rotation>0.0</rotation><shear>0.0</shear><stroke type="stroke" width="1.0"/><strokeOn>false</strokeOn><fillOn>true</fillOn><fillPaint type="paint"><paint type="colorSet" r="239" g="68" b="68"/></fillPaint></rectangle>
|
||||
<text type="componentData"><htmlId>33</htmlId><value>Low-Low</value><font type="font" name="Segoe UI" size="12" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>229.9</x><y>323.0</y><top>9.0</top><bottom>9.0</bottom><left>23.9</left><right>23.9</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<number type="componentData"><htmlId>34</htmlId><value>0.0</value><format>999.9</format><font type="font" name="Consolas" bold="true" size="16" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="239" g="68" b="68"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>368.1</x><y>323.0</y><top>13.0</top><bottom>13.0</bottom><left>21.9</left><right>21.9</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemLLL</itemAttribute></connection></action></data></number>
|
||||
<text type="componentData"><htmlId>35</htmlId><value>MAXIMUM SEEN</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>229.5</x><y>360.0</y><top>8.0</top><bottom>8.0</bottom><left>39.5</left><right>39.5</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<number type="componentData"><htmlId>36</htmlId><value>0.0</value><format>999.9</format><font type="font" name="Consolas" bold="true" size="22" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="230" g="237" b="243"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>219.2</x><y>386.0</y><top>16.0</top><bottom>16.0</bottom><left>29.2</left><right>29.2</right><rotation>0.0</rotation><shear>0.0</shear><data type="data"><action type="actionConnectTo"><property type="property" name="number.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL.MAX</itemName><itemAttribute>ItemValue</itemAttribute></connection></action></data></number>
|
||||
<text type="componentData"><htmlId>37</htmlId><value>LAST UPDATE</value><font type="font" name="Segoe UI" bold="true" size="10" underline="false" strikethrough="false"/><fillPaint type="paint"><paint type="colorSet" r="139" g="152" b="168"/></fillPaint><justification type="textJustification" value="TextJustificationCenter"/><stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize><x>221.7</x><y>420.0</y><top>8.0</top><bottom>8.0</bottom><left>31.7</left><right>31.7</right><rotation>0.0</rotation><shear>0.0</shear></text>
|
||||
<numberField type="componentData" x="295.0" y="442.0" top="12.0" bottom="12.0" left="105.0" right="105.0" rotation="0.0" shear="0.0"><htmlId>38</htmlId><font type="font" name="Consolas" bold="true" size="11" underline="false" strikethrough="false"/><format></format><editable>false</editable><asDateTime>true</asDateTime><foregroundColor type="colorSet" r="230" g="237" b="243"/><backgroundColor type="colorSet" r="36" g="45" b="57"/><justification type="jTextJustification" value="TextJustificationRight"/><data type="data"><action type="actionConnectTo"><property type="property" name="numberField.value"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemUpdTime</itemAttribute></connection></action></data></numberField>
|
||||
<microTrend type="componentData" x="210.0" y="500.0" top="40.0" bottom="40.0" left="190.0" right="190.0" rotation="0.0" shear="0.0"><htmlId>39</htmlId><numberOfPens>1</numberOfPens><realTime>true</realTime><fillWithHistory>true</fillWithHistory><microTrendBackgroundFillOn>true</microTrendBackgroundFillOn><lowHighFillOn>false</lowHighFillOn><microTrendBackgroundFillColor type="colorSet" r="22" g="27" b="34"/><microTrendBackgroundColor type="colorSet" r="48" g="61" b="77"/><property type="componentProperty"><name>itemName[0]</name><value/></property><property type="componentProperty"><name>scaleMin[0]</name><value>0.0</value></property><property type="componentProperty"><name>scaleMax[0]</name><value>100.0</value></property><property type="componentProperty"><name>color[0]</name><value type="colorSet" r="20" g="184" b="166"/></property><property type="componentProperty"><name>stroke[0]</name><value type="stroke" width="2.0"/></property><data type="data"><action type="actionInternalServiced"/><action type="actionConnectTo"><property type="property" name="microTrend.itemName[0]"/><filter type="filter"><value>0.0</value></filter><connection type="connection"><direction>1</direction><itemName>CI-Eng-Sample.TANK1.LEVEL</itemName><itemAttribute>ItemName</itemAttribute></connection></action></data></microTrend>
|
||||
<button type="componentData" x="80.0" y="569.0" top="17.0" bottom="17.0" left="60.0" right="60.0" rotation="0.0" shear="0.0"><htmlId>40</htmlId><label>Trends</label><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><foregroundColor type="colorSet" r="230" g="237" b="243"/><backgroundColor type="colorSet" r="36" g="45" b="57"/><data type="data"><action type="actionActivateDisplay"><event type="event" event="On action"/><type type="displayActivationType" value="ActivateSpecific"/><display>CIENG_Trends</display><layout>CIENG_Operator</layout><layoutFrame>trd</layoutFrame></action></data></button>
|
||||
<button type="componentData" x="210.0" y="569.0" top="17.0" bottom="17.0" left="60.0" right="60.0" rotation="0.0" shear="0.0"><htmlId>41</htmlId><label>Alarms</label><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><foregroundColor type="colorSet" r="230" g="237" b="243"/><backgroundColor type="colorSet" r="36" g="45" b="57"/><data type="data"><action type="actionActivateDisplay"><event type="event" event="On action"/><type type="displayActivationType" value="ActivateSpecific"/><display>CIENG_Alarms</display><layout>CIENG_Operator</layout><layoutFrame>alm</layoutFrame></action></data></button>
|
||||
<button type="componentData" x="340.0" y="569.0" top="17.0" bottom="17.0" left="60.0" right="60.0" rotation="0.0" shear="0.0"><htmlId>42</htmlId><label>Close</label><font type="font" name="Segoe UI" bold="true" size="12" underline="false" strikethrough="false"/><foregroundColor type="colorSet" r="255" g="255" b="255"/><backgroundColor type="colorSet" r="59" g="130" b="246"/><data type="data"><action type="actionExitDisplay"><event type="event" event="On action"/></action></data></button>
|
||||
</coreObjectDefinition>
|
||||
</visualization>
|
||||
48
examples/CI-Eng-Sample/displays/CIENG_Trends.xml
Normal file
48
examples/CI-Eng-Sample/displays/CIENG_Trends.xml
Normal file
File diff suppressed because one or more lines are too long
|
|
@ -3,12 +3,11 @@ rem Deploy the CI-Eng-Sample displays into the operator interface (deployment DE
|
|||
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.
|
||||
rem The files are generated by generator\build.py (already in this folder; rerun only after changes).
|
||||
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\"
|
||||
copy /y CIENG_Menu.xml "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\"
|
||||
copy /y CIENG_TrendLab.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_Menu
|
||||
call jwuiutl.cmd -e HTML -i -f DEPLOY CIENG_TrendLab
|
||||
for %%d in (CIENG_Header CIENG_Overview CIENG_Control CIENG_Trends CIENG_Alarms CIENG_System CIENG_AlarmBanner CIENG_TankFaceplate) do (
|
||||
copy /y %%d.xml "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\" > nul
|
||||
call jwuiutl.cmd -e HTML -i -f DEPLOY %%d
|
||||
)
|
||||
|
|
|
|||
1
examples/CI-Eng-Sample/displays/generator/.gitignore
vendored
Normal file
1
examples/CI-Eng-Sample/displays/generator/.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
__pycache__/
|
||||
44
examples/CI-Eng-Sample/displays/generator/README.md
Normal file
44
examples/CI-Eng-Sample/displays/generator/README.md
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
# Display generator (CI-Eng-Sample operator HMI)
|
||||
|
||||
A small Python tool that **writes the CI-Eng-Sample display files** (`..\CIENG_*.xml`) instead of
|
||||
drawing them in the Edit Module. The XML is the same format the Edit Module saves (display
|
||||
definition 1.3.0.0, *HTML display* on), so the files run in the Operator Interface (desktop) and in
|
||||
the HTML display (web), and they can still be opened and changed in the Edit Module afterwards
|
||||
(but a later generator run overwrites such changes).
|
||||
|
||||
Built and tested with CI Server R1.03.00, Python 3.12 and Pillow, 2026-10-06.
|
||||
|
||||
## Files
|
||||
|
||||
| File | Purpose |
|
||||
|---|---|
|
||||
| `cixml.py` | Library: a `Display` class with one method per component (rectangle, text, number, number/text/date-time field, button, toggle, check box, slider, spinner, combo box, data bar, scales, arc / ring gauge, lamp, alarm overview, report, micro trend, trend), item connections, linear and threshold transformations, actions (open / close display, set item value, execute command) and the dark colour theme |
|
||||
| `build.py` | The eight sample displays: `CIENG_Header`, `CIENG_Overview`, `CIENG_Control`, `CIENG_Trends`, `CIENG_Alarms`, `CIENG_System`, `CIENG_AlarmBanner` (layout `CIENG_Operator`) and `CIENG_TankFaceplate` (layout `CIENG_Popup`) |
|
||||
|
||||
## Use
|
||||
|
||||
```
|
||||
python build.py (writes ..\CIENG_*.xml)
|
||||
python build.py <folder> (writes into another folder)
|
||||
```
|
||||
|
||||
Then deploy with `..\deploy_displays.cmd`. Requirements: Python 3, Pillow (`pip install pillow`;
|
||||
used to measure text widths with the Windows fonts Segoe UI and Consolas). Without Pillow it falls
|
||||
back to an estimate and left/right-aligned texts land slightly off.
|
||||
|
||||
## How it works (rules learned on R1.03.00)
|
||||
|
||||
- Positions are boxes (left, top, width, height); the file stores the centre plus half sizes.
|
||||
- Texts and numbers use *keep original size*: the HTML export draws them at their font size centred
|
||||
on the box (otherwise the text is stretched to the box). The box is therefore shrunk to the
|
||||
measured text width for left / right alignment.
|
||||
- Rectangle rounding is stored as a fraction (0..1) of the half size (values above 1 draw an
|
||||
ellipse in the web client).
|
||||
- The tab displays are designed 1880 x 680 and stretched to 1880 x 760 (`design_h`): panels, bars,
|
||||
lists and trends grow, texts / controls / round shapes keep their size and only move.
|
||||
- Ring gauges are symmetric about the horizontal axis (gap on the right, value growing from 9
|
||||
o'clock up and down) because the desktop draws arc angles mirrored compared with the web.
|
||||
- The live-data button runs `C:\Users\Public\CI-Eng-Sample\feed\cieng_feed_start.cmd` on the
|
||||
server (`FEED_START` in `build.py`; installed by `..\..\feed\install_feed.ps1`).
|
||||
- Trend: `trend(..., web_spares=True)` pads a trend to 50 pens so it also draws on the web; the
|
||||
sample trend uses `web_spares=False` (2 pens, clean desktop hairline, no line on the web).
|
||||
351
examples/CI-Eng-Sample/displays/generator/build.py
Normal file
351
examples/CI-Eng-Sample/displays/generator/build.py
Normal file
|
|
@ -0,0 +1,351 @@
|
|||
"""Build the CI-Eng-Sample demo displays (CI Server R1.03.00, HTML mode = desktop + web).
|
||||
|
||||
python build.py [<output folder>] (default: the displays folder, ..)
|
||||
|
||||
See README.md in this folder.
|
||||
|
||||
Displays: CIENG_Header, CIENG_Overview, CIENG_Control, CIENG_Trends, CIENG_Alarms, CIENG_System,
|
||||
CIENG_AlarmBanner (frames of layout CIENG_Operator) and CIENG_TankFaceplate (layout CIENG_Popup).
|
||||
"""
|
||||
import os, sys
|
||||
sys.path.insert(0, os.path.dirname(__file__))
|
||||
from cixml import *
|
||||
|
||||
S = 'CI-Eng-Sample.'
|
||||
LEVEL, INFLOW, VOLUME = S + 'TANK1.LEVEL', S + 'TANK1.INFLOW', S + 'TANK1.CALC.VOLUME'
|
||||
LVL_COLORS = [(0, 'red'), (10, 'amber'), (20, 'teal'), (80, 'amber'), (90, 'red')] # LL/L/normal/H/HH
|
||||
# live-data feed, installed by feed\install_feed.ps1 into a fixed folder outside CI Server
|
||||
FEED_START = r'cmd /c "C:\Users\Public\CI-Eng-Sample\feed\cieng_feed_start.cmd"'
|
||||
W, H, HD = 1880, 760, 680 # content displays (tab frames): 1880 x 760 (about 2.5:1, between the
|
||||
# 16:9 and 16:10 content areas); coordinates below are designed for 680 high
|
||||
FACEPLATE = act_open('CIENG_TankFaceplate', 'CIENG_Popup', 'default')
|
||||
FACEPLATE_CLICK = act_open('CIENG_TankFaceplate', 'CIENG_Popup', 'default', event='Clicked b1')
|
||||
|
||||
|
||||
def card(d, l, t, w, h, title, sub=None):
|
||||
d.rect(l, t, w, h, fill='card', stroke='line', r=10)
|
||||
d.text(l + 20, t + 12, w - 40, 22, title.upper(), 11, 'muted', bold=True)
|
||||
if sub:
|
||||
d.text(l + 20, t + 34, w - 40, 18, sub, 10, 'dim')
|
||||
|
||||
|
||||
def kv(d, l, t, w, label, item, fmt, unit, size=22, color='text', extra=()):
|
||||
d.text(l, t, w, 16, label, 10, 'muted')
|
||||
d.number(l, t + 18, w - 50, 30, item, fmt, size, color, align='Left', extra=extra)
|
||||
d.text(l + w - 48, t + 26, 48, 18, unit, 11, 'muted')
|
||||
|
||||
|
||||
def level_color(prop='number.fillPaint'):
|
||||
return conn(prop, LEVEL, transform=tr_threshold(LVL_COLORS))
|
||||
|
||||
|
||||
def gauge(d, cx, cy, r, item, mn, mx, fmt, unit, label, color='teal', thresholds=None, extra=()):
|
||||
d.ring_gauge(cx, cy, r, item, mn, mx, color, 12, thresholds)
|
||||
d.number(cx - r + 14, cy - 22, 2 * r - 28, 36, item, fmt, 26, align='Center', extra=extra)
|
||||
d.text(cx - 40, cy + 16, 80, 18, unit, 11, 'muted', align='Center')
|
||||
d.text(cx - r, cy + r - 6, 2 * r, 20, label, 12, 'text', bold=True, align='Center')
|
||||
|
||||
|
||||
def build_header():
|
||||
d = Display('CIENG_Header', 1920, 96, 'Header', bg='panel')
|
||||
d.rect(0, 0, 1920, 96, fill='panel')
|
||||
d.line(0, 95, 1920, 95, 'line', 1)
|
||||
d.rect(20, 18, 60, 60, fill='blue', r=14)
|
||||
d.text(20, 34, 60, 28, 'CI', 22, 'white', bold=True, align='Center')
|
||||
d.text(96, 18, 380, 30, 'CI-Eng-Sample', 22, 'text', bold=True)
|
||||
d.text(96, 52, 400, 20, 'Operations dashboard | Tank farm demo', 12, 'muted')
|
||||
# KPI chips
|
||||
chips = [(520, 'TANK LEVEL', LEVEL, '999.9', '%', [level_color()]),
|
||||
(700, 'INFLOW', INFLOW, '9999.9', 'm3/h', []),
|
||||
(880, 'VOLUME', VOLUME, '9999.9', 'm3', [])]
|
||||
for x, label, item, fmt, unit, extra in chips:
|
||||
d.rect(x, 14, 168, 68, fill='card', stroke='line', r=8)
|
||||
d.text(x + 14, 22, 140, 16, label, 10, 'muted', bold=True)
|
||||
d.number(x + 14, 40, 100, 32, item, fmt, 22, align='Left', extra=extra)
|
||||
d.text(x + 118, 50, 46, 18, unit, 11, 'muted')
|
||||
x = 1060
|
||||
d.rect(x, 14, 168, 68, fill='card', stroke='line', r=8)
|
||||
d.text(x + 14, 22, 140, 16, 'PUMP 1', 10, 'muted', bold=True)
|
||||
d.lamp(x + 14, 48, 18, S + 'PUMP1.RUNNING')
|
||||
for txt, col, on in (('RUNNING', 'green', True), ('STOPPED', 'muted', False)):
|
||||
d.text(x + 40, 44, 120, 24, txt, 14, col, bold=True)
|
||||
d.parts[-1] = d.parts[-1].replace('</text>', data([conn('text.visible', S + 'PUMP1.RUNNING',
|
||||
transform=tr_threshold([(False, not on), (True, on)], 'Boolean', 'Boolean'))]) + '</text>')
|
||||
x = 1240
|
||||
d.rect(x, 14, 168, 68, fill='card', stroke='line', r=8)
|
||||
d.text(x + 14, 22, 140, 16, 'COMMUNICATION', 10, 'muted', bold=True)
|
||||
d.lamp(x + 14, 50, 14, S + 'PLC1.COMM_OK', off='red')
|
||||
d.text(x + 34, 46, 50, 20, 'PLC1', 12, 'text')
|
||||
d.lamp(x + 90, 50, 14, S + 'UA.COMM_OK', off='red')
|
||||
d.text(x + 110, 46, 50, 20, 'OPC UA', 12, 'text')
|
||||
# live data start/stop
|
||||
x = 1424
|
||||
d.rect(x, 14, 250, 68, fill='card', stroke='line', r=8)
|
||||
d.text(x + 14, 22, 120, 16, 'LIVE DATA', 10, 'muted', bold=True)
|
||||
d.lamp(x + 112, 23, 12, S + 'DEMO.FEED_ON')
|
||||
d.button(x + 14, 44, 104, 30, 'Start', [act_set(S + 'DEMO.FEED_ON', 1), act_cmd(FEED_START)], fg='white', bg='green',
|
||||
tip='Start the live-data feed (cieng_feed.ps1) on the server')
|
||||
d.button(x + 130, 44, 104, 30, 'Stop', [act_set(S + 'DEMO.FEED_ON', 0)], fg='text', bg='card2',
|
||||
tip='Stop the feed (ends within 5 s)')
|
||||
# faceplate + clock
|
||||
d.button(1688, 14, 92, 68, 'Tank 1', [FACEPLATE], fg='white', bg='blue', tip='Open the Tank 1 faceplate popup')
|
||||
d.text(1792, 22, 120, 16, 'LAST UPDATE', 10, 'muted', bold=True)
|
||||
d.time_text(1792, 44, 122, 28, S + 'DEMO.COUNTER', 9)
|
||||
return d
|
||||
|
||||
|
||||
def build_overview():
|
||||
d = Display('CIENG_Overview', W, H, 'Overview', design_h=HD)
|
||||
d.rect(0, 0, W, HD, fill='bg')
|
||||
card(d, 10, 10, 1110, 660, 'Process - Tank 1', 'Click the tank for its faceplate')
|
||||
# inflow pipe + flow indicator
|
||||
d.rect(60, 330, 380, 16, fill='track')
|
||||
d.rect(60, 333, 380, 10, fill='teal', actions=[conn('rectangle.visible', INFLOW,
|
||||
transform=tr_threshold([(0, False), (5, True)], 'Double', 'Boolean'))])
|
||||
d.text(60, 250, 200, 16, 'INFLOW', 10, 'muted', bold=True)
|
||||
d.number(60, 268, 150, 40, INFLOW, '9999.9', 30, align='Left')
|
||||
d.text(214, 282, 60, 20, 'm3/h', 12, 'muted')
|
||||
# tank
|
||||
d.rect(440, 100, 240, 480, fill='panel', stroke='line', sw=2, r=18, actions=[FACEPLATE_CLICK],
|
||||
tip='Tank 1 - click for the faceplate')
|
||||
d.rect(450, 110, 220, 460, fill='blue', r=12, fill_amount=0.5, fill_dir='FillDirectionUp',
|
||||
actions=[conn('rectangle.fillAmount', LEVEL, transform=tr_linear(0, 100, 0, 1)),
|
||||
conn('rectangle.fillPaint', LEVEL, transform=tr_threshold(
|
||||
[(0, (185, 28, 28)), (10, (180, 83, 9)), (20, (37, 99, 235)), (80, (180, 83, 9)), (90, (185, 28, 28))])),
|
||||
FACEPLATE_CLICK])
|
||||
d.text(450, 60, 220, 28, 'TANK 1', 16, 'text', bold=True, align='Center')
|
||||
d.number(460, 300, 200, 50, LEVEL, '999.9', 40, 'white', align='Center')
|
||||
d.text(460, 352, 200, 20, '% level', 12, 'text', align='Center')
|
||||
for pct, lab, col in ((90, 'HH 90', 'red'), (80, 'H 80', 'amber'), (20, 'L 20', 'amber'), (10, 'LL 10', 'red')):
|
||||
y = 570 - pct * 4.6
|
||||
d.line(682, y, 700, y, col, 2)
|
||||
d.text(706, y - 9, 60, 18, lab, 10, col, bold=True)
|
||||
d.button(470, 594, 180, 32, 'Open faceplate', [FACEPLATE], fg='white', bg='blue')
|
||||
# outlet pipe + pump
|
||||
d.rect(680, 532, 150, 16, fill='track')
|
||||
d.rect(680, 535, 150, 10, fill='teal', actions=[conn('rectangle.visible', S + 'PUMP1.RUNNING')])
|
||||
d.ellipse(830, 495, 90, 90, fill='off', stroke='line', sw=2, actions=[
|
||||
conn('ellipse.fillPaint', S + 'PUMP1.RUNNING', transform=tr_threshold([(False, 'off'), (True, 'green')], 'Boolean'))])
|
||||
d.text(830, 528, 90, 24, 'P1', 16, 'white', bold=True, align='Center')
|
||||
d.rect(920, 532, 170, 16, fill='track')
|
||||
d.rect(920, 535, 170, 10, fill='teal', actions=[conn('rectangle.visible', S + 'PUMP1.RUNNING')])
|
||||
d.text(800, 600, 150, 18, 'PUMP 1', 11, 'muted', bold=True, align='Center')
|
||||
for txt, col, val in (('AUTO', 'teal', 1), ('MANUAL', 'amber', 0)):
|
||||
d.text(800, 620, 150, 20, txt, 13, col, bold=True, align='Center')
|
||||
d.parts[-1] = d.parts[-1].replace('</text>', data([conn('text.visible', S + 'PUMP1.MODE', transform=tr_threshold(
|
||||
[(0, val == 0), (1, val == 1)], 'Double', 'Boolean'))]) + '</text>')
|
||||
# info column
|
||||
x = 860
|
||||
d.rect(x, 90, 230, 330, fill='panel', stroke='line', r=8)
|
||||
kv(d, x + 16, 104, 200, 'VOLUME (TANK1.CALC)', VOLUME, '9999.9', 'm3')
|
||||
kv(d, x + 16, 168, 200, 'FLOW PER SECOND (JFLOW)', S + 'TANK1.JFLOW.sPerMin', '999.99', 'm3/s')
|
||||
kv(d, x + 16, 232, 200, 'LEVEL MAXIMUM', S + 'TANK1.LEVEL.MAX', '999.9', '%')
|
||||
kv(d, x + 16, 296, 200, 'COUNTER (DEMO.INCR1)', S + 'DEMO.COUNTER', '999', '')
|
||||
d.databar(x + 16, 352, 198, 10, S + 'DEMO.COUNTER', 0, 100, 'violet', 'track', 'Right')
|
||||
d.text(x + 16, 376, 200, 16, 'PUMP RUN TIME', 10, 'muted')
|
||||
d.number(x + 16, 392, 150, 24, S + 'PUMP1.RUNNING.RUN_SECONDS', '9999999', 16, align='Left')
|
||||
d.text(x + 170, 396, 40, 18, 's', 11, 'muted')
|
||||
# gauges
|
||||
card(d, 1130, 10, 740, 330, 'Key figures')
|
||||
gauge(d, 1255, 175, 95, LEVEL, 0, 100, '999.9', '%', 'Level', thresholds=LVL_COLORS, extra=[level_color()])
|
||||
gauge(d, 1500, 175, 95, INFLOW, 0, 500, '9999', 'm3/h', 'Inflow', 'violet')
|
||||
gauge(d, 1745, 175, 95, VOLUME, 0, 200, '999.9', 'm3', 'Volume', 'blue')
|
||||
card(d, 1130, 350, 740, 320, 'Last 10 minutes', 'Micro trend: level (teal, 0-100 %) and inflow (violet, 0-500 m3/h)')
|
||||
d.micro_trend(1150, 410, 700, 240, [(LEVEL, 0, 100, 'teal'), (INFLOW, 0, 500, 'violet')])
|
||||
return d
|
||||
|
||||
|
||||
def build_control():
|
||||
d = Display('CIENG_Control', W, H, 'Process control', design_h=HD)
|
||||
d.rect(0, 0, W, HD, fill='bg')
|
||||
# setpoint -> Modbus loopback
|
||||
card(d, 10, 10, 925, 325, 'Setpoint -> PLC1 (Modbus loopback)', 'Slider, spinner and input field write PLC1.SETPOINT; READBACK returns through Modbus')
|
||||
d.slider(40, 70, 600, 64, S + 'PLC1.SETPOINT', 0, 100, 10, 5)
|
||||
d.text(40, 150, 140, 16, 'SPINNER', 10, 'muted', bold=True)
|
||||
d.spinner(40, 170, 140, 36, S + 'PLC1.SETPOINT', 0, 100, 5)
|
||||
d.text(200, 150, 140, 16, 'INPUT FIELD', 10, 'muted', bold=True)
|
||||
d.number_field(200, 170, 140, 36, S + 'PLC1.SETPOINT', '999', 16)
|
||||
d.text(360, 150, 160, 16, 'SETPOINT', 10, 'muted', bold=True)
|
||||
d.number(360, 168, 120, 40, S + 'PLC1.SETPOINT', '999', 28, 'blue', align='Left')
|
||||
d.text(40, 226, 300, 16, 'READBACK (data bar + scale)', 10, 'muted', bold=True)
|
||||
d.databar(40, 248, 600, 18, S + 'PLC1.READBACK', 0, 100, 'blue', 'track', 'Right')
|
||||
d.rect_scale(40, 268, 600, 36, 0, 100, 10, 5, vertical=False)
|
||||
gauge(d, 790, 175, 95, S + 'PLC1.READBACK', 0, 100, '999', '', 'Readback', 'blue')
|
||||
d.lamp(700, 30, 12, S + 'PLC1.COMM_OK', off='red')
|
||||
d.text(718, 26, 200, 18, 'station CIENG_PLC', 11, 'muted')
|
||||
# digital command
|
||||
card(d, 945, 10, 925, 325, 'Digital command -> PLC1.CMD', 'Toggle and push buttons write the coil; FEEDBACK is read back from the input bit')
|
||||
d.toggle(975, 80, 200, 48, 'CMD (toggle)', S + 'PLC1.CMD', 14)
|
||||
d.button(975, 150, 95, 40, 'Set ON', [act_set(S + 'PLC1.CMD', 1)], fg='white', bg='green')
|
||||
d.button(1080, 150, 95, 40, 'Set OFF', [act_set(S + 'PLC1.CMD', 0)], fg='text', bg='card2')
|
||||
d.ellipse(1300, 80, 120, 120, fill='off', stroke='line', sw=3, actions=[
|
||||
conn('ellipse.fillPaint', S + 'PLC1.FEEDBACK', transform=tr_threshold([(False, 'off'), (True, 'green')], 'Boolean'))])
|
||||
d.text(1300, 128, 120, 24, 'FEEDBACK', 13, 'white', bold=True, align='Center')
|
||||
d.text(1460, 90, 380, 16, 'LAST CHANGE OF FEEDBACK', 10, 'muted', bold=True)
|
||||
d.datetime_field(1460, 112, 300, 30, S + 'PLC1.FEEDBACK', 'ItemUpdTime', 13) # date/time field (editable on the web)
|
||||
d.text(1460, 160, 380, 16, 'STATUS', 10, 'muted', bold=True)
|
||||
d.text(1460, 180, 380, 24, 'NORMAL', 16, 'text', bold=True)
|
||||
d.parts[-1] = d.parts[-1].replace('</text>', data([conn('text.value', S + 'PLC1.FEEDBACK', 'ItemStatusMnemonic')]) + '</text>')
|
||||
# pump
|
||||
card(d, 10, 345, 925, 325, 'Pump 1', 'Combo box, buttons and check box write PUMP1.MODE / PUMP1.RUNNING (mode changes are audited)')
|
||||
d.text(40, 400, 160, 16, 'MODE (COMBO BOX)', 10, 'muted', bold=True)
|
||||
d.combo(40, 420, 200, 34, S + 'PUMP1.MODE', '0;Manual;1;Auto', 14)
|
||||
d.button(260, 420, 110, 34, 'Manual', [act_set(S + 'PUMP1.MODE', 0)], fg='text', bg='card2')
|
||||
d.button(380, 420, 110, 34, 'Auto', [act_set(S + 'PUMP1.MODE', 1)], fg='white', bg='blue')
|
||||
d.text(40, 478, 300, 16, 'RUN COMMAND (CHECK BOX, MANUAL MODE)', 10, 'muted', bold=True)
|
||||
d.checkbox(40, 498, 240, 32, 'Pump running', S + 'PUMP1.RUNNING', 14)
|
||||
d.text(40, 552, 300, 16, 'DESCRIPTION (TEXT FIELD)', 10, 'muted', bold=True)
|
||||
d.text_field(40, 572, 450, 30, S + 'PUMP1.MODE', 'ItemDesc', 13)
|
||||
d.ellipse(600, 420, 110, 110, fill='off', stroke='line', sw=3, actions=[
|
||||
conn('ellipse.fillPaint', S + 'PUMP1.RUNNING', transform=tr_threshold([(False, 'off'), (True, 'green')], 'Boolean'))])
|
||||
d.text(600, 462, 110, 24, 'P1', 18, 'white', bold=True, align='Center')
|
||||
d.text(560, 548, 220, 16, 'RUN TIME (INTEGRATOR)', 10, 'muted', bold=True, align='Center')
|
||||
d.number(560, 566, 190, 34, S + 'PUMP1.RUNNING.RUN_SECONDS', '9999999', 24, align='Right')
|
||||
d.text(754, 576, 30, 18, 's', 12, 'muted')
|
||||
# alarm test
|
||||
card(d, 945, 345, 925, 325, 'Tank 1 - alarm test', 'Stop live data first, then drive TANK1.LEVEL across its limits (H 80 / HH 90 / L 20 / LL 10)')
|
||||
d.slider(975, 410, 560, 64, LEVEL, 0, 100, 10, 5)
|
||||
for i, (lab, v, col, fg) in enumerate((('Low-Low 5', 5, 'red', 'white'), ('Low 15', 15, 'amber', 'white'),
|
||||
('Normal 50', 50, 'teal', 'white'), ('High 85', 85, 'amber', 'white'),
|
||||
('High-High 95', 95, 'red', 'white'))):
|
||||
d.button(975 + i * 114, 500, 106, 38, lab, [act_set(LEVEL, v)], fg=fg, bg=col)
|
||||
d.text(975, 566, 200, 16, 'LEVEL', 10, 'muted', bold=True)
|
||||
d.number(975, 584, 160, 50, LEVEL, '999.9', 38, align='Left', extra=[level_color()])
|
||||
d.text(1180, 566, 300, 16, 'ITEM STATUS', 10, 'muted', bold=True)
|
||||
d.text(1180, 590, 300, 34, 'NORMAL', 22, 'text', bold=True)
|
||||
d.parts[-1] = d.parts[-1].replace('</text>', data([conn('text.value', LEVEL, 'ItemStatusMnemonic'),
|
||||
conn('text.fillPaint', LEVEL, transform=tr_threshold(LVL_COLORS))]) + '</text>')
|
||||
d.ring_gauge(1720, 520, 90, LEVEL, 0, 100, 'teal', 14, LVL_COLORS)
|
||||
d.circ_scale(1720, 520, 120, 0, 100, 20, 5)
|
||||
d.number(1660, 500, 120, 40, LEVEL, '999.9', 26, align='Center')
|
||||
return d
|
||||
|
||||
|
||||
def build_trends():
|
||||
d = Display('CIENG_Trends', W, H, 'Trends', design_h=HD)
|
||||
d.rect(0, 0, W, HD, fill='bg')
|
||||
d.rect(10, 10, 1380, 660, fill='panel', stroke='line', r=10)
|
||||
d.trend(20, 20, 1360, 640, [(LEVEL, 'teal', 0, 100, 'Tank 1 level (%)'),
|
||||
(INFLOW, 'violet', 0, 500, 'Tank 1 inflow (m3/h)')], 10, 'Tank 1 - level and inflow',
|
||||
web_spares=False) # user choice: hairline shows 2 values; the web main trend then draws no line
|
||||
for i, (title, item, mn, mx, col, fmt, unit) in enumerate((
|
||||
('Level', LEVEL, 0, 100, 'teal', '999.9', '%'), ('Inflow', INFLOW, 0, 500, 'violet', '9999.9', 'm3/h'),
|
||||
('CPU load', S + 'SYSTEM.CPU_LOAD', 0, 100, 'blue', '999.9', '%'))):
|
||||
t = 10 + i * 223
|
||||
card(d, 1400, t, 470, 213, title)
|
||||
d.number(1660, t + 8, 150, 30, item, fmt, 20, col, align='Right')
|
||||
d.text(1814, t + 14, 50, 18, unit, 11, 'muted')
|
||||
d.micro_trend(1420, t + 48, 430, 150, [(item, mn, mx, col)], history=(i < 2)) # CPU_LOAD has no history
|
||||
return d
|
||||
|
||||
|
||||
def build_alarms():
|
||||
d = Display('CIENG_Alarms', W, H, 'Alarms', design_h=HD)
|
||||
d.rect(0, 0, W, HD, fill='bg')
|
||||
card(d, 10, 10, 1860, 390, 'Current alarms', 'All areas - acknowledge with the check box or right-click')
|
||||
d.alarm_overview(20, 60, 1840, 330, size=13)
|
||||
card(d, 10, 410, 1860, 260, 'Alarm history - Tank 1', 'Historical overview filtered on alarm selection area CIENG_TANK1')
|
||||
d.alarm_overview(20, 460, 1840, 200, 'HistoricalAlarms', asa='CIENG_TANK1', size=13)
|
||||
return d
|
||||
|
||||
|
||||
def build_system():
|
||||
d = Display('CIENG_System', W, H, 'System', design_h=HD)
|
||||
d.rect(0, 0, W, HD, fill='bg')
|
||||
card(d, 10, 10, 600, 320, 'Server health', 'Real values of this PC, written by the live-data feed')
|
||||
th = [(0, 'teal'), (80, 'amber'), (90, 'red')]
|
||||
gauge(d, 160, 180, 100, S + 'SYSTEM.CPU_LOAD', 0, 100, '999.9', '%', 'CPU load', thresholds=th)
|
||||
gauge(d, 450, 180, 100, S + 'SYSTEM.DISK_C', 0, 100, '999.9', '%', 'Disk C: used', 'blue', thresholds=th)
|
||||
card(d, 620, 10, 600, 320, 'Communication and processes')
|
||||
rows = ((S + 'PLC1.COMM_OK', 'Modbus station CIENG_PLC', 'Boolean', None),
|
||||
(S + 'UA.COMM_OK', 'OPC UA client station CIENG_UA', 'Boolean', None),
|
||||
(S + 'UA.SRV_STATE', 'OPC UA server state (0 = running)', 'Double', [(0, 'green'), (0.5, 'red')]),
|
||||
(S + 'SYSTEM.PING_LOCALHOST', 'localhost reachable', 'Double', [(0, 'red'), (0.5, 'green')]),
|
||||
(S + 'SYSTEM.PROC_ALM', 'ALARM process (alm) running', 'Double', [(0, 'red'), (0.5, 'green')]))
|
||||
for i, (item, lab, inp, tbl) in enumerate(rows):
|
||||
y = 60 + i * 52
|
||||
d.rect(640, y, 560, 44, fill='panel', r=6)
|
||||
if inp == 'Boolean':
|
||||
d.lamp(656, y + 13, 18, item, off='red')
|
||||
else:
|
||||
d.lamp(656, y + 13, 18, item, inp='Double', table=tbl)
|
||||
d.text(688, y + 12, 340, 20, lab, 13, 'text')
|
||||
d.text(1040, y + 12, 150, 20, 'NORMAL', 12, 'muted', align='Right')
|
||||
d.parts[-1] = d.parts[-1].replace('</text>', data([conn('text.value', item, 'ItemStatusMnemonic')]) + '</text>')
|
||||
card(d, 1230, 10, 640, 320, 'OPC UA loopback', 'TANK1.LEVEL read back through CI Server\'s own OPC UA server')
|
||||
for i, (lab, item, col) in enumerate((('TANK1.LEVEL', LEVEL, 'teal'), ('UA.LEVEL_COPY', S + 'UA.LEVEL_COPY', 'blue'))):
|
||||
x = 1260 + i * 300
|
||||
d.text(x, 70, 260, 16, lab, 10, 'muted', bold=True)
|
||||
d.number(x, 90, 200, 44, item, '999.9', 32, col, align='Left')
|
||||
d.databar(x, 150, 260, 18, item, 0, 100, col, 'track', 'Right')
|
||||
d.text(x, 182, 260, 16, 'LAST UPDATE', 10, 'muted', bold=True)
|
||||
d.time_text(x, 202, 260, 28, item, 13)
|
||||
d.rect_scale(1260, 250, 560, 34, 0, 100, 10, 5, vertical=False)
|
||||
card(d, 10, 340, 1860, 330, 'Reports', 'Report component: select CIENG_TANK1 or CIENG_HTML, generate and view')
|
||||
d.report(20, 390, 1840, 270)
|
||||
return d
|
||||
|
||||
|
||||
def build_banner():
|
||||
d = Display('CIENG_AlarmBanner', 1920, 96, 'Alarm banner', bg='panel')
|
||||
# Desktop: frames inside a <tab> ignore their zoom attribute; the layout command with a zoom argument
|
||||
# applies it. Only ONE command can run at a time (more give "IllegalStateException: A command is
|
||||
# already being executed"), so only the Overview tab is fitted here; the toolbar / menu / F-keys
|
||||
# open the other tabs with fitDisplay. Web: the plain open action (web ignores ACTION commands).
|
||||
d.rect(0, 0, 1920, 96, fill='panel', actions=[
|
||||
act_open('CIENG_Overview', 'CIENG_Operator', 'ovw', event='On entry'),
|
||||
act_cmd('ACTION navigate to ovw CIENG_Overview stretchDisplay', server=False, event='On entry')])
|
||||
d.line(0, 0, 1920, 0, 'line', 1)
|
||||
d.rect(10, 7, 170, 82, fill='card', stroke='line', r=8)
|
||||
d.text(24, 13, 70, 18, 'ALARMS', 12, 'muted', bold=True)
|
||||
d.ellipse(96, 14, 16, 16, fill='off', actions=[conn('ellipse.fillPaint', LEVEL, transform=tr_threshold(
|
||||
[(0, 'red'), (10, 'amber'), (20, 'green'), (80, 'amber'), (90, 'red')]))])
|
||||
d.text(118, 13, 60, 18, 'Tank 1', 12, 'text')
|
||||
d.button(24, 44, 142, 34, 'Alarm list', [act_open('CIENG_Alarms', 'CIENG_Operator', 'alm')], fg='white', bg='blue', size=13)
|
||||
# 4 rows of 20 px (14 px font, web) + border: no empty white area below the rows when 4+ alarms
|
||||
d.alarm_overview(190, 7, 1722, 82, size=14, banner=True)
|
||||
return d
|
||||
|
||||
|
||||
def build_faceplate():
|
||||
d = Display('CIENG_TankFaceplate', 420, 600, 'Tank 1 faceplate', bg='card')
|
||||
d.rect(0, 0, 420, 600, fill='card')
|
||||
d.rect(0, 0, 420, 52, fill='card2')
|
||||
d.text(20, 14, 300, 24, 'TANK 1 | LEVEL', 15, 'text', bold=True)
|
||||
d.button(370, 10, 36, 32, 'X', [act_close()], fg='text', bg='card', tip='Close')
|
||||
d.text(20, 64, 380, 18, 'Tank 1 level (%)', 11, 'muted')
|
||||
d.parts[-1] = d.parts[-1].replace('</text>', data([conn('text.value', LEVEL, 'ItemDesc')]) + '</text>')
|
||||
d.number(20, 86, 200, 56, LEVEL, '999.9', 44, align='Left', extra=[level_color()])
|
||||
d.text(224, 106, 30, 24, '%', 16, 'muted')
|
||||
d.text(270, 92, 130, 16, 'STATUS', 10, 'muted', bold=True, align='Right')
|
||||
d.text(250, 110, 150, 26, 'NORMAL', 16, 'text', bold=True, align='Right')
|
||||
d.parts[-1] = d.parts[-1].replace('</text>', data([conn('text.value', LEVEL, 'ItemStatusMnemonic'),
|
||||
conn('text.fillPaint', LEVEL, transform=tr_threshold(LVL_COLORS))]) + '</text>')
|
||||
d.databar(40, 160, 60, 280, LEVEL, 0, 100, 'blue', 'track', 'Up')
|
||||
d.rect_scale(104, 160, 44, 280, 0, 100, 20, 5)
|
||||
d.text(190, 160, 210, 16, 'ALARM LIMITS', 10, 'muted', bold=True)
|
||||
for i, (lab, attr, col) in enumerate((('High-High', 'ItemHHL', 'red'), ('High', 'ItemHL', 'amber'),
|
||||
('Low', 'ItemLL', 'amber'), ('Low-Low', 'ItemLLL', 'red'))):
|
||||
y = 186 + i * 40
|
||||
d.rect(190, y, 210, 34, fill='panel', r=6)
|
||||
d.rect(190, y, 6, 34, fill=col)
|
||||
d.text(206, y + 8, 100, 18, lab, 12, 'text')
|
||||
d.number(300, y + 4, 90, 26, LEVEL, '999.9', 16, col, attr=attr)
|
||||
d.text(190, 352, 210, 16, 'MAXIMUM SEEN', 10, 'muted', bold=True)
|
||||
d.number(190, 370, 140, 32, S + 'TANK1.LEVEL.MAX', '999.9', 22, align='Left')
|
||||
d.text(190, 412, 210, 16, 'LAST UPDATE', 10, 'muted', bold=True)
|
||||
d.time_text(190, 430, 210, 24, LEVEL, 11)
|
||||
d.micro_trend(20, 460, 380, 80, [(LEVEL, 0, 100, 'teal')])
|
||||
d.button(20, 552, 120, 34, 'Trends', [act_open('CIENG_Trends', 'CIENG_Operator', 'trd')], fg='text', bg='card2')
|
||||
d.button(150, 552, 120, 34, 'Alarms', [act_open('CIENG_Alarms', 'CIENG_Operator', 'alm')], fg='text', bg='card2')
|
||||
d.button(280, 552, 120, 34, 'Close', [act_close()], fg='white', bg='blue')
|
||||
return d
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
out = sys.argv[1] if len(sys.argv) > 1 else os.path.join(os.path.dirname(os.path.abspath(__file__)), '..')
|
||||
for b in (build_header, build_overview, build_control, build_trends, build_alarms, build_system, build_banner,
|
||||
build_faceplate):
|
||||
disp = b()
|
||||
disp.save(out)
|
||||
print(disp.name, len(disp.parts), 'components')
|
||||
583
examples/CI-Eng-Sample/displays/generator/cixml.py
Normal file
583
examples/CI-Eng-Sample/displays/generator/cixml.py
Normal file
|
|
@ -0,0 +1,583 @@
|
|||
"""Small XML writer for CI Server R1.03 display files (Edit Module format 1.3.0.0).
|
||||
|
||||
Positions are given as boxes (left, top, width, height) in display pixels; CI Server stores a
|
||||
component as its centre (x, y) plus half sizes (top, bottom, left, right).
|
||||
Element and property names follow the installed component definitions
|
||||
(%TLS_WAP_PATH%\\cfg\\operatorInterfaces\\DEPLOY\\components\\*.xml) and factory displays.
|
||||
"""
|
||||
from xml.sax.saxutils import escape
|
||||
|
||||
# ---------------------------------------------------------------- theme (dark dashboard)
|
||||
C = {
|
||||
'bg': (13, 17, 23), 'panel': (22, 27, 34), 'card': (28, 35, 45), 'card2': (36, 45, 57),
|
||||
'line': (48, 61, 77), 'text': (230, 237, 243), 'muted': (139, 152, 168), 'dim': (88, 100, 116),
|
||||
'blue': (59, 130, 246), 'teal': (20, 184, 166), 'green': (34, 197, 94), 'amber': (245, 158, 11),
|
||||
'red': (239, 68, 68), 'violet': (139, 92, 246), 'off': (71, 85, 105), 'white': (255, 255, 255),
|
||||
'track': (40, 50, 64),
|
||||
}
|
||||
FONT_UI = 'Segoe UI'
|
||||
FONT_NUM = 'Consolas'
|
||||
|
||||
|
||||
def rgb(c):
|
||||
c = C.get(c, c) if isinstance(c, str) else c
|
||||
return 'r="%d" g="%d" b="%d"' % tuple(c)
|
||||
|
||||
|
||||
def colorset(tag, c):
|
||||
return '<%s type="colorSet" %s/>' % (tag, rgb(c))
|
||||
|
||||
|
||||
def paint(tag, c):
|
||||
return '<%s type="paint"><paint type="colorSet" %s/></%s>' % (tag, rgb(c), tag)
|
||||
|
||||
|
||||
def font(size, bold=False, name=FONT_UI, tag='font'):
|
||||
b = ' bold="true"' if bold else ''
|
||||
return '<%s type="font" name="%s"%s size="%d" underline="false" strikethrough="false"/>' % (tag, name, b, size)
|
||||
|
||||
|
||||
def esc(s):
|
||||
return escape(str(s))
|
||||
|
||||
|
||||
def box_attrs(l, t, w, h):
|
||||
return 'x="%.1f" y="%.1f" top="%.1f" bottom="%.1f" left="%.1f" right="%.1f" rotation="0.0" shear="0.0"' % (
|
||||
l + w / 2.0, t + h / 2.0, h / 2.0, h / 2.0, w / 2.0, w / 2.0)
|
||||
|
||||
|
||||
def box_elems(l, t, w, h):
|
||||
return ('<x>%.1f</x><y>%.1f</y><top>%.1f</top><bottom>%.1f</bottom><left>%.1f</left><right>%.1f</right>'
|
||||
'<rotation>0.0</rotation><shear>0.0</shear>') % (l + w / 2.0, t + h / 2.0, h / 2.0, h / 2.0, w / 2.0, w / 2.0)
|
||||
|
||||
|
||||
_FONTS = {}
|
||||
|
||||
|
||||
def text_width(s, size, bold=False, name=FONT_UI):
|
||||
"""Width in display pixels, measured with the Windows font (matches the HTML export within ~3 %)."""
|
||||
try:
|
||||
from PIL import ImageFont
|
||||
fn = {(FONT_UI, False): 'segoeui.ttf', (FONT_UI, True): 'segoeuib.ttf',
|
||||
(FONT_NUM, False): 'consola.ttf', (FONT_NUM, True): 'consolab.ttf'}[(name, bool(bold))]
|
||||
key = (fn, size)
|
||||
if key not in _FONTS:
|
||||
_FONTS[key] = ImageFont.truetype(r'C:\Windows\Fonts\%s' % fn, size)
|
||||
return _FONTS[key].getlength(s) * 0.975
|
||||
except Exception:
|
||||
return len(s) * size * 0.55
|
||||
|
||||
|
||||
def fit(l, w, s, size, align, bold=False, name=FONT_UI):
|
||||
"""Text and numbers are exported with keepOriginalSize: drawn at natural size, centred on the box.
|
||||
Shrink the box to the measured text width so 'Left' / 'Right' alignment still lands right."""
|
||||
est = min(w, max(4.0, text_width(s, size, bold, name)))
|
||||
if align == 'Left':
|
||||
return l, est
|
||||
if align == 'Right':
|
||||
return l + w - est, est
|
||||
return l, w
|
||||
|
||||
|
||||
# ---------------------------------------------------------------- data connections
|
||||
def tr_linear(i0, i1, o0, o1):
|
||||
return ('<transformation type="transformationLinear"><inputType>java.lang.Double</inputType>'
|
||||
'<outputType>java.lang.Double</outputType><inputValueStart>%s</inputValueStart>'
|
||||
'<inputValueEnd>%s</inputValueEnd><outputValueStart>%s</outputValueStart>'
|
||||
'<outputValueEnd>%s</outputValueEnd></transformation>') % (float(i0), float(i1), float(o0), float(o1))
|
||||
|
||||
|
||||
def tr_threshold(table, inp='Double', out='Paint'):
|
||||
"""table: list of (input, output). Output for Paint = colour key/tuple, Boolean = bool."""
|
||||
itype = {'Double': 'java.lang.Double', 'Boolean': 'java.lang.Boolean'}[inp]
|
||||
otype = {'Paint': 'fasttools.jwui.common.property.paint.PaintSet', 'Boolean': 'java.lang.Boolean',
|
||||
'Color': 'fasttools.jtools.common.property.color.ColorSet'}[out]
|
||||
rows = []
|
||||
for i, o in table:
|
||||
iv = ('true' if i else 'false') if inp == 'Boolean' else repr(float(i))
|
||||
if out == 'Paint':
|
||||
ov = '<thresholdOut type="paint"><paint type="colorSet" %s/></thresholdOut>' % rgb(o)
|
||||
elif out == 'Color':
|
||||
ov = '<thresholdOut type="colorSet" %s/>' % rgb(o)
|
||||
else:
|
||||
ov = '<thresholdOut>%s</thresholdOut>' % ('true' if o else 'false')
|
||||
rows.append('<thresholdIn>%s</thresholdIn>%s' % (iv, ov))
|
||||
return ('<transformation type="transformationThreshold"><inputType>%s</inputType><outputType>%s</outputType>'
|
||||
'<thresholdTable type="thresholdTable">%s</thresholdTable></transformation>') % (itype, otype, ''.join(rows))
|
||||
|
||||
|
||||
def conn(prop, item, attr='ItemValue', direction=1, transform=''):
|
||||
"""Connect component property <prop> (e.g. 'number.value') to an item attribute.
|
||||
direction 1 = read, 2 = write, None = read and write (as the factory toggle buttons)."""
|
||||
d = '' if direction is None else '<direction>%d</direction>' % direction
|
||||
return ('<action type="actionConnectTo"><property type="property" name="%s"/>'
|
||||
'<filter type="filter"><value>0.0</value></filter>%s<connection type="connection">%s'
|
||||
'<itemName>%s</itemName><itemAttribute>%s</itemAttribute></connection></action>') % (
|
||||
prop, transform, d, esc(item), attr)
|
||||
|
||||
|
||||
def act_set(item, value):
|
||||
return ('<action type="actionSetItemAttribute"><event type="event" event="On action"/>'
|
||||
'<filter type="filter"><value>%s</value></filter><connection type="connection"><direction>2</direction>'
|
||||
'<location type="nodeName" node="$default$"/><itemName>%s</itemName><itemAttribute>ItemValue</itemAttribute>'
|
||||
'</connection></action>') % (float(value), esc(item))
|
||||
|
||||
|
||||
def act_open(display, layout=None, frame=None, event='On action'):
|
||||
lay = ''
|
||||
if layout or frame:
|
||||
lay = ('<type type="displayActivationType" value="ActivateSpecific"/><display>%s</display>'
|
||||
'<layout>%s</layout><layoutFrame>%s</layoutFrame>') % (display, layout or '', frame or '')
|
||||
return '<action type="actionActivateDisplay"><event type="event" event="%s"/>%s</action>' % (event, lay)
|
||||
return ('<action type="actionActivateDisplay"><event type="event" event="%s"/><display>%s</display>'
|
||||
'</action>') % (event, display)
|
||||
|
||||
|
||||
def act_close(event='On action'):
|
||||
return '<action type="actionExitDisplay"><event type="event" event="%s"/></action>' % event
|
||||
|
||||
|
||||
def act_cmd(command, server=True, event='On action'):
|
||||
return ('<action type="actionExecuteCommand"><event type="event" event="%s"/><command>%s</command>'
|
||||
'<onServer>%s</onServer></action>') % (event, esc(command), 'true' if server else 'false')
|
||||
|
||||
|
||||
def data(actions):
|
||||
return '<data type="data">%s</data>' % ''.join(actions) if actions else ''
|
||||
|
||||
|
||||
# ---------------------------------------------------------------- display builder
|
||||
class Display:
|
||||
def __init__(self, name, width, height, title, bg='bg', design_h=None):
|
||||
self.name, self.w, self.h, self.title, self.bg = name, width, height, title, bg
|
||||
# Coordinates are written for a display design_h high and stretched vertically to height:
|
||||
# panels, bars and lists grow, text / controls / round shapes keep their size and only move.
|
||||
self.sy = float(height) / design_h if design_h else 1.0
|
||||
self.parts = []
|
||||
self.hid = 6 # 1 = layer, 2..6 = visibility groups
|
||||
|
||||
def _b(self, l, t, w, h, stretch):
|
||||
if self.sy == 1.0:
|
||||
return l, t, w, h
|
||||
if stretch:
|
||||
return l, t * self.sy, w, h * self.sy
|
||||
return l, (t + h / 2.0) * self.sy - h / 2.0, w, h
|
||||
|
||||
def _id(self):
|
||||
self.hid += 1
|
||||
return '<htmlId>%d</htmlId>' % self.hid
|
||||
|
||||
def add(self, s):
|
||||
self.parts.append(s)
|
||||
|
||||
# ----- shapes
|
||||
def rect(self, l, t, w, h, fill='card', stroke=None, sw=1.0, r=0, actions=(), tip=None, fill_amount=None,
|
||||
fill_dir=None, visible=True):
|
||||
l, t, w, h = self._b(l, t, w, h, h > 40)
|
||||
s = '<rectangle type="componentData">' + self._id()
|
||||
if tip:
|
||||
s += '<toolTipText>%s</toolTipText>' % esc(tip)
|
||||
if r:
|
||||
# stored as a fraction (0..1) of the half width / half height (web client
|
||||
# ExtendedRectangle: rx = width / 2 * roundingX); pixel values > 1 draw an ellipse
|
||||
s += '<roundingX>%.4f</roundingX><roundingY>%.4f</roundingY>' % (min(1.0, 2.0 * r / w), min(1.0, 2.0 * r / h))
|
||||
s += box_elems(l, t, w, h)
|
||||
s += '<stroke type="stroke" width="%.1f"/>' % sw
|
||||
if stroke:
|
||||
s += '<strokeOn>true</strokeOn>' + paint('strokePaint', stroke)
|
||||
else:
|
||||
s += '<strokeOn>false</strokeOn>'
|
||||
if fill:
|
||||
s += '<fillOn>true</fillOn>' + paint('fillPaint', fill)
|
||||
else:
|
||||
s += '<fillOn>false</fillOn>'
|
||||
if fill_amount is not None:
|
||||
s += '<fillAmount>%s</fillAmount>' % fill_amount
|
||||
if fill_dir:
|
||||
s += '<fillDirection type="fillDirection" value="%s"/>' % fill_dir
|
||||
if not visible:
|
||||
s += '<visible>false</visible>'
|
||||
s += data(actions) + '</rectangle>'
|
||||
self.add(s)
|
||||
|
||||
def ellipse(self, l, t, w, h, fill='green', stroke=None, sw=1.0, actions=(), tip=None):
|
||||
l, t, w, h = self._b(l, t, w, h, False)
|
||||
s = '<ellipse type="componentData">' + self._id()
|
||||
if tip:
|
||||
s += '<toolTipText>%s</toolTipText>' % esc(tip)
|
||||
s += box_elems(l, t, w, h) + '<stroke type="stroke" width="%.1f"/>' % sw
|
||||
s += ('<strokeOn>true</strokeOn>' + paint('strokePaint', stroke)) if stroke else '<strokeOn>false</strokeOn>'
|
||||
s += ('<fillOn>true</fillOn>' + paint('fillPaint', fill)) if fill else '<fillOn>false</fillOn>'
|
||||
s += data(actions) + '</ellipse>'
|
||||
self.add(s)
|
||||
|
||||
def arc(self, cx, cy, rad, start, extent, color='blue', sw=10.0, actions=()):
|
||||
cy = cy * self.sy
|
||||
s = '<arc type="componentData">' + self._id()
|
||||
s += '<startAngle>%.1f</startAngle><extentAngle>%.1f</extentAngle><closed>false</closed>' % (start, extent)
|
||||
s += box_elems(cx - rad, cy - rad, 2 * rad, 2 * rad)
|
||||
s += '<stroke type="stroke" width="%.1f" endCap="butt"/><strokeOn>true</strokeOn>' % sw
|
||||
s += paint('strokePaint', color) + '<fillOn>false</fillOn>'
|
||||
s += data(actions) + '</arc>'
|
||||
self.add(s)
|
||||
|
||||
def line(self, x1, y1, x2, y2, color='line', sw=2.0, actions=()):
|
||||
# a line is stored by its bounding box; direction by the sign of the extents is not available,
|
||||
# so only horizontal / vertical lines are used here
|
||||
l, t = min(x1, x2), min(y1, y2)
|
||||
w, h = abs(x2 - x1), abs(y2 - y1)
|
||||
# drawn as a thin filled rectangle: a <line> without curve points is placed wrongly on the web
|
||||
if h < w:
|
||||
self.rect(l, t - sw / 2.0, max(w, 1), sw, fill=color, actions=actions)
|
||||
else:
|
||||
self.rect(l - sw / 2.0, t, sw, max(h, 1), fill=color, actions=actions)
|
||||
|
||||
# ----- text and numbers
|
||||
def text(self, l, t, w, h, value, size=12, color='text', bold=False, align='Left', actions=(), name=FONT_UI,
|
||||
bgfill=None):
|
||||
l, t, w, h = self._b(l, t, w, h, False)
|
||||
s = '<text type="componentData">' + self._id() + '<value>%s</value>' % esc(value)
|
||||
s += font(size, bold, name) + paint('fillPaint', color)
|
||||
l, w = fit(l, w, str(value), size, align, bold, name)
|
||||
s += '<justification type="textJustification" value="TextJustificationCenter"/>'
|
||||
if bgfill:
|
||||
s += '<backgroundOn>true</backgroundOn>' + paint('backgroundPaint', bgfill)
|
||||
s += '<stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize>'
|
||||
s += box_elems(l, t, w, h) + data(actions) + '</text>'
|
||||
self.add(s)
|
||||
|
||||
def number(self, l, t, w, h, item, fmt='999.9', size=22, color='text', bold=True, align='Right', attr='ItemValue',
|
||||
extra=()):
|
||||
l, t, w, h = self._b(l, t, w, h, False)
|
||||
s = '<number type="componentData">' + self._id() + '<value>0.0</value><format>%s</format>' % fmt
|
||||
s += font(size, bold, FONT_NUM) + paint('fillPaint', color)
|
||||
l, w = fit(l, w, fmt.replace('9', '0'), size, align, bold, FONT_NUM)
|
||||
s += '<justification type="textJustification" value="TextJustificationCenter"/>'
|
||||
s += '<stroke type="stroke" width="1.0"/><keepOriginalSize>true</keepOriginalSize>'
|
||||
s += box_elems(l, t, w, h) + data([conn('number.value', item, attr)] + list(extra)) + '</number>'
|
||||
self.add(s)
|
||||
|
||||
def number_field(self, l, t, w, h, item, fmt='9999', size=14, editable=True, attr='ItemValue', as_datetime=False):
|
||||
l, t, w, h = self._b(l, t, w, h, False)
|
||||
s = '<numberField type="componentData" %s>' % box_attrs(l, t, w, h) + self._id()
|
||||
s += font(size, True, FONT_NUM) + '<format>%s</format>' % fmt
|
||||
s += '<editable>%s</editable>' % ('true' if editable else 'false')
|
||||
if as_datetime:
|
||||
s += '<asDateTime>true</asDateTime>'
|
||||
s += colorset('foregroundColor', 'text') + colorset('backgroundColor', 'card2')
|
||||
s += '<justification type="jTextJustification" value="TextJustificationRight"/>'
|
||||
s += data([conn('numberField.value', item, attr, direction=None if editable else 1)]) + '</numberField>'
|
||||
self.add(s)
|
||||
|
||||
def text_field(self, l, t, w, h, item, attr='ItemDescription', size=12):
|
||||
l, t, w, h = self._b(l, t, w, h, False)
|
||||
s = '<textField type="componentData" %s>' % box_attrs(l, t, w, h) + self._id()
|
||||
s += font(size) + '<editable>false</editable>'
|
||||
s += colorset('foregroundColor', 'text') + colorset('backgroundColor', 'card2')
|
||||
s += data([conn('textField.value', item, attr)]) + '</textField>'
|
||||
self.add(s)
|
||||
|
||||
def time_text(self, l, t, w, h, item, size=12, color='text', align='Left'):
|
||||
"""Last update time of an item: number field with asDateTime (epoch seconds -> local date and time).\n The web dateTimeField only shows a value when editable (white input boxes)."""
|
||||
self.number_field(l, t, w, h, item, '', size, editable=False, attr='ItemUpdTime', as_datetime=True)
|
||||
def datetime_field(self, l, t, w, h, item, attr='ItemUpdTime', size=12, editable=True):
|
||||
l, t, w, h = self._b(l, t, w, h, False)
|
||||
s = '<dateTimeField type="componentData" %s>' % box_attrs(l, t, w, h) + self._id()
|
||||
s += font(size) + colorset('foregroundColor', 'text')
|
||||
s += '<editable>%s</editable><secondsVisible>true</secondsVisible>' % ('true' if editable else 'false')
|
||||
s += colorset('backgroundColor', 'card2')
|
||||
s += data([conn('dateTimeField.value', item, attr)]) + '</dateTimeField>'
|
||||
self.add(s)
|
||||
|
||||
# ----- controls
|
||||
def button(self, l, t, w, h, label, actions, fg='text', bg='card2', size=12, bold=True, tip=None, extra=()):
|
||||
l, t, w, h = self._b(l, t, w, h, False)
|
||||
s = '<button type="componentData" %s>' % box_attrs(l, t, w, h) + self._id()
|
||||
if tip:
|
||||
s += '<toolTipText>%s</toolTipText>' % esc(tip)
|
||||
s += '<label>%s</label>' % esc(label) + font(size, bold)
|
||||
s += colorset('foregroundColor', fg) + colorset('backgroundColor', bg)
|
||||
s += data(list(actions) + list(extra)) + '</button>'
|
||||
self.add(s)
|
||||
|
||||
def toggle(self, l, t, w, h, label, item, size=12):
|
||||
l, t, w, h = self._b(l, t, w, h, False)
|
||||
s = '<toggleButton type="componentData" %s>' % box_attrs(l, t, w, h) + self._id()
|
||||
s += '<label>%s</label>' % esc(label) + font(size, True)
|
||||
s += colorset('foregroundColor', 'text') + colorset('backgroundColor', 'card2')
|
||||
s += data([conn('toggleButton.value', item, direction=None)]) + '</toggleButton>'
|
||||
self.add(s)
|
||||
|
||||
def checkbox(self, l, t, w, h, label, item, size=12):
|
||||
l, t, w, h = self._b(l, t, w, h, False)
|
||||
s = '<checkBox type="componentData" %s>' % box_attrs(l, t, w, h) + self._id()
|
||||
s += '<label>%s</label>' % esc(label) + font(size)
|
||||
s += '<opaque>false</opaque>' + colorset('foregroundColor', 'text') + colorset('backgroundColor', 'card')
|
||||
s += data([conn('checkBox.value', item, direction=None)]) + '</checkBox>'
|
||||
self.add(s)
|
||||
|
||||
def slider(self, l, t, w, h, item, mn, mx, major, minor=None, size=10):
|
||||
l, t, w, h = self._b(l, t, w, h, False)
|
||||
s = '<slider type="componentData" %s>' % box_attrs(l, t, w, h) + self._id()
|
||||
s += '<maximum>%s</maximum><minimum>%s</minimum><value>%s</value>' % (float(mx), float(mn), float(mn))
|
||||
s += '<majorTickSpacing>%s</majorTickSpacing><minorTickSpacing>%s</minorTickSpacing>' % (
|
||||
float(major), float(minor or major))
|
||||
s += '<paintLabels>true</paintLabels><paintTicks>true</paintTicks><trackDrag>false</trackDrag>'
|
||||
s += font(size) + '<opaque>false</opaque>' + colorset('foregroundColor', 'muted')
|
||||
s += data([conn('slider.value', item, direction=None)]) + '</slider>'
|
||||
self.add(s)
|
||||
|
||||
def spinner(self, l, t, w, h, item, mn, mx, step=1, size=14):
|
||||
l, t, w, h = self._b(l, t, w, h, False)
|
||||
s = '<spinner type="componentData" %s>' % box_attrs(l, t, w, h) + self._id()
|
||||
s += '<editable>true</editable><step>%s</step><minimum>%s</minimum><maximum>%s</maximum>' % (
|
||||
float(step), float(mn), float(mx))
|
||||
s += font(size, True, FONT_NUM) + colorset('foregroundColor', 'text') + colorset('backgroundColor', 'card2')
|
||||
s += '<zoomEnabled>false</zoomEnabled>'
|
||||
s += data([conn('spinner.value', item, direction=None)]) + '</spinner>'
|
||||
self.add(s)
|
||||
|
||||
def combo(self, l, t, w, h, item, options, size=12):
|
||||
l, t, w, h = self._b(l, t, w, h, False)
|
||||
"""options: 'value;Text;value;Text' (web client format)."""
|
||||
s = '<comboBox type="componentData" %s>' % box_attrs(l, t, w, h) + self._id()
|
||||
s += '<label>%s</label>' % esc(options) + font(size) + colorset('foregroundColor', 'text')
|
||||
s += data([conn('comboBox.value', item, direction=None)]) + '</comboBox>'
|
||||
self.add(s)
|
||||
|
||||
# ----- indicators
|
||||
def databar(self, l, t, w, h, item, lo=0, hi=100, fg='blue', bg='track', direction='Up', border=None):
|
||||
l, t, w, h = self._b(l, t, w, h, h > w)
|
||||
s = '<dataBar type="componentData" %s>' % box_attrs(l, t, w, h) + self._id()
|
||||
s += '<fillOn>true</fillOn>' + paint('background', bg) + paint('foreground', fg)
|
||||
s += paint('borderColor', border or bg) + paint('foregroundBorderColor', fg)
|
||||
s += '<lowLimit>%s</lowLimit><highLimit>%s</highLimit>' % (float(lo), float(hi))
|
||||
s += '<growthDirection type="growthDirection" value="GrowthDirection%s"/>' % direction
|
||||
s += data([conn('dataBar.value', item)]) + '</dataBar>'
|
||||
self.add(s)
|
||||
|
||||
def rect_scale(self, l, t, w, h, mn, mx, major, minor, vertical=True, fmt='999', size=10):
|
||||
l, t, w, h = self._b(l, t, w, h, h > w)
|
||||
s = '<rectangularScale type="componentData" %s>' % box_attrs(l, t, w, h) + self._id()
|
||||
s += '<maximum>%s</maximum><minimum>%s</minimum><majorTickSpacing>%s</majorTickSpacing>' % (
|
||||
float(mx), float(mn), float(major))
|
||||
s += '<minorTickSpacing>%s</minorTickSpacing><format>%s</format><vertical>%s</vertical>' % (
|
||||
float(minor), fmt, 'true' if vertical else 'false')
|
||||
s += colorset('color', 'muted') + font(size) + '</rectangularScale>'
|
||||
self.add(s)
|
||||
|
||||
def circ_scale(self, cx, cy, rad, mn, mx, major, minor, start=225, extent=-270, fmt='999', size=9):
|
||||
cy = cy * self.sy
|
||||
s = '<circularScale type="componentData" %s>' % box_attrs(cx - rad, cy - rad, 2 * rad, 2 * rad) + self._id()
|
||||
s += '<maximum>%s</maximum><minimum>%s</minimum><majorTickSpacing>%s</majorTickSpacing>' % (
|
||||
float(mx), float(mn), float(major))
|
||||
s += '<minorTickSpacing>%s</minorTickSpacing><format>%s</format>' % (float(minor), fmt)
|
||||
s += '<startAngle>%s</startAngle><extentAngle>%s</extentAngle>' % (float(start), float(extent))
|
||||
s += colorset('color', 'muted') + font(size) + '</circularScale>'
|
||||
self.add(s)
|
||||
|
||||
def ring_gauge(self, cx, cy, rad, item, mn, mx, color='teal', sw=12.0, thresholds=None):
|
||||
"""270 degree ring with the gap on the right; the value arc grows from 9 o'clock up and down.
|
||||
The Operator Interface (desktop) draws arc angles mirrored about the horizontal axis compared
|
||||
with the web client, so only shapes symmetric about that axis look the same on both:
|
||||
track 45..315 degrees, value arc centred on 180 degrees (start = 180 - extent / 2)."""
|
||||
self.arc(cx, cy, rad, 45, 270, 'track', sw)
|
||||
acts = [conn('arc.extentAngle', item, transform=tr_linear(mn, mx, 0.5, 270)),
|
||||
conn('arc.startAngle', item, transform=tr_linear(mn, mx, 179.75, 45))]
|
||||
if thresholds:
|
||||
acts.append(conn('arc.strokePaint', item, transform=tr_threshold(thresholds)))
|
||||
self.arc(cx, cy, rad, 179.75, 0.5, color, sw, acts)
|
||||
|
||||
def lamp(self, l, t, d, item, on='green', off='off', inp='Boolean', table=None):
|
||||
tbl = table or [(False, off), (True, on)]
|
||||
self.ellipse(l, t, d, d, fill=off, actions=[conn('ellipse.fillPaint', item,
|
||||
transform=tr_threshold(tbl, inp))])
|
||||
|
||||
# ----- complex components
|
||||
def alarm_overview(self, l, t, w, h, overview='CurrentAlarms', asa=None, size=12, banner=False):
|
||||
l, t, w, h = self._b(l, t, w, h, True)
|
||||
s = '<alarmOverview type="componentData" %s>' % box_attrs(l, t, w, h) + self._id()
|
||||
s += '<zoomEnabled>false</zoomEnabled>'
|
||||
s += '<overviewType type="alarmOverview" value="%s"/>' % overview
|
||||
# dark rows: background, unacknowledged / acknowledged row colour per priority, text colours
|
||||
s += '<opaque>true</opaque>' + colorset('backgroundColor', 'panel')
|
||||
for c, col in (('Alarm', (248, 113, 113)), ('Normal', 'text'), ('Ackn', 'muted'), ('Info', 'muted'),
|
||||
('Diag', 'amber'), ('Deactive', 'muted'), ('Recover', 'green')):
|
||||
s += colorset('eventType%sAckColor' % c, col) + colorset('eventType%sNackColor' % c, col)
|
||||
for p in range(0, 16):
|
||||
s += ('<property type="componentProperty"><name>priorityNackColor[%02d]</name><value type="colorSet" %s/></property>'
|
||||
'<property type="componentProperty"><name>priorityAckColor[%02d]</name><value type="colorSet" %s/></property>'
|
||||
) % (p, rgb((64, 24, 30) if p <= 3 else (36, 45, 57)), p, rgb('card'))
|
||||
s += font(size) + font(size, False, FONT_UI, 'alarmLineFont') + font(size - 1, True, FONT_UI, 'buttonFont')
|
||||
# explicit columns: order and widths spread over the whole component width (autoFit off)
|
||||
cols = [('AlarmTime', 200), ('Priority', 70), ('Section', 300), ('Tag', 170), ('ItemDesciption', 320),
|
||||
('Text', 300), ('AlarmType', 120), ('Value', 110), ('Acknowledged', 110)]
|
||||
scale = (w - 24.0) / sum(c[1] for c in cols)
|
||||
for i, (c, cw) in enumerate(cols):
|
||||
s += '<column%sVisible>true</column%sVisible><column%sPosition>%d</column%sPosition>' % (c, c, c, i + 1, c)
|
||||
s += '<column%sWidth>%d</column%sWidth>' % (c, int(cw * scale), c)
|
||||
hide = ['CEventActor', 'CEventCat', 'CEventCondition', 'CEventSource', 'CEventSubCond', 'EventActor',
|
||||
'EventCat', 'EventCondition', 'EventSource', 'EventSubCond', 'Installation', 'ItemName',
|
||||
'OriginalTime', 'Quality', 'Unit', 'User', 'Sub', 'EngUnits', 'Location', 'InstallationDescription',
|
||||
'UnitDescription', 'SectionDescription', 'AlarmCollection', 'EventID', 'ConditionID', 'BranchID',
|
||||
'PriorityText'] # AlarmAttribute is an array property
|
||||
for c in hide:
|
||||
s += '<column%sVisible>false</column%sVisible>' % (c, c)
|
||||
if banner:
|
||||
s += ('<statusLineVisible>false</statusLineVisible><autoFit>false</autoFit><stopMoreVisible>false'
|
||||
'</stopMoreVisible><headingVisible>false</headingVisible><dateTimeSelectorVisible>false'
|
||||
'</dateTimeSelectorVisible><filterSelectorVisible>false</filterSelectorVisible>')
|
||||
else:
|
||||
# autoFit in a tab that is hidden while loading squeezes all columns to nothing (web)
|
||||
s += '<autoFit>false</autoFit>'
|
||||
s += '<highAlarmPriorityRange>1-1</highAlarmPriorityRange><mediumAlarmPriorityRange>2-2</mediumAlarmPriorityRange>'
|
||||
s += '<lowAlarmPriorityRange>3-3</lowAlarmPriorityRange><diagnosticAlarmPriorityRange>0-0,4-15</diagnosticAlarmPriorityRange>'
|
||||
if asa:
|
||||
s += ('<userDataFilterType type="alarmUserFilter" value="UserDataFilterASA"/>'
|
||||
'<userDataFilterValue>%s</userDataFilterValue>'
|
||||
'<dataFilterType type="alarmDataFilter" value="DataFilterUserFiler"/>') % asa
|
||||
s += '<data type="data"><action type="actionInternalServiced"/></data></alarmOverview>'
|
||||
self.add(s)
|
||||
|
||||
def report(self, l, t, w, h, report=None):
|
||||
l, t, w, h = self._b(l, t, w, h, True)
|
||||
s = '<reporting type="componentData" %s>' % box_attrs(l, t, w, h) + self._id()
|
||||
if report:
|
||||
s += '<reportSelected>%s</reportSelected>' % esc(report)
|
||||
s += '<data type="data"><action type="actionInternalServiced"/></data></reporting>'
|
||||
self.add(s)
|
||||
|
||||
def micro_trend(self, l, t, w, h, pens, time_range=600, history=True):
|
||||
l, t, w, h = self._b(l, t, w, h, True)
|
||||
"""pens: list of (item, min, max, colour)."""
|
||||
s = '<microTrend type="componentData" %s>' % box_attrs(l, t, w, h) + self._id()
|
||||
s += '<numberOfPens>%d</numberOfPens><realTime>true</realTime><fillWithHistory>%s</fillWithHistory>' % (len(pens), 'true' if history else 'false')
|
||||
s += '<microTrendBackgroundFillOn>true</microTrendBackgroundFillOn><lowHighFillOn>false</lowHighFillOn>'
|
||||
s += colorset('microTrendBackgroundFillColor', 'panel') + colorset('microTrendBackgroundColor', 'line')
|
||||
acts = ['<action type="actionInternalServiced"/>']
|
||||
for i, (item, mn, mx, col) in enumerate(pens):
|
||||
s += ('<property type="componentProperty"><name>itemName[%d]</name><value/></property>'
|
||||
'<property type="componentProperty"><name>scaleMin[%d]</name><value>%s</value></property>'
|
||||
'<property type="componentProperty"><name>scaleMax[%d]</name><value>%s</value></property>'
|
||||
'<property type="componentProperty"><name>color[%d]</name><value type="colorSet" %s/></property>'
|
||||
'<property type="componentProperty"><name>stroke[%d]</name><value type="stroke" width="2.0"/></property>'
|
||||
) % (i, i, float(mn), i, float(mx), i, rgb(col), i)
|
||||
acts.append(conn('microTrend.itemName[%d]' % i, item, 'ItemName'))
|
||||
s += data(acts) + '</microTrend>'
|
||||
self.add(s)
|
||||
|
||||
def trend(self, l, t, w, h, pens, minutes=10, title='', web_spares=True):
|
||||
l, t, w, h = self._b(l, t, w, h, True)
|
||||
"""pens: list of (item, colour, min, max, description). Padded to 50 visible pens (ISS-041)."""
|
||||
def pen(item, col, mn, mx, desc, spare=0):
|
||||
if spare:
|
||||
col_x = colorset('color', 'panel')
|
||||
stroke, legend, vis_leg, rng, mn_s, mx_s, typ = '0.0', ' ' * spare, 'false', 1, '1.0E30', '2.0E30', 1
|
||||
desc = ''
|
||||
else:
|
||||
col_x = colorset('color', col)
|
||||
stroke, legend, vis_leg, rng, mn_s, mx_s, typ = '2.0', '', 'true', 1, repr(float(mn)), repr(float(mx)), 0
|
||||
return ('<pen type="pen"><type>%d</type>%s<stroke type="stroke" width="%s"/><paint>@NULL</paint>'
|
||||
'<visible>true</visible><visibleLegend>%s</visibleLegend>'
|
||||
'<source type="sourceID" uri="ci:/item/%s"/><axisVisible>%s</axisVisible><axisPosition>0</axisPosition>'
|
||||
'<labelVisible>true</labelVisible><majorTickVisible>true</majorTickVisible><minorTickVisible>true</minorTickVisible>'
|
||||
'<axisColor>@NULL</axisColor><labelColor>@NULL</labelColor><scaleRangeType>%d</scaleRangeType>'
|
||||
'<minimum>%s</minimum><maximum>%s</maximum><procentual>false</procentual><title/>'
|
||||
'<description>%s</description><legendText>%s</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"/>'
|
||||
'<annotationVisible>false</annotationVisible><timeShift>0</timeShift></pen>') % (
|
||||
typ, col_x, stroke, vis_leg, esc(item), 'true' if (not spare and pens and item == pens[0][0]) else 'false',
|
||||
rng, mn_s, mx_s, esc(desc), legend)
|
||||
body = ''.join(pen(*p) for p in pens)
|
||||
if web_spares: # the web trend draws only with 50 visible pens (ISS-041); the desktop hairline then lists 50 values
|
||||
body += ''.join(pen(pens[0][0], None, 0, 0, '', i) for i in range(1, 51 - len(pens)))
|
||||
s = ('<chart type="componentData">' + self._id() +
|
||||
'<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><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>%d</width><heigth>%d</heigth><iconized>false</iconized>'
|
||||
'<backgroundBorder type="border" value="BorderEmpty"/>%s'
|
||||
'<backgroundPaint type="paint"><paint type="colorSet" %s/></backgroundPaint>'
|
||||
'<plotAreaBorder type="border" value="BorderEmpty"/><plotAreaTransparent>false</plotAreaTransparent>'
|
||||
'<plotAreaIcon>@NULL</plotAreaIcon><plotAreaPaint type="paint"><paint type="colorSet" %s/></plotAreaPaint>'
|
||||
'%s<hairlineVisible>false</hairlineVisible><antialiasingText>true</antialiasingText>'
|
||||
'<antialiasingData>true</antialiasingData><renderMode type="chartRendering" value="Rendering2d"/>'
|
||||
'<timeNavigatorVisible>true</timeNavigatorVisible><timeRangeControlVisible>true</timeRangeControlVisible>'
|
||||
'<autoUpdateInterval>false</autoUpdateInterval><legendVisible>true</legendVisible><legendTitle/>'
|
||||
'<legendHeading/>%s%s%s<legendTransparancy>0.0</legendTransparancy>'
|
||||
'<legendBorderType type="border" value="BorderEmpty"/><legendPositionType type="position" value="PositionNorthEast"/>'
|
||||
'<timeSliderVisible>true</timeSliderVisible><timeSliderAbove>false</timeSliderAbove>'
|
||||
'<valueSliderVisible>false</valueSliderVisible><valueSliderLeft>false</valueSliderLeft>'
|
||||
'<xAxisReversed>false</xAxisReversed><yAxisReversed>false</yAxisReversed><projectorReversed>false</projectorReversed>'
|
||||
'<scalingFonts>false</scalingFonts><maximumPens>50</maximumPens><pensPerPack>0</pensPerPack>'
|
||||
'<triggerPen>0</triggerPen><timeAxisVisible>true</timeAxisVisible><timeAxisMajorTickVisible>true</timeAxisMajorTickVisible>'
|
||||
'<timeAxisMinorTickVisible>false</timeAxisMinorTickVisible>%s%s%s'
|
||||
'<timeAxisLabelVisible>true</timeAxisLabelVisible><timeAxisLongLabelVisible>false</timeAxisLongLabelVisible>'
|
||||
'<timeAxisLabelRotation>0</timeAxisLabelRotation><timeAxisTitle/><timeAxisTitleRotation>0</timeAxisTitleRotation>'
|
||||
'<timeAxisTitlePlacement>50</timeAxisTitlePlacement><timeAxisMajorGridVisible>true</timeAxisMajorGridVisible>'
|
||||
'%s<timeAxisMajorGridStroke type="stroke" width="1.0" endCap="butt" lineJoin="bevel"/>'
|
||||
'<timeAxisMinorGridVisible>false</timeAxisMinorGridVisible>%s'
|
||||
'<timeAxisMinorGridStroke type="stroke" width="1.0" endCap="butt" lineJoin="bevel"/>'
|
||||
'<headerText>%s</headerText>%s%s<headerJustification type="jTextJustification" value="TextJustificationLeft"/>'
|
||||
'<footerText/>%s%s<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>%s'
|
||||
'<timeRange type="timeRangeLast" count="%d"><type type="timeUnit" value="TimeUnitMinute"/></timeRange>'
|
||||
'<updateInterval>5</updateInterval><fillHistory>true</fillHistory><updating>true</updating>'
|
||||
'</chartPanel></config>%s<data type="data"><action type="actionInternalServiced"/></data></chart>') % (
|
||||
w, h, colorset('foregroundColor', 'muted'), rgb('panel'), rgb('panel'), colorset('hairlineColor', 'muted'),
|
||||
colorset('legendColor', 'text'), colorset('legendBackgroundColor', 'panel'), font(11, False, FONT_UI, 'legendFont'),
|
||||
colorset('timeAxisColor', 'muted'), font(11, False, FONT_UI, 'timeAxisFont'), colorset('timeAxisLabelColor', 'muted'),
|
||||
colorset('timeAxisMajorGridColor', 'line'), colorset('timeAxisMinorGridColor', 'line'),
|
||||
esc(title), colorset('headerColor', 'text'), font(12, True, FONT_UI, 'headerFont'),
|
||||
colorset('footerColor', 'muted'), font(11, False, FONT_UI, 'footerFont'), body, minutes, box_elems(l, t, w, h))
|
||||
self.add(s)
|
||||
|
||||
# ----- output
|
||||
def xml(self):
|
||||
vg = ''
|
||||
for i, (n, d, z) in enumerate([('Overview', 'Always shown', 10.0), ('Rough', 'Shown when viewing viewing a large area', 25.0),
|
||||
('Standard', 'Shown when using the default view setting', 100.0),
|
||||
('Detail', 'Shown only when viewing a small area', 400.0),
|
||||
('Intricacies', 'Shown only when viewing a very small area', 1000.0)]):
|
||||
vg += ('<visibilityGroup type="componentData"><htmlId>%d</htmlId><name>%s</name><description>%s</description>'
|
||||
'<minimumZoomEnabled>true</minimumZoomEnabled><minimumZoomFactor>%s</minimumZoomFactor>'
|
||||
'</visibilityGroup>\n') % (i + 2, n, d, z)
|
||||
head = ('<?xml version="1.0" encoding="utf-8" ?>\n<visualization protocolVersion="1.3.0.0">\n <globalSection/>\n'
|
||||
' <coreObjectDefinition type="displayDefinition">\n<version type="version" value="1.3.0.0"/>\n'
|
||||
'<title>%s</title>\n<html>true</html>\n<width>%d</width>\n<height>%d</height>\n'
|
||||
'<referenceCheck>%d</referenceCheck>\n'
|
||||
'%s\n<backgroundColorOn>true</backgroundColorOn>\n%s\n%s\n%s\n<defaultStroke type="stroke" width="1.0"/>\n'
|
||||
'<grid type="grid" gridVisible="true" snappingActive="true" verticalSnapInterval="4" horizontalSnapInterval="4" onTop="false">'
|
||||
'<color type="colorSet" r="51" g="59" b="71"/></grid>\n'
|
||||
'<revisionHistory type="revisionHistory"><revision type="revision" who="ADMIN" when="2026.10.02 12:00:00.000 AEST" '
|
||||
'what="Generated by displays/generator/build.py" where="localhost"/></revisionHistory>\n'
|
||||
'<blinkDelay>500</blinkDelay>\n<blinkEnabled>true</blinkEnabled>\n<mousePassThrough>false</mousePassThrough>\n'
|
||||
) % (esc(self.title), self.w, self.h, self.hid, colorset('backgroundColor', self.bg),
|
||||
colorset('defaultBgColor', self.bg), colorset('defaultFgColor', 'text'), font(12, False, FONT_UI, 'defaultFont'))
|
||||
layer = '<visualizationLayer type="componentData"><htmlId>1</htmlId><name>Layer1</name></visualizationLayer>\n'
|
||||
body = '<componentCountHint>%d</componentCountHint>\n' % len(self.parts)
|
||||
# full-size background rectangle first (the web client ignores the display background colour on some frames)
|
||||
return (head + vg + layer + body + '\n'.join(self.parts) +
|
||||
'\n </coreObjectDefinition>\n</visualization>\n')
|
||||
|
||||
def save(self, folder):
|
||||
import os
|
||||
with open(os.path.join(folder, self.name + '.xml'), 'w', encoding='utf-8', newline='\r\n') as f:
|
||||
f.write(self.xml())
|
||||
|
|
@ -1,11 +1,9 @@
|
|||
@echo off
|
||||
rem Remove the CI-Eng-Sample displays (operator interface and HTML version). CI Server R1.03.00.
|
||||
rem Close CIENG_Tank, CIENG_Menu and CIENG_TrendLab in the Edit Module first.
|
||||
rem Close them 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"
|
||||
del /q "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\CIENG_Menu.xml"
|
||||
del /q "%WAP%\mobileoperator\operatorInterfaces\DEPLOY\displays\CIENG_Menu.html"
|
||||
del /q "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\CIENG_TrendLab.xml"
|
||||
del /q "%WAP%\mobileoperator\operatorInterfaces\DEPLOY\displays\CIENG_TrendLab.html"
|
||||
for %%d in (CIENG_Header CIENG_Overview CIENG_Control CIENG_Trends CIENG_Alarms CIENG_System CIENG_AlarmBanner CIENG_TankFaceplate) do (
|
||||
if exist "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\%%d.xml" del /q "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\%%d.xml"
|
||||
if exist "%WAP%\mobileoperator\operatorInterfaces\DEPLOY\displays\%%d.html" del /q "%WAP%\mobileoperator\operatorInterfaces\DEPLOY\displays\%%d.html"
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
<!-- CIENG-SAMPLE-BEGIN: CI-Eng-Sample operator layout (CI Server R1.03.00).
|
||||
<!-- CIENG-SAMPLE-BEGIN: CI-Eng-Sample operator layouts (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". -->
|
||||
CIENG_Operator: menu, navigation toolbar, header frame "hdr" (CIENG_Header), tab set "default"
|
||||
with frames ovw / ctl / trd / alm / sys, alarm banner frame (CIENG_AlarmBanner), status line.
|
||||
CIENG_Popup: faceplate window (CIENG_TankFaceplate). No AOG displays are used.
|
||||
Desktop: frames inside a <tab> ignore their zoom attribute; the navigate commands carry
|
||||
stretchDisplay instead (and CIENG_AlarmBanner opens the Overview tab that way at logon). -->
|
||||
<layout
|
||||
name="CIENG_Operator"
|
||||
title="CI-Eng-Sample - $default"
|
||||
title="CI-Eng-Sample Demo"
|
||||
icon="poi.png"
|
||||
drawBorder="true"
|
||||
sizingAllowed="true"
|
||||
|
|
@ -15,170 +17,90 @@
|
|||
initialPosition="centreScreen"
|
||||
initialPositionX="0"
|
||||
initialPositionY="0"
|
||||
initialSize="pixels"
|
||||
initialSizeWidth="1600"
|
||||
initialSizeHeight="900"
|
||||
initialSize="desktopSize"
|
||||
initialSizeWidth="1920"
|
||||
initialSizeHeight="1040"
|
||||
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-item name="cieng.menu.file" label="File" mnemonic="f">
|
||||
<menu-item name="cieng.menu.file.print" label="Print..." mnemonic="p" tooltip="Print the current tab" command="print frameWithSetup"/>
|
||||
<menu-separator/>
|
||||
<menu-item
|
||||
name="cieng.menu.file.exit"
|
||||
label="Exit"
|
||||
mnemonic="x"
|
||||
tooltip="Close this window"
|
||||
command="exit"/>
|
||||
<menu-item name="cieng.menu.file.logout" label="Log out" mnemonic="l" tooltip="Log out" command="logout"/>
|
||||
<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-item name="cieng.menu.view" label="View" mnemonic="v">
|
||||
<menu-item name="cieng.menu.view.reload" label="Reload all" mnemonic="r" accelerator="F5" tooltip="Reload all displays" command="reload all"/>
|
||||
<menu-item name="cieng.menu.view.fullscreen" label="Full screen" mnemonic="u" accelerator="F11" tooltip="Toggle full screen" command="toggleSize fullScreen"/>
|
||||
<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 name="cieng.menu.view.toolbar" label="Toolbar" mnemonic="t" type="check" tooltip="Show or hide the toolbar" command="toolbar"/>
|
||||
<menu-item name="cieng.menu.view.status" label="Status line" mnemonic="s" type="check" tooltip="Show or hide the status line" command="statusline"/>
|
||||
</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 name="cieng.menu.displays" label="Displays" mnemonic="d">
|
||||
<menu-item name="cieng.menu.displays.ovw" label="Overview" mnemonic="o" accelerator="F1" command="navigate to ovw CIENG_Overview stretchDisplay"/>
|
||||
<menu-item name="cieng.menu.displays.ctl" label="Process control" mnemonic="p" accelerator="F2" command="navigate to ctl CIENG_Control stretchDisplay"/>
|
||||
<menu-item name="cieng.menu.displays.trd" label="Trends" mnemonic="t" accelerator="F3" command="navigate to trd CIENG_Trends stretchDisplay"/>
|
||||
<menu-item name="cieng.menu.displays.alm" label="Alarms" mnemonic="a" accelerator="F4" command="navigate to alm CIENG_Alarms stretchDisplay"/>
|
||||
<menu-item name="cieng.menu.displays.sys" label="System" mnemonic="s" accelerator="F6" command="navigate to sys CIENG_System stretchDisplay"/>
|
||||
</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 name="cieng.toolbar" label="Navigation" floatable="false" position="top">
|
||||
<toolbar-item name="cieng.toolbar.back" icon="ciNavLeft32.png" label="" tooltip="Back to $" command="navigate back ovw"/>
|
||||
<toolbar-item name="cieng.toolbar.forward" icon="ciNavRight32.png" label="" tooltip="Forward to $" command="navigate forward ovw"/>
|
||||
<toolbar-item name="cieng.toolbar.home" icon="ciOverview32.png" label="" tooltip="Home: Overview" command="navigate home ovw"/>
|
||||
<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-item name="cieng.toolbar.ovw" label="Overview" tooltip="Overview (F1)" command="navigate to ovw CIENG_Overview stretchDisplay"/>
|
||||
<toolbar-item name="cieng.toolbar.ctl" label="Process control" tooltip="Process control (F2)" command="navigate to ctl CIENG_Control stretchDisplay"/>
|
||||
<toolbar-item name="cieng.toolbar.trd" label="Trends" tooltip="Trends (F3)" command="navigate to trd CIENG_Trends stretchDisplay"/>
|
||||
<toolbar-item name="cieng.toolbar.alm" icon="ciProAlar32.png" label="Alarms" tooltip="Alarms (F4)" command="navigate to alm CIENG_Alarms stretchDisplay"/>
|
||||
<toolbar-item name="cieng.toolbar.sys" label="System" tooltip="System (F6)" command="navigate to sys CIENG_System stretchDisplay"/>
|
||||
<toolbar-separator/>
|
||||
<toolbar-item name="cieng.toolbar.reload" label="Reload" tooltip="Reload all displays" command="reload all"/>
|
||||
<toolbar-item name="cieng.toolbar.full" icon="ciZoomFull32.png" label="" tooltip="Full screen" command="toggleSize fullScreen"/>
|
||||
</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"/>
|
||||
<!-- The tab set must be the LAST child of its frame-set: the web client (R1.03) binds the tab
|
||||
click handler to the last panel created in the frame-set. -->
|
||||
<frame-set rows="1*,fitDisplay" borderStyle="none">
|
||||
<frame-set rows="fitDisplay,1*" borderStyle="none">
|
||||
<frame name="hdr" stackSize="1" zoomingAllowed="false" scrollingAllowed="false" initialDisplay="CIENG_Header" borderStyle="none" zoom="stretchDisplay"/>
|
||||
<tab stackSize="10" name="default" zoomingAllowed="true" scrollingAllowed="true" zoom="stretchDisplay" closeTabAllowed="false" borderStyle="none" tabPosition="top" maximumTabs="5">
|
||||
<frame name="ovw" stackSize="10" zoomingAllowed="true" scrollingAllowed="true" initialDisplay="CIENG_Overview" closeTabAllowed="false" borderStyle="none" zoom="stretchDisplay"/>
|
||||
<frame name="ctl" stackSize="10" zoomingAllowed="true" scrollingAllowed="true" initialDisplay="CIENG_Control" closeTabAllowed="false" borderStyle="none" zoom="stretchDisplay"/>
|
||||
<frame name="trd" stackSize="10" zoomingAllowed="true" scrollingAllowed="true" initialDisplay="CIENG_Trends" closeTabAllowed="false" borderStyle="none" zoom="stretchDisplay"/>
|
||||
<frame name="alm" stackSize="10" zoomingAllowed="true" scrollingAllowed="true" initialDisplay="CIENG_Alarms" closeTabAllowed="false" borderStyle="none" zoom="stretchDisplay"/>
|
||||
<frame name="sys" stackSize="10" zoomingAllowed="true" scrollingAllowed="true" initialDisplay="CIENG_System" closeTabAllowed="false" borderStyle="none" zoom="stretchDisplay"/>
|
||||
</tab>
|
||||
</frame-set>
|
||||
<frame name="alarmBannerFrame" stackSize="1" zoomingAllowed="false" scrollingAllowed="false" initialDisplay="CIENG_AlarmBanner" borderStyle="none" zoom="stretchDisplay"/>
|
||||
</frame-set>
|
||||
<status-line>
|
||||
<status-line-item
|
||||
type="statusText"/>
|
||||
<status-line-item type="statusText"/>
|
||||
<status-line-separator/>
|
||||
<status-line-item
|
||||
type="displayName"/>
|
||||
<status-line-item type="displayName"/>
|
||||
<status-line-separator/>
|
||||
<status-line-item
|
||||
type="userName"/>
|
||||
<status-line-item type="userName"/>
|
||||
<status-line-separator/>
|
||||
<status-line-item
|
||||
type="dateTime"/>
|
||||
<status-line-item type="dateTime"/>
|
||||
</status-line>
|
||||
</layout>
|
||||
<layout
|
||||
name="CIENG_Popup"
|
||||
title="$default"
|
||||
icon="poi.png"
|
||||
drawBorder="true"
|
||||
sizingAllowed="false"
|
||||
minimizingAllowed="false"
|
||||
closingAllowed="true"
|
||||
alwaysOnTop="true"
|
||||
modal="false"
|
||||
initialPosition="atCursor"
|
||||
initialPositionX="0"
|
||||
initialPositionY="0"
|
||||
initialSize="fitFrames"
|
||||
initialSizeWidth="420"
|
||||
initialSizeHeight="600"
|
||||
maximumOpen="3">
|
||||
<frame-set rows="1*">
|
||||
<frame name="default" stackSize="1" zoomingAllowed="false" scrollingAllowed="false" initialDisplay="CIENG_TankFaceplate" borderStyle="none"/>
|
||||
</frame-set>
|
||||
</layout>
|
||||
<!-- CIENG-SAMPLE-END -->
|
||||
|
|
|
|||
|
|
@ -31,4 +31,4 @@ if (-not $Remove) {
|
|||
# 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' }
|
||||
if ($Remove) { 'CIENG_Operator / CIENG_Popup layouts removed' } else { 'CIENG_Operator / CIENG_Popup layouts added' }
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue