beremiz

Tests: Add minimal SVGHMI test

2023-08-01, Edouard Tisserant
c2b6354f036f
Parents a466d4468d7a
Children 02fa0f8484d7
Tests: Add minimal SVGHMI test
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/ide_tests/svghmi_basic.sikuli/svghmi_basic.py Tue Aug 01 21:04:00 2023 +0200
@@ -0,0 +1,43 @@
+""" This test opens, builds and runs exemple project named "python".
+Test succeeds if runtime's stdout behaves as expected
+"""
+
+import os
+import time
+
+# allow module import from current test directory's parent
+addImportPath(os.path.dirname(getBundlePath()))
+
+# common test definitions module
+from sikuliberemiz import *
+
+def test(app):
+ # Start the app
+
+ app.k.Clean()
+
+ app.waitForChangeAndIdleStdout()
+
+ app.k.Build()
+
+ app.waitPatternInStdout("Successfully built.", 10)
+
+ app.k.Connect()
+
+ app.waitForChangeAndIdleStdout()
+
+ app.k.Transfer()
+
+ app.waitForChangeAndIdleStdout()
+
+ app.k.Run()
+
+ app.waitForChangeAndIdleStdout()
+ # app.WaitIdleUI()
+
+ app.click("OFF")
+
+ # wait 10 seconds for 10 Grumpfs
+ return app.waitPatternInStdout("ALL GREEN LIGHTS", 10)
+
+run_test(test, testproject="svghmi_basic")
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/projects/svghmi_basic/beremiz.xml Tue Aug 01 21:04:00 2023 +0200
@@ -0,0 +1,5 @@
+<?xml version='1.0' encoding='utf-8'?>
+<BeremizRoot URI_location="LOCAL://">
+ <TargetType/>
+ <Libraries Enable_SVGHMI_Library="true"/>
+</BeremizRoot>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/projects/svghmi_basic/plc.xml Tue Aug 01 21:04:00 2023 +0200
@@ -0,0 +1,1490 @@
+<?xml version='1.0' encoding='utf-8'?>
+<project xmlns="http://www.plcopen.org/xml/tc6_0201" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xsi:schemaLocation="http://www.plcopen.org/xml/tc6_0201">
+ <fileHeader companyName="Beremiz" productName="Unnamed" productVersion="1" creationDateTime="2012-09-04T16:16:33"/>
+ <contentHeader name="traffic_lights" modificationDateTime="2023-08-01T20:50:25">
+ <coordinateInfo>
+ <fbd>
+ <scaling x="0" y="0"/>
+ </fbd>
+ <ld>
+ <scaling x="0" y="0"/>
+ </ld>
+ <sfc>
+ <scaling x="0" y="0"/>
+ </sfc>
+ </coordinateInfo>
+ </contentHeader>
+ <types>
+ <dataTypes/>
+ <pous>
+ <pou name="traffic_light_sequence" pouType="functionBlock">
+ <interface>
+ <inputVars>
+ <variable name="SWITCH_BUTTON">
+ <type>
+ <BOOL/>
+ </type>
+ </variable>
+ <variable name="PEDESTRIAN_BUTTON">
+ <type>
+ <BOOL/>
+ </type>
+ </variable>
+ </inputVars>
+ <outputVars>
+ <variable name="RED_LIGHT">
+ <type>
+ <BOOL/>
+ </type>
+ </variable>
+ <variable name="ORANGE_LIGHT">
+ <type>
+ <BOOL/>
+ </type>
+ </variable>
+ <variable name="GREEN_LIGHT">
+ <type>
+ <BOOL/>
+ </type>
+ </variable>
+ <variable name="PEDESTRIAN_RED_LIGHT">
+ <type>
+ <BOOL/>
+ </type>
+ </variable>
+ <variable name="PEDESTRIAN_GREEN_LIGHT">
+ <type>
+ <BOOL/>
+ </type>
+ </variable>
+ </outputVars>
+ <localVars>
+ <variable name="TON1">
+ <type>
+ <derived name="TON"/>
+ </type>
+ </variable>
+ <variable name="TON2">
+ <type>
+ <derived name="TON"/>
+ </type>
+ </variable>
+ <variable name="ALLOW_CARS">
+ <type>
+ <BOOL/>
+ </type>
+ </variable>
+ <variable name="WARN_CARS">
+ <type>
+ <BOOL/>
+ </type>
+ </variable>
+ <variable name="STOP_CARS">
+ <type>
+ <BOOL/>
+ </type>
+ </variable>
+ <variable name="ALLOW_PEDESTRIANS">
+ <type>
+ <BOOL/>
+ </type>
+ </variable>
+ <variable name="STOP_PEDESTRIANS">
+ <type>
+ <BOOL/>
+ </type>
+ </variable>
+ <variable name="TON3">
+ <type>
+ <derived name="TON"/>
+ </type>
+ </variable>
+ <variable name="R_TRIG0">
+ <type>
+ <derived name="R_TRIG"/>
+ </type>
+ </variable>
+ <variable name="R_TRIG1">
+ <type>
+ <derived name="R_TRIG"/>
+ </type>
+ </variable>
+ <variable name="SR0">
+ <type>
+ <derived name="SR"/>
+ </type>
+ </variable>
+ </localVars>
+ </interface>
+ <actions>
+ <action name="BLINK_ORANGE_LIGHT">
+ <body>
+ <LD>
+ <leftPowerRail localId="1" height="40" width="3">
+ <position x="54" y="123"/>
+ <connectionPointOut formalParameter="">
+ <relPosition x="3" y="20"/>
+ </connectionPointOut>
+ </leftPowerRail>
+ <contact localId="2" height="15" width="21" negated="true">
+ <position x="121" y="135"/>
+ <connectionPointIn>
+ <relPosition x="0" y="8"/>
+ <connection refLocalId="1">
+ <position x="121" y="143"/>
+ <position x="56" y="143"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut>
+ <relPosition x="21" y="8"/>
+ </connectionPointOut>
+ <variable>ORANGE_LIGHT</variable>
+ </contact>
+ <block localId="3" width="97" height="102" typeName="TON" instanceName="TON1">
+ <position x="216" y="103"/>
+ <inputVariables>
+ <variable formalParameter="IN">
+ <connectionPointIn>
+ <relPosition x="0" y="40"/>
+ <connection refLocalId="2">
+ <position x="216" y="143"/>
+ <position x="142" y="143"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="PT">
+ <connectionPointIn>
+ <relPosition x="0" y="81"/>
+ <connection refLocalId="4">
+ <position x="216" y="184"/>
+ <position x="151" y="184"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="Q">
+ <connectionPointOut>
+ <relPosition x="97" y="40"/>
+ </connectionPointOut>
+ </variable>
+ <variable formalParameter="ET">
+ <connectionPointOut>
+ <relPosition x="97" y="81"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <inVariable localId="4" height="37" width="76" negated="false">
+ <position x="75" y="166"/>
+ <connectionPointOut>
+ <relPosition x="76" y="18"/>
+ </connectionPointOut>
+ <expression>T#500ms</expression>
+ </inVariable>
+ <block localId="5" width="97" height="106" typeName="TON" instanceName="TON2">
+ <position x="216" y="251"/>
+ <inputVariables>
+ <variable formalParameter="IN">
+ <connectionPointIn>
+ <relPosition x="0" y="41"/>
+ <connection refLocalId="14">
+ <position x="216" y="292"/>
+ <position x="155" y="292"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="PT">
+ <connectionPointIn>
+ <relPosition x="0" y="84"/>
+ <connection refLocalId="15">
+ <position x="216" y="335"/>
+ <position x="162" y="335"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="Q">
+ <connectionPointOut>
+ <relPosition x="97" y="41"/>
+ </connectionPointOut>
+ </variable>
+ <variable formalParameter="ET">
+ <connectionPointOut>
+ <relPosition x="97" y="84"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <coil localId="6" height="15" width="21" storage="reset">
+ <position x="517" y="284"/>
+ <connectionPointIn>
+ <relPosition x="0" y="8"/>
+ <connection refLocalId="10" formalParameter="Q">
+ <position x="517" y="292"/>
+ <position x="427" y="292"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut>
+ <relPosition x="21" y="8"/>
+ </connectionPointOut>
+ <variable>ORANGE_LIGHT</variable>
+ </coil>
+ <rightPowerRail localId="7" height="40" width="3">
+ <position x="598" y="123"/>
+ <connectionPointIn>
+ <relPosition x="0" y="20"/>
+ <connection refLocalId="8">
+ <position x="598" y="143"/>
+ <position x="530" y="143"/>
+ </connection>
+ </connectionPointIn>
+ </rightPowerRail>
+ <coil localId="8" height="15" width="21" storage="set">
+ <position x="509" y="135"/>
+ <connectionPointIn>
+ <relPosition x="0" y="8"/>
+ <connection refLocalId="11" formalParameter="Q">
+ <position x="509" y="143"/>
+ <position x="428" y="143"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut>
+ <relPosition x="21" y="8"/>
+ </connectionPointOut>
+ <variable>ORANGE_LIGHT</variable>
+ </coil>
+ <comment localId="9" height="52" width="318">
+ <position x="51" y="11"/>
+ <content>
+ <xhtml:p><![CDATA[This action makes the orange light blink]]></xhtml:p>
+ </content>
+ </comment>
+ <block localId="10" width="58" height="40" typeName="R_TRIG" instanceName="R_TRIG0">
+ <position x="370" y="262"/>
+ <inputVariables>
+ <variable formalParameter="CLK">
+ <connectionPointIn>
+ <relPosition x="0" y="30"/>
+ <connection refLocalId="5" formalParameter="Q">
+ <position x="370" y="292"/>
+ <position x="313" y="292"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="Q">
+ <connectionPointOut>
+ <relPosition x="58" y="30"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <block localId="11" width="58" height="40" typeName="R_TRIG" instanceName="R_TRIG1">
+ <position x="371" y="113"/>
+ <inputVariables>
+ <variable formalParameter="CLK">
+ <connectionPointIn>
+ <relPosition x="0" y="30"/>
+ <connection refLocalId="3" formalParameter="Q">
+ <position x="371" y="143"/>
+ <position x="313" y="143"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="Q">
+ <connectionPointOut>
+ <relPosition x="58" y="30"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <rightPowerRail localId="12" height="40" width="3">
+ <position x="597" y="272"/>
+ <connectionPointIn>
+ <relPosition x="0" y="20"/>
+ <connection refLocalId="6">
+ <position x="597" y="292"/>
+ <position x="538" y="292"/>
+ </connection>
+ </connectionPointIn>
+ </rightPowerRail>
+ <leftPowerRail localId="13" height="40" width="3">
+ <position x="67" y="272"/>
+ <connectionPointOut formalParameter="">
+ <relPosition x="3" y="20"/>
+ </connectionPointOut>
+ </leftPowerRail>
+ <contact localId="14" height="15" width="21">
+ <position x="134" y="284"/>
+ <connectionPointIn>
+ <relPosition x="0" y="8"/>
+ <connection refLocalId="13">
+ <position x="134" y="292"/>
+ <position x="69" y="292"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut>
+ <relPosition x="21" y="8"/>
+ </connectionPointOut>
+ <variable>ORANGE_LIGHT</variable>
+ </contact>
+ <inVariable localId="15" height="36" width="77" negated="false">
+ <position x="85" y="317"/>
+ <connectionPointOut>
+ <relPosition x="77" y="18"/>
+ </connectionPointOut>
+ <expression>T#500ms</expression>
+ </inVariable>
+ </LD>
+ </body>
+ </action>
+ </actions>
+ <transitions>
+ <transition name="STOP">
+ <body>
+ <FBD>
+ <block localId="42" width="59" height="53" typeName="NOT" executionOrderId="0">
+ <position x="237" y="31"/>
+ <inputVariables>
+ <variable formalParameter="IN">
+ <connectionPointIn>
+ <relPosition x="0" y="36"/>
+ <connection refLocalId="43">
+ <position x="237" y="67"/>
+ <position x="202" y="67"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="OUT">
+ <connectionPointOut>
+ <relPosition x="59" y="36"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <inVariable localId="43" height="39" width="164" executionOrderId="0" negated="false">
+ <position x="38" y="48"/>
+ <connectionPointOut>
+ <relPosition x="164" y="19"/>
+ </connectionPointOut>
+ <expression>SWITCH_BUTTON</expression>
+ </inVariable>
+ <outVariable localId="44" height="40" width="46" executionOrderId="0" negated="false">
+ <position x="351" y="47"/>
+ <connectionPointIn>
+ <relPosition x="0" y="20"/>
+ <connection refLocalId="42" formalParameter="OUT">
+ <position x="351" y="67"/>
+ <position x="296" y="67"/>
+ </connection>
+ </connectionPointIn>
+ <expression>STOP</expression>
+ </outVariable>
+ </FBD>
+ </body>
+ </transition>
+ </transitions>
+ <body>
+ <SFC>
+ <step localId="1" height="37" width="121" name="Standstill" initialStep="true">
+ <position x="509" y="31"/>
+ <connectionPointIn>
+ <relPosition x="60" y="0"/>
+ <connection refLocalId="39">
+ <position x="569" y="31"/>
+ <position x="569" y="11"/>
+ <position x="963" y="11"/>
+ <position x="963" y="1151"/>
+ <position x="776" y="1151"/>
+ <position x="776" y="1097"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut formalParameter="">
+ <relPosition x="60" y="37"/>
+ </connectionPointOut>
+ <connectionPointOutAction formalParameter="">
+ <relPosition x="121" y="18"/>
+ </connectionPointOutAction>
+ </step>
+ <transition localId="2" height="2" width="20">
+ <position x="559" y="222"/>
+ <connectionPointIn>
+ <relPosition x="10" y="0"/>
+ <connection refLocalId="1">
+ <position x="569" y="222"/>
+ <position x="569" y="68"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut>
+ <relPosition x="10" y="2"/>
+ </connectionPointOut>
+ <condition>
+ <inline name="">
+ <ST>
+ <xhtml:p><![CDATA[SWITCH_BUTTON]]></xhtml:p>
+ </ST>
+ </inline>
+ </condition>
+ </transition>
+ <step localId="3" height="30" width="118" name="ORANGE">
+ <position x="510" y="250"/>
+ <connectionPointIn>
+ <relPosition x="59" y="0"/>
+ <connection refLocalId="2">
+ <position x="569" y="250"/>
+ <position x="569" y="224"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut formalParameter="">
+ <relPosition x="59" y="30"/>
+ </connectionPointOut>
+ <connectionPointOutAction formalParameter="">
+ <relPosition x="118" y="15"/>
+ </connectionPointOutAction>
+ </step>
+ <transition localId="6" height="2" width="20">
+ <position x="559" y="376"/>
+ <connectionPointIn>
+ <relPosition x="10" y="0"/>
+ <connection refLocalId="15">
+ <position x="569" y="376"/>
+ <position x="569" y="336"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut>
+ <relPosition x="10" y="2"/>
+ </connectionPointOut>
+ <condition>
+ <inline name="">
+ <ST>
+ <xhtml:p><![CDATA[STOP_CARS]]></xhtml:p>
+ </ST>
+ </inline>
+ </condition>
+ </transition>
+ <actionBlock localId="8" width="231" height="162">
+ <position x="711" y="34"/>
+ <connectionPointIn>
+ <relPosition x="0" y="15"/>
+ <connection refLocalId="1">
+ <position x="711" y="49"/>
+ <position x="630" y="49"/>
+ </connection>
+ </connectionPointIn>
+ <action localId="0" qualifier="P">
+ <relPosition x="0" y="0"/>
+ <inline>
+ <ST>
+ <xhtml:p><![CDATA[ORANGE_LIGHT := 1;]]></xhtml:p>
+ </ST>
+ </inline>
+ </action>
+ <action localId="0">
+ <relPosition x="0" y="0"/>
+ <reference name="BLINK_ORANGE_LIGHT"/>
+ </action>
+ <action localId="0" qualifier="R">
+ <relPosition x="0" y="0"/>
+ <reference name="PEDESTRIAN_RED_LIGHT"/>
+ </action>
+ <action localId="0" qualifier="R">
+ <relPosition x="0" y="0"/>
+ <reference name="PEDESTRIAN_GREEN_LIGHT"/>
+ </action>
+ <action localId="0" qualifier="R">
+ <relPosition x="0" y="0"/>
+ <reference name="RED_LIGHT"/>
+ </action>
+ <action localId="0" qualifier="R">
+ <relPosition x="0" y="0"/>
+ <reference name="GREEN_LIGHT"/>
+ </action>
+ </actionBlock>
+ <actionBlock localId="9" width="232" height="125">
+ <position x="711" y="250"/>
+ <connectionPointIn>
+ <relPosition x="0" y="15"/>
+ <connection refLocalId="3">
+ <position x="711" y="265"/>
+ <position x="628" y="265"/>
+ </connection>
+ </connectionPointIn>
+ <action localId="0" qualifier="R">
+ <relPosition x="0" y="0"/>
+ <reference name="GREEN_LIGHT"/>
+ </action>
+ <action localId="0" qualifier="S">
+ <relPosition x="0" y="0"/>
+ <reference name="ORANGE_LIGHT"/>
+ </action>
+ <action localId="0" qualifier="S">
+ <relPosition x="0" y="0"/>
+ <reference name="PEDESTRIAN_RED_LIGHT"/>
+ </action>
+ <action localId="0" qualifier="D" duration="T#2s">
+ <relPosition x="0" y="0"/>
+ <reference name="STOP_CARS"/>
+ </action>
+ </actionBlock>
+ <step localId="10" height="34" width="92" name="RED">
+ <position x="523" y="411"/>
+ <connectionPointIn>
+ <relPosition x="46" y="0"/>
+ <connection refLocalId="6">
+ <position x="569" y="411"/>
+ <position x="569" y="378"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut formalParameter="">
+ <relPosition x="46" y="34"/>
+ </connectionPointOut>
+ <connectionPointOutAction formalParameter="">
+ <relPosition x="92" y="17"/>
+ </connectionPointOutAction>
+ </step>
+ <actionBlock localId="11" width="235" height="103">
+ <position x="710" y="413"/>
+ <connectionPointIn>
+ <relPosition x="0" y="15"/>
+ <connection refLocalId="10">
+ <position x="710" y="428"/>
+ <position x="615" y="428"/>
+ </connection>
+ </connectionPointIn>
+ <action localId="0" qualifier="R">
+ <relPosition x="0" y="0"/>
+ <reference name="ORANGE_LIGHT"/>
+ </action>
+ <action localId="0" qualifier="S">
+ <relPosition x="0" y="0"/>
+ <reference name="RED_LIGHT"/>
+ </action>
+ <action localId="0" qualifier="D" duration="T#2s">
+ <relPosition x="0" y="0"/>
+ <reference name="ALLOW_PEDESTRIANS"/>
+ </action>
+ </actionBlock>
+ <transition localId="12" height="2" width="20">
+ <position x="559" y="533"/>
+ <connectionPointIn>
+ <relPosition x="10" y="0"/>
+ <connection refLocalId="7">
+ <position x="569" y="533"/>
+ <position x="569" y="487"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut>
+ <relPosition x="10" y="2"/>
+ </connectionPointOut>
+ <condition>
+ <inline name="">
+ <ST>
+ <xhtml:p><![CDATA[ALLOW_PEDESTRIANS]]></xhtml:p>
+ </ST>
+ </inline>
+ </condition>
+ </transition>
+ <selectionDivergence localId="15" height="1" width="154">
+ <position x="415" y="335"/>
+ <connectionPointIn>
+ <relPosition x="154" y="0"/>
+ <connection refLocalId="3">
+ <position x="569" y="335"/>
+ <position x="569" y="280"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut formalParameter="">
+ <relPosition x="0" y="1"/>
+ </connectionPointOut>
+ <connectionPointOut formalParameter="">
+ <relPosition x="154" y="1"/>
+ </connectionPointOut>
+ </selectionDivergence>
+ <transition localId="16" height="2" width="20">
+ <position x="405" y="377"/>
+ <connectionPointIn>
+ <relPosition x="10" y="0"/>
+ <connection refLocalId="15">
+ <position x="415" y="377"/>
+ <position x="415" y="336"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut>
+ <relPosition x="10" y="2"/>
+ </connectionPointOut>
+ <condition>
+ <reference name="STOP"/>
+ </condition>
+ </transition>
+ <jumpStep localId="17" height="13" width="12" targetName="Standstill">
+ <position x="409" y="418"/>
+ <connectionPointIn>
+ <relPosition x="6" y="0"/>
+ <connection refLocalId="16">
+ <position x="415" y="418"/>
+ <position x="415" y="379"/>
+ </connection>
+ </connectionPointIn>
+ </jumpStep>
+ <transition localId="4" height="2" width="20">
+ <position x="400" y="528"/>
+ <connectionPointIn>
+ <relPosition x="10" y="0"/>
+ <connection refLocalId="7">
+ <position x="410" y="528"/>
+ <position x="410" y="487"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut>
+ <relPosition x="10" y="2"/>
+ </connectionPointOut>
+ <condition>
+ <reference name="STOP"/>
+ </condition>
+ </transition>
+ <jumpStep localId="5" height="13" width="12" targetName="Standstill">
+ <position x="404" y="553"/>
+ <connectionPointIn>
+ <relPosition x="6" y="0"/>
+ <connection refLocalId="4">
+ <position x="410" y="553"/>
+ <position x="410" y="530"/>
+ </connection>
+ </connectionPointIn>
+ </jumpStep>
+ <selectionDivergence localId="7" height="1" width="159">
+ <position x="410" y="486"/>
+ <connectionPointIn>
+ <relPosition x="159" y="0"/>
+ <connection refLocalId="10">
+ <position x="569" y="486"/>
+ <position x="569" y="445"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut formalParameter="">
+ <relPosition x="0" y="1"/>
+ </connectionPointOut>
+ <connectionPointOut formalParameter="">
+ <relPosition x="159" y="1"/>
+ </connectionPointOut>
+ </selectionDivergence>
+ <step localId="18" height="32" width="177" name="PEDESTRIAN_GREEN">
+ <position x="481" y="572"/>
+ <connectionPointIn>
+ <relPosition x="88" y="0"/>
+ <connection refLocalId="12">
+ <position x="569" y="572"/>
+ <position x="569" y="535"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut formalParameter="">
+ <relPosition x="88" y="32"/>
+ </connectionPointOut>
+ <connectionPointOutAction formalParameter="">
+ <relPosition x="177" y="16"/>
+ </connectionPointOutAction>
+ </step>
+ <actionBlock localId="19" width="247" height="110">
+ <position x="708" y="573"/>
+ <connectionPointIn>
+ <relPosition x="0" y="15"/>
+ <connection refLocalId="18">
+ <position x="708" y="588"/>
+ <position x="658" y="588"/>
+ </connection>
+ </connectionPointIn>
+ <action localId="0" qualifier="S">
+ <relPosition x="0" y="0"/>
+ <reference name="PEDESTRIAN_GREEN_LIGHT"/>
+ </action>
+ <action localId="0" qualifier="R">
+ <relPosition x="0" y="0"/>
+ <reference name="PEDESTRIAN_RED_LIGHT"/>
+ </action>
+ <action localId="0" qualifier="D" duration="T#10s">
+ <relPosition x="0" y="0"/>
+ <reference name="STOP_PEDESTRIANS"/>
+ </action>
+ </actionBlock>
+ <transition localId="20" height="2" width="20">
+ <position x="400" y="653"/>
+ <connectionPointIn>
+ <relPosition x="10" y="0"/>
+ <connection refLocalId="22">
+ <position x="410" y="653"/>
+ <position x="410" y="626"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut>
+ <relPosition x="10" y="2"/>
+ </connectionPointOut>
+ <condition>
+ <inline name="">
+ <ST>
+ <xhtml:p><![CDATA[NOT SWITCH_BUTTON]]></xhtml:p>
+ </ST>
+ </inline>
+ </condition>
+ </transition>
+ <jumpStep localId="21" height="13" width="12" targetName="Standstill">
+ <position x="404" y="694"/>
+ <connectionPointIn>
+ <relPosition x="6" y="0"/>
+ <connection refLocalId="20">
+ <position x="410" y="694"/>
+ <position x="410" y="655"/>
+ </connection>
+ </connectionPointIn>
+ </jumpStep>
+ <selectionDivergence localId="22" height="1" width="159">
+ <position x="410" y="625"/>
+ <connectionPointIn>
+ <relPosition x="159" y="0"/>
+ <connection refLocalId="18">
+ <position x="569" y="625"/>
+ <position x="569" y="615"/>
+ <position x="569" y="615"/>
+ <position x="569" y="604"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut formalParameter="">
+ <relPosition x="0" y="1"/>
+ </connectionPointOut>
+ <connectionPointOut formalParameter="">
+ <relPosition x="159" y="1"/>
+ </connectionPointOut>
+ </selectionDivergence>
+ <transition localId="23" height="2" width="20">
+ <position x="559" y="709"/>
+ <connectionPointIn>
+ <relPosition x="10" y="0"/>
+ <connection refLocalId="22">
+ <position x="569" y="709"/>
+ <position x="569" y="626"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut>
+ <relPosition x="10" y="2"/>
+ </connectionPointOut>
+ <condition>
+ <inline name="">
+ <ST>
+ <xhtml:p><![CDATA[STOP_PEDESTRIANS]]></xhtml:p>
+ </ST>
+ </inline>
+ </condition>
+ </transition>
+ <step localId="24" height="30" width="148" name="PEDESTRIAN_RED">
+ <position x="495" y="748"/>
+ <connectionPointIn>
+ <relPosition x="74" y="0"/>
+ <connection refLocalId="23">
+ <position x="569" y="748"/>
+ <position x="569" y="711"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut formalParameter="">
+ <relPosition x="74" y="30"/>
+ </connectionPointOut>
+ <connectionPointOutAction formalParameter="">
+ <relPosition x="148" y="15"/>
+ </connectionPointOutAction>
+ </step>
+ <actionBlock localId="25" width="239" height="110">
+ <position x="708" y="748"/>
+ <connectionPointIn>
+ <relPosition x="0" y="15"/>
+ <connection refLocalId="24">
+ <position x="708" y="763"/>
+ <position x="643" y="763"/>
+ </connection>
+ </connectionPointIn>
+ <action localId="0" qualifier="S">
+ <relPosition x="0" y="0"/>
+ <reference name="PEDESTRIAN_RED_LIGHT"/>
+ </action>
+ <action localId="0" qualifier="R">
+ <relPosition x="0" y="0"/>
+ <reference name="PEDESTRIAN_GREEN_LIGHT"/>
+ </action>
+ <action localId="0" qualifier="D" duration="T#2s">
+ <relPosition x="0" y="0"/>
+ <reference name="ALLOW_CARS"/>
+ </action>
+ </actionBlock>
+ <transition localId="26" height="2" width="20">
+ <position x="400" y="857"/>
+ <connectionPointIn>
+ <relPosition x="10" y="0"/>
+ <connection refLocalId="28">
+ <position x="410" y="857"/>
+ <position x="410" y="816"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut>
+ <relPosition x="10" y="2"/>
+ </connectionPointOut>
+ <condition>
+ <connectionPointIn>
+ <connection refLocalId="48">
+ <position x="400" y="858"/>
+ <position x="290" y="858"/>
+ </connection>
+ </connectionPointIn>
+ </condition>
+ </transition>
+ <jumpStep localId="27" height="13" width="12" targetName="Standstill">
+ <position x="404" y="898"/>
+ <connectionPointIn>
+ <relPosition x="6" y="0"/>
+ <connection refLocalId="26">
+ <position x="410" y="898"/>
+ <position x="410" y="859"/>
+ </connection>
+ </connectionPointIn>
+ </jumpStep>
+ <selectionDivergence localId="28" height="1" width="159">
+ <position x="410" y="815"/>
+ <connectionPointIn>
+ <relPosition x="159" y="0"/>
+ <connection refLocalId="24">
+ <position x="569" y="815"/>
+ <position x="569" y="778"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut formalParameter="">
+ <relPosition x="0" y="1"/>
+ </connectionPointOut>
+ <connectionPointOut formalParameter="">
+ <relPosition x="159" y="1"/>
+ </connectionPointOut>
+ </selectionDivergence>
+ <transition localId="29" height="2" width="20">
+ <position x="559" y="879"/>
+ <connectionPointIn>
+ <relPosition x="10" y="0"/>
+ <connection refLocalId="28">
+ <position x="569" y="879"/>
+ <position x="569" y="816"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut>
+ <relPosition x="10" y="2"/>
+ </connectionPointOut>
+ <condition>
+ <inline name="">
+ <ST>
+ <xhtml:p><![CDATA[ALLOW_CARS]]></xhtml:p>
+ </ST>
+ </inline>
+ </condition>
+ </transition>
+ <step localId="30" height="33" width="92" name="GREEN">
+ <position x="523" y="930"/>
+ <connectionPointIn>
+ <relPosition x="46" y="0"/>
+ <connection refLocalId="29">
+ <position x="569" y="930"/>
+ <position x="569" y="881"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut formalParameter="">
+ <relPosition x="46" y="33"/>
+ </connectionPointOut>
+ <connectionPointOutAction formalParameter="">
+ <relPosition x="92" y="16"/>
+ </connectionPointOutAction>
+ </step>
+ <actionBlock localId="31" width="227" height="110">
+ <position x="709" y="931"/>
+ <connectionPointIn>
+ <relPosition x="0" y="15"/>
+ <connection refLocalId="30">
+ <position x="709" y="946"/>
+ <position x="615" y="946"/>
+ </connection>
+ </connectionPointIn>
+ <action localId="0" qualifier="S">
+ <relPosition x="0" y="0"/>
+ <reference name="GREEN_LIGHT"/>
+ </action>
+ <action localId="0" qualifier="R">
+ <relPosition x="0" y="0"/>
+ <reference name="RED_LIGHT"/>
+ </action>
+ <action localId="0" qualifier="D" duration="T#20s">
+ <relPosition x="0" y="0"/>
+ <reference name="WARN_CARS"/>
+ </action>
+ </actionBlock>
+ <block localId="32" width="89" height="94" typeName="TON" instanceName="TON3">
+ <position x="308" y="1053"/>
+ <inputVariables>
+ <variable formalParameter="IN">
+ <connectionPointIn>
+ <relPosition x="0" y="38"/>
+ <connection refLocalId="44" formalParameter="Q1">
+ <position x="308" y="1091"/>
+ <position x="291" y="1091"/>
+ <position x="291" y="1065"/>
+ <position x="275" y="1065"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="PT">
+ <connectionPointIn>
+ <relPosition x="0" y="75"/>
+ <connection refLocalId="34">
+ <position x="308" y="1128"/>
+ <position x="270" y="1128"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="Q">
+ <connectionPointOut>
+ <relPosition x="89" y="38"/>
+ </connectionPointOut>
+ </variable>
+ <variable formalParameter="ET">
+ <connectionPointOut>
+ <relPosition x="89" y="75"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <inVariable localId="33" height="36" width="168" negated="false">
+ <position x="15" y="1047"/>
+ <connectionPointOut>
+ <relPosition x="168" y="18"/>
+ </connectionPointOut>
+ <expression>PEDESTRIAN_BUTTON</expression>
+ </inVariable>
+ <inVariable localId="34" height="33" width="53" negated="false">
+ <position x="217" y="1112"/>
+ <connectionPointOut>
+ <relPosition x="53" y="16"/>
+ </connectionPointOut>
+ <expression>T#2s</expression>
+ </inVariable>
+ <block localId="35" width="67" height="60" typeName="OR">
+ <position x="459" y="1061"/>
+ <inputVariables>
+ <variable formalParameter="IN1">
+ <connectionPointIn>
+ <relPosition x="0" y="30"/>
+ <connection refLocalId="32" formalParameter="Q">
+ <position x="459" y="1091"/>
+ <position x="397" y="1091"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN2">
+ <connectionPointIn>
+ <relPosition x="0" y="50"/>
+ <connection refLocalId="36">
+ <position x="459" y="1111"/>
+ <position x="427" y="1111"/>
+ <position x="427" y="1195"/>
+ <position x="260" y="1195"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="OUT">
+ <connectionPointOut>
+ <relPosition x="67" y="30"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <inVariable localId="36" height="30" width="97" negated="false">
+ <position x="163" y="1182"/>
+ <connectionPointOut>
+ <relPosition x="97" y="15"/>
+ </connectionPointOut>
+ <expression>WARN_CARS</expression>
+ </inVariable>
+ <transition localId="37" height="2" width="20">
+ <position x="559" y="1090"/>
+ <connectionPointIn>
+ <relPosition x="10" y="0"/>
+ <connection refLocalId="38">
+ <position x="569" y="1090"/>
+ <position x="569" y="1060"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut>
+ <relPosition x="10" y="2"/>
+ </connectionPointOut>
+ <condition>
+ <connectionPointIn>
+ <connection refLocalId="35" formalParameter="OUT">
+ <position x="559" y="1091"/>
+ <position x="526" y="1091"/>
+ </connection>
+ </connectionPointIn>
+ </condition>
+ </transition>
+ <selectionDivergence localId="38" height="1" width="207">
+ <position x="569" y="1059"/>
+ <connectionPointIn>
+ <relPosition x="0" y="0"/>
+ <connection refLocalId="30">
+ <position x="569" y="1059"/>
+ <position x="569" y="963"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut formalParameter="">
+ <relPosition x="0" y="1"/>
+ </connectionPointOut>
+ <connectionPointOut formalParameter="">
+ <relPosition x="207" y="1"/>
+ </connectionPointOut>
+ </selectionDivergence>
+ <transition localId="39" height="2" width="20">
+ <position x="766" y="1095"/>
+ <connectionPointIn>
+ <relPosition x="10" y="0"/>
+ <connection refLocalId="38">
+ <position x="776" y="1095"/>
+ <position x="776" y="1060"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut>
+ <relPosition x="10" y="2"/>
+ </connectionPointOut>
+ <condition>
+ <inline name="">
+ <ST>
+ <xhtml:p><![CDATA[NOT SWITCH_BUTTON]]></xhtml:p>
+ </ST>
+ </inline>
+ </condition>
+ </transition>
+ <jumpStep localId="41" height="13" width="12" targetName="ORANGE">
+ <position x="563" y="1137"/>
+ <connectionPointIn>
+ <relPosition x="6" y="0"/>
+ <connection refLocalId="37">
+ <position x="569" y="1137"/>
+ <position x="569" y="1092"/>
+ </connection>
+ </connectionPointIn>
+ </jumpStep>
+ <block localId="44" width="51" height="60" typeName="SR" instanceName="SR0">
+ <position x="224" y="1035"/>
+ <inputVariables>
+ <variable formalParameter="S1">
+ <connectionPointIn>
+ <relPosition x="0" y="30"/>
+ <connection refLocalId="33">
+ <position x="224" y="1065"/>
+ <position x="183" y="1065"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="R">
+ <connectionPointIn>
+ <relPosition x="0" y="50"/>
+ <connection refLocalId="32" formalParameter="Q">
+ <position x="224" y="1085"/>
+ <position x="203" y="1085"/>
+ <position x="203" y="1167"/>
+ <position x="416" y="1167"/>
+ <position x="416" y="1091"/>
+ <position x="397" y="1091"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="Q1">
+ <connectionPointOut>
+ <relPosition x="51" y="30"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <comment localId="45" height="767" width="753">
+ <position x="973" y="21"/>
+ <content>
+ <xhtml:p><![CDATA[*** Description of SFC action qualifiers ***
+
+N : non-stored - The action code body is executed or the Boolean variable is set as
+long as the step is active.
+
+R : overriding reset &#8211; When the step has previously been executed with the S
+(including DS, DS, and SL) qualifier, the R qualifier will stop the execution of the
+code or reset the Boolean variable.
+
+S : set (stored) - The action code body is executed or the Boolean variable is set.
+This state is stored as soon as the step becomes active. It can only be reset
+explicitly by associating the same action to a different step using the qualifier 'R'.
+
+L : time limited - The action code body is executed or the Boolean variable is set as
+long as the step is active but maximal for the fixed time interval.
+
+D : time delayed - The action code body is executed or the Boolean variable is set
+after the fixed delay time has elapsed. The action remains active as long as the step
+is active. If the step is active shorter than the fixed delay time the action does not
+become active.
+
+P : pulse - As soon as the step is active the action code body is executed or the
+Boolean variable is set for one operating cycle. (Note: The code body will then
+execute for one additional operating cycle with the Step.X variable FALSE.)
+
+SD : stored and time delayed - the action code body is executed or the Boolean
+variable is stored and set when the fixed delay time has elapsed after the step
+activation, even if the step becomes inactive. The action remains active until it is
+reset. If the step is active shorter than the fixed delay time the action becomes active
+anyway.
+
+DS : delayed and stored - The action code body is executed or the Boolean variable
+is set when the fixed delay time has elapsed after the step activation. The action
+remains active until it is reset. If the step is active shorter than the fixed delay time
+the action does not become active.
+
+SL : stored and time limited - The action code body is executed or the Boolean
+variable is set and stored for a fixed time interval as soon as the step is active. If the
+step is active shorter than the time interval the action is active for the whole time
+interval anyway. If the action is reset during the time interval the action becomes
+inactive as soon as the action is reset.
+]]></xhtml:p>
+ </content>
+ </comment>
+ <comment localId="46" height="224" width="375">
+ <position x="8" y="326"/>
+ <content>
+ <xhtml:p><![CDATA[Conditions can be written in any IEC 61131-3 language.
+They can be implemented in defferent ways:
+- reference to external implementation;
+- inline implementation;
+- written in FBD or LD on SFC diagram and connected to the condition.
+
+See below examples of all these types.]]></xhtml:p>
+ </content>
+ </comment>
+ <leftPowerRail localId="47" height="40" width="3">
+ <position x="189" y="838"/>
+ <connectionPointOut formalParameter="">
+ <relPosition x="3" y="20"/>
+ </connectionPointOut>
+ </leftPowerRail>
+ <contact localId="48" height="15" width="21" negated="true">
+ <position x="269" y="850"/>
+ <connectionPointIn>
+ <relPosition x="0" y="8"/>
+ <connection refLocalId="47">
+ <position x="269" y="858"/>
+ <position x="192" y="858"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut>
+ <relPosition x="21" y="8"/>
+ </connectionPointOut>
+ <variable>SWITCH_BUTTON</variable>
+ </contact>
+ <comment localId="13" height="86" width="379">
+ <position x="9" y="28"/>
+ <content>
+ <xhtml:p><![CDATA[Sequential function chart (SFC) is commonly used to describe state machines.]]></xhtml:p>
+ </content>
+ </comment>
+ </SFC>
+ </body>
+ </pou>
+ <pou name="main_program" pouType="program">
+ <interface>
+ <localVars>
+ <variable name="trafic_light_sequence0">
+ <type>
+ <derived name="traffic_light_sequence"/>
+ </type>
+ </variable>
+ <variable name="SwitchButton">
+ <type>
+ <derived name="HMI_BOOL"/>
+ </type>
+ </variable>
+ <variable name="PedestrianButton">
+ <type>
+ <derived name="HMI_BOOL"/>
+ </type>
+ </variable>
+ <variable name="RedLight">
+ <type>
+ <derived name="HMI_BOOL"/>
+ </type>
+ </variable>
+ <variable name="OrangeLight">
+ <type>
+ <derived name="HMI_BOOL"/>
+ </type>
+ </variable>
+ <variable name="GreenLight">
+ <type>
+ <derived name="HMI_BOOL"/>
+ </type>
+ </variable>
+ <variable name="PedestrianRedLight">
+ <type>
+ <derived name="HMI_BOOL"/>
+ </type>
+ </variable>
+ <variable name="PedestrianGreenLight">
+ <type>
+ <derived name="HMI_BOOL"/>
+ </type>
+ </variable>
+ <variable name="Block1">
+ <type>
+ <derived name="python_eval"/>
+ </type>
+ </variable>
+ </localVars>
+ </interface>
+ <body>
+ <FBD>
+ <block localId="1" width="350" height="836" typeName="traffic_light_sequence" instanceName="trafic_light_sequence0" executionOrderId="0">
+ <position x="494" y="462"/>
+ <inputVariables>
+ <variable formalParameter="SWITCH_BUTTON">
+ <connectionPointIn>
+ <relPosition x="0" y="101"/>
+ <connection refLocalId="103">
+ <position x="494" y="563"/>
+ <position x="470" y="563"/>
+ <position x="470" y="564"/>
+ <position x="446" y="564"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="PEDESTRIAN_BUTTON">
+ <connectionPointIn>
+ <relPosition x="0" y="264"/>
+ <connection refLocalId="104">
+ <position x="494" y="726"/>
+ <position x="466" y="726"/>
+ <position x="466" y="727"/>
+ <position x="438" y="727"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="RED_LIGHT">
+ <connectionPointOut>
+ <relPosition x="350" y="101"/>
+ </connectionPointOut>
+ </variable>
+ <variable formalParameter="ORANGE_LIGHT">
+ <connectionPointOut>
+ <relPosition x="350" y="264"/>
+ </connectionPointOut>
+ </variable>
+ <variable formalParameter="GREEN_LIGHT">
+ <connectionPointOut>
+ <relPosition x="350" y="427"/>
+ </connectionPointOut>
+ </variable>
+ <variable formalParameter="PEDESTRIAN_RED_LIGHT">
+ <connectionPointOut>
+ <relPosition x="350" y="590"/>
+ </connectionPointOut>
+ </variable>
+ <variable formalParameter="PEDESTRIAN_GREEN_LIGHT">
+ <connectionPointOut>
+ <relPosition x="350" y="753"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <comment localId="24" height="287" width="1008">
+ <position x="22" y="13"/>
+ <content>
+ <xhtml:p><![CDATA[This example implements control of traffic lights.
+
+Basically it shows following features of Beremiz:
+- web interface (SCADA) using integrated web server in SVGHMI extension;
+- interaction with web UI;
+- functional blocks in SFC language.
+
+
+
+
+SVGHMI is extensions to build web interface to PLC. It has *integrated* web-server. So it's NOT necessary to install Apache, lighttpd or nginx for that!!!
+
+As the program is running in PLC, web UI will be available at http://localhost:8009/.
+
+Web interface is build as SVG file in Inkscape. To edit SVG file click 'Inkscape' button in 0x: SVGHMI extension.
+Inkscape is a free and open-source vector graphics editor. It's not part of Beremiz and needs to be installed separately.
+]]></xhtml:p>
+ </content>
+ </comment>
+ <comment localId="102" height="134" width="734">
+ <position x="21" y="303"/>
+ <content>
+ <xhtml:p><![CDATA[In this example FB like 'Button', 'Led' and 'Text' are used.
+Back_id and sele_id inputs of these blocks are IDs of graphic primitives in SVG file.
+This is the way how elements in SVG are bound to elements in PLC program.
+You can find out or edit these IDs in Inkscape.]]></xhtml:p>
+ </content>
+ </comment>
+ <inVariable localId="103" executionOrderId="0" height="27" width="106" negated="false">
+ <position x="340" y="551"/>
+ <connectionPointOut>
+ <relPosition x="106" y="13"/>
+ </connectionPointOut>
+ <expression>SwitchButton</expression>
+ </inVariable>
+ <inVariable localId="104" executionOrderId="0" height="27" width="138" negated="false">
+ <position x="300" y="714"/>
+ <connectionPointOut>
+ <relPosition x="138" y="13"/>
+ </connectionPointOut>
+ <expression>PedestrianButton</expression>
+ </inVariable>
+ <outVariable localId="105" executionOrderId="0" height="27" width="74" negated="false">
+ <position x="891" y="551"/>
+ <connectionPointIn>
+ <relPosition x="0" y="13"/>
+ <connection refLocalId="1" formalParameter="RED_LIGHT">
+ <position x="891" y="564"/>
+ <position x="867" y="564"/>
+ <position x="867" y="563"/>
+ <position x="844" y="563"/>
+ </connection>
+ </connectionPointIn>
+ <expression>RedLight</expression>
+ </outVariable>
+ <outVariable localId="106" executionOrderId="0" height="27" width="98" negated="false">
+ <position x="880" y="714"/>
+ <connectionPointIn>
+ <relPosition x="0" y="13"/>
+ <connection refLocalId="1" formalParameter="ORANGE_LIGHT">
+ <position x="880" y="727"/>
+ <position x="862" y="727"/>
+ <position x="862" y="726"/>
+ <position x="844" y="726"/>
+ </connection>
+ </connectionPointIn>
+ <expression>OrangeLight</expression>
+ </outVariable>
+ <outVariable localId="107" executionOrderId="0" height="27" width="90" negated="false">
+ <position x="881" y="876"/>
+ <connectionPointIn>
+ <relPosition x="0" y="13"/>
+ <connection refLocalId="1" formalParameter="GREEN_LIGHT">
+ <position x="881" y="889"/>
+ <position x="844" y="889"/>
+ </connection>
+ </connectionPointIn>
+ <expression>GreenLight</expression>
+ </outVariable>
+ <outVariable localId="108" executionOrderId="0" height="27" width="154" negated="false">
+ <position x="882" y="1040"/>
+ <connectionPointIn>
+ <relPosition x="0" y="13"/>
+ <connection refLocalId="1" formalParameter="PEDESTRIAN_RED_LIGHT">
+ <position x="882" y="1053"/>
+ <position x="863" y="1053"/>
+ <position x="863" y="1052"/>
+ <position x="844" y="1052"/>
+ </connection>
+ </connectionPointIn>
+ <expression>PedestrianRedLight</expression>
+ </outVariable>
+ <outVariable localId="109" executionOrderId="0" height="27" width="170" negated="false">
+ <position x="873" y="1203"/>
+ <connectionPointIn>
+ <relPosition x="0" y="13"/>
+ <connection refLocalId="1" formalParameter="PEDESTRIAN_GREEN_LIGHT">
+ <position x="873" y="1216"/>
+ <position x="858" y="1216"/>
+ <position x="858" y="1215"/>
+ <position x="844" y="1215"/>
+ </connection>
+ </connectionPointIn>
+ <expression>PedestrianGreenLight</expression>
+ </outVariable>
+ <inVariable localId="9" height="30" width="490" executionOrderId="0" negated="false">
+ <position x="874" y="644"/>
+ <connectionPointOut>
+ <relPosition x="490" y="15"/>
+ </connectionPointOut>
+ <expression>'sys.stdout.write("ALL GREEN LIGHTS\n"), sys.stdout.flush()'</expression>
+ </inVariable>
+ <block localId="8" width="125" height="80" typeName="python_eval" instanceName="Block1" executionOrderId="0">
+ <position x="1425" y="594"/>
+ <inputVariables>
+ <variable formalParameter="TRIG">
+ <connectionPointIn>
+ <relPosition x="0" y="35"/>
+ <connection refLocalId="1" formalParameter="RED_LIGHT">
+ <position x="1425" y="629"/>
+ <position x="866" y="629"/>
+ <position x="866" y="563"/>
+ <position x="844" y="563"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="CODE">
+ <connectionPointIn>
+ <relPosition x="0" y="65"/>
+ <connection refLocalId="9">
+ <position x="1425" y="659"/>
+ <position x="1356" y="659"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="ACK">
+ <connectionPointOut>
+ <relPosition x="125" y="35"/>
+ </connectionPointOut>
+ </variable>
+ <variable formalParameter="RESULT">
+ <connectionPointOut>
+ <relPosition x="125" y="65"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ </FBD>
+ </body>
+ </pou>
+ </pous>
+ </types>
+ <instances>
+ <configurations>
+ <configuration name="config">
+ <resource name="resource1">
+ <task name="test_task" interval="T#100ms" priority="0">
+ <pouInstance name="main_instance" typeName="main_program"/>
+ </task>
+ </resource>
+ </configuration>
+ </configurations>
+ </instances>
+</project>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/projects/svghmi_basic/svghmi_0@svghmi/baseconfnode.xml Tue Aug 01 21:04:00 2023 +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"/>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/projects/svghmi_basic/svghmi_0@svghmi/confnode.xml Tue Aug 01 21:04:00 2023 +0200
@@ -0,0 +1,2 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SVGHMI xmlns:xsd="http://www.w3.org/2001/XMLSchema" WatchdogInitial="10" WatchdogInterval="5" EnableWatchdog="true" Path="{name}" OnStart="chromium-browser --no-sandbox --test-type --single-process --start-fullscreen {url}"/>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/projects/svghmi_basic/svghmi_0@svghmi/svghmi.svg Tue Aug 01 21:04:00 2023 +0200
@@ -0,0 +1,1551 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1920"
+ height="1080"
+ id="svg2"
+ version="1.1"
+ inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+ sodipodi:docname="svghmi.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective23716" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective23669" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective23629" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective23580" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective23540" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective23506" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective23466" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective23432" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective23330" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective23257" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective23226" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective23189" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective23118" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective23081" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective23044" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective22995" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective22946" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective22891" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective22866" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective22829" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective22795" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective22692" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective22661" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective22630" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective22569" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective22532" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective22501" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective22470" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective22403" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective22318" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective22290" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective22265" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective22090" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective22002" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective21911" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective21856" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective21831" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective21776" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective21745" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective21654" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective21626" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective21580" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective21549" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective21518" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective21418" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective21338" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective21250" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective19662" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective19613" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective19555" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective19494" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective19325" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective19285" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective19247" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective19201" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective19155" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective19106" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective19050" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18979" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18945" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18911" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18841" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18807" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18767" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18727" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18693" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18662" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18613" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18555" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18518" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18475" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18429" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18377" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18322" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18273" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18239" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18193" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18150" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18104" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18061" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective18021" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17978" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17950" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17868" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17840" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17812" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17784" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17756" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17728" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17700" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17636" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17605" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17574" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17543" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17512" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17475" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17420" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17386" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17322" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17261" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17212" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17163" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17120" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17074" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective17046" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16994" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16951" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16896" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16856" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16822" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16794" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16766" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16738" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16689" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16640" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16594" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16548" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16493" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16438" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16401" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16370" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16321" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16242" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16187" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16156" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16101" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16061" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective16027" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective15972" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective15860" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective15826" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective15789" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective15737" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective15676" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective15627" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective15569" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective15532" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective15477" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective15440" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective15403" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective15360" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective15320" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective15283" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective15207" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective15158" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective15121" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective15084" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective15041" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective14998" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective14949" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective14906" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective14863" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective14823" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective14783" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective14743" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective14703" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective14642" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective14572" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective14461" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective14421" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective14365" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective14328" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective14291" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective14254" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective14217" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective14174" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective14137" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective14100" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective14057" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective14020" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective13983" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective13946" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective13909" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 840.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 840.5 : 1"
+ inkscape:persp3d-origin="0.5 : 840.33333 : 1"
+ id="perspective13862" />
+ <inkscape:perspective
+ id="perspective13880"
+ inkscape:persp3d-origin="372.04724 : 1190.7874 : 1"
+ inkscape:vp_z="744.09448 : 1366.1811 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 1366.1811 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.9899495"
+ inkscape:cx="712.66262"
+ inkscape:cy="380.32243"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="3840"
+ inkscape:window-height="2096"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:pagecheckerboard="0" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(37.474617,-760.93329)">
+ <rect
+ style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:5.19615;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
+ id="rect250"
+ width="1920"
+ height="1080"
+ x="-37.474617"
+ y="760.93329"
+ inkscape:label="HMI:Page:Home" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#282828;fill-opacity:1;stroke:none;stroke-width:8.16464;marker:none;enable-background:accumulate"
+ d="m 889.54887,843.77425 v 519.99995 h 75.74999 v 374.2501 h 22.87504 v -245.625 h 35.625 v 62.875 h 145.75 v -130 h -145.75 v 48.5 h -35.625 v -110 h 87.125 V 843.77425 Z"
+ id="rect2985"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccccccc" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffac2c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8.16464;marker:none;enable-background:accumulate"
+ id="rect3761"
+ width="78.571426"
+ height="75.714287"
+ x="936.70953"
+ y="1596.6492"
+ ry="14.285714" />
+ <g
+ id="g244"
+ inkscape:label="HMI:Switch@/REDLIGHT"
+ transform="matrix(4,0,0,4,432.42386,-2222.7999)">
+ <circle
+ r="13.214286"
+ cy="63.92857"
+ cx="76.071426"
+ transform="translate(61.071429,724.14799)"
+ id="RED_OFF"
+ style="color:#000000;overflow:visible;visibility:visible;fill:#505050;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.041;marker:none;enable-background:accumulate"
+ inkscape:label="false" />
+ <circle
+ r="13.214286"
+ cy="63.92857"
+ cx="76.071426"
+ transform="translate(61.07143,724.14799)"
+ id="RED_ON"
+ style="color:#000000;overflow:visible;visibility:visible;fill:#e20f10;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.041;marker:none;enable-background:accumulate"
+ inkscape:label="true" />
+ </g>
+ <g
+ id="g248"
+ inkscape:label="HMI:Switch@/ORANGELIGHT"
+ transform="matrix(4,0,0,4,432.42386,-2222.7999)">
+ <circle
+ r="13.214286"
+ cy="63.92857"
+ cx="76.071426"
+ transform="translate(61.071429,764.14799)"
+ id="ORANGE_OFF"
+ style="color:#000000;overflow:visible;visibility:visible;fill:#505050;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.041;marker:none;enable-background:accumulate"
+ inkscape:label="false" />
+ <circle
+ r="13.214286"
+ cy="63.92857"
+ cx="76.071426"
+ transform="translate(61.07143,764.14799)"
+ id="ORANGE_ON"
+ style="color:#000000;overflow:visible;visibility:visible;fill:#f06414;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.041;marker:none;enable-background:accumulate"
+ inkscape:label="true" />
+ </g>
+ <g
+ id="g240"
+ inkscape:label="HMI:Switch@/GREENLIGHT"
+ transform="matrix(4,0,0,4,432.42386,-2222.7999)">
+ <circle
+ r="13.214286"
+ cy="63.92857"
+ cx="76.071426"
+ transform="translate(61.071429,804.14799)"
+ id="GREEN_OFF"
+ style="color:#000000;overflow:visible;visibility:visible;fill:#505050;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.041;marker:none;enable-background:accumulate"
+ inkscape:label="false" />
+ <circle
+ r="13.214286"
+ cy="63.92857"
+ cx="76.071426"
+ transform="translate(61.07143,804.14799)"
+ id="GREEN_ON"
+ style="color:#000000;overflow:visible;visibility:visible;fill:#50a00e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.041;marker:none;enable-background:accumulate"
+ inkscape:label="true" />
+ </g>
+ <g
+ id="g224"
+ inkscape:label="HMI:Button@/PEDESTRIANBUTTON"
+ transform="matrix(4,0,0,4,432.42386,-2382.7999)">
+ <circle
+ r="5.3571429"
+ cy="252.5"
+ cx="136.78572"
+ transform="matrix(1.3666667,0,0,1.3666667,-51.047621,659.24323)"
+ id="PEDESTRIAN_OFF"
+ style="color:#000000;overflow:visible;visibility:visible;fill:#e20f10;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.041;marker:none;enable-background:accumulate"
+ inkscape:label="inactive" />
+ <circle
+ r="5.3571429"
+ cy="252.5"
+ cx="136.78572"
+ transform="matrix(1.2333334,0,0,1.2333334,-32.809525,692.9099)"
+ id="PEDESTRIAN_ON"
+ style="color:#000000;overflow:visible;visibility:visible;fill:#e20f10;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.041;marker:none;enable-background:accumulate"
+ inkscape:label="active" />
+ </g>
+ <g
+ id="g232"
+ inkscape:label="HMI:Switch@/PEDESTRIANREDLIGHT"
+ transform="matrix(4,0,0,4,432.42386,-2302.7999)">
+ <path
+ inkscape:connector-curvature="0"
+ id="PEDESTRIAN_RED_OFF"
+ style="fill:#505050;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 157.9184,937.65033 c 0.98406,-0.0329 1.66207,0.64458 1.66207,1.76564 0,1.1159 -0.57443,1.01655 -0.57443,1.38898 0,0.40492 0.23543,1.04997 1.08294,1.45489 0.9511,0.47555 1.49256,0.71568 1.72797,2.10466 0.20247,1.25196 0.33901,4.06805 0.33901,4.06805 0.0329,0.37197 -0.13654,1.32259 0,1.55848 0.27309,0.50851 -0.0329,1.18652 -0.37196,0.98405 -0.37197,-0.20246 -0.78159,-0.678 -0.67801,-1.04997 0.0989,-0.4101 0,-0.84751 -0.0329,-1.08764 -0.0707,-0.23541 -0.0707,-2.91449 -0.57914,-3.08399 -0.26837,-0.0659 -0.1695,2.26944 0.033,3.45596 0.10358,0.5457 0.10358,3.3566 0.10358,4.27474 0,0.88095 -0.20246,3.31942 -0.0659,3.72953 0.16951,0.37196 1.38898,0.97935 1.38898,1.42193 0,0.44259 -0.57443,0.339 -1.01702,0.27262 -0.40963,-0.0372 -1.89748,-0.64458 -2.00106,-1.76565 -0.10359,-1.11542 -0.13654,-5.08459 -0.57443,-7.2175 l -0.1695,2.26945 c 0,0 -0.0377,3.5925 -0.13654,4.27004 -0.10359,0.71097 -0.40493,1.83204 -0.78159,2.13808 -0.16951,0.13655 -1.69503,0.67801 -1.89749,0.50851 -0.40492,-0.339 -0.40492,-0.6121 0.0707,-0.98406 0.47083,-0.40539 0.71096,-0.61209 0.74392,-1.52552 0.0659,-0.88047 0,-2.60892 -0.0329,-3.28646 -0.0707,-0.71567 -0.13654,-3.69608 -0.10358,-4.10571 0.44259,-2.81091 -0.0989,-3.55955 -0.0989,-3.55955 l -0.40963,2.54254 c -0.033,1.08763 -0.0989,1.42664 -0.13655,2.00059 -0.0659,0.78206 -0.43788,1.18652 -0.71096,0.81455 -0.23543,-0.40444 -0.43788,-1.83109 -0.33901,-2.09994 0.10358,-0.30557 -0.0989,-0.95063 0.0707,-1.69455 0.13183,-0.71568 0.26838,-2.91921 0.30134,-3.18759 0.0706,-0.24013 0.10358,-0.88093 0.88046,-1.2901 0.7816,-0.37196 1.25714,-1.01748 1.35602,-1.55847 0.13655,-0.54147 -0.54147,-1.08341 -0.50851,-1.86453 0.0707,-0.9511 0.24014,-1.6291 1.4596,-1.66206"
+ inkscape:label="false" />
+ <path
+ inkscape:connector-curvature="0"
+ id="PEDESTRIAN_RED_ON"
+ style="fill:#e20f10;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 157.9184,937.65033 c 0.98406,-0.0329 1.66207,0.64458 1.66207,1.76564 0,1.1159 -0.57443,1.01655 -0.57443,1.38898 0,0.40492 0.23543,1.04997 1.08294,1.45489 0.9511,0.47555 1.49256,0.71568 1.72797,2.10466 0.20247,1.25196 0.33901,4.06805 0.33901,4.06805 0.0329,0.37197 -0.13654,1.32259 0,1.55848 0.27309,0.50851 -0.0329,1.18652 -0.37196,0.98405 -0.37197,-0.20246 -0.78159,-0.678 -0.67801,-1.04997 0.0989,-0.4101 0,-0.84751 -0.0329,-1.08764 -0.0707,-0.23541 -0.0707,-2.91449 -0.57914,-3.08399 -0.26837,-0.0659 -0.1695,2.26944 0.033,3.45596 0.10358,0.5457 0.10358,3.3566 0.10358,4.27474 0,0.88095 -0.20246,3.31942 -0.0659,3.72953 0.16951,0.37196 1.38898,0.97935 1.38898,1.42193 0,0.44259 -0.57443,0.339 -1.01702,0.27262 -0.40963,-0.0372 -1.89748,-0.64458 -2.00106,-1.76565 -0.10359,-1.11542 -0.13654,-5.08459 -0.57443,-7.2175 l -0.1695,2.26945 c 0,0 -0.0377,3.5925 -0.13654,4.27004 -0.10359,0.71097 -0.40493,1.83204 -0.78159,2.13808 -0.16951,0.13655 -1.69503,0.67801 -1.89749,0.50851 -0.40492,-0.339 -0.40492,-0.6121 0.0707,-0.98406 0.47083,-0.40539 0.71096,-0.61209 0.74392,-1.52552 0.0659,-0.88047 0,-2.60892 -0.0329,-3.28646 -0.0707,-0.71567 -0.13654,-3.69608 -0.10358,-4.10571 0.44259,-2.81091 -0.0989,-3.55955 -0.0989,-3.55955 l -0.40963,2.54254 c -0.033,1.08763 -0.0989,1.42664 -0.13655,2.00059 -0.0659,0.78206 -0.43788,1.18652 -0.71096,0.81455 -0.23543,-0.40444 -0.43788,-1.83109 -0.33901,-2.09994 0.10358,-0.30557 -0.0989,-0.95063 0.0707,-1.69455 0.13183,-0.71568 0.26838,-2.91921 0.30134,-3.18759 0.0706,-0.24013 0.10358,-0.88093 0.88046,-1.2901 0.7816,-0.37196 1.25714,-1.01748 1.35602,-1.55847 0.13655,-0.54147 -0.54147,-1.08341 -0.50851,-1.86453 0.0707,-0.9511 0.24014,-1.6291 1.4596,-1.66206"
+ inkscape:label="true" />
+ </g>
+ <g
+ id="g228"
+ inkscape:label="HMI:Switch@/PEDESTRIANGREENLIGHT"
+ transform="matrix(4,0,0,4,432.42386,-2302.7999)">
+ <path
+ inkscape:connector-curvature="0"
+ id="PEDESTRIAN_GREEN_OFF"
+ style="fill:#505050;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 171.65012,940.43176 c -0.3444,-0.68878 -0.41136,-2.7886 1.13839,-2.7886 1.10014,0 1.44453,1.82718 1.51628,2.06634 0.067,0.27743 -0.41614,1.23885 0.067,1.68847 0.44962,0.44482 2.03285,1.75542 2.7886,2.78859 0.72226,0.89399 0.89446,4.68227 0.89446,5.0654 0,0.75575 -0.65052,0.82223 -0.86097,-0.0383 -0.33962,-1.37757 -1.06666,-3.20044 -1.58324,-3.61611 0.34439,1.06667 -0.27264,2.54897 -0.13873,3.4439 0.21047,1.31059 0.13873,2.85988 0.86577,3.82176 0.684,0.93273 2.33898,3.37694 2.71685,3.65437 0.41613,0.23868 0.79402,0.61656 0.48311,0.89446 -0.3444,0.23915 -1.65499,1.54975 -1.92763,1.47799 -0.27743,-0.067 -0.0718,-0.58401 0.13871,-0.96141 0,-0.31092 0.067,-0.58355 -0.99969,-1.68847 -1.06665,-1.10012 -2.44421,-3.44389 -2.72163,-4.02744 -0.27743,-0.55533 -0.72227,-0.62182 -1.1384,-0.31138 -0.37787,0.31138 -1.65019,3.16694 -1.8224,3.61656 -0.20568,0.44436 -0.75573,1.96063 -0.75573,2.47721 0,0.51707 0.13392,0.65579 -0.31092,0.89493 -0.4831,0.27743 -1.65497,0.72706 -2.34375,0.21047 -0.1722,-0.27742 0.27742,-0.44961 0.55007,-0.58833 0.2774,-0.13871 0.72225,-1.10013 0.86095,-2.20027 0.13872,-1.1054 0.44963,-2.86082 0.93273,-4.41057 0.44484,-1.54929 1.51627,-1.9989 1.58324,-2.482 0.067,-0.44484 0.6553,-2.06682 0.20567,-3.02776 -0.20567,-0.20567 -0.067,0.2052 -0.72226,0.86098 -0.41135,0.37786 -1.48278,1.41103 -2.23852,1.82238 -0.79402,0.41615 -0.89446,-0.3396 -0.96621,-0.47831 -0.20567,-0.3109 1.65498,-1.54977 1.9324,-1.9324 0.27265,-0.41137 1.06665,-2.13331 1.13362,-2.78909 0.067,-0.65482 1.17187,-2.47721 0.72226,-3.44342"
+ inkscape:label="false" />
+ <path
+ inkscape:connector-curvature="0"
+ id="PEDESTRIAN_GREEN_ON"
+ style="fill:#50a00e;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 171.65012,940.43176 c -0.3444,-0.68878 -0.41136,-2.7886 1.13839,-2.7886 1.10014,0 1.44453,1.82718 1.51628,2.06634 0.067,0.27743 -0.41614,1.23885 0.067,1.68847 0.44962,0.44482 2.03285,1.75542 2.7886,2.78859 0.72226,0.89399 0.89446,4.68227 0.89446,5.0654 0,0.75575 -0.65052,0.82223 -0.86097,-0.0383 -0.33962,-1.37757 -1.06666,-3.20044 -1.58324,-3.61611 0.34439,1.06667 -0.27264,2.54897 -0.13873,3.4439 0.21047,1.31059 0.13873,2.85988 0.86577,3.82176 0.684,0.93273 2.33898,3.37694 2.71685,3.65437 0.41613,0.23868 0.79402,0.61656 0.48311,0.89446 -0.3444,0.23915 -1.65499,1.54975 -1.92763,1.47799 -0.27743,-0.067 -0.0718,-0.58401 0.13871,-0.96141 0,-0.31092 0.067,-0.58355 -0.99969,-1.68847 -1.06665,-1.10012 -2.44421,-3.44389 -2.72163,-4.02744 -0.27743,-0.55533 -0.72227,-0.62182 -1.1384,-0.31138 -0.37787,0.31138 -1.65019,3.16694 -1.8224,3.61656 -0.20568,0.44436 -0.75573,1.96063 -0.75573,2.47721 0,0.51707 0.13392,0.65579 -0.31092,0.89493 -0.4831,0.27743 -1.65497,0.72706 -2.34375,0.21047 -0.1722,-0.27742 0.27742,-0.44961 0.55007,-0.58833 0.2774,-0.13871 0.72225,-1.10013 0.86095,-2.20027 0.13872,-1.1054 0.44963,-2.86082 0.93273,-4.41057 0.44484,-1.54929 1.51627,-1.9989 1.58324,-2.482 0.067,-0.44484 0.6553,-2.06682 0.20567,-3.02776 -0.20567,-0.20567 -0.067,0.2052 -0.72226,0.86098 -0.41135,0.37786 -1.48278,1.41103 -2.23852,1.82238 -0.79402,0.41615 -0.89446,-0.3396 -0.96621,-0.47831 -0.20567,-0.3109 1.65498,-1.54977 1.9324,-1.9324 0.27265,-0.41137 1.06665,-2.13331 1.13362,-2.78909 0.067,-0.65482 1.17187,-2.47721 0.72226,-3.44342"
+ inkscape:label="true" />
+ </g>
+ <g
+ id="g220"
+ inkscape:label="HMI:ToggleButton@/SWITCHBUTTON"
+ transform="matrix(4,0,0,4,432.42386,-2222.7999)">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
+ id="rect1559"
+ width="72.710266"
+ height="59.289749"
+ x="7.6521072"
+ y="774.39429" />
+ <g
+ transform="rotate(-90,37.09909,809.86228)"
+ id="SWITCH_OFF"
+ inkscape:label="inactive">
+ <circle
+ r="16.785715"
+ cy="57.5"
+ cx="37.142857"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#e9ddaf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate"
+ id="path4546"
+ transform="translate(0,752.36228)" />
+ <ellipse
+ ry="3.75"
+ rx="16.964287"
+ cy="57.857143"
+ cx="38.214287"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#e9ddaf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ id="path4548"
+ transform="matrix(0.98958091,0,0,1,-0.76159828,752.36228)" />
+ <path
+ sodipodi:type="star"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ id="path4552"
+ sodipodi:sides="3"
+ sodipodi:cx="52.142857"
+ sodipodi:cy="89.285713"
+ sodipodi:r1="2.7027807"
+ sodipodi:r2="1.4117311"
+ sodipodi:arg1="-0.0025098425"
+ sodipodi:arg2="1.0446877"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 54.845629,89.27893 -1.993841,1.227603 -2.054443,1.123241 -0.06621,-2.340518 0.05447,-2.34082 2.060055,1.112914 z"
+ transform="matrix(0.65194108,0,0,0.65194108,15.383639,752.1041)"
+ inkscape:transform-center-x="-0.012953186"
+ inkscape:transform-center-y="-0.16341378" />
+ </g>
+ <g
+ id="SWITCH_ON"
+ inkscape:label="active">
+ <circle
+ r="16.785715"
+ cy="57.5"
+ cx="37.142857"
+ transform="translate(0,752.36228)"
+ id="path4576"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#e9ddaf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate" />
+ <ellipse
+ ry="3.75"
+ rx="16.964287"
+ cy="57.857143"
+ cx="38.214287"
+ transform="matrix(0.98958091,0,0,1,-0.76159828,752.36228)"
+ id="path4578"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#e9ddaf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
+ <path
+ inkscape:transform-center-y="-0.16341378"
+ inkscape:transform-center-x="-0.012953186"
+ transform="matrix(0.65194108,0,0,0.65194108,15.383639,752.1041)"
+ d="m 54.845629,89.27893 -1.993841,1.227603 -2.054443,1.123241 -0.06621,-2.340518 0.05447,-2.34082 2.060055,1.112914 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="false"
+ sodipodi:arg2="1.0446877"
+ sodipodi:arg1="-0.0025098425"
+ sodipodi:r2="1.4117311"
+ sodipodi:r1="2.7027807"
+ sodipodi:cy="89.285713"
+ sodipodi:cx="52.142857"
+ sodipodi:sides="3"
+ id="path4580"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ sodipodi:type="star" />
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 37.67857,786.29085 v 3.75"
+ id="path4582"
+ inkscape:connector-curvature="0" />
+ <g
+ style="font-style:normal;font-weight:bold;font-size:6.32609px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ id="text4584">
+ <path
+ d="m 33.828224,780.67935 c -0.362435,10e-6 -0.643526,0.13386 -0.843274,0.40156 -0.199751,0.26771 -0.299626,0.64456 -0.299624,1.13055 -2e-6,0.48393 0.09987,0.85974 0.299624,1.12745 0.199748,0.26771 0.480839,0.40156 0.843274,0.40156 0.364488,0 0.646609,-0.13385 0.846362,-0.40156 0.199746,-0.26771 0.299621,-0.64352 0.299624,-1.12745 -3e-6,-0.48599 -0.09988,-0.86284 -0.299624,-1.13055 -0.199753,-0.2677 -0.481874,-0.40155 -0.846362,-0.40156 m 0,-0.8618 c 0.741335,0 1.32205,0.21211 1.742147,0.63631 0.420087,0.42422 0.630133,1.01008 0.630138,1.7576 -5e-6,0.74545 -0.210051,1.33029 -0.630138,1.7545 -0.420097,0.42421 -1.000812,0.63631 -1.742147,0.63631 -0.739282,0 -1.319997,-0.2121 -1.742147,-0.63631 -0.420093,-0.42421 -0.630139,-1.00905 -0.630139,-1.7545 0,-0.74752 0.210046,-1.33338 0.630139,-1.7576 0.42215,-0.4242 1.002865,-0.63631 1.742147,-0.63631"
+ id="path4589"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 37.096294,779.90095 h 3.209381 v 0.89887 h -2.020149 v 0.85872 h 1.899681 v 0.89887 h -1.899681 v 1.95529 h -1.189232 v -4.61175"
+ id="path4591"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 41.420773,779.90095 h 3.209381 v 0.89887 h -2.020149 v 0.85872 h 1.899681 v 0.89887 h -1.899681 v 1.95529 h -1.189232 v -4.61175"
+ id="path4593"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 60.982143,810.04086 h -3.75"
+ id="path4582-4"
+ inkscape:connector-curvature="0" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:bold;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="62.818459"
+ y="812.17749"
+ id="text4613"><tspan
+ sodipodi:role="line"
+ id="tspan4615"
+ x="62.818459"
+ y="812.17749"
+ style="font-size:6.17189px;line-height:1.25;font-family:sans-serif">ON</tspan></text>
+ </g>
+ </g>
+</svg>
--- a/tests/tools/Docker/Dockerfile Tue Aug 01 21:02:08 2023 +0200
+++ b/tests/tools/Docker/Dockerfile Tue Aug 01 21:04:00 2023 +0200
@@ -59,6 +59,22 @@
) | install /dev/stdin /usr/local/bin/sikulix
+### SVGHMI dependencies : Chromium browser + Inkscape ###
+#
+# On ubuntu chromium is distrinuted as a snap.
+# Running snapd on docker is a mess.
+# As a workaround, there is a PPA where chromium .deb packges build is still beeing maintained :
+#
+# https://launchpad.net/~savoury1/+archive/ubuntu/chromium
+# ppa:savoury1, maintained by Rob Savoury at the time of writing
+#
+# As a side effect of docker limitations, chromium need --no-sandbox command line argument.
+#
+RUN apt-get install -qqy --no-install-recommends gnupg software-properties-common \
+ && add-apt-repository -y ppa:savoury1/chromium \
+ && add-apt-repository -y ppa:savoury1/ffmpeg4 \
+ && apt-get install -qqy --no-install-recommends chromium-browser inkscape
+
# easy to remember 'do_tests' alias to invoke main makefile
RUN env echo -e '#!/bin/bash\nmake -f /home/testing/src/beremiz/tests/Makefile $*' > /usr/local/bin/do_tests
RUN chmod +x /usr/local/bin/do_tests