# HG changeset patch # User Edouard Tisserant <edouard.tisserant@gmail.com> # Date 1663080795 -7200 # Node ID 51a3d6f39944b8aa54c11664a27d62c441255519 # Parent 02229133df43e858f713f511ae9525adc43d4c14# Parent be87303d5b2d3d413fc071a2f04d1fa68876ba8b Merge changes from default branch diff -r 02229133df43 -r 51a3d6f39944 controls/DebugVariablePanel/DebugVariableItem.py --- a/controls/DebugVariablePanel/DebugVariableItem.py Tue Sep 13 16:51:54 2022 +0200 +++ b/controls/DebugVariablePanel/DebugVariableItem.py Tue Sep 13 16:53:15 2022 +0200 @@ -144,7 +144,7 @@ """ # Return immediately if data empty or none if self.Data is None or self.Data.count == 0: - return [] + return None # Find nearest data outside given range indexes start_idx = (self.GetNearestData(start_tick, -1) @@ -187,6 +187,9 @@ # Get data in given tick range data = self.GetData(start_tick, end_tick) + if data is None: + return None, None, None + # Value range is calculated on whole data if full_range: return data, self.MinValue, self.MaxValue diff -r 02229133df43 -r 51a3d6f39944 exemples/svghmi_jumps/beremiz.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/exemples/svghmi_jumps/beremiz.xml Tue Sep 13 16:53:15 2022 +0200 @@ -0,0 +1,5 @@ +<?xml version='1.0' encoding='utf-8'?> +<BeremizRoot xmlns:xsd="http://www.w3.org/2001/XMLSchema" URI_location="LOCAL://"> + <TargetType/> + <Libraries Enable_SVGHMI_Library="true"/> +</BeremizRoot> diff -r 02229133df43 -r 51a3d6f39944 exemples/svghmi_jumps/plc.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/exemples/svghmi_jumps/plc.xml Tue Sep 13 16:53:15 2022 +0200 @@ -0,0 +1,660 @@ +<?xml version='1.0' encoding='utf-8'?> +<project xmlns:ns1="http://www.plcopen.org/xml/tc6_0201" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.plcopen.org/xml/tc6_0201"> + <fileHeader companyName="Unknown" productName="Unnamed" productVersion="1" creationDateTime="2022-09-05T09:02:48"/> + <contentHeader name="Unnamed" modificationDateTime="2022-09-09T09:39:37"> + <coordinateInfo> + <fbd> + <scaling x="5" y="5"/> + </fbd> + <ld> + <scaling x="0" y="0"/> + </ld> + <sfc> + <scaling x="0" y="0"/> + </sfc> + </coordinateInfo> + </contentHeader> + <types> + <dataTypes/> + <pous> + <pou name="program0" pouType="program"> + <interface> + <localVars> + <variable name="LOGGER0"> + <type> + <derived name="LOGGER"/> + </type> + </variable> + <variable name="ENTERING_PAGE"> + <type> + <derived name="HMI_BOOL"/> + </type> + </variable> + <variable name="LEVEL"> + <type> + <derived name="LOGLEVEL"/> + </type> + <initialValue> + <simpleValue value="DEBUG"/> + </initialValue> + </variable> + </localVars> + <externalVars> + <variable name="CURRENT_PAGE_0"> + <type> + <derived name="HMI_STRING"/> + </type> + </variable> + </externalVars> + <localVars> + <variable name="R_TRIG0"> + <type> + <derived name="R_TRIG"/> + </type> + </variable> + <variable name="ENABLE_JUMP"> + <type> + <derived name="HMI_BOOL"/> + </type> + </variable> + <variable name="FB_ZERO"> + <type> + <derived name="my_functionBlock"/> + </type> + </variable> + <variable name="FB_ONE"> + <type> + <derived name="my_functionBlock"/> + </type> + </variable> + <variable name="FB_TWO"> + <type> + <derived name="my_functionBlock"/> + </type> + </variable> + <variable name="FB_THREE"> + <type> + <derived name="my_functionBlock"/> + </type> + </variable> + <variable name="FB_FOUR"> + <type> + <derived name="my_functionBlock"/> + </type> + </variable> + <variable name="FB_FIVE"> + <type> + <derived name="my_functionBlock"/> + </type> + </variable> + <variable name="Enable0"> + <type> + <derived name="HMI_BOOL"/> + </type> + <initialValue> + <simpleValue value="TRUE"/> + </initialValue> + </variable> + <variable name="Enable1"> + <type> + <derived name="HMI_BOOL"/> + </type> + </variable> + <variable name="Enable2"> + <type> + <derived name="HMI_BOOL"/> + </type> + <initialValue> + <simpleValue value="TRUE"/> + </initialValue> + </variable> + <variable name="Enable3"> + <type> + <derived name="HMI_BOOL"/> + </type> + <initialValue> + <simpleValue value="TRUE"/> + </initialValue> + </variable> + <variable name="Enable4"> + <type> + <derived name="HMI_BOOL"/> + </type> + </variable> + <variable name="Enable5"> + <type> + <derived name="HMI_BOOL"/> + </type> + <initialValue> + <simpleValue value="TRUE"/> + </initialValue> + </variable> + </localVars> + </interface> + <body> + <FBD> + <block localId="1" typeName="LOGGER" instanceName="LOGGER0" executionOrderId="0" height="105" width="58"> + <position x="280" y="275"/> + <inputVariables> + <variable formalParameter="TRIG"> + <connectionPointIn> + <relPosition x="0" y="35"/> + <connection refLocalId="7"> + <position x="280" y="310"/> + <position x="189" y="310"/> + </connection> + </connectionPointIn> + </variable> + <variable formalParameter="MSG"> + <connectionPointIn> + <relPosition x="0" y="60"/> + <connection refLocalId="11"> + <position x="280" y="335"/> + <position x="212" y="335"/> + </connection> + </connectionPointIn> + </variable> + <variable formalParameter="LEVEL"> + <connectionPointIn> + <relPosition x="0" y="90"/> + <connection refLocalId="8"> + <position x="280" y="365"/> + <position x="190" y="365"/> + </connection> + </connectionPointIn> + </variable> + </inputVariables> + <inOutVariables/> + <outputVariables/> + </block> + <inVariable localId="2" executionOrderId="0" height="24" width="114" negated="false"> + <position x="25" y="550"/> + <connectionPointOut> + <relPosition x="114" y="10"/> + </connectionPointOut> + <expression>ENTERING_PAGE</expression> + </inVariable> + <inVariable localId="4" executionOrderId="0" height="25" width="90" negated="false"> + <position x="160" y="575"/> + <connectionPointOut> + <relPosition x="90" y="10"/> + </connectionPointOut> + <expression>BOOL#FALSE</expression> + </inVariable> + <block localId="6" typeName="MOVE" executionOrderId="0" height="70" width="55"> + <position x="295" y="530"/> + <inputVariables> + <variable formalParameter="EN" edge="falling"> + <connectionPointIn> + <relPosition x="0" y="30"/> + <connection refLocalId="13" formalParameter="Q"> + <position x="295" y="560"/> + <position x="250" y="560"/> + </connection> + </connectionPointIn> + </variable> + <variable formalParameter="IN"> + <connectionPointIn> + <relPosition x="0" y="55"/> + <connection refLocalId="4"> + <position x="295" y="585"/> + <position x="250" y="585"/> + </connection> + </connectionPointIn> + </variable> + </inputVariables> + <inOutVariables/> + <outputVariables> + <variable formalParameter="ENO"> + <connectionPointOut> + <relPosition x="55" y="30"/> + </connectionPointOut> + </variable> + <variable formalParameter="OUT"> + <connectionPointOut> + <relPosition x="55" y="55"/> + </connectionPointOut> + </variable> + </outputVariables> + </block> + <inVariable localId="7" executionOrderId="0" height="24" width="114" negated="false"> + <position x="75" y="300"/> + <connectionPointOut> + <relPosition x="114" y="10"/> + </connectionPointOut> + <expression>ENTERING_PAGE</expression> + </inVariable> + <inVariable localId="8" executionOrderId="0" height="25" width="50" negated="false"> + <position x="140" y="355"/> + <connectionPointOut> + <relPosition x="50" y="10"/> + </connectionPointOut> + <expression>LEVEL</expression> + </inVariable> + <comment localId="9" height="40" width="640"> + <position x="15" y="210"/> + <content> + <xhtml:p><![CDATA[Acknowledge page jump being notified by HMI by setting ENTERING_PAGE to True]]></xhtml:p> + </content> + </comment> + <inVariable localId="11" executionOrderId="0" height="25" width="122" negated="false"> + <position x="90" y="325"/> + <connectionPointOut> + <relPosition x="122" y="10"/> + </connectionPointOut> + <expression>CURRENT_PAGE_0</expression> + </inVariable> + <outVariable localId="12" executionOrderId="0" height="25" width="115" negated="false"> + <position x="385" y="575"/> + <connectionPointIn> + <relPosition x="0" y="10"/> + <connection refLocalId="6" formalParameter="OUT"> + <position x="385" y="585"/> + <position x="350" y="585"/> + </connection> + </connectionPointIn> + <expression>ENTERING_PAGE</expression> + </outVariable> + <block localId="13" typeName="R_TRIG" instanceName="R_TRIG0" executionOrderId="0" height="40" width="60"> + <position x="190" y="530"/> + <inputVariables> + <variable formalParameter="CLK"> + <connectionPointIn> + <relPosition x="0" y="30"/> + <connection refLocalId="2"> + <position x="190" y="560"/> + <position x="139" y="560"/> + </connection> + </connectionPointIn> + </variable> + </inputVariables> + <inOutVariables/> + <outputVariables> + <variable formalParameter="Q"> + <connectionPointOut> + <relPosition x="60" y="30"/> + </connectionPointOut> + </variable> + </outputVariables> + </block> + <comment localId="3" height="60" width="640"> + <position x="15" y="440"/> + <content> + <xhtml:p><![CDATA[Reset ENTERING_PAGE 1 cycle after being set. +Use EN pin of MOVE to ensure that variable is only assigned when being reset.]]></xhtml:p> + </content> + </comment> + <block localId="14" typeName="my_functionBlock" instanceName="FB_ZERO" executionOrderId="0" height="70" width="191"> + <position x="170" y="16"/> + <inputVariables> + <variable formalParameter="SOME_STRING"> + <connectionPointIn> + <relPosition x="0" y="30"/> + <connection refLocalId="24"> + <position x="170" y="46"/> + <position x="125" y="46"/> + </connection> + </connectionPointIn> + </variable> + <variable formalParameter="SOME_INPUT"> + <connectionPointIn> + <relPosition x="0" y="55"/> + <connection refLocalId="18"> + <position x="170" y="71"/> + <position x="125" y="71"/> + </connection> + </connectionPointIn> + </variable> + </inputVariables> + <inOutVariables/> + <outputVariables> + <variable formalParameter="SOME_OUTPUT"> + <connectionPointOut> + <relPosition x="191" y="30"/> + </connectionPointOut> + </variable> + </outputVariables> + </block> + <block localId="5" typeName="my_functionBlock" instanceName="FB_ONE" executionOrderId="0" height="70" width="191"> + <position x="170" y="110"/> + <inputVariables> + <variable formalParameter="SOME_STRING"> + <connectionPointIn> + <relPosition x="0" y="30"/> + <connection refLocalId="25"> + <position x="170" y="140"/> + <position x="125" y="140"/> + </connection> + </connectionPointIn> + </variable> + <variable formalParameter="SOME_INPUT"> + <connectionPointIn> + <relPosition x="0" y="55"/> + <connection refLocalId="19"> + <position x="170" y="165"/> + <position x="125" y="165"/> + </connection> + </connectionPointIn> + </variable> + </inputVariables> + <inOutVariables/> + <outputVariables> + <variable formalParameter="SOME_OUTPUT"> + <connectionPointOut> + <relPosition x="191" y="30"/> + </connectionPointOut> + </variable> + </outputVariables> + </block> + <block localId="10" typeName="my_functionBlock" instanceName="FB_THREE" executionOrderId="0" height="70" width="191"> + <position x="515" y="110"/> + <inputVariables> + <variable formalParameter="SOME_STRING"> + <connectionPointIn> + <relPosition x="0" y="30"/> + <connection refLocalId="27"> + <position x="515" y="140"/> + <position x="475" y="140"/> + </connection> + </connectionPointIn> + </variable> + <variable formalParameter="SOME_INPUT"> + <connectionPointIn> + <relPosition x="0" y="55"/> + <connection refLocalId="21"> + <position x="515" y="165"/> + <position x="475" y="165"/> + </connection> + </connectionPointIn> + </variable> + </inputVariables> + <inOutVariables/> + <outputVariables> + <variable formalParameter="SOME_OUTPUT"> + <connectionPointOut> + <relPosition x="191" y="30"/> + </connectionPointOut> + </variable> + </outputVariables> + </block> + <block localId="15" typeName="my_functionBlock" instanceName="FB_TWO" executionOrderId="0" height="70" width="191"> + <position x="515" y="16"/> + <inputVariables> + <variable formalParameter="SOME_STRING"> + <connectionPointIn> + <relPosition x="0" y="30"/> + <connection refLocalId="26"> + <position x="515" y="46"/> + <position x="475" y="46"/> + </connection> + </connectionPointIn> + </variable> + <variable formalParameter="SOME_INPUT"> + <connectionPointIn> + <relPosition x="0" y="55"/> + <connection refLocalId="20"> + <position x="515" y="71"/> + <position x="475" y="71"/> + </connection> + </connectionPointIn> + </variable> + </inputVariables> + <inOutVariables/> + <outputVariables> + <variable formalParameter="SOME_OUTPUT"> + <connectionPointOut> + <relPosition x="191" y="30"/> + </connectionPointOut> + </variable> + </outputVariables> + </block> + <block localId="16" typeName="my_functionBlock" instanceName="FB_FIVE" executionOrderId="0" height="75" width="191"> + <position x="860" y="111"/> + <inputVariables> + <variable formalParameter="SOME_STRING"> + <connectionPointIn> + <relPosition x="0" y="34"/> + <connection refLocalId="29"> + <position x="860" y="145"/> + <position x="815" y="145"/> + </connection> + </connectionPointIn> + </variable> + <variable formalParameter="SOME_INPUT"> + <connectionPointIn> + <relPosition x="0" y="59"/> + <connection refLocalId="23"> + <position x="860" y="170"/> + <position x="815" y="170"/> + </connection> + </connectionPointIn> + </variable> + </inputVariables> + <inOutVariables/> + <outputVariables> + <variable formalParameter="SOME_OUTPUT"> + <connectionPointOut> + <relPosition x="191" y="34"/> + </connectionPointOut> + </variable> + </outputVariables> + </block> + <block localId="17" typeName="my_functionBlock" instanceName="FB_FOUR" executionOrderId="0" height="70" width="191"> + <position x="860" y="17"/> + <inputVariables> + <variable formalParameter="SOME_STRING"> + <connectionPointIn> + <relPosition x="0" y="34"/> + <connection refLocalId="28"> + <position x="860" y="51"/> + <position x="815" y="51"/> + </connection> + </connectionPointIn> + </variable> + <variable formalParameter="SOME_INPUT"> + <connectionPointIn> + <relPosition x="0" y="59"/> + <connection refLocalId="22"> + <position x="860" y="76"/> + <position x="815" y="76"/> + </connection> + </connectionPointIn> + </variable> + </inputVariables> + <inOutVariables/> + <outputVariables> + <variable formalParameter="SOME_OUTPUT"> + <connectionPointOut> + <relPosition x="191" y="34"/> + </connectionPointOut> + </variable> + </outputVariables> + </block> + <inVariable localId="18" executionOrderId="0" height="25" width="70" negated="false"> + <position x="55" y="61"/> + <connectionPointOut> + <relPosition x="70" y="10"/> + </connectionPointOut> + <expression>Enable0</expression> + </inVariable> + <inVariable localId="19" executionOrderId="0" height="25" width="70" negated="false"> + <position x="55" y="155"/> + <connectionPointOut> + <relPosition x="70" y="10"/> + </connectionPointOut> + <expression>Enable1</expression> + </inVariable> + <inVariable localId="20" executionOrderId="0" height="25" width="70" negated="false"> + <position x="405" y="61"/> + <connectionPointOut> + <relPosition x="70" y="10"/> + </connectionPointOut> + <expression>Enable2</expression> + </inVariable> + <inVariable localId="21" executionOrderId="0" height="25" width="70" negated="false"> + <position x="405" y="155"/> + <connectionPointOut> + <relPosition x="70" y="10"/> + </connectionPointOut> + <expression>Enable3</expression> + </inVariable> + <inVariable localId="22" executionOrderId="0" height="25" width="70" negated="false"> + <position x="745" y="66"/> + <connectionPointOut> + <relPosition x="70" y="10"/> + </connectionPointOut> + <expression>Enable4</expression> + </inVariable> + <inVariable localId="23" executionOrderId="0" height="25" width="70" negated="false"> + <position x="745" y="160"/> + <connectionPointOut> + <relPosition x="70" y="10"/> + </connectionPointOut> + <expression>Enable5</expression> + </inVariable> + <inVariable localId="24" executionOrderId="0" height="25" width="70" negated="false"> + <position x="55" y="36"/> + <connectionPointOut> + <relPosition x="70" y="10"/> + </connectionPointOut> + <expression>'VENUS'</expression> + </inVariable> + <inVariable localId="25" executionOrderId="0" height="25" width="75" negated="false"> + <position x="50" y="130"/> + <connectionPointOut> + <relPosition x="75" y="10"/> + </connectionPointOut> + <expression>'URANUS'</expression> + </inVariable> + <inVariable localId="26" executionOrderId="0" height="25" width="85" negated="false"> + <position x="390" y="36"/> + <connectionPointOut> + <relPosition x="85" y="10"/> + </connectionPointOut> + <expression>'JUPITER'</expression> + </inVariable> + <inVariable localId="27" executionOrderId="0" height="25" width="60" negated="false"> + <position x="415" y="130"/> + <connectionPointOut> + <relPosition x="60" y="10"/> + </connectionPointOut> + <expression>'MARS'</expression> + </inVariable> + <inVariable localId="28" executionOrderId="0" height="25" width="85" negated="false"> + <position x="730" y="41"/> + <connectionPointOut> + <relPosition x="85" y="10"/> + </connectionPointOut> + <expression>'NEPTUNE'</expression> + </inVariable> + <inVariable localId="29" executionOrderId="0" height="25" width="70" negated="false"> + <position x="745" y="135"/> + <connectionPointOut> + <relPosition x="70" y="10"/> + </connectionPointOut> + <expression>'EARTH'</expression> + </inVariable> + </FBD> + </body> + </pou> + <pou name="my_functionBlock" pouType="functionBlock"> + <interface> + <localVars> + <variable name="MYNODE"> + <type> + <derived name="HMI_NODE"/> + </type> + <documentation> + <xhtml:p><![CDATA[Using HMI_NODE creates node un HMI tree]]></xhtml:p> + </documentation> + </variable> + <variable name="SOME_INT"> + <type> + <derived name="HMI_INT"/> + </type> + </variable> + </localVars> + <inputVars> + <variable name="SOME_STRING"> + <type> + <derived name="HMI_STRING"/> + </type> + </variable> + </inputVars> + <localVars> + <variable name="SOME_BOOL"> + <type> + <derived name="HMI_BOOL"/> + </type> + </variable> + <variable name="SOME_REAL"> + <type> + <derived name="HMI_REAL"/> + </type> + </variable> + </localVars> + <inputVars> + <variable name="SOME_INPUT"> + <type> + <BOOL/> + </type> + </variable> + </inputVars> + <outputVars> + <variable name="SOME_OUTPUT"> + <type> + <BOOL/> + </type> + </variable> + </outputVars> + </interface> + <body> + <FBD> + <inVariable localId="1" executionOrderId="0" height="25" width="90" negated="false"> + <position x="100" y="70"/> + <connectionPointOut> + <relPosition x="90" y="10"/> + </connectionPointOut> + <expression>SOME_INPUT</expression> + </inVariable> + <outVariable localId="2" executionOrderId="0" height="25" width="100" negated="false"> + <position x="250" y="70"/> + <connectionPointIn> + <relPosition x="0" y="10"/> + <connection refLocalId="1"> + <position x="250" y="80"/> + <position x="190" y="80"/> + </connection> + </connectionPointIn> + <expression>SOME_OUTPUT</expression> + </outVariable> + <outVariable localId="4" executionOrderId="0" height="25" width="85" negated="false"> + <position x="250" y="105"/> + <connectionPointIn> + <relPosition x="0" y="10"/> + <connection refLocalId="1"> + <position x="250" y="115"/> + <position x="225" y="115"/> + <position x="225" y="80"/> + <position x="190" y="80"/> + </connection> + </connectionPointIn> + <expression>SOME_BOOL</expression> + </outVariable> + </FBD> + </body> + </pou> + </pous> + </types> + <instances> + <configurations> + <configuration name="config"> + <resource name="resource1"> + <task name="task0" priority="0" interval="T#20ms"> + <pouInstance name="instance0" typeName="program0"/> + </task> + </resource> + </configuration> + </configurations> + </instances> +</project> diff -r 02229133df43 -r 51a3d6f39944 exemples/svghmi_jumps/svghmi_0@svghmi/baseconfnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/exemples/svghmi_jumps/svghmi_0@svghmi/baseconfnode.xml Tue Sep 13 16:53:15 2022 +0200 @@ -0,0 +1,2 @@ +<?xml version='1.0' encoding='utf-8'?> +<BaseParams xmlns:xsd="http://www.w3.org/2001/XMLSchema" IEC_Channel="0" Name="svghmi_0"/> diff -r 02229133df43 -r 51a3d6f39944 exemples/svghmi_jumps/svghmi_0@svghmi/confnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/exemples/svghmi_jumps/svghmi_0@svghmi/confnode.xml Tue Sep 13 16:53:15 2022 +0200 @@ -0,0 +1,2 @@ +<?xml version='1.0' encoding='utf-8'?> +<SVGHMI xmlns:xsd="http://www.w3.org/2001/XMLSchema"/> diff -r 02229133df43 -r 51a3d6f39944 exemples/svghmi_jumps/svghmi_0@svghmi/svghmi.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/exemples/svghmi_jumps/svghmi_0@svghmi/svghmi.svg Tue Sep 13 16:53:15 2022 +0200 @@ -0,0 +1,1818 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" + sodipodi:docname="svghmi.svg" + id="hmi0" + version="1.1" + viewBox="0 0 1280 720" + height="720" + width="1280"> + <metadata + id="metadata8"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs6" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1600" + inkscape:window-height="836" + id="namedview4" + showgrid="false" + inkscape:zoom="0.23177389" + inkscape:cx="1999.5317" + inkscape:cy="-682.74047" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="hmi0" + showguides="true" + inkscape:guide-bbox="true" + borderlayer="true" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" /> + <use + sodipodi:insensitive="true" + x="0" + y="0" + xlink:href="#g2496" + id="use192" + transform="translate(1320,1520)" + width="100%" + height="100%" + inkscape:label="HMI:Page:RelativePage@/FB_ZERO" /> + <use + sodipodi:insensitive="true" + x="0" + y="0" + xlink:href="#g2496" + id="use147" + transform="translate(2640,759.99998)" + width="100%" + height="100%" + inkscape:label="HMI:Page:Relative" /> + <use + x="0" + y="0" + xlink:href="#g2496" + id="use2504" + transform="translate(3940,-2.1367187e-5)" + width="100%" + height="100%" + inkscape:label="HMI:Page:Conditional" + sodipodi:insensitive="true" /> + <use + inkscape:label="HMI:Page:Unconditional" + height="100%" + width="100%" + transform="translate(2640,-2.1367187e-5)" + id="use2502" + xlink:href="#g2496" + y="0" + x="0" + sodipodi:insensitive="true" /> + <use + inkscape:label="HMI:Page:AbsolutePage" + height="100%" + width="100%" + transform="translate(1320,759.99998)" + id="use2500" + xlink:href="#g2496" + y="0" + x="0" + sodipodi:insensitive="true" /> + <use + x="0" + y="0" + xlink:href="#g2496" + id="use2498" + transform="translate(1320,-2.1367187e-5)" + width="100%" + height="100%" + inkscape:label="HMI:Page:Home" + sodipodi:insensitive="true" /> + <text + id="text837" + y="1114.9857" + x="639.54431" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.66666603px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="1114.9857" + x="639.54431" + id="tspan835" + sodipodi:role="line">HMI:Back</tspan></text> + <g + inkscape:label="HMI:Back" + id="g845" + transform="translate(0,660.00004)"> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect839" + width="244.72002" + height="70.089722" + x="517.64001" + y="324.95514" + ry="21.355932" + rx="21.355932" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="642.12891" + y="370.41992" + id="text843"><tspan + sodipodi:role="line" + id="tspan841" + x="642.12891" + y="370.41992">Back</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="639.74609" + y="853.55939" + id="text863"><tspan + sodipodi:role="line" + id="tspan861" + x="639.74609" + y="853.55939">Absolute Page</tspan></text> + <text + id="text867" + y="73.559319" + x="639.74609" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="73.559319" + x="639.74609" + id="tspan865" + sodipodi:role="line">Home Page</tspan></text> + <g + inkscape:label="HMI:PushButton@/ENTERING_PAGE" + id="g857-3" + transform="translate(-2.2461,129.42912)"> + <rect + rx="21.355932" + ry="21.355932" + y="1078.0054" + x="518.36066" + height="125.00497" + width="247.77087" + id="rect148" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + inkscape:label="active" /> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect851-6" + width="247.77087" + height="125.00497" + x="518.36066" + y="1078.0054" + ry="21.355932" + rx="21.355932" + inkscape:label="inactive" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="642.12891" + y="1130.4199" + id="text855-7"><tspan + sodipodi:role="line" + x="642.12891" + y="1130.4199" + id="tspan62">Notification</tspan><tspan + sodipodi:role="line" + x="642.12891" + y="1180.4199" + id="tspan66">Test Button</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.66666603px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="639.54431" + y="1394.9857" + id="text70"><tspan + sodipodi:role="line" + x="639.54431" + y="1394.9857" + id="tspan72">HMI:PushButton@/ENTERING_PAGE</tspan></text> + <text + id="text80" + y="364" + x="1959.5443" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.66666603px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="364" + x="1959.5443" + id="tspan78" + sodipodi:role="line">HMI:Jump:AbsolutePage</tspan></text> + <g + transform="translate(1320,-79.999979)" + inkscape:label="HMI:Jump:AbsolutePage" + id="g88"> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect82" + width="295.15112" + height="84.580795" + x="495.42249" + y="317.09436" + ry="21.355932" + rx="21.355932" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="642.12891" + y="370.41992" + id="text86"><tspan + sodipodi:role="line" + id="tspan84" + x="642.12891" + y="370.41992">Normal jump</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.66666603px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="1959.5443" + y="690.00006" + id="text92"><tspan + sodipodi:role="line" + id="tspan90" + x="1959.5443" + y="690.00006">HMI:Jump:AbsolutePage:notify=true@notify=/ENTERING_PAGE</tspan></text> + <g + transform="translate(1320,200.00002)" + id="g102" + inkscape:label="HMI:Jump:AbsolutePage:notify=true@notify=/ENTERING_PAGE"> + <rect + rx="21.355932" + ry="21.355932" + y="318.00534" + x="518.36066" + height="125.00497" + width="247.77087" + id="rect94" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <text + id="text100" + y="370.41992" + x="642.12891" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="370.41992" + x="648.48633" + id="tspan96" + sodipodi:role="line">Jump with </tspan><tspan + id="tspan98" + y="420.41992" + x="642.12891" + sodipodi:role="line">notification</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="1959.7461" + y="73.559319" + id="text106"><tspan + sodipodi:role="line" + id="tspan104" + x="1959.7461" + y="73.559319">Unconditional Jumps</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.66666603px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="3259.5444" + y="684.00006" + id="text112"><tspan + sodipodi:role="line" + x="3259.5444" + y="684.00006" + id="tspan2796">HMI:Jump:AbsolutePage@enable=/ENABLE_JUMP@level=user_level#enable && level>2</tspan></text> + <g + id="g120" + inkscape:label="HMI:Jump:AbsolutePage@enable=/ENABLE_JUMP@level=user_level#enable && level>2" + transform="translate(2620,240.00002)"> + <g + id="g2786" + inkscape:label="disabled" + style="display:inline"> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#c8b7b7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect114" + width="295.15112" + height="84.580795" + x="495.42249" + y="317.09436" + ry="21.355932" + rx="21.355932" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#808080;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="642.12891" + y="370.41992" + id="text118"><tspan + sodipodi:role="line" + id="tspan116" + x="642.12891" + y="370.41992">Jump</tspan></text> + </g> + <g + id="g2794"> + <rect + rx="21.355932" + ry="21.355932" + y="317.09436" + x="495.42249" + height="84.580795" + width="295.15112" + id="rect2788" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <text + id="text2792" + y="370.41992" + x="642.12891" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="370.41992" + x="642.12891" + id="tspan2790" + sodipodi:role="line">Jump</tspan></text> + </g> + </g> + <text + id="text138" + y="73.559319" + x="3259.7461" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="73.559319" + x="3259.7461" + id="tspan136" + sodipodi:role="line">Conditional Jumps</tspan></text> + <text + id="text142" + y="193.55931" + x="639.88281" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;text-decoration: underline;text-decoration-line: underline;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve" + inkscape:label="HMI:Jump:Unconditional"><tspan + y="193.55931" + x="639.88281" + id="tspan140" + sodipodi:role="line">Unconditional Jumps ></tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;text-decoration: underline;text-decoration-line: underline;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="639.88281" + y="293.55933" + id="text146" + inkscape:label="HMI:Jump:Conditional"><tspan + sodipodi:role="line" + id="tspan144" + x="639.88281" + y="293.55933">Conditional Jumps ></tspan></text> + <g + id="g2496" + inkscape:label="page_template" + transform="translate(0,2.1367187e-5)"> + <rect + y="0" + x="-1320" + height="720" + width="1280" + id="rect1420" + style="color:#000000;opacity:1;fill:#d6d6d6;fill-opacity:1" /> + <g + inkscape:label="HMI:Jump:Home" + id="g2455"> + <use + x="0" + y="0" + xlink:href="#rect2313" + id="use2435" + transform="translate(400,-2.1367187e-5)" + width="100%" + height="100%" + inkscape:label="active" /> + <use + x="0" + y="0" + xlink:href="#rect2311" + id="use2437" + transform="translate(400,-2.1367187e-5)" + width="100%" + height="100%" + inkscape:label="inactive" /> + <text + id="text855-7-1" + y="70.251053" + x="-1166.8177" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + id="tspan66-3" + y="70.251053" + x="-1166.8177" + sodipodi:role="line">Home</tspan></text> + </g> + <g + inkscape:label="HMI:Jump:Conditional" + id="g2461" + transform="translate(0,20)"> + <use + height="100%" + width="100%" + transform="translate(400,99.999979)" + id="use2439" + xlink:href="#rect2313" + y="0" + x="0" + inkscape:label="active" /> + <use + height="100%" + width="100%" + transform="translate(400,99.999979)" + id="use2441" + xlink:href="#rect2311" + y="0" + x="0" + inkscape:label="inactive" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="-1165.1674" + y="170.25105" + id="text2349"><tspan + sodipodi:role="line" + x="-1165.1674" + y="170.25105" + id="tspan2347">Conditional</tspan></text> + </g> + <g + inkscape:label="HMI:Jump:Unconditional" + id="g2467" + transform="translate(0,40)"> + <use + x="0" + y="0" + xlink:href="#rect2313" + id="use2443" + transform="translate(400,199.99998)" + width="100%" + height="100%" + inkscape:label="active" /> + <use + x="0" + y="0" + xlink:href="#rect2311" + id="use2445" + transform="translate(400,199.99998)" + width="100%" + height="100%" + inkscape:label="inactive" /> + <text + id="text2357" + y="270.25104" + x="-1165.7826" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + id="tspan2355" + y="270.25104" + x="-1165.7826" + sodipodi:role="line">Unconditional</tspan></text> + </g> + <g + inkscape:label="HMI:Jump:AbsolutePage" + id="g2473" + transform="translate(0,60)"> + <use + height="100%" + width="100%" + transform="translate(400,299.99998)" + id="use2447" + xlink:href="#rect2313" + y="0" + x="0" + inkscape:label="active" /> + <use + height="100%" + width="100%" + transform="translate(400,299.99998)" + id="use2449" + xlink:href="#rect2311" + y="0" + x="0" + inkscape:label="inactive" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="-1165.0111" + y="370.25104" + id="text2365"><tspan + sodipodi:role="line" + x="-1165.0111" + y="370.25104" + id="tspan2363">Absolute</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.66666603px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="-1166.3386" + y="118.98305" + id="text133"><tspan + sodipodi:role="line" + id="tspan131" + x="-1166.3386" + y="118.98305">HMI:Jump:Home</tspan></text> + <text + id="text137" + y="238.98305" + x="-1166.3386" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.66666603px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="238.98305" + x="-1166.3386" + id="tspan135" + sodipodi:role="line">HMI:Jump:Conditional</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.66666603px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="-1166.3386" + y="358.98303" + id="text141"><tspan + sodipodi:role="line" + id="tspan139" + x="-1166.3386" + y="358.98303">HMI:Jump:Unconditional</tspan></text> + <text + id="text145" + y="478.98303" + x="-1166.3386" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.66666603px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="478.98303" + x="-1166.3386" + id="tspan143" + sodipodi:role="line">HMI:Jump:AbsolutePage</tspan></text> + <g + transform="translate(0,180)" + id="g1847" + inkscape:label="HMI:Jump:RelativePage"> + <use + inkscape:label="active" + x="0" + y="0" + xlink:href="#rect2313" + id="use1839" + transform="translate(400,299.99998)" + width="100%" + height="100%" /> + <use + inkscape:label="inactive" + x="0" + y="0" + xlink:href="#rect2311" + id="use1841" + transform="translate(400,299.99998)" + width="100%" + height="100%" /> + <text + id="text1845" + y="370.25104" + x="-1165.0111" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="370.25104" + x="-1165.0111" + sodipodi:role="line" + id="tspan1853">Relative</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.66666603px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="-1166.3386" + y="598.98303" + id="text1851"><tspan + sodipodi:role="line" + id="tspan1849" + x="-1166.3386" + y="598.98303">HMI:Jump:RelativePage</tspan></text> + </g> + <g + id="g2585" + inkscape:label="HMI:Input@user_level" + transform="translate(-20,126.00002)"> + <g + id="g2763" + inkscape:label="=1"> + <rect + rx="21.355932" + ry="21.355932" + y="93.088097" + x="3489.5898" + height="84.580788" + width="96.681831" + id="rect114-6" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <text + id="text118-3" + y="149.95857" + x="3537.5791" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="149.95857" + x="3537.5791" + id="tspan116-1" + sodipodi:role="line">1</tspan></text> + </g> + <g + id="g2758" + inkscape:label="=2"> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect2531" + width="96.681831" + height="84.580788" + x="3589.5898" + y="93.088097" + ry="21.355932" + rx="21.355932" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="3637.5791" + y="149.95857" + id="text2557"><tspan + sodipodi:role="line" + id="tspan2555" + x="3637.5791" + y="149.95857">2</tspan></text> + </g> + <g + id="g2753" + inkscape:label="=3"> + <rect + rx="21.355932" + ry="21.355932" + y="93.088097" + x="3689.5898" + height="84.580788" + width="96.681831" + id="rect2533" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <text + id="text2561" + y="149.95857" + x="3737.5791" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="149.95857" + x="3737.5791" + id="tspan2559" + sodipodi:role="line">3</tspan></text> + </g> + <g + id="g2748" + inkscape:label="=4"> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect2535" + width="96.681831" + height="84.580788" + x="3789.5898" + y="93.088097" + ry="21.355932" + rx="21.355932" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="3837.5791" + y="149.95857" + id="text2565"><tspan + sodipodi:role="line" + id="tspan2563" + x="3837.5791" + y="149.95857">4</tspan></text> + </g> + <text + id="text2569" + y="56.031158" + x="3687.7056" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:85.33333588px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve" + inkscape:label="value"><tspan + y="56.031158" + x="3687.7056" + id="tspan2567" + sodipodi:role="line">0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="3687.7056" + y="216.03116" + id="text2820"><tspan + sodipodi:role="line" + id="tspan2818" + x="3687.7056" + y="216.03116">User Level</tspan></text> + </g> + <g + id="g2590" + inkscape:label="HMI:VarInit:1@user_level" + transform="translate(0,2.1367187e-5)"> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.66666603px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="3726.6924" + y="-108.39357" + id="text2743"><tspan + sodipodi:role="line" + id="tspan2741" + x="3726.6924" + y="-108.39357">declaration of user_level HMI local variable</tspan><tspan + sodipodi:role="line" + x="3726.6924" + y="-85.060234" + id="tspan2765">(not a PLC variable)</tspan></text> + </g> + <g + inkscape:label="HMI:ToggleButton@/ENABLE_JUMP" + id="g2775" + transform="translate(2498.5763,-99.999979)"> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect2767" + width="320.99121" + height="125.00497" + x="518.36066" + y="318.00534" + ry="21.355932" + rx="21.355932" + inkscape:label="inactive" /> + <rect + inkscape:label="active" + rx="21.355932" + ry="21.355932" + y="318.00534" + x="518.36066" + height="125.00497" + width="320.99121" + id="rect2781" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="677.57697" + y="365.98633" + id="text2773"><tspan + sodipodi:role="line" + x="677.57697" + y="365.98633" + id="tspan2771">Toggle</tspan><tspan + sodipodi:role="line" + x="677.57697" + y="415.98633" + id="tspan2779">ENABLE_JUMP</tspan></text> + </g> + <text + id="text2569-5" + y="181.74046" + x="3175.9531" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:85.33333588px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve" + inkscape:label="HMI:Display@/ENABLE_JUMP"><tspan + y="181.74046" + x="3175.9531" + id="tspan2567-9" + sodipodi:role="line">0</tspan></text> + <text + id="text151" + y="853.55939" + x="1979.7461" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="853.55939" + x="1979.7461" + id="tspan149" + sodipodi:role="line">Relative Jumps</tspan></text> + <g + id="g120-3" + inkscape:label="HMI:Jump:RelativePage@/FB_ZERO" + transform="translate(1172.2562,635.19155)"> + <rect + rx="21.355932" + ry="21.355932" + y="337.09436" + x="660.90063" + height="84.580795" + width="295.15112" + id="rect1861" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <text + id="text1865" + y="390.41992" + x="807.60706" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="390.41992" + x="807.60706" + id="tspan1863" + sodipodi:role="line">Jump FB0</tspan></text> + </g> + <g + id="g2865" + inkscape:label="HMI:Display@page_node" + transform="translate(1132.5298,1563.4227)"> + <text + inkscape:label="format" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="-492.78372" + y="50.136646" + id="text196"><tspan + sodipodi:role="line" + id="tspan194" + x="-492.78372" + y="50.136646">Relative Page (%s)</tspan></text> + </g> + <g + id="g2585-1" + inkscape:label="HMI:Input@/FB_ZERO/SOME_INT" + transform="matrix(0.699363,0,0,0.699363,-1722.1388,1658.2417)" + style="stroke-width:1.42987263"> + <g + id="g2763-2" + inkscape:label="=1" + style="stroke-width:1.42987263"> + <rect + rx="30.536263" + ry="30.536263" + y="93.088097" + x="3489.5898" + height="84.580788" + width="96.681831" + id="rect114-6-7" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.40424299;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <text + id="text118-3-0" + y="149.95857" + x="3537.5791" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.42987263px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="149.95857" + x="3537.5791" + id="tspan116-1-9" + sodipodi:role="line" + style="stroke-width:1.42987263px">1</tspan></text> + </g> + <g + id="g2758-3" + inkscape:label="=2" + style="stroke-width:1.42987263"> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.40424299;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect2531-6" + width="96.681831" + height="84.580788" + x="3589.5898" + y="93.088097" + ry="30.536263" + rx="30.536263" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.42987263px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="3637.5791" + y="149.95857" + id="text2557-0"><tspan + sodipodi:role="line" + id="tspan2555-6" + x="3637.5791" + y="149.95857" + style="stroke-width:1.42987263px">2</tspan></text> + </g> + <g + id="g2753-2" + inkscape:label="=3" + style="stroke-width:1.42987263"> + <rect + rx="30.536263" + ry="30.536263" + y="93.088097" + x="3689.5898" + height="84.580788" + width="96.681831" + id="rect2533-6" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.40424299;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <text + id="text2561-1" + y="149.95857" + x="3737.5791" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.42987263px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="149.95857" + x="3737.5791" + id="tspan2559-8" + sodipodi:role="line" + style="stroke-width:1.42987263px">3</tspan></text> + </g> + <g + id="g2748-7" + inkscape:label="=4" + style="stroke-width:1.42987263"> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.40424299;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect2535-9" + width="96.681831" + height="84.580788" + x="3789.5898" + y="93.088097" + ry="30.536263" + rx="30.536263" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.42987263px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="3837.5791" + y="149.95857" + id="text2565-2"><tspan + sodipodi:role="line" + id="tspan2563-0" + x="3837.5791" + y="149.95857" + style="stroke-width:1.42987263px">4</tspan></text> + </g> + <text + id="text2569-2" + y="56.031158" + x="3687.7056" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:85.33333588px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.42987263px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve" + inkscape:label="value"><tspan + y="56.031158" + x="3687.7056" + id="tspan2567-3" + sodipodi:role="line" + style="stroke-width:1.42987263px">0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.42987263px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="3687.7056" + y="216.03116" + id="text2820-7"><tspan + sodipodi:role="line" + id="tspan2818-5" + x="3687.7056" + y="216.03116" + style="stroke-width:1.42987263px">SOME_INT</tspan></text> + </g> + <text + id="text307" + y="1757.4279" + x="525.4079" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:59.67897797px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve" + inkscape:label="HMI:Display@/FB_ZERO/SOME_BOOL"><tspan + style="stroke-width:1px" + y="1757.4279" + x="525.4079" + id="tspan305" + sodipodi:role="line">0</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.97451973px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="533.80023" + y="1809.3259" + id="text311"><tspan + style="stroke-width:1px" + sodipodi:role="line" + id="tspan309" + x="533.80023" + y="1809.3259">SOME_BOOL</tspan></text> + <text + inkscape:label="HMI:Display@/FB_ZERO/SOME_STRING" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:59.67897797px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="525.4079" + y="1967.2367" + id="text375"><tspan + style="stroke-width:1px" + sodipodi:role="line" + id="tspan373" + x="525.4079" + y="1967.2367">?</tspan></text> + <text + id="text379" + y="2019.1349" + x="533.80023" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.97451973px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + style="stroke-width:1px" + y="2019.1349" + x="533.80023" + id="tspan377" + sodipodi:role="line">SOME_STRING</tspan></text> + <g + transform="matrix(0.699363,0,0,0.699363,-1722.1388,1868.0506)" + inkscape:label="HMI:Input@/FB_ZERO/SOME_REAL" + id="g355" + style="stroke-width:1.42987263"> + <g + inkscape:label="-1" + id="g321" + transform="translate(-46)" + style="stroke-width:1.42987263"> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.40424299;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect315" + width="96.681831" + height="84.580788" + x="3489.5898" + y="93.088097" + ry="30.536263" + rx="30.536263" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.42987263px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="3537.5791" + y="149.95857" + id="text319"><tspan + sodipodi:role="line" + id="tspan317" + x="3537.5791" + y="149.95857" + style="stroke-width:1.42987263px">-1</tspan></text> + </g> + <g + inkscape:label="-0.1" + id="g329" + transform="translate(-46)" + style="stroke-width:1.42987263"> + <rect + rx="30.536263" + ry="30.536263" + y="93.088097" + x="3589.5898" + height="84.580788" + width="96.681831" + id="rect323" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.40424299;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <text + id="text327" + y="149.95857" + x="3637.5791" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.42987263px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="149.95857" + x="3637.5791" + id="tspan325" + sodipodi:role="line" + style="stroke-width:1.42987263px">-.1</tspan></text> + </g> + <g + inkscape:label="=3.14" + id="g337" + transform="translate(-46)" + style="stroke-width:1.42987263"> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.40424299;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect331" + width="96.681831" + height="84.580788" + x="3689.5898" + y="93.088097" + ry="30.536263" + rx="30.536263" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.42987263px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="3737.5791" + y="149.95857" + id="text335"><tspan + sodipodi:role="line" + id="tspan333" + x="3737.5791" + y="149.95857" + style="stroke-width:1.42987263px">PI</tspan></text> + </g> + <g + inkscape:label="+0.1" + id="g345" + transform="translate(-46)" + style="stroke-width:1.42987263"> + <rect + rx="30.536263" + ry="30.536263" + y="93.088097" + x="3789.5898" + height="84.580788" + width="96.681831" + id="rect339" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.40424299;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <text + id="text343" + y="149.95857" + x="3837.5791" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.42987263px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="149.95857" + x="3837.5791" + id="tspan341" + sodipodi:role="line" + style="stroke-width:1.42987263px">+.1</tspan></text> + </g> + <text + inkscape:label="value" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:85.33333588px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.42987263px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="3687.7056" + y="56.031158" + id="text349"><tspan + sodipodi:role="line" + id="tspan347" + x="3687.7056" + y="56.031158" + style="stroke-width:1.42987263px">0</tspan></text> + <text + id="text353" + y="216.03116" + x="3687.7056" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.42987263px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="216.03116" + x="3687.7056" + id="tspan351" + sodipodi:role="line" + style="stroke-width:1.42987263px">SOME_REAL</tspan></text> + <g + id="g395" + inkscape:label="+1" + transform="translate(54)" + style="stroke-width:1.42987263"> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.40424299;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect389" + width="96.681831" + height="84.580788" + x="3789.5898" + y="93.088097" + ry="30.536263" + rx="30.536263" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.42987263px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="3837.5791" + y="149.95857" + id="text393"><tspan + sodipodi:role="line" + id="tspan391" + x="3837.5791" + y="149.95857" + style="stroke-width:1.42987263px">+1</tspan></text> + </g> + </g> + <g + id="g1708" + inkscape:label="HMI:ForEach:MYNODE@/" + transform="translate(4,38.000021)"> + <g + id="g1711" + inkscape:label="MYNODE:+1" + transform="matrix(1.3729714,0,0,1.3729714,-299.47126,-800.64485)" + style="stroke-width:0.7283473"> + <rect + rx="15.554536" + ry="15.554536" + y="2117.0894" + x="1053.1199" + height="59.152672" + width="67.615692" + id="rect389-2" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.75280857;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <text + id="text393-2" + y="2156.8623" + x="1086.6819" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.97451973px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.7283473px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + style="stroke-width:0.7283473px" + y="2156.8623" + x="1086.6819" + id="tspan391-8" + sodipodi:role="line">>></tspan></text> + </g> + <g + inkscape:label="MYNODE:3" + id="g1837" + transform="translate(665.54481,-11.353461)"> + <g + transform="translate(1466.6549,2099.2529)" + inkscape:label="HMI:Jump:RelativePage@/FB_TWO@enable=/FB_TWO/SOME_BOOL#enable" + id="g1835"> + <g + id="g2922" + inkscape:label="disabled"> + <use + x="0" + y="0" + xlink:href="#rect1807" + id="use1825" + transform="translate(400,-2.1367187e-5)" + width="100%" + height="100%" /> + <text + id="text1833-3" + y="70.251053" + x="-1166.8177" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#333333;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve" + inkscape:label="HMI:Display@/FB_TWO/SOME_STRING"><tspan + id="tspan1831-6" + y="70.251053" + x="-1166.8177" + sodipodi:role="line">?</tspan></text> + </g> + <use + x="0" + y="0" + xlink:href="#rect2313" + id="use1827" + transform="translate(400,-2.1367187e-5)" + width="100%" + height="100%" + inkscape:label="active" /> + <use + x="0" + y="0" + xlink:href="#rect2311" + id="use1829" + transform="translate(400,-2.1367187e-5)" + width="100%" + height="100%" + inkscape:label="inactive" /> + <text + id="text1833" + y="70.251053" + x="-1166.8177" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve" + inkscape:label="HMI:Display@/FB_TWO/SOME_STRING"><tspan + id="tspan1831" + y="70.251053" + x="-1166.8177" + sodipodi:role="line">?</tspan></text> + </g> + </g> + <g + transform="translate(342.39289,-11.353461)" + id="g1823" + inkscape:label="MYNODE:2"> + <g + id="g1821" + inkscape:label="HMI:Jump:RelativePage@/FB_ONE@enable=/FB_ONE/SOME_BOOL#enable" + transform="translate(1466.6549,2099.2529)"> + <g + id="g2893" + inkscape:label="disabled"> + <use + height="100%" + width="100%" + transform="translate(400,-2.1367187e-5)" + id="use1811" + xlink:href="#rect1807" + y="0" + x="0" /> + <text + inkscape:label="HMI:Display@/FB_ONE/SOME_STRING" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#333333;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="-1166.8177" + y="70.251053" + id="text1819-5"><tspan + sodipodi:role="line" + x="-1166.8177" + y="70.251053" + id="tspan1817-0">?</tspan></text> + </g> + <use + inkscape:label="active" + height="100%" + width="100%" + transform="translate(400,-2.1367187e-5)" + id="use1813" + xlink:href="#rect2313" + y="0" + x="0" /> + <use + inkscape:label="inactive" + height="100%" + width="100%" + transform="translate(400,-2.1367187e-5)" + id="use1815" + xlink:href="#rect2311" + y="0" + x="0" /> + <text + inkscape:label="HMI:Display@/FB_ONE/SOME_STRING" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="-1166.8177" + y="70.251053" + id="text1819"><tspan + sodipodi:role="line" + x="-1166.8177" + y="70.251053" + id="tspan1817">?</tspan></text> + </g> + </g> + <g + inkscape:label="MYNODE:1" + id="g1717" + transform="translate(19.240974,-11.353461)"> + <g + transform="translate(1466.6549,2099.2529)" + inkscape:label="HMI:Jump:RelativePage@/FB_ZERO@enable=/FB_ZERO/SOME_BOOL#enable" + id="g2455-9"> + <g + id="g2890" + inkscape:label="disabled"> + <use + x="0" + y="0" + xlink:href="#rect1807" + id="use1809" + transform="translate(400,-2.1367187e-5)" + width="100%" + height="100%" /> + <text + id="text2885" + y="70.251053" + x="-1166.8177" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#333333;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve" + inkscape:label="HMI:Display@/FB_ZERO/SOME_STRING"><tspan + id="tspan2883" + y="70.251053" + x="-1166.8177" + sodipodi:role="line">?</tspan></text> + </g> + <use + x="0" + y="0" + xlink:href="#rect2313" + id="use2435-7" + transform="translate(400,-2.1367187e-5)" + width="100%" + height="100%" + inkscape:label="active" /> + <use + x="0" + y="0" + xlink:href="#rect2311" + id="use2437-3" + transform="translate(400,-2.1367187e-5)" + width="100%" + height="100%" + inkscape:label="inactive" /> + <text + id="text855-7-1-6" + y="70.251053" + x="-1166.8177" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve" + inkscape:label="HMI:Display@/FB_ZERO/SOME_STRING"><tspan + id="tspan66-3-1" + y="70.251053" + x="-1166.8177" + sodipodi:role="line">?</tspan></text> + </g> + </g> + <g + id="g1719" + inkscape:label="MYNODE:-1" + transform="matrix(1.3729714,0,0,1.3729714,-1398.9133,-800.64485)" + style="stroke-width:0.7283473"> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.75280857;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect1757" + width="67.615692" + height="59.152672" + x="1053.1199" + y="2117.0894" + ry="15.554536" + rx="15.554536" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.97451973px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.7283473px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="1086.6819" + y="2156.8623" + id="text1761"><tspan + sodipodi:role="line" + id="tspan1759" + x="1086.6819" + y="2156.8623" + style="stroke-width:0.7283473px"><<</tspan></text> + </g> + </g> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect1807" + width="280" + height="81.859505" + x="-1705.9194" + y="17.83654" + ry="21.355932" + rx="21.355932" + inkscape:label="disabled_template" /> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect2311" + width="280" + height="81.859505" + x="-1705.9194" + y="17.83654" + ry="21.355932" + rx="21.355932" + inkscape:label="inactive_template" /> + <rect + inkscape:label="active_template" + rx="21.355932" + ry="21.355932" + y="17.83654" + x="-1705.9194" + height="81.859505" + width="280" + id="rect2313" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <text + inkscape:label="HMI:Jump:Relative" + id="text1859" + y="393.55933" + x="639.88281" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;text-decoration: underline;text-decoration-line: underline;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="393.55933" + x="639.88281" + id="tspan1857" + sodipodi:role="line">Relative Jumps ></tspan></text> + <g + transform="translate(1172.2562,775.19155)" + inkscape:label="HMI:Jump:RelativePage@/FB_TWO" + id="g1886"> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect1880" + width="295.15112" + height="84.580795" + x="660.90063" + y="337.09436" + ry="21.355932" + rx="21.355932" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="807.60706" + y="390.41992" + id="text1884"><tspan + sodipodi:role="line" + id="tspan1882" + x="807.60706" + y="390.41992">Jump FB2</tspan></text> + </g> + <g + id="g1894" + inkscape:label="HMI:Jump:RelativePage@/FB_FOUR" + transform="translate(1172.2562,915.19155)"> + <rect + rx="21.355932" + ry="21.355932" + y="337.09436" + x="660.90063" + height="84.580795" + width="295.15112" + id="rect1888" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <text + id="text1892" + y="390.41992" + x="807.60706" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="390.41992" + x="807.60706" + id="tspan1890" + sodipodi:role="line">Jump FB4</tspan></text> + </g> + <g + inkscape:label="HMI:ToggleButton@/ENABLE0" + id="g857-3-2" + transform="translate(533.4687,483.39042)"> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect851-6-3" + width="86.838715" + height="71.615021" + x="599.0611" + y="1080.0323" + ry="21.355932" + rx="21.355932" + inkscape:label="inactive" /> + <rect + inkscape:label="active" + rx="21.355932" + ry="21.355932" + y="1080.0323" + x="599.0611" + height="71.615021" + width="86.838715" + id="rect2733" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="642.12891" + y="1130.4199" + id="text855-7-19"><tspan + sodipodi:role="line" + x="642.12891" + y="1130.4199" + id="tspan66-7">0</tspan></text> + </g> + <g + transform="translate(533.4687,563.39042)" + id="g2746" + inkscape:label="HMI:ToggleButton@/ENABLE1"> + <rect + inkscape:label="inactive" + rx="21.355932" + ry="21.355932" + y="1080.0323" + x="599.0611" + height="71.615021" + width="86.838715" + id="rect2737" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect2739" + width="86.838715" + height="71.615021" + x="599.0611" + y="1080.0323" + ry="21.355932" + rx="21.355932" + inkscape:label="active" /> + <text + id="text2744" + y="1130.4199" + x="642.12891" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + id="tspan2742" + y="1130.4199" + x="642.12891" + sodipodi:role="line">1</tspan></text> + </g> + <g + inkscape:label="HMI:ToggleButton@/ENABLE2" + id="g2756" + transform="translate(533.4687,643.39042)"> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect2748" + width="86.838715" + height="71.615021" + x="599.0611" + y="1080.0323" + ry="21.355932" + rx="21.355932" + inkscape:label="inactive" /> + <rect + inkscape:label="active" + rx="21.355932" + ry="21.355932" + y="1080.0323" + x="599.0611" + height="71.615021" + width="86.838715" + id="rect2750" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="642.12891" + y="1130.4199" + id="text2754"><tspan + sodipodi:role="line" + x="642.12891" + y="1130.4199" + id="tspan2752">2</tspan></text> + </g> + <g + transform="translate(533.4687,723.39042)" + id="g2766" + inkscape:label="HMI:ToggleButton@/ENABLE3"> + <rect + inkscape:label="inactive" + rx="21.355932" + ry="21.355932" + y="1080.0323" + x="599.0611" + height="71.615021" + width="86.838715" + id="rect2758" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect2760" + width="86.838715" + height="71.615021" + x="599.0611" + y="1080.0323" + ry="21.355932" + rx="21.355932" + inkscape:label="active" /> + <text + id="text2764" + y="1130.4199" + x="642.12891" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="1130.4199" + x="642.12891" + sodipodi:role="line" + id="tspan2789">3</tspan></text> + </g> + <g + inkscape:label="HMI:ToggleButton@/ENABLE4" + id="g2776" + transform="translate(533.4687,803.39042)"> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect2768" + width="86.838715" + height="71.615021" + x="599.0611" + y="1080.0323" + ry="21.355932" + rx="21.355932" + inkscape:label="inactive" /> + <rect + inkscape:label="active" + rx="21.355932" + ry="21.355932" + y="1080.0323" + x="599.0611" + height="71.615021" + width="86.838715" + id="rect2770" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="642.12891" + y="1130.4199" + id="text2774"><tspan + sodipodi:role="line" + x="642.12891" + y="1130.4199" + id="tspan2772">4</tspan></text> + </g> + <g + transform="translate(533.4687,883.39042)" + id="g2787" + inkscape:label="HMI:ToggleButton@/ENABLE5"> + <rect + inkscape:label="inactive" + rx="21.355932" + ry="21.355932" + y="1080.0323" + x="599.0611" + height="71.615021" + width="86.838715" + id="rect2778" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect2780" + width="86.838715" + height="71.615021" + x="599.0611" + y="1080.0323" + ry="21.355932" + rx="21.355932" + inkscape:label="active" /> + <text + id="text2784" + y="1130.4199" + x="642.12891" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + id="tspan2782" + y="1130.4199" + x="642.12891" + sodipodi:role="line">5</tspan></text> + </g> + <text + id="text2869" + y="1366.9857" + x="1979.5443" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.66666603px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="1366.9857" + x="1979.5443" + sodipodi:role="line" + id="tspan2871">HMI:Jump:RelativePage@/FB_FOUR</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.66666603px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="1979.5443" + y="1226.9857" + id="text2877"><tspan + id="tspan2875" + sodipodi:role="line" + x="1979.5443" + y="1226.9857">HMI:Jump:RelativePage@/FB_TWO</tspan></text> + <text + id="text2881" + y="1086.9857" + x="1979.5443" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.66666603px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="1086.9857" + x="1979.5443" + sodipodi:role="line" + id="tspan2879">HMI:Jump:RelativePage@/FB_ZERO</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.66666603px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="640.67114" + y="2120.4246" + id="text2944"><tspan + sodipodi:role="line" + id="tspan2942" + x="640.67114" + y="2120.4246">HMI:ForEach:MYNODE@/</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="703.23212" + y="588.7594" + id="text2948"><tspan + sodipodi:role="line" + id="tspan2946" + x="703.23212" + y="624.15002" /></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="44.283585" + y="-289.18591" + id="text2952"><tspan + sodipodi:role="line" + id="tspan2950" + x="44.283585" + y="-289.18591">Notes: </tspan><tspan + sodipodi:role="line" + x="44.283585" + y="-239.18593" + id="tspan2954">- Widget roles are described in objects labels.</tspan><tspan + sodipodi:role="line" + x="44.283585" + y="-189.18593" + id="tspan2956">- Press Ctrl+O to open object properties panel</tspan><tspan + sodipodi:role="line" + x="44.283585" + y="-139.18593" + id="tspan2962">- To see objects in a tree, select Object->Objects in menu</tspan><tspan + sodipodi:role="line" + x="44.283585" + y="-89.185921" + id="tspan2960">- Inkscape's "objects" are SVG elements</tspan><tspan + sodipodi:role="line" + x="44.283585" + y="-39.185921" + id="tspan2966">- Press Ctrl+X to edit SVG elements directly with XML editor</tspan></text> +</svg> diff -r 02229133df43 -r 51a3d6f39944 svghmi/gen_index_xhtml.ysl2 --- a/svghmi/gen_index_xhtml.ysl2 Tue Sep 13 16:51:54 2022 +0200 +++ b/svghmi/gen_index_xhtml.ysl2 Tue Sep 13 16:53:15 2022 +0200 @@ -84,6 +84,8 @@ // Inline SVG copy "$result_svg"; script{ + include text pythonic.js + | \n//\n//\n// Early independent declarations \n//\n// apply "document('')/*/preamble:*"; @@ -98,8 +100,6 @@ include text sprintf.js - include text pythonic.js - include text svghmi.js | \n//\n//\n// Declarations from SVG scripts (inkscape document properties) \n//\n// diff -r 02229133df43 -r 51a3d6f39944 svghmi/parse_labels.ysl2 --- a/svghmi/parse_labels.ysl2 Tue Sep 13 16:51:54 2022 +0200 +++ b/svghmi/parse_labels.ysl2 Tue Sep 13 16:53:15 2022 +0200 @@ -2,7 +2,7 @@ // Parses: -// "HMI:WidgetType|freq:param1:param2@path1,path1min,path1max@path2" +// "HMI:WidgetType|freq:param1:param2@a=path1,path1min,path1max@b=path2#a+b>3" // // Into: // widget type="WidgetType" id="blah456" { @@ -13,39 +13,39 @@ // path value="path4" index="path4" type="HMI_LOCAL"; // } // -const "pathregex",!"'^([^\[,]+)(\[[^\]]+\])?([-.\d,]*)$'"!; +const "pathregex",!"'^(\w+=)?([^,=]+)([-.\d,]*)$'"!; const "newline" | const "twonewlines", "concat($newline,$newline)"; template "*", mode="parselabel" { - const "part","@inkscape:label"; + const "label","@inkscape:label"; const "desc", "svg:desc"; // add svg:desc field if continuation "\" marker is found at the end of label - const "len","string-length($part)"; - const "has_continuation", "substring($part,$len,1)='\\'"; - const "label" choose{ + const "len","string-length($label)"; + const "has_continuation", "substring($label,$len,1)='\\'"; + const "full_decl" choose{ when "$has_continuation" { const "_continuation", "substring-before($desc, $twonewlines)"; const "continuation" choose { when "$_continuation" value "$_continuation"; otherwise value "$desc"; } - value "concat(substring($part,1,$len - 1),translate($continuation,$newline,''))"; + value "concat(substring($label,1,$len - 1),translate($continuation,$newline,''))"; } - otherwise value "$part"; + otherwise value "$label"; } const "id","@id"; - const "description", "substring-after($label,'HMI:')"; + const "declaration", "substring-after($full_decl,'HMI:')"; - const "_args", "substring-before($description,'@')"; + const "_args", "substring-before($declaration,'@')"; const "args" choose { when "$_args" value "$_args"; - otherwise value "$description"; + otherwise value "$declaration"; } const "_typefreq", "substring-before($args,':')"; @@ -66,37 +66,59 @@ attrib "type" > «$type» if "$freq" { if "not(regexp:test($freq,'^[0-9]*(\.[0-9]+)?[smh]?'))" { - error > Widget id:«$id» label:«$label» has wrong syntax of frequency forcing «$freq» + error > Widget id:«$id» label:«$full_decl» has wrong syntax of frequency forcing «$freq» } attrib "freq" > «$freq» } + + // find "#" + JS expr at the end + const "tail", "substring-after($declaration,'@')"; + const "taillen","string-length($tail)"; + const "has_enable", "contains($tail, '#')"; + const "paths" choose{ + when "$has_enable" { + value "substring-before($tail,'#')"; + } + otherwise value "$tail"; + } + if "$has_enable" { + const "enable_expr", "substring-after($tail,'#')"; + attrib "enable_expr" value "$enable_expr"; + } + foreach "str:split(substring-after($args, ':'), ':')" { arg { attrib "value" > «.» } } - const "paths", "substring-after($description,'@')"; + + // for stricter syntax checking, this should make error + // if $paths contains "@@" or ends with "@" (empty paths) + foreach "str:split($paths, '@')" { if "string-length(.) > 0" path { // 1 : global match + // 2 : assign= // 2 : /path - // 3 : [accepts] - // 4 : min,max + // 3 : min,max const "path_match", "regexp:match(.,$pathregex)"; + const "pathassign", "substring-before($path_match[2],'=')"; const "pathminmax", "str:split($path_match[4],',')"; - const "path", "$path_match[2]"; - const "path_accepts", "$path_match[3]"; + const "path", "$path_match[3]"; const "pathminmaxcount", "count($pathminmax)"; - attrib "value" > «$path» - if "string-length($path_accepts)" - attrib "accepts" > «$path_accepts» + if "not($path)" + error > Widget id:«$id» label:«$full_decl» has wrong syntax + + attrib "value" value "$path"; + if "$pathassign" + attrib "assign" value "$pathassign"; choose { when "$pathminmaxcount = 2" { attrib "min" > «$pathminmax[1]» attrib "max" > «$pathminmax[2]» } when "$pathminmaxcount = 1 or $pathminmaxcount > 2" { - error > Widget id:«$id» label:«$label» has wrong syntax of path section «$pathminmax» + error > Widget id:«$id» label:«$full_decl» has wrong syntax of path section «$pathminmax» } } if "$indexed_hmitree" choose { @@ -110,7 +132,7 @@ const "item", "$indexed_hmitree/*[@hmipath = $path]"; const "pathtype", "local-name($item)"; if "$pathminmaxcount = 3 and not($pathtype = 'HMI_INT' or $pathtype = 'HMI_REAL')" { - error > Widget id:«$id» label:«$label» path section «$pathminmax» use min and max on non mumeric value + error > Widget id:«$id» label:«$full_decl» path section «$pathminmax» use min and max on non mumeric value } if "count($item) = 1" { attrib "index" > «$item/@index» diff -r 02229133df43 -r 51a3d6f39944 svghmi/pythonic.js --- a/svghmi/pythonic.js Tue Sep 13 16:51:54 2022 +0200 +++ b/svghmi/pythonic.js Tue Sep 13 16:53:15 2022 +0200 @@ -165,8 +165,11 @@ } const _zip = longest => (...iterables) => { - if (iterables.length < 2) { - throw new TypeError("zip takes 2 iterables at least, "+iterables.length+" given"); + if (iterables.length == 0) { + // works starting with 1 iterable + // [a,b,c] -> [[a],[b],[c]] + // [a,b,c],[d,e,f] -> [[a,d],[b,e],[c,f]] + throw new TypeError("zip takes 1 iterables at least, "+iterables.length+" given"); } return new Iterator(function * () { diff -r 02229133df43 -r 51a3d6f39944 svghmi/svghmi.js --- a/svghmi/svghmi.js Tue Sep 13 16:51:54 2022 +0200 +++ b/svghmi/svghmi.js Tue Sep 13 16:53:15 2022 +0200 @@ -1,7 +1,5 @@ // svghmi.js -var need_cache_apply = []; - function dispatch_value(index, value) { let widgets = subscribers(index); @@ -86,13 +84,8 @@ } } - while(widget = need_cache_apply.pop()){ - widget.apply_cache(); - } - if(jumps_need_update) update_jumps(); - apply_updates(); pending_widget_animates.forEach(widget => widget._animate()); pending_widget_animates = []; @@ -139,8 +132,9 @@ throw new Error("Unknown index "+index); } }; + + apply_updates(); // register for rendering on next frame, since there are updates - requestHMIAnimation(); } catch(err) { // 1003 is for "Unsupported Data" // ws.close(1003, err.message); @@ -348,14 +342,13 @@ function send_hmi_value(index, value) { if(index > last_remote_index){ - updates.set(index, value); + dispatch_value(index, value); if(persistent_indexes.has(index)){ let varname = persistent_indexes.get(index); document.cookie = varname+"="+value+"; max-age=3153600000"; } - requestHMIAnimation(); return; } diff -r 02229133df43 -r 51a3d6f39944 svghmi/ui.py --- a/svghmi/ui.py Tue Sep 13 16:51:54 2022 +0200 +++ b/svghmi/ui.py Tue Sep 13 16:53:15 2022 +0200 @@ -662,14 +662,6 @@ for path in paths: self.AddPathToSignature(path) - # # TODO DEAD CODE ? - # for widget in widgets: - # widget_type = widget.get("type") - # for path in widget.iterchildren("path"): - # path_value = path.get("value") - # path_accepts = map( - # str.strip, path.get("accepts", '')[1:-1].split(',')) - self.main_panel.SetupScrolling(scroll_x=False) def GetWidgetParams(self, _context): diff -r 02229133df43 -r 51a3d6f39944 svghmi/widget_button.ysl2 --- a/svghmi/widget_button.ysl2 Tue Sep 13 16:51:54 2022 +0200 +++ b/svghmi/widget_button.ysl2 Tue Sep 13 16:53:15 2022 +0200 @@ -151,7 +151,7 @@ | } } template "show", mode="actions" { - | this.display = "«@eltname»"; + | this.activity_state = «@eltname = 'active'»; | this.request_animate(); } template "hmi-value", mode="actions" { @@ -164,7 +164,6 @@ function "generated_button_class" { param "fsm"; - | display = "inactive"; | state = "init"; | dispatch(value) { @@ -182,14 +181,10 @@ apply "$fsm", mode="actions"; - | animate(){ - | this.set_activation_state(this.display == "active"); - | } - | init() { | this.bound_onmouseup = this.onmouseup.bind(this); | this.element.addEventListener("pointerdown", this.onmousedown.bind(this)); - | this.set_activation_state(undefined); + | this.activity_state = undefined; | } } diff -r 02229133df43 -r 51a3d6f39944 svghmi/widget_foreach.ysl2 --- a/svghmi/widget_foreach.ysl2 Tue Sep 13 16:51:54 2022 +0200 +++ b/svghmi/widget_foreach.ysl2 Tue Sep 13 16:53:15 2022 +0200 @@ -140,7 +140,7 @@ this.unsub_items(); this.sub_items(); update_subscriptions(); - need_cache_apply.push(this); + this.apply_cache(); jumps_need_update = true; requestHMIAnimation(); } diff -r 02229133df43 -r 51a3d6f39944 svghmi/widget_jump.ysl2 --- a/svghmi/widget_jump.ysl2 Tue Sep 13 16:51:54 2022 +0200 +++ b/svghmi/widget_jump.ysl2 Tue Sep 13 16:53:15 2022 +0200 @@ -3,17 +3,42 @@ widget_desc("Jump") { longdesc || - Jump widget brings focus to a different page. Mandatory single argument + Jump widget brings focus to a different page. Mandatory first argument gives name of the page. - Optional single path is used as new reference when jumping to a relative - page, it must point to a HMI_NODE. + If first path is pointint to HMI_NODE variable is used as new reference + when jumping to a relative page. + + Additional arguments are unordered options: + + - Absolute: force page jump to be not relative even if first path is of type HMI_NODE + + - name=value: Notify PLC about jump by setting variable with path having same name assigned "active"+"inactive" labeled elements can be provided and reflect current page being shown. - "disabled" labeled element, if provided, is shown instead of "active" or - "inactive" widget when pointed HMI_NODE is null. + Exemples: + + Relative jump: + + HMI:Jump:RelativePage@/PUMP9 + HMI:Jump:RelativePage@/PUMP9@role=.userrole#role=="admin" + + Absolute jump: + + HMI:Jump:AbsolutePage + HMI:Jump:AbsolutePage@role=.userrole#role=="admin" + + Forced absolute jump: + + HMI:Jump:AbsolutePage:Absolute@/PUMP9 + HMI:Jump:AbsolutePage:Absolute:notify=1@notify=/PUMP9 + + Jump with feedback + + HMI:Jump:AbsolutePage:notify=1@notify=.did_jump + || shortdesc > Jump to given page @@ -26,110 +51,85 @@ widget_class("Jump") { || activable = false; - active = false; - disabled = false; frequency = 2; - update_activity() { - if(this.active) { - /* show active */ - this.active_elt.style.display = ""; - /* hide inactive */ - this.inactive_elt.style.display = "none"; - } else { - /* show inactive */ - this.inactive_elt.style.display = ""; - /* hide active */ - this.active_elt.style.display = "none"; - } - } - - update_disability() { - if(this.disabled) { - /* show disabled */ - this.disabled_elt.style.display = ""; - /* hide inactive */ - this.inactive_elt.style.display = "none"; - /* hide active */ - this.active_elt.style.display = "none"; - } else { - /* hide disabled */ - this.disabled_elt.style.display = "none"; - this.update_activity(); - } - } - make_on_click() { let that = this; const name = this.args[0]; return function(evt){ - /* TODO: in order to allow jumps to page selected through for exemple a dropdown, - support path pointing to local variable whom value - would be an HMI_TREE index and then jump to a relative page not hard-coded in advance */ - if(!that.disabled) { - const index = that.indexes.length > 0 ? that.indexes[0] + that.offset : undefined; + /* TODO: in order to allow jumps to page selected through + for exemple a dropdown, support path pointing to local + variable whom value would be an HMI_TREE index and then + jump to a relative page not hard-coded in advance + */ + if(that.enable_state) { + const index = + (that.is_relative && that.indexes.length > 0) ? + that.indexes[0] + that.offset : undefined; fading_page_switch(name, index); + that.notify(); } } } notify_page_change(page_name, index) { + // called from animate() if(this.activable) { const ref_index = this.indexes.length > 0 ? this.indexes[0] + this.offset : undefined; const ref_name = this.args[0]; - this.active = ((ref_name == undefined || ref_name == page_name) && index == ref_index); - this.update_state(); + this.activity_state = ((ref_name == undefined || ref_name == page_name) && index == ref_index); + // Since called from animate, update activity directly + if(this.enable_displayed_state && this.has_activity) { + this.animate_activity(); + } } } - - dispatch(value) { - this.disabled = !Number(value); - - // TODO : use RequestAnimate and animate() - - this.update_state(); - } || } +def "func:is_relative_jump" { + param "widget"; + result "$widget/path and $widget/path[1]/@type='HMI_NODE' and not($widget/arg[position()>1 and @value = 'Absolute'])"; +} + widget_defs("Jump") { - // TODO: ensure both active and inactive are provided - const "activity" optional_labels("active inactive"); - const "have_activity","string-length($activity)>0"; - value "$activity"; + optional_activable(); - const "disability" optional_labels("disabled"); - const "have_disability","$have_activity and string-length($disability)>0"; - value "$disability"; + const "jump_disability","$has_activity and $has_disability"; | init: function() { | this.element.onclick = this.make_on_click(); - if "$have_activity" { + if "$has_activity" { | this.activable = true; } - if "not($have_disability)" { - | this.unsubscribable = true; - } - > this.update_state = - choose { - when "$have_disability" { - > this.update_disability - } - when "$have_activity" { - > this.update_activity - } - otherwise > null + + > this.is_relative = + choose{ + when "func:is_relative_jump(.)" > true + otherwise > false } > ;\n | }, + | notify: function() { + const "paths","path"; + foreach "arg[position()>1 and contains(@value,'=')]"{ + const "name","substring-before(@value,'=')"; + const "value","substring-after(@value,'=')"; + const "index" foreach "$paths" if "@assign = $name" value "position()-1"; + | // «@value» + | this.apply_hmi_value(«$index», «$value»); + } + | }, } widget_page("Jump"){ param "page_desc"; - /* check that given path is compatible with page's reference path */ - if "path" { - /* TODO: suport local variable containing an HMI_TREE index to jump to a relative page */ + /* jump is considered relative jump if first path points to HMI_NODE + but a jump can be forced Absolute by adding a "Absolute" argument */ + if "func:is_relative_jump(.)" { + /* if relative check that given path is compatible with page's reference path */ + /* when no page name provided, check for same page */ const "target_page_name" choose { when "arg" value "arg[1]/@value"; @@ -142,9 +142,12 @@ if "not(func:same_class_paths($target_page_path, path[1]/@value))" error > Jump id="«@id»" to page "«$target_page_name»" with incompatible path "«path[1]/@value» (must be same class as "«$target_page_path»") + } } + + /* TODO: move to detachable pages ysl2 */ emit "cssdefs:jump" || @@ -165,6 +168,7 @@ var jump_history = [[default_page, undefined]]; function update_jumps() { + // called from animate() page_desc[current_visible_page].jumps.map(w=>w.notify_page_change(current_visible_page,current_page_index)); jumps_need_update = false; }; diff -r 02229133df43 -r 51a3d6f39944 svghmi/widget_keypad.ysl2 --- a/svghmi/widget_keypad.ysl2 Tue Sep 13 16:51:54 2022 +0200 +++ b/svghmi/widget_keypad.ysl2 Tue Sep 13 16:53:15 2022 +0200 @@ -118,11 +118,11 @@ } if(this.Shift_sub && this.shift != this._shift){ this._shift = this.shift; - set_activation_state(this.Shift_sub, this.shift); + set_activity_state(this.Shift_sub, this.shift); } if(this.CapsLock_sub && this.caps != this._caps){ this._caps = this.caps; - set_activation_state(this.CapsLock_sub, this.caps); + set_activity_state(this.CapsLock_sub, this.caps); } } || diff -r 02229133df43 -r 51a3d6f39944 svghmi/widget_tooglebutton.ysl2 --- a/svghmi/widget_tooglebutton.ysl2 Tue Sep 13 16:51:54 2022 +0200 +++ b/svghmi/widget_tooglebutton.ysl2 Tue Sep 13 16:53:15 2022 +0200 @@ -18,33 +18,27 @@ widget_class("ToggleButton") { || frequency = 5; - state = 0; active_style = undefined; inactive_style = undefined; dispatch(value) { - this.state = value; + this.activity_state = Boolean(value); //redraw toggle button this.request_animate(); } on_click(evt) { //toggle state and apply - this.state = this.state ? false : true; - this.apply_hmi_value(0, this.state); + this.activity_state = this.activity_state ? false : true; + this.apply_hmi_value(0, this.activity_state); //redraw toggle button this.request_animate(); } - animate(){ - // redraw toggle button on screen refresh - this.set_activation_state(this.state); - } - init() { this.element.onclick = (evt) => this.on_click(evt); - this.set_activation_state(undefined); + this.activity_state = undefined; } || } diff -r 02229133df43 -r 51a3d6f39944 svghmi/widgets_common.ysl2 --- a/svghmi/widgets_common.ysl2 Tue Sep 13 16:51:54 2022 +0200 +++ b/svghmi/widgets_common.ysl2 Tue Sep 13 16:53:15 2022 +0200 @@ -21,13 +21,25 @@ } }; +decl _activable(*level) alias - { + | activable_sub:{ + const "activity" labels("/active /inactive") { + with "mandatory"{text *level}; + content; + } + value "$activity"; + const "has_activity","string-length($activity)>0"; + | }, + | has_activity: «$has_activity», +}; + decl activable() alias - { - | activable_sub:{ - warning_labels("/active /inactive") { - content; - } - | } -}; + _activable("warn") +}; +decl optional_activable() alias - { + _activable("no") +}; + decl activable_labels(*ptr) alias - { optional_labels(*ptr) { with "subelements","'active inactive'"; @@ -48,6 +60,10 @@ in xsl decl widget_defs(%name, match="widget[@type='%name']", mode="widget_defs") alias template { param "hmi_element"; + // all widget potentially has a "disabled" labeled element + const "disability" optional_labels("/disabled"); + value "$disability"; + const "has_disability","string-length($disability)>0"; content; }; @@ -65,6 +81,11 @@ const "eltid","@id"; const "args" foreach "$widget/arg" > "«func:escape_quotes(@value)»"`if "position()!=last()" > ,` const "indexes" foreach "$widget/path" { + if "position()!=last()" > , + } + + const "variables" foreach "$widget/path" { + > [ choose { when "not(@index)" { choose { @@ -84,16 +105,15 @@ > «@index» } } - if "position()!=last()" > , - } - - const "minmaxes" foreach "$widget/path" { - choose { - when "@min and @max" - > [«@min»,«@max»] - otherwise - > undefined - } + > , { + if "@min and @max"{ + > minmax:[«@min», «@max»] + if "@assign" + > , + } + if "@assign" + > assign:"«@assign»" + > }] if "position()!=last()" > , } @@ -104,7 +124,34 @@ > undefined } - | "«@id»": new «$widget/@type»Widget ("«@id»",«$freq»,[«$args»],[«$indexes»],[«$minmaxes»],{ + const "enable_expr" choose{ + when "$widget/@enable_expr" + > true + otherwise + > false + } + + | "«@id»": new «$widget/@type»Widget ("«@id»",«$freq»,[«$args»],[«$variables»],«$enable_expr»,{ + if "$widget/@enable_expr" { + + | assignments: [], + | compute_enable: function(value, oldval, varnum) { + | let result = false; + | do { + foreach "$widget/path" { + const "varid","generate-id()"; + const "varnum","position()-1"; + if "@assign" foreach "$widget/path[@assign]" if "$varid = generate-id()" { + | if(varnum == «$varnum») this.assignments[«position()-1»] = value; + | let «@assign» = this.assignments[«position()-1»]; + | if(«@assign» == undefined) break; + } + } + | result = «$widget/@enable_expr»; + | } while(0); + | this.enable(result); + | }, + } apply "$widget", mode="widget_defs" with "hmi_element","."; | })`if "position()!=last()" > ,` } @@ -187,7 +234,7 @@ placeholder.parentNode.insertBefore(elt, placeholder); } - function set_activation_state(eltsub, state){ + function set_activity_state(eltsub, state){ if(eltsub.active_elt != undefined){ if(eltsub.active_elt_placeholder == undefined){ eltsub.active_elt_placeholder = document.createComment(""); @@ -204,35 +251,34 @@ } } - function activate_activable(eltsub) { - set_activation_state(eltsub, true); - } - - function inactivate_activable(eltsub) { - set_activation_state(eltsub, false); - } - class Widget { offset = 0; frequency = 10; /* FIXME arbitrary default max freq. Obtain from config ? */ unsubscribable = false; pending_animate = false; - constructor(elt_id, freq, args, indexes, minmaxes, members){ + constructor(elt_id, freq, args, variables, enable_expr, members){ this.element_id = elt_id; this.element = id(elt_id); this.args = args; - this.indexes = indexes; - this.minmaxes = minmaxes; + + [this.indexes, this.variables_options] = (variables.length>0) ? zip(...variables) : [[],[]]; + this.indexes_length = this.indexes.length; + + this.enable_expr = enable_expr; + this.enable_state = true; + this.enable_displayed_state = true; + this.enabled_elts = []; + Object.keys(members).forEach(prop => this[prop]=members[prop]); - this.lastapply = indexes.map(() => undefined); - this.inhibit = indexes.map(() => undefined); - this.pending = indexes.map(() => undefined); + this.lastapply = this.indexes.map(() => undefined); + this.inhibit = this.indexes.map(() => undefined); + this.pending = this.indexes.map(() => undefined); this.bound_uninhibit = this.uninhibit.bind(this); - this.lastdispatch = indexes.map(() => undefined); - this.deafen = indexes.map(() => undefined); - this.incoming = indexes.map(() => undefined); + this.lastdispatch = this.indexes.map(() => undefined); + this.deafen = this.indexes.map(() => undefined); + this.incoming = this.indexes.map(() => undefined); this.bound_undeafen = this.undeafen.bind(this); this.forced_frequency = freq; @@ -267,30 +313,39 @@ console.log(err); } } + + if(this.enable_expr){ + this.enable_state = false; + this.enable_displayed_state = false; + for(let child of Array.from(this.element.children)){ + let label = child.getAttribute("inkscape:label"); + if(label!="disabled"){ + this.enabled_elts.push(child); + this.element.removeChild(child); + } + } + } } unsub(){ /* remove subsribers */ - if(!this.unsubscribable) - for(let i = 0; i < this.indexes.length; i++) { - /* flush updates pending because of inhibition */ - let inhibition = this.inhibit[i]; - if(inhibition != undefined){ - clearTimeout(inhibition); - this.lastapply[i] = undefined; - this.uninhibit(i); - } - let deafened = this.deafen[i]; - if(deafened != undefined){ - clearTimeout(deafened); - this.lastdispatch[i] = undefined; - this.undeafen(i); - } - let index = this.indexes[i]; - if(this.relativeness[i]) - index += this.offset; - subscribers(index).delete(this); - } + for(let i = 0; i < this.indexes_length; i++) { + /* flush updates pending because of inhibition */ + let inhibition = this.inhibit[i]; + if(inhibition != undefined){ + clearTimeout(inhibition); + this.lastapply[i] = undefined; + this.uninhibit(i); + } + let deafened = this.deafen[i]; + if(deafened != undefined){ + clearTimeout(deafened); + this.lastdispatch[i] = undefined; + this.undeafen(i); + } + let index = this.get_variable_index(i); + subscribers(index).delete(this); + } this.offset = 0; this.relativeness = undefined; } @@ -300,23 +355,22 @@ this.relativeness = relativeness; this.container_id = container_id ; /* add this's subsribers */ - if(!this.unsubscribable) - for(let i = 0; i < this.indexes.length; i++) { - let index = this.get_variable_index(i); - if(index == undefined) continue; - subscribers(index).add(this); - } - need_cache_apply.push(this); + for(let i = 0; i < this.indexes_length; i++) { + let index = this.get_variable_index(i); + if(index == undefined) continue; + subscribers(index).add(this); + } + this.apply_cache(); } apply_cache() { - if(!this.unsubscribable) for(let index in this.indexes){ + for(let i = 0; i < this.indexes_length; i++) { /* dispatch current cache in newly opened page widgets */ - let realindex = this.get_variable_index(index); + let realindex = this.get_variable_index(i); if(realindex == undefined) continue; let cached_val = cache[realindex]; if(cached_val != undefined) - this._dispatch(cached_val, cached_val, index); + this.feed_data_for_dispatch(cached_val, cached_val, i); } } @@ -339,7 +393,7 @@ } clip_min_max(index, new_val) { - let minmax = this.minmaxes[index]; + let minmax = this.variables_options[index].minmax; if(minmax !== undefined && typeof new_val == "number") { let [min,max] = minmax; if(new_val < min){ @@ -402,12 +456,12 @@ new_hmi_value(index, value, oldval) { // TODO avoid searching, store index at sub() - for(let i = 0; i < this.indexes.length; i++) { + for(let i = 0; i < this.indexes_length; i++) { let refindex = this.get_variable_index(i); if(refindex == undefined) continue; if(index == refindex) { - this._dispatch(value, oldval, i); + this.feed_data_for_dispatch(value, oldval, i); break; } } @@ -417,23 +471,57 @@ this.deafen[index] = undefined; let [new_val, old_val] = this.incoming[index]; this.incoming[index] = undefined; - this.dispatch(new_val, old_val, index); - } - - _dispatch(value, oldval, varnum) { - let dispatch = this.dispatch; - if(dispatch != undefined){ + this.do_dispatch(new_val, old_val, index); + } + + enable(enabled){ + if(this.enable_state != enabled){ + this.enable_state = enabled; + this.request_animate(); + } + } + + animate_enable(){ + if(this.enable_state && !this.enable_displayed_state){ + //show widget + for(let child of this.enabled_elts){ + this.element.appendChild(child); + } + + //hide disabled content + if(this.disabled_elt && this.disabled_elt.parentNode != null) + this.element.removeChild(this.disabled_elt); + + this.enable_displayed_state = true; + + }else if(!this.enable_state && this.enable_displayed_state){ + + //hide widget + for(let child of this.enabled_elts){ + if(child.parentNode != null) + this.element.removeChild(child); + } + + //show disabled content + if(this.disabled_elt) + this.element.appendChild(this.disabled_elt); + + this.enable_displayed_state = false; + + // once disabled activity display is lost + this.activity_displayed_state = undefined; + } + } + + feed_data_for_dispatch(value, oldval, varnum) { + if(this.dispatch || this.enable_expr){ if(this.deafen[varnum] == undefined){ let now = Date.now(); let min_interval = 1000/this.frequency; let lastdispatch = this.lastdispatch[varnum]; if(lastdispatch == undefined || now > lastdispatch + min_interval){ this.lastdispatch[varnum] = now; - try { - dispatch.call(this, value, oldval, varnum); - } catch(err) { - console.log(err); - } + this.do_dispatch(value, oldval, varnum) } else { let elapsed = now - lastdispatch; @@ -447,8 +535,29 @@ } } + do_dispatch(value, oldval, varnum) { + if(this.dispatch) try { + this.dispatch(value, oldval, varnum); + } catch(err) { + console.log(err); + } + if(this.enable_expr) try { + this.compute_enable(value, oldval, varnum); + } catch(err) { + console.log(err); + } + } + _animate(){ - this.animate(); + if(this.enable_expr) + this.animate_enable(); + // inhibit widget animation when disabled + if(!this.enable_expr || this.enable_state){ + if(this.has_activity) + this.animate_activity(); + if(this.animate != undefined) + this.animate(); + } this.pending_animate = false; } @@ -460,8 +569,11 @@ } } - set_activation_state(state){ - set_activation_state(this.activable_sub, state); + animate_activity(){ + if(this.activity_displayed_state != this.activity_state){ + set_activity_state(this.activable_sub, this.activity_state); + this.activity_displayed_state = this.activity_state; + } } } || diff -r 02229133df43 -r 51a3d6f39944 tests/projects/svghmi/plc.xml --- a/tests/projects/svghmi/plc.xml Tue Sep 13 16:51:54 2022 +0200 +++ b/tests/projects/svghmi/plc.xml Tue Sep 13 16:53:15 2022 +0200 @@ -1,7 +1,7 @@ <?xml version='1.0' encoding='utf-8'?> <project xmlns:ns1="http://www.plcopen.org/xml/tc6_0201" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.plcopen.org/xml/tc6_0201"> <fileHeader companyName="Unknown" productName="Unnamed" productVersion="1" creationDateTime="2019-08-06T14:23:42"/> - <contentHeader name="Unnamed" modificationDateTime="2022-07-21T11:39:43"> + <contentHeader name="Unnamed" modificationDateTime="2022-08-31T11:57:03"> <coordinateInfo> <fbd> <scaling x="5" y="5"/> @@ -575,64 +575,6 @@ </variable> </outputVariables> </block> - <inVariable localId="2" executionOrderId="0" height="30" width="60" negated="false"> - <position x="240" y="190"/> - <connectionPointOut> - <relPosition x="60" y="15"/> - </connectionPointOut> - <expression>Sloth</expression> - </inVariable> - <outVariable localId="3" executionOrderId="0" height="30" width="75" negated="false"> - <position x="435" y="205"/> - <connectionPointIn> - <relPosition x="0" y="15"/> - <connection refLocalId="8" formalParameter="OUT"> - <position x="435" y="220"/> - <position x="410" y="220"/> - </connection> - </connectionPointIn> - <expression>Pressure</expression> - </outVariable> - <block localId="8" typeName="DIV" executionOrderId="0" height="60" width="65"> - <position x="345" y="190"/> - <inputVariables> - <variable formalParameter="IN1"> - <connectionPointIn> - <relPosition x="0" y="30"/> - <connection refLocalId="2"> - <position x="345" y="220"/> - <position x="335" y="220"/> - <position x="335" y="205"/> - <position x="300" y="205"/> - </connection> - </connectionPointIn> - </variable> - <variable formalParameter="IN2"> - <connectionPointIn> - <relPosition x="0" y="50"/> - <connection refLocalId="9"> - <position x="345" y="240"/> - <position x="300" y="240"/> - </connection> - </connectionPointIn> - </variable> - </inputVariables> - <inOutVariables/> - <outputVariables> - <variable formalParameter="OUT"> - <connectionPointOut> - <relPosition x="65" y="30"/> - </connectionPointOut> - </variable> - </outputVariables> - </block> - <inVariable localId="9" executionOrderId="0" height="30" width="60" negated="false"> - <position x="240" y="225"/> - <connectionPointOut> - <relPosition x="60" y="15"/> - </connectionPointOut> - <expression>100</expression> - </inVariable> <block localId="10" typeName="CONCAT" executionOrderId="0" height="60" width="65"> <position x="360" y="345"/> <inputVariables> @@ -688,7 +630,7 @@ <connectionPointOut> <relPosition x="125" y="15"/> </connectionPointOut> - <expression>TargetPressure</expression> + <expression>Pressure</expression> </inVariable> <block localId="13" typeName="INT_TO_STRING" executionOrderId="0" height="40" width="115"> <position x="315" y="270"/> diff -r 02229133df43 -r 51a3d6f39944 tests/projects/svghmi/svghmi_0@svghmi/confnode.xml --- a/tests/projects/svghmi/svghmi_0@svghmi/confnode.xml Tue Sep 13 16:51:54 2022 +0200 +++ b/tests/projects/svghmi/svghmi_0@svghmi/confnode.xml Tue Sep 13 16:53:15 2022 +0200 @@ -1,2 +1,2 @@ <?xml version='1.0' encoding='utf-8'?> -<SVGHMI xmlns:xsd="http://www.w3.org/2001/XMLSchema" OnWatchdog="echo Watchdog for {name} !" WatchdogInitial="10" WatchdogInterval="5" EnableWatchdog="true" Path="{name}" OnStart="chromium --disable-gpu --new-window --user-data-dir=. {url}"/> +<SVGHMI xmlns:xsd="http://www.w3.org/2001/XMLSchema" OnWatchdog="echo Watchdog for {name} !" WatchdogInitial="10" WatchdogInterval="5" EnableWatchdog="true" Path="{name}"/> diff -r 02229133df43 -r 51a3d6f39944 tests/projects/svghmi/svghmi_0@svghmi/svghmi.svg --- a/tests/projects/svghmi/svghmi_0@svghmi/svghmi.svg Tue Sep 13 16:51:54 2022 +0200 +++ b/tests/projects/svghmi/svghmi_0@svghmi/svghmi.svg Tue Sep 13 16:53:15 2022 +0200 @@ -136,9 +136,9 @@ inkscape:current-layer="hmi0" showgrid="false" units="px" - inkscape:zoom="0.14174805" - inkscape:cx="-1530.0784" - inkscape:cy="-1404.9832" + inkscape:zoom="0.40092403" + inkscape:cx="323.58553" + inkscape:cy="-56.756946" inkscape:window-width="1600" inkscape:window-height="836" inkscape:window-x="0" @@ -3240,7 +3240,7 @@ inkscape:label="PUMP:1"> <g transform="matrix(0.57180538,0,0,0.57180538,1024.0513,-317.49049)" - inkscape:label="HMI:Jump:RelativePageTest@/PUMP0" + inkscape:label="HMI:Jump:RelativePageTest@en=/PUMP0#en" id="g1458-8"> <g inkscape:label="disabled" @@ -3255,6 +3255,17 @@ width="245.44583" id="rect1448-8" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.28600003;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#434343;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="1093.7899" + y="657.59668" + id="text1454-0-7"><tspan + sodipodi:role="line" + x="1093.7899" + y="657.59668" + style="text-align:center;text-anchor:middle;fill:#434343;fill-opacity:1;stroke-width:0.99999994px" + id="tspan1460-3-5">Disabled</tspan></text> </g> <g id="g1067" @@ -3269,6 +3280,17 @@ y="594.82263" ry="35.579063" inkscape:label="button" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="1093.7899" + y="657.59668" + id="text1454-0"><tspan + sodipodi:role="line" + x="1093.7899" + y="657.59668" + style="text-align:center;text-anchor:middle;fill:#ff6600;stroke-width:0.99999994px" + id="tspan1460-3">Inactive</tspan></text> </g> <g inkscape:label="active" @@ -3283,272 +3305,326 @@ width="245.44583" id="rect1069" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> - </g> - <g - inkscape:label="text" - id="g1456-1"> <text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - x="1038.2972" - y="635.99542" - id="text1454-0" - inkscape:label="setting_jmp"><tspan + x="1095.5966" + y="657.59668" + id="text1454-0-3"><tspan sodipodi:role="line" - x="1038.2972" - y="635.99542" + x="1095.5966" + y="657.59668" style="text-align:center;text-anchor:middle;fill:#ff6600;stroke-width:0.99999994px" - id="tspan1460-3">Pump</tspan></text> + id="tspan1460-3-6">Active</tspan></text> + </g> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:22.48720932px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.14054523px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="1591.54" + y="102.34158" + id="text1517-8" + inkscape:label="HMI:Display@/PUMP0/STROUT"><tspan + sodipodi:role="line" + id="tspan1515-5" + x="1591.54" + y="102.34158" + style="fill:#000000;fill-opacity:1;stroke-width:0.14054523px">8888</tspan></text> + </g> + <g + id="g6122" + inkscape:label="PUMP:2"> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:22.48720932px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.14054523px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="1751.7461" + y="102.34158" + id="text1517-8-5" + inkscape:label="HMI:Display@/PUMP1/STROUT"><tspan + sodipodi:role="line" + id="tspan1515-5-3" + x="1751.7461" + y="102.34158" + style="fill:#000000;fill-opacity:1;stroke-width:0.14054523px">8888</tspan></text> + <g + transform="matrix(0.57180538,0,0,0.57180538,1184.0513,-317.49049)" + inkscape:label="HMI:Jump:RelativePageTest@en=/PUMP1#en" + id="g1458-8-3"> + <g + inkscape:label="disabled" + id="g1450-4-5" + style="display:inline"> + <rect + rx="35.579063" + inkscape:label="button" + ry="35.579063" + y="594.82263" + x="971.96545" + height="95.723877" + width="245.44583" + id="rect1448-8-6" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.28600003;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:39.32668304px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.24579209px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - x="992.45087" - y="674.76117" - id="text1517-8" - inkscape:label="HMI:Display@/PUMP0/STROUT"><tspan + style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#434343;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="1093.7899" + y="657.59668" + id="text1454-0-7-2"><tspan sodipodi:role="line" - id="tspan1515-5" - x="992.45087" - y="674.76117" - style="fill:#000000;fill-opacity:1;stroke-width:0.24579209px">8888</tspan></text> + x="1093.7899" + y="657.59668" + style="text-align:center;text-anchor:middle;fill:#434343;fill-opacity:1;stroke-width:0.99999994px" + id="tspan1460-3-5-9">Disabled</tspan></text> </g> - </g> - </g> - <g - id="g6122" - inkscape:label="PUMP:2"> - <g - id="g1475-0" - inkscape:label="HMI:Jump:RelativePageTest@/PUMP1" - transform="matrix(0.57180538,0,0,0.57180538,1184.0513,-317.49049)"> <g - id="g1467-4" - inkscape:label="disabled"> + id="g1067-1" + inkscape:label="inactive" + style="display:inline"> <rect - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.28600003;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" - id="rect1464-4" + rx="35.579063" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#3d3d3d;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect1065-2" width="245.44583" height="95.723877" x="971.96545" y="594.82263" ry="35.579063" inkscape:label="button" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="1093.7899" + y="657.59668" + id="text1454-0-70"><tspan + sodipodi:role="line" + x="1093.7899" + y="657.59668" + style="text-align:center;text-anchor:middle;fill:#ff6600;stroke-width:0.99999994px" + id="tspan1460-3-9">Inactive</tspan></text> </g> <g - inkscape:label="inactive" - id="g1898" + inkscape:label="active" + id="g1071-3" style="display:inline"> <rect + rx="35.579063" inkscape:label="button" ry="35.579063" y="594.82263" x="971.96545" height="95.723877" width="245.44583" - id="rect1896" - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#3d3d3d;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + id="rect1069-6" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="1095.5966" + y="657.59668" + id="text1454-0-3-0"><tspan + sodipodi:role="line" + x="1095.5966" + y="657.59668" + style="text-align:center;text-anchor:middle;fill:#ff6600;stroke-width:0.99999994px" + id="tspan1460-3-6-6">Active</tspan></text> + </g> + </g> + </g> + <g + id="g6113" + inkscape:label="PUMP:3"> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:22.48720932px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.14054523px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="1911.9519" + y="102.34158" + id="text1517-8-8" + inkscape:label="HMI:Display@/PUMP2/STROUT"><tspan + sodipodi:role="line" + id="tspan1515-5-8" + x="1911.9519" + y="102.34158" + style="fill:#000000;fill-opacity:1;stroke-width:0.14054523px">8888</tspan></text> + <g + transform="matrix(0.57180538,0,0,0.57180538,1344.0513,-317.49049)" + inkscape:label="HMI:Jump:RelativePageTest@en=/PUMP2#en" + id="g1458-8-2"> + <g + inkscape:label="disabled" + id="g1450-4-6" + style="display:inline"> + <rect + rx="35.579063" + inkscape:label="button" + ry="35.579063" + y="594.82263" + x="971.96545" + height="95.723877" + width="245.44583" + id="rect1448-8-1" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.28600003;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#434343;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="1093.7899" + y="657.59668" + id="text1454-0-7-8"><tspan + sodipodi:role="line" + x="1093.7899" + y="657.59668" + style="text-align:center;text-anchor:middle;fill:#434343;fill-opacity:1;stroke-width:0.99999994px" + id="tspan1460-3-5-7">Disabled</tspan></text> </g> <g - id="g1902" - inkscape:label="active" + id="g1067-9" + inkscape:label="inactive" style="display:inline"> <rect - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" - id="rect1900" + rx="35.579063" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#3d3d3d;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect1065-20" width="245.44583" height="95.723877" x="971.96545" y="594.82263" ry="35.579063" inkscape:label="button" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="1093.7899" + y="657.59668" + id="text1454-0-2"><tspan + sodipodi:role="line" + x="1093.7899" + y="657.59668" + style="text-align:center;text-anchor:middle;fill:#ff6600;stroke-width:0.99999994px" + id="tspan1460-3-3">Inactive</tspan></text> </g> <g - id="g1473-4" - inkscape:label="text"> - <text - inkscape:label="setting_jmp" - id="text1471-4" - y="635.99542" - x="1038.2972" - style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - xml:space="preserve"><tspan - style="text-align:center;text-anchor:middle;fill:#ff6600;stroke-width:0.99999994px" - y="635.99542" - x="1038.2972" - sodipodi:role="line" - id="tspan1477-6">Pump</tspan></text> - <text - xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:39.32668304px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.24579208px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - x="992.8111" - y="674.76117" - id="text1517-8-5" - inkscape:label="HMI:Display@/PUMP1/STROUT"><tspan - sodipodi:role="line" - id="tspan1515-5-3" - x="992.8111" - y="674.76117" - style="fill:#000000;fill-opacity:1;stroke-width:0.24579208px">8888</tspan></text> - </g> - </g> - </g> - <g - id="g6113" - inkscape:label="PUMP:3"> - <g - transform="matrix(0.57180538,0,0,0.57180538,1344.0513,-317.49049)" - inkscape:label="HMI:Jump:RelativePageTest@/PUMP2" - id="g1491-3"> - <g - inkscape:label="disabled" - id="g1481-1"> + inkscape:label="active" + id="g1071-7" + style="display:inline"> <rect + rx="35.579063" inkscape:label="button" ry="35.579063" y="594.82263" x="971.96545" height="95.723877" width="245.44583" - id="rect1479-7" + id="rect1069-5" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="1095.5966" + y="657.59668" + id="text1454-0-3-9"><tspan + sodipodi:role="line" + x="1095.5966" + y="657.59668" + style="text-align:center;text-anchor:middle;fill:#ff6600;stroke-width:0.99999994px" + id="tspan1460-3-6-2">Active</tspan></text> + </g> + </g> + </g> + <g + id="g6104" + inkscape:label="PUMP:4"> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:22.48720932px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.14054523px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="2072.1577" + y="102.34158" + id="text1517-8-3" + inkscape:label="HMI:Display@/PUMP3/STROUT"><tspan + sodipodi:role="line" + id="tspan1515-5-1" + x="2072.1577" + y="102.34158" + style="fill:#000000;fill-opacity:1;stroke-width:0.14054523px">8888</tspan></text> + <g + transform="matrix(0.57180538,0,0,0.57180538,1504.0513,-317.49049)" + inkscape:label="HMI:Jump:RelativePageTest@en=/PUMP3#en" + id="g1458-8-28"> + <g + inkscape:label="disabled" + id="g1450-4-9" + style="display:inline"> + <rect + rx="35.579063" + inkscape:label="button" + ry="35.579063" + y="594.82263" + x="971.96545" + height="95.723877" + width="245.44583" + id="rect1448-8-7" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.28600003;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#434343;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="1093.7899" + y="657.59668" + id="text1454-0-7-3"><tspan + sodipodi:role="line" + x="1093.7899" + y="657.59668" + style="text-align:center;text-anchor:middle;fill:#434343;fill-opacity:1;stroke-width:0.99999994px" + id="tspan1460-3-5-6">Disabled</tspan></text> </g> <g - id="g1906" - inkscape:label="inactive"> + id="g1067-12" + inkscape:label="inactive" + style="display:inline"> <rect + rx="35.579063" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#3d3d3d;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" - id="rect1904" + id="rect1065-9" width="245.44583" height="95.723877" x="971.96545" y="594.82263" ry="35.579063" inkscape:label="button" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="1093.7899" + y="657.59668" + id="text1454-0-31"><tspan + sodipodi:role="line" + x="1093.7899" + y="657.59668" + style="text-align:center;text-anchor:middle;fill:#ff6600;stroke-width:0.99999994px" + id="tspan1460-3-94">Inactive</tspan></text> </g> <g inkscape:label="active" - id="g1910"> + id="g1071-78" + style="display:inline"> <rect + rx="35.579063" inkscape:label="button" ry="35.579063" y="594.82263" x="971.96545" height="95.723877" width="245.44583" - id="rect1908" + id="rect1069-4" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> - </g> - <g - inkscape:label="text" - id="g1489-5"> <text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - x="1038.2972" - y="635.99542" - id="text1487-9" - inkscape:label="setting_jmp"><tspan - id="tspan1485-2" + x="1095.5966" + y="657.59668" + id="text1454-0-3-5"><tspan sodipodi:role="line" - x="1038.2972" - y="635.99542" - style="text-align:center;text-anchor:middle;fill:#ff6600;stroke-width:0.99999994px">Pump</tspan></text> - <text - xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:39.32668304px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.24579208px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - x="993.17108" - y="674.76117" - id="text1517-8-8" - inkscape:label="HMI:Display@/PUMP2/STROUT"><tspan - sodipodi:role="line" - id="tspan1515-5-8" - x="993.17108" - y="674.76117" - style="fill:#000000;fill-opacity:1;stroke-width:0.24579208px">8888</tspan></text> - </g> - </g> - </g> - <g - id="g6104" - inkscape:label="PUMP:4"> - <g - id="g1509-1" - inkscape:label="HMI:Jump:RelativePageTest@/PUMP3" - transform="matrix(0.57180538,0,0,0.57180538,1504.0513,-317.49049)"> - <g - id="g1499-7" - inkscape:label="disabled" - style="display:inline"> - <rect - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.28600003;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" - id="rect1497-8" - width="245.44583" - height="95.723877" - x="971.96545" - y="594.82263" - ry="35.579063" - inkscape:label="button" /> - </g> - <g - id="g1918" - inkscape:label="inactive" - style="display:inline"> - <rect - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#3d3d3d;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" - id="rect1916" - width="245.44583" - height="95.723877" - x="971.96545" - y="594.82263" - ry="35.579063" - inkscape:label="button" /> - </g> - <g - inkscape:label="active" - id="g1914" - style="display:inline"> - <rect - inkscape:label="button" - ry="35.579063" - y="594.82263" - x="971.96545" - height="95.723877" - width="245.44583" - id="rect1912" - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> - </g> - <g - id="g1507-5" - inkscape:label="text"> - <text - inkscape:label="setting_jmp" - id="text1505-7" - y="635.99542" - x="1038.2972" - style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - xml:space="preserve"><tspan + x="1095.5966" + y="657.59668" style="text-align:center;text-anchor:middle;fill:#ff6600;stroke-width:0.99999994px" - y="635.99542" - x="1038.2972" - sodipodi:role="line" - id="tspan1511-4">Pump</tspan><tspan - style="text-align:center;text-anchor:middle;fill:#ff6600;stroke-width:0.99999994px" - y="685.99542" - x="1038.2972" - sodipodi:role="line" - id="tspan1503-1" /></text> - <text - xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:39.32668304px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.24579208px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - x="993.53101" - y="674.76117" - id="text1517-8-3" - inkscape:label="HMI:Display@/PUMP3/STROUT"><tspan - sodipodi:role="line" - id="tspan1515-5-1" - x="993.53101" - y="674.76117" - style="fill:#000000;fill-opacity:1;stroke-width:0.24579208px">8888</tspan></text> + id="tspan1460-3-6-0">Active</tspan></text> </g> </g> </g> @@ -8450,4 +8526,35 @@ style="text-align:center;text-anchor:middle;fill:#ff6600;stroke-width:0.99999994px">up</tspan></text> </g> </g> + <g + transform="translate(-940,-418)" + inkscape:label="HMI:Jump:Home:notify=42:plop="WTF"@notify=/SELECTION@plop=/PUMP0/STRIN" + id="g2343"> + <g + inkscape:label="button" + id="g2335"> + <path + sodipodi:nodetypes="cssssccc" + inkscape:connector-curvature="0" + id="path2333" + d="m 1217.4113,1410.4016 -22,24.5657 c -10.7925,12.0511 6.1317,35.5791 -13.5791,35.5791 h -174.2877 c -19.71078,0 -2.7866,-23.528 -13.57905,-35.5791 l -22,-24.5657 127.74845,-48.4334 z" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + </g> + <g + inkscape:label="text" + id="g2341"> + <text + inkscape:label="home_jmp" + id="text2339" + y="1436.9814" + x="1090.7626" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + style="text-align:center;text-anchor:middle;fill:#ff6600;stroke-width:0.99999994px" + y="1436.9814" + x="1090.7626" + id="tspan2337" + sodipodi:role="line">Home</tspan></text> + </g> + </g> </svg> diff -r 02229133df43 -r 51a3d6f39944 tests/projects/svghmi_scrollbar/plc.xml --- a/tests/projects/svghmi_scrollbar/plc.xml Tue Sep 13 16:51:54 2022 +0200 +++ b/tests/projects/svghmi_scrollbar/plc.xml Tue Sep 13 16:53:15 2022 +0200 @@ -1,7 +1,7 @@ <?xml version='1.0' encoding='utf-8'?> <project xmlns:ns1="http://www.plcopen.org/xml/tc6_0201" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.plcopen.org/xml/tc6_0201"> <fileHeader companyName="Unknown" productName="Unnamed" productVersion="1" creationDateTime="2019-08-06T14:23:42"/> - <contentHeader name="Unnamed" modificationDateTime="2021-09-10T14:17:04"> + <contentHeader name="Unnamed" modificationDateTime="2022-08-23T09:33:50"> <coordinateInfo> <fbd> <scaling x="5" y="5"/> diff -r 02229133df43 -r 51a3d6f39944 tests/projects/svghmi_scrollbar/svghmi_0@svghmi/svghmi.svg --- a/tests/projects/svghmi_scrollbar/svghmi_0@svghmi/svghmi.svg Tue Sep 13 16:51:54 2022 +0200 +++ b/tests/projects/svghmi_scrollbar/svghmi_0@svghmi/svghmi.svg Tue Sep 13 16:53:15 2022 +0200 @@ -60,8 +60,8 @@ showgrid="false" units="px" inkscape:zoom="0.64" - inkscape:cx="476.03774" - inkscape:cy="444.53549" + inkscape:cx="864.62819" + inkscape:cy="344.83986" inkscape:window-width="1600" inkscape:window-height="836" inkscape:window-x="0" @@ -748,11 +748,18 @@ inkscape:label="HMI:ScrollBar\" transform="translate(-202)"> <desc - id="desc150">@.range -@.position + id="desc150">@range=.range +@pos=.position @.size +#pos>10&&range>50 my tailor is rich</desc> + <path + inkscape:connector-curvature="0" + d="m 972,603 h 75 l -37.5,58 z m 37.5,-579.999998 37.5,58 H 972 Z M 969,236 h 81 V 407 H 969 Z M 960,84.000002 h 100 V 600 H 960 Z" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:8, 8;stroke-dashoffset:0;stroke-opacity:1;marker:none" + id="path159" + inkscape:label="disabled" /> <rect y="84" x="960"