merge
authorEdouard Tisserant <edouard.tisserant@gmail.com>
Fri, 07 Feb 2025 18:42:43 +0100 (5 weeks ago)
changeset 4109 2fb97bc2158a
parent 4103 63c002e87c57 (current diff)
parent 4108 0e0776f5459f (diff)
child 4127 7da45bd15fc8
merge
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/exemples/csv_by_string/beremiz.xml	Fri Feb 07 18:42:43 2025 +0100
@@ -0,0 +1,5 @@
+<?xml version='1.0' encoding='utf-8'?>
+<BeremizRoot xmlns:xsd="http://www.w3.org/2001/XMLSchema" URI_location="LOCAL://">
+  <TargetType/>
+  <Libraries Enable_SVGHMI_Library="true"/>
+</BeremizRoot>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/exemples/csv_by_string/plc.xml	Fri Feb 07 18:42:43 2025 +0100
@@ -0,0 +1,2931 @@
+<?xml version='1.0' encoding='utf-8'?>
+<project xmlns="http://www.plcopen.org/xml/tc6_0201" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:ns1="http://www.plcopen.org/xml/tc6_0201">
+  <fileHeader companyName="Unknown" productName="Unnamed" productVersion="1" creationDateTime="2025-02-04T11:16:08"/>
+  <contentHeader name="Unnamed" modificationDateTime="2025-02-05T14:31:39">
+    <coordinateInfo>
+      <fbd>
+        <scaling x="8" y="8"/>
+      </fbd>
+      <ld>
+        <scaling x="8" y="8"/>
+      </ld>
+      <sfc>
+        <scaling x="8" y="8"/>
+      </sfc>
+    </coordinateInfo>
+  </contentHeader>
+  <types>
+    <dataTypes/>
+    <pous>
+      <pou name="move_A" pouType="functionBlock">
+        <interface>
+          <inOutVars>
+            <variable name="Product_Name">
+              <type>
+                <string/>
+              </type>
+            </variable>
+            <variable name="Product_Image">
+              <type>
+                <INT/>
+              </type>
+            </variable>
+            <variable name="Step_1_Bake_Time">
+              <type>
+                <DINT/>
+              </type>
+            </variable>
+            <variable name="Step_1_Bake_Temp">
+              <type>
+                <DINT/>
+              </type>
+            </variable>
+            <variable name="Step_2_Bake_Time">
+              <type>
+                <DINT/>
+              </type>
+            </variable>
+            <variable name="Step_2_Bake_Temp">
+              <type>
+                <DINT/>
+              </type>
+            </variable>
+          </inOutVars>
+        </interface>
+        <body>
+          <ST>
+            <xhtml:p><![CDATA[(* Nothing to do here *)
+RETURN;
+]]></xhtml:p>
+          </ST>
+        </body>
+        <documentation>
+          <xhtml:p><![CDATA[Copy type A parameters from input to output]]></xhtml:p>
+        </documentation>
+      </pou>
+      <pou name="machine_A" pouType="functionBlock">
+        <interface>
+          <inputVars>
+            <variable name="Step_1_Bake_Time">
+              <type>
+                <DINT/>
+              </type>
+            </variable>
+            <variable name="Step_1_Bake_Temp">
+              <type>
+                <DINT/>
+              </type>
+            </variable>
+            <variable name="Step_2_Bake_Time">
+              <type>
+                <DINT/>
+              </type>
+            </variable>
+            <variable name="Step_2_Bake_Temp">
+              <type>
+                <DINT/>
+              </type>
+            </variable>
+          </inputVars>
+          <localVars>
+            <variable name="local_dint">
+              <type>
+                <DINT/>
+              </type>
+            </variable>
+          </localVars>
+        </interface>
+        <body>
+          <FBD>
+            <inVariable localId="2" executionOrderId="0" width="144" height="32" negated="false">
+              <position x="232" y="168"/>
+              <connectionPointOut>
+                <relPosition x="144" y="16"/>
+              </connectionPointOut>
+              <expression>Step_2_Bake_Temp</expression>
+            </inVariable>
+            <outVariable localId="1" executionOrderId="0" width="96" height="32" negated="false">
+              <position x="424" y="168"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="2">
+                  <position x="424" y="184"/>
+                  <position x="376" y="184"/>
+                </connection>
+              </connectionPointIn>
+              <expression>local_dint</expression>
+            </outVariable>
+            <comment localId="3" height="100" width="332">
+              <position x="200" y="48"/>
+              <content>
+                <xhtml:p><![CDATA[TODO]]></xhtml:p>
+              </content>
+            </comment>
+          </FBD>
+        </body>
+        <documentation>
+          <xhtml:p><![CDATA[]]></xhtml:p>
+        </documentation>
+      </pou>
+      <pou name="write_csv_A" pouType="functionBlock">
+        <interface>
+          <inputVars>
+            <variable name="CSV_NAME">
+              <type>
+                <string/>
+              </type>
+              <documentation>
+                <xhtml:p><![CDATA[ CSV file name]]></xhtml:p>
+              </documentation>
+            </variable>
+            <variable name="SAVE">
+              <type>
+                <BOOL/>
+              </type>
+              <documentation>
+                <xhtml:p><![CDATA[Triggers CSV file read on rising edge]]></xhtml:p>
+              </documentation>
+            </variable>
+          </inputVars>
+          <outputVars>
+            <variable name="ERROR">
+              <type>
+                <BOOL/>
+              </type>
+              <documentation>
+                <xhtml:p><![CDATA[Write operation failed]]></xhtml:p>
+              </documentation>
+            </variable>
+            <variable name="ACK">
+              <type>
+                <BOOL/>
+              </type>
+              <documentation>
+                <xhtml:p><![CDATA[Output is valid]]></xhtml:p>
+              </documentation>
+            </variable>
+          </outputVars>
+          <inputVars>
+            <variable name="Product_Name">
+              <type>
+                <string/>
+              </type>
+            </variable>
+            <variable name="Product_Image">
+              <type>
+                <INT/>
+              </type>
+            </variable>
+            <variable name="Step_1_Bake_Time">
+              <type>
+                <DINT/>
+              </type>
+            </variable>
+            <variable name="Step_1_Bake_Temp">
+              <type>
+                <DINT/>
+              </type>
+            </variable>
+            <variable name="Step_2_Bake_Time">
+              <type>
+                <DINT/>
+              </type>
+            </variable>
+            <variable name="Step_2_Bake_Temp">
+              <type>
+                <DINT/>
+              </type>
+            </variable>
+          </inputVars>
+          <localVars>
+            <variable name="csv_write_by_string0">
+              <type>
+                <derived name="csv_write_by_string"/>
+              </type>
+            </variable>
+            <variable name="csv_write_by_string1">
+              <type>
+                <derived name="csv_write_by_string"/>
+              </type>
+            </variable>
+            <variable name="csv_write_by_string2">
+              <type>
+                <derived name="csv_write_by_string"/>
+              </type>
+            </variable>
+            <variable name="csv_write_by_string3">
+              <type>
+                <derived name="csv_write_by_string"/>
+              </type>
+            </variable>
+            <variable name="csv_write_by_string4">
+              <type>
+                <derived name="csv_write_by_string"/>
+              </type>
+            </variable>
+            <variable name="csv_write_by_string5">
+              <type>
+                <derived name="csv_write_by_string"/>
+              </type>
+            </variable>
+          </localVars>
+        </interface>
+        <body>
+          <FBD>
+            <block localId="2" typeName="csv_write_by_string" instanceName="csv_write_by_string0" executionOrderId="0" width="165" height="176">
+              <position x="632" y="168"/>
+              <inputVariables>
+                <variable formalParameter="FILE_NAME">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="3">
+                      <position x="632" y="200"/>
+                      <position x="592" y="200"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="ROW">
+                  <connectionPointIn>
+                    <relPosition x="0" y="64"/>
+                    <connection refLocalId="4">
+                      <position x="632" y="232"/>
+                      <position x="592" y="232"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="COLUMN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="96"/>
+                    <connection refLocalId="1">
+                      <position x="632" y="264"/>
+                      <position x="592" y="264"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="CONTENT">
+                  <connectionPointIn>
+                    <relPosition x="0" y="128"/>
+                    <connection refLocalId="5">
+                      <position x="632" y="296"/>
+                      <position x="240" y="296"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="SAVE">
+                  <connectionPointIn>
+                    <relPosition x="0" y="160"/>
+                    <connection refLocalId="56">
+                      <position x="632" y="328"/>
+                      <position x="592" y="328"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="ACK">
+                  <connectionPointOut>
+                    <relPosition x="165" y="32"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="ERROR">
+                  <connectionPointOut>
+                    <relPosition x="165" y="64"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="RESULT">
+                  <connectionPointOut>
+                    <relPosition x="165" y="96"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <inVariable localId="3" executionOrderId="0" width="88" height="32" negated="false">
+              <position x="504" y="184"/>
+              <connectionPointOut>
+                <relPosition x="88" y="16"/>
+              </connectionPointOut>
+              <expression>CSV_NAME</expression>
+            </inVariable>
+            <inVariable localId="4" executionOrderId="0" width="128" height="32" negated="false">
+              <position x="464" y="216"/>
+              <connectionPointOut>
+                <relPosition x="128" y="16"/>
+              </connectionPointOut>
+              <expression>'Product_Name'</expression>
+            </inVariable>
+            <inVariable localId="1" executionOrderId="0" width="152" height="32" negated="false">
+              <position x="440" y="248"/>
+              <connectionPointOut>
+                <relPosition x="152" y="16"/>
+              </connectionPointOut>
+              <expression>'Parameter_Value'</expression>
+            </inVariable>
+            <inVariable localId="7" executionOrderId="0" width="88" height="32" negated="false">
+              <position x="504" y="424"/>
+              <connectionPointOut>
+                <relPosition x="88" y="16"/>
+              </connectionPointOut>
+              <expression>CSV_NAME</expression>
+            </inVariable>
+            <inVariable localId="8" executionOrderId="0" width="136" height="32" negated="false">
+              <position x="456" y="456"/>
+              <connectionPointOut>
+                <relPosition x="136" y="16"/>
+              </connectionPointOut>
+              <expression>'Product_Image'</expression>
+            </inVariable>
+            <inVariable localId="9" executionOrderId="0" width="152" height="32" negated="false">
+              <position x="440" y="488"/>
+              <connectionPointOut>
+                <relPosition x="152" y="16"/>
+              </connectionPointOut>
+              <expression>'Parameter_Value'</expression>
+            </inVariable>
+            <inVariable localId="13" executionOrderId="0" width="88" height="32" negated="false">
+              <position x="504" y="664"/>
+              <connectionPointOut>
+                <relPosition x="88" y="16"/>
+              </connectionPointOut>
+              <expression>CSV_NAME</expression>
+            </inVariable>
+            <inVariable localId="14" executionOrderId="0" width="160" height="32" negated="false">
+              <position x="432" y="696"/>
+              <connectionPointOut>
+                <relPosition x="160" y="16"/>
+              </connectionPointOut>
+              <expression>'Step_1_Bake_Time'</expression>
+            </inVariable>
+            <inVariable localId="15" executionOrderId="0" width="152" height="32" negated="false">
+              <position x="440" y="728"/>
+              <connectionPointOut>
+                <relPosition x="152" y="16"/>
+              </connectionPointOut>
+              <expression>'Parameter_Value'</expression>
+            </inVariable>
+            <inVariable localId="19" executionOrderId="0" width="88" height="32" negated="false">
+              <position x="504" y="912"/>
+              <connectionPointOut>
+                <relPosition x="88" y="16"/>
+              </connectionPointOut>
+              <expression>CSV_NAME</expression>
+            </inVariable>
+            <inVariable localId="20" executionOrderId="0" width="160" height="32" negated="false">
+              <position x="432" y="944"/>
+              <connectionPointOut>
+                <relPosition x="160" y="16"/>
+              </connectionPointOut>
+              <expression>'Step_1_Bake_Temp'</expression>
+            </inVariable>
+            <inVariable localId="21" executionOrderId="0" width="152" height="32" negated="false">
+              <position x="440" y="976"/>
+              <connectionPointOut>
+                <relPosition x="152" y="16"/>
+              </connectionPointOut>
+              <expression>'Parameter_Value'</expression>
+            </inVariable>
+            <inVariable localId="25" executionOrderId="0" width="88" height="32" negated="false">
+              <position x="504" y="1160"/>
+              <connectionPointOut>
+                <relPosition x="88" y="16"/>
+              </connectionPointOut>
+              <expression>CSV_NAME</expression>
+            </inVariable>
+            <inVariable localId="26" executionOrderId="0" width="160" height="32" negated="false">
+              <position x="432" y="1192"/>
+              <connectionPointOut>
+                <relPosition x="160" y="16"/>
+              </connectionPointOut>
+              <expression>'Step_2_Bake_Time'</expression>
+            </inVariable>
+            <inVariable localId="27" executionOrderId="0" width="152" height="32" negated="false">
+              <position x="440" y="1224"/>
+              <connectionPointOut>
+                <relPosition x="152" y="16"/>
+              </connectionPointOut>
+              <expression>'Parameter_Value'</expression>
+            </inVariable>
+            <inVariable localId="31" executionOrderId="0" width="88" height="32" negated="false">
+              <position x="504" y="1408"/>
+              <connectionPointOut>
+                <relPosition x="88" y="16"/>
+              </connectionPointOut>
+              <expression>CSV_NAME</expression>
+            </inVariable>
+            <inVariable localId="32" executionOrderId="0" width="160" height="32" negated="false">
+              <position x="432" y="1440"/>
+              <connectionPointOut>
+                <relPosition x="160" y="16"/>
+              </connectionPointOut>
+              <expression>'Step_2_Bake_Temp'</expression>
+            </inVariable>
+            <inVariable localId="33" executionOrderId="0" width="152" height="32" negated="false">
+              <position x="440" y="1472"/>
+              <connectionPointOut>
+                <relPosition x="152" y="16"/>
+              </connectionPointOut>
+              <expression>'Parameter_Value'</expression>
+            </inVariable>
+            <outVariable localId="42" executionOrderId="0" width="72" height="32" negated="false">
+              <position x="1424" y="384"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="43" formalParameter="OUT">
+                  <position x="1424" y="400"/>
+                  <position x="1392" y="400"/>
+                </connection>
+              </connectionPointIn>
+              <expression>ERROR</expression>
+            </outVariable>
+            <block localId="43" typeName="OR" executionOrderId="0" width="72" height="168">
+              <position x="1320" y="368"/>
+              <inputVariables>
+                <variable formalParameter="IN1">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="45">
+                      <position x="1320" y="400"/>
+                      <position x="1290" y="400"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN2">
+                  <connectionPointIn>
+                    <relPosition x="0" y="56"/>
+                    <connection refLocalId="47">
+                      <position x="1320" y="424"/>
+                      <position x="1290" y="424"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN3">
+                  <connectionPointIn>
+                    <relPosition x="0" y="80"/>
+                    <connection refLocalId="49">
+                      <position x="1320" y="448"/>
+                      <position x="1290" y="448"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN4">
+                  <connectionPointIn>
+                    <relPosition x="0" y="104"/>
+                    <connection refLocalId="51">
+                      <position x="1320" y="472"/>
+                      <position x="1290" y="472"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN5">
+                  <connectionPointIn>
+                    <relPosition x="0" y="128"/>
+                    <connection refLocalId="53">
+                      <position x="1320" y="496"/>
+                      <position x="1290" y="496"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN6">
+                  <connectionPointIn>
+                    <relPosition x="0" y="152"/>
+                    <connection refLocalId="55">
+                      <position x="1320" y="520"/>
+                      <position x="1290" y="520"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="72" y="32"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <connector name="Connection0" localId="44" width="125" height="27">
+              <position x="875" y="216"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="2" formalParameter="ERROR">
+                  <position x="875" y="232"/>
+                  <position x="797" y="232"/>
+                </connection>
+              </connectionPointIn>
+            </connector>
+            <continuation name="Connection0" localId="45" width="125" height="27">
+              <position x="1165" y="384"/>
+              <connectionPointOut>
+                <relPosition x="125" y="16"/>
+              </connectionPointOut>
+            </continuation>
+            <connector name="Connection1" localId="46" width="125" height="27">
+              <position x="875" y="456"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="11" formalParameter="ERROR">
+                  <position x="875" y="472"/>
+                  <position x="797" y="472"/>
+                </connection>
+              </connectionPointIn>
+            </connector>
+            <continuation name="Connection1" localId="47" width="125" height="27">
+              <position x="1165" y="408"/>
+              <connectionPointOut>
+                <relPosition x="125" y="16"/>
+              </connectionPointOut>
+            </continuation>
+            <connector name="Connection2" localId="48" width="125" height="27">
+              <position x="875" y="696"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="12" formalParameter="ERROR">
+                  <position x="875" y="712"/>
+                  <position x="797" y="712"/>
+                </connection>
+              </connectionPointIn>
+            </connector>
+            <continuation name="Connection2" localId="49" width="125" height="27">
+              <position x="1165" y="432"/>
+              <connectionPointOut>
+                <relPosition x="125" y="16"/>
+              </connectionPointOut>
+            </continuation>
+            <connector name="Connection3" localId="50" width="125" height="27">
+              <position x="875" y="944"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="18" formalParameter="ERROR">
+                  <position x="875" y="960"/>
+                  <position x="797" y="960"/>
+                </connection>
+              </connectionPointIn>
+            </connector>
+            <continuation name="Connection3" localId="51" width="125" height="27">
+              <position x="1165" y="456"/>
+              <connectionPointOut>
+                <relPosition x="125" y="16"/>
+              </connectionPointOut>
+            </continuation>
+            <connector name="Connection4" localId="52" width="125" height="27">
+              <position x="875" y="1192"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="24" formalParameter="ERROR">
+                  <position x="875" y="1208"/>
+                  <position x="797" y="1208"/>
+                </connection>
+              </connectionPointIn>
+            </connector>
+            <continuation name="Connection4" localId="53" width="125" height="27">
+              <position x="1165" y="480"/>
+              <connectionPointOut>
+                <relPosition x="125" y="16"/>
+              </connectionPointOut>
+            </continuation>
+            <connector name="Connection5" localId="54" width="125" height="27">
+              <position x="875" y="1440"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="30" formalParameter="ERROR">
+                  <position x="875" y="1456"/>
+                  <position x="797" y="1456"/>
+                </connection>
+              </connectionPointIn>
+            </connector>
+            <continuation name="Connection5" localId="55" width="125" height="27">
+              <position x="1165" y="504"/>
+              <connectionPointOut>
+                <relPosition x="125" y="16"/>
+              </connectionPointOut>
+            </continuation>
+            <inVariable localId="5" executionOrderId="0" width="112" height="32" negated="false">
+              <position x="128" y="280"/>
+              <connectionPointOut>
+                <relPosition x="112" y="16"/>
+              </connectionPointOut>
+              <expression>Product_Name</expression>
+            </inVariable>
+            <inVariable localId="56" executionOrderId="0" width="48" height="32" negated="false">
+              <position x="544" y="312"/>
+              <connectionPointOut>
+                <relPosition x="48" y="16"/>
+              </connectionPointOut>
+              <expression>SAVE</expression>
+            </inVariable>
+            <inVariable localId="34" executionOrderId="0" width="152" height="48" negated="false">
+              <position x="120" y="1496"/>
+              <connectionPointOut>
+                <relPosition x="152" y="24"/>
+              </connectionPointOut>
+              <expression>Step_2_Bake_Temp</expression>
+            </inVariable>
+            <inVariable localId="28" executionOrderId="0" width="152" height="32" negated="false">
+              <position x="120" y="1256"/>
+              <connectionPointOut>
+                <relPosition x="152" y="16"/>
+              </connectionPointOut>
+              <expression>Step_2_Bake_Time</expression>
+            </inVariable>
+            <inVariable localId="22" executionOrderId="0" width="144" height="38" negated="false">
+              <position x="128" y="1008"/>
+              <connectionPointOut>
+                <relPosition x="144" y="16"/>
+              </connectionPointOut>
+              <expression>Step_1_Bake_Temp</expression>
+            </inVariable>
+            <inVariable localId="16" executionOrderId="0" width="144" height="40" negated="false">
+              <position x="128" y="760"/>
+              <connectionPointOut>
+                <relPosition x="144" y="16"/>
+              </connectionPointOut>
+              <expression>Step_1_Bake_Time</expression>
+            </inVariable>
+            <inVariable localId="10" executionOrderId="0" width="120" height="32" negated="false">
+              <position x="128" y="520"/>
+              <connectionPointOut>
+                <relPosition x="120" y="16"/>
+              </connectionPointOut>
+              <expression>Product_Image</expression>
+            </inVariable>
+            <inVariable localId="6" executionOrderId="0" width="48" height="32" negated="false">
+              <position x="544" y="552"/>
+              <connectionPointOut>
+                <relPosition x="48" y="16"/>
+              </connectionPointOut>
+              <expression>SAVE</expression>
+            </inVariable>
+            <block localId="11" typeName="csv_write_by_string" instanceName="csv_write_by_string1" executionOrderId="0" width="165" height="176">
+              <position x="632" y="408"/>
+              <inputVariables>
+                <variable formalParameter="FILE_NAME">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="7">
+                      <position x="632" y="440"/>
+                      <position x="592" y="440"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="ROW">
+                  <connectionPointIn>
+                    <relPosition x="0" y="64"/>
+                    <connection refLocalId="8">
+                      <position x="632" y="472"/>
+                      <position x="592" y="472"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="COLUMN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="96"/>
+                    <connection refLocalId="9">
+                      <position x="632" y="504"/>
+                      <position x="592" y="504"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="CONTENT">
+                  <connectionPointIn>
+                    <relPosition x="0" y="128"/>
+                    <connection refLocalId="57" formalParameter="OUT">
+                      <position x="632" y="536"/>
+                      <position x="421" y="536"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="SAVE">
+                  <connectionPointIn>
+                    <relPosition x="0" y="160"/>
+                    <connection refLocalId="6">
+                      <position x="632" y="568"/>
+                      <position x="592" y="568"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="ACK">
+                  <connectionPointOut>
+                    <relPosition x="165" y="32"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="ERROR">
+                  <connectionPointOut>
+                    <relPosition x="165" y="64"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="RESULT">
+                  <connectionPointOut>
+                    <relPosition x="165" y="96"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <block localId="12" typeName="csv_write_by_string" instanceName="csv_write_by_string2" executionOrderId="0" width="165" height="176">
+              <position x="632" y="648"/>
+              <inputVariables>
+                <variable formalParameter="FILE_NAME">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="13">
+                      <position x="632" y="680"/>
+                      <position x="592" y="680"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="ROW">
+                  <connectionPointIn>
+                    <relPosition x="0" y="64"/>
+                    <connection refLocalId="14">
+                      <position x="632" y="712"/>
+                      <position x="592" y="712"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="COLUMN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="96"/>
+                    <connection refLocalId="15">
+                      <position x="632" y="744"/>
+                      <position x="592" y="744"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="CONTENT">
+                  <connectionPointIn>
+                    <relPosition x="0" y="128"/>
+                    <connection refLocalId="58" formalParameter="OUT">
+                      <position x="632" y="776"/>
+                      <position x="432" y="776"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="SAVE">
+                  <connectionPointIn>
+                    <relPosition x="0" y="160"/>
+                    <connection refLocalId="17">
+                      <position x="632" y="808"/>
+                      <position x="592" y="808"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="ACK">
+                  <connectionPointOut>
+                    <relPosition x="165" y="32"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="ERROR">
+                  <connectionPointOut>
+                    <relPosition x="165" y="64"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="RESULT">
+                  <connectionPointOut>
+                    <relPosition x="165" y="96"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <inVariable localId="17" executionOrderId="0" width="48" height="32" negated="false">
+              <position x="544" y="792"/>
+              <connectionPointOut>
+                <relPosition x="48" y="16"/>
+              </connectionPointOut>
+              <expression>SAVE</expression>
+            </inVariable>
+            <block localId="18" typeName="csv_write_by_string" instanceName="csv_write_by_string3" executionOrderId="0" width="165" height="176">
+              <position x="632" y="896"/>
+              <inputVariables>
+                <variable formalParameter="FILE_NAME">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="19">
+                      <position x="632" y="928"/>
+                      <position x="592" y="928"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="ROW">
+                  <connectionPointIn>
+                    <relPosition x="0" y="64"/>
+                    <connection refLocalId="20">
+                      <position x="632" y="960"/>
+                      <position x="592" y="960"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="COLUMN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="96"/>
+                    <connection refLocalId="21">
+                      <position x="632" y="992"/>
+                      <position x="592" y="992"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="CONTENT">
+                  <connectionPointIn>
+                    <relPosition x="0" y="128"/>
+                    <connection refLocalId="36" formalParameter="OUT">
+                      <position x="632" y="1024"/>
+                      <position x="432" y="1024"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="SAVE">
+                  <connectionPointIn>
+                    <relPosition x="0" y="160"/>
+                    <connection refLocalId="23">
+                      <position x="632" y="1056"/>
+                      <position x="592" y="1056"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="ACK">
+                  <connectionPointOut>
+                    <relPosition x="165" y="32"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="ERROR">
+                  <connectionPointOut>
+                    <relPosition x="165" y="64"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="RESULT">
+                  <connectionPointOut>
+                    <relPosition x="165" y="96"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <inVariable localId="23" executionOrderId="0" width="48" height="32" negated="false">
+              <position x="544" y="1040"/>
+              <connectionPointOut>
+                <relPosition x="48" y="16"/>
+              </connectionPointOut>
+              <expression>SAVE</expression>
+            </inVariable>
+            <block localId="24" typeName="csv_write_by_string" instanceName="csv_write_by_string4" executionOrderId="0" width="165" height="176">
+              <position x="632" y="1144"/>
+              <inputVariables>
+                <variable formalParameter="FILE_NAME">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="25">
+                      <position x="632" y="1176"/>
+                      <position x="592" y="1176"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="ROW">
+                  <connectionPointIn>
+                    <relPosition x="0" y="64"/>
+                    <connection refLocalId="26">
+                      <position x="632" y="1208"/>
+                      <position x="592" y="1208"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="COLUMN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="96"/>
+                    <connection refLocalId="27">
+                      <position x="632" y="1240"/>
+                      <position x="592" y="1240"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="CONTENT">
+                  <connectionPointIn>
+                    <relPosition x="0" y="128"/>
+                    <connection refLocalId="37" formalParameter="OUT">
+                      <position x="632" y="1272"/>
+                      <position x="432" y="1272"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="SAVE">
+                  <connectionPointIn>
+                    <relPosition x="0" y="160"/>
+                    <connection refLocalId="29">
+                      <position x="632" y="1304"/>
+                      <position x="592" y="1304"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="ACK">
+                  <connectionPointOut>
+                    <relPosition x="165" y="32"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="ERROR">
+                  <connectionPointOut>
+                    <relPosition x="165" y="64"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="RESULT">
+                  <connectionPointOut>
+                    <relPosition x="165" y="96"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <inVariable localId="29" executionOrderId="0" width="48" height="32" negated="false">
+              <position x="544" y="1288"/>
+              <connectionPointOut>
+                <relPosition x="48" y="16"/>
+              </connectionPointOut>
+              <expression>SAVE</expression>
+            </inVariable>
+            <block localId="30" typeName="csv_write_by_string" instanceName="csv_write_by_string5" executionOrderId="0" width="165" height="176">
+              <position x="632" y="1392"/>
+              <inputVariables>
+                <variable formalParameter="FILE_NAME">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="31">
+                      <position x="632" y="1424"/>
+                      <position x="592" y="1424"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="ROW">
+                  <connectionPointIn>
+                    <relPosition x="0" y="64"/>
+                    <connection refLocalId="32">
+                      <position x="632" y="1456"/>
+                      <position x="592" y="1456"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="COLUMN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="96"/>
+                    <connection refLocalId="33">
+                      <position x="632" y="1488"/>
+                      <position x="592" y="1488"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="CONTENT">
+                  <connectionPointIn>
+                    <relPosition x="0" y="128"/>
+                    <connection refLocalId="38" formalParameter="OUT">
+                      <position x="632" y="1520"/>
+                      <position x="432" y="1520"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="SAVE">
+                  <connectionPointIn>
+                    <relPosition x="0" y="160"/>
+                    <connection refLocalId="35">
+                      <position x="632" y="1552"/>
+                      <position x="592" y="1552"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="ACK">
+                  <connectionPointOut>
+                    <relPosition x="165" y="32"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="ERROR">
+                  <connectionPointOut>
+                    <relPosition x="165" y="64"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="RESULT">
+                  <connectionPointOut>
+                    <relPosition x="165" y="96"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <inVariable localId="35" executionOrderId="0" width="48" height="32" negated="false">
+              <position x="544" y="1536"/>
+              <connectionPointOut>
+                <relPosition x="48" y="16"/>
+              </connectionPointOut>
+              <expression>SAVE</expression>
+            </inVariable>
+            <block localId="57" typeName="INT_TO_STRING" executionOrderId="0" width="117" height="43">
+              <position x="304" y="504"/>
+              <inputVariables>
+                <variable formalParameter="IN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="10">
+                      <position x="304" y="536"/>
+                      <position x="248" y="536"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="117" y="32"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <block localId="58" typeName="DINT_TO_STRING" executionOrderId="0" width="128" height="48">
+              <position x="304" y="744"/>
+              <inputVariables>
+                <variable formalParameter="IN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="16">
+                      <position x="304" y="776"/>
+                      <position x="272" y="776"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="128" y="32"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <block localId="36" typeName="DINT_TO_STRING" executionOrderId="0" width="128" height="48">
+              <position x="304" y="992"/>
+              <inputVariables>
+                <variable formalParameter="IN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="22">
+                      <position x="304" y="1024"/>
+                      <position x="272" y="1024"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="128" y="32"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <block localId="37" typeName="DINT_TO_STRING" executionOrderId="0" width="128" height="48">
+              <position x="304" y="1240"/>
+              <inputVariables>
+                <variable formalParameter="IN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="28">
+                      <position x="304" y="1272"/>
+                      <position x="272" y="1272"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="128" y="32"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <block localId="38" typeName="DINT_TO_STRING" executionOrderId="0" width="128" height="48">
+              <position x="304" y="1488"/>
+              <inputVariables>
+                <variable formalParameter="IN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="34">
+                      <position x="304" y="1520"/>
+                      <position x="272" y="1520"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="128" y="32"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <outVariable localId="39" executionOrderId="0" width="75" height="35" negated="false">
+              <position x="1427" y="184"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="40" formalParameter="OUT">
+                  <position x="1427" y="200"/>
+                  <position x="1400" y="200"/>
+                </connection>
+              </connectionPointIn>
+              <expression>ACK</expression>
+            </outVariable>
+            <block localId="40" typeName="AND" executionOrderId="0" width="80" height="168">
+              <position x="1320" y="168"/>
+              <inputVariables>
+                <variable formalParameter="IN1">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="66">
+                      <position x="1320" y="200"/>
+                      <position x="1290" y="200"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN2">
+                  <connectionPointIn>
+                    <relPosition x="0" y="56"/>
+                    <connection refLocalId="68">
+                      <position x="1320" y="224"/>
+                      <position x="1290" y="224"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN3">
+                  <connectionPointIn>
+                    <relPosition x="0" y="80"/>
+                    <connection refLocalId="70">
+                      <position x="1320" y="248"/>
+                      <position x="1290" y="248"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN4">
+                  <connectionPointIn>
+                    <relPosition x="0" y="104"/>
+                    <connection refLocalId="72">
+                      <position x="1320" y="272"/>
+                      <position x="1290" y="272"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN5">
+                  <connectionPointIn>
+                    <relPosition x="0" y="128"/>
+                    <connection refLocalId="74">
+                      <position x="1320" y="296"/>
+                      <position x="1290" y="296"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN6">
+                  <connectionPointIn>
+                    <relPosition x="0" y="152"/>
+                    <connection refLocalId="76">
+                      <position x="1320" y="320"/>
+                      <position x="1290" y="320"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="80" y="32"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <connector name="Connection6" localId="65" width="125" height="27">
+              <position x="875" y="184"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="2" formalParameter="ACK">
+                  <position x="875" y="200"/>
+                  <position x="797" y="200"/>
+                </connection>
+              </connectionPointIn>
+            </connector>
+            <continuation name="Connection6" localId="66" width="125" height="27">
+              <position x="1165" y="184"/>
+              <connectionPointOut>
+                <relPosition x="125" y="16"/>
+              </connectionPointOut>
+            </continuation>
+            <connector name="Connection7" localId="67" width="125" height="27">
+              <position x="875" y="424"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="11" formalParameter="ACK">
+                  <position x="875" y="440"/>
+                  <position x="797" y="440"/>
+                </connection>
+              </connectionPointIn>
+            </connector>
+            <continuation name="Connection7" localId="68" width="125" height="27">
+              <position x="1165" y="208"/>
+              <connectionPointOut>
+                <relPosition x="125" y="16"/>
+              </connectionPointOut>
+            </continuation>
+            <connector name="Connection8" localId="69" width="125" height="27">
+              <position x="875" y="664"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="12" formalParameter="ACK">
+                  <position x="875" y="680"/>
+                  <position x="797" y="680"/>
+                </connection>
+              </connectionPointIn>
+            </connector>
+            <continuation name="Connection8" localId="70" width="125" height="27">
+              <position x="1165" y="232"/>
+              <connectionPointOut>
+                <relPosition x="125" y="16"/>
+              </connectionPointOut>
+            </continuation>
+            <connector name="Connection9" localId="71" width="125" height="27">
+              <position x="875" y="912"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="18" formalParameter="ACK">
+                  <position x="875" y="928"/>
+                  <position x="797" y="928"/>
+                </connection>
+              </connectionPointIn>
+            </connector>
+            <continuation name="Connection9" localId="72" width="125" height="27">
+              <position x="1165" y="256"/>
+              <connectionPointOut>
+                <relPosition x="125" y="16"/>
+              </connectionPointOut>
+            </continuation>
+            <connector name="Connection10" localId="73" width="133" height="27">
+              <position x="875" y="1160"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="24" formalParameter="ACK">
+                  <position x="875" y="1176"/>
+                  <position x="797" y="1176"/>
+                </connection>
+              </connectionPointIn>
+            </connector>
+            <continuation name="Connection10" localId="74" width="133" height="27">
+              <position x="1157" y="280"/>
+              <connectionPointOut>
+                <relPosition x="133" y="16"/>
+              </connectionPointOut>
+            </continuation>
+            <connector name="Connection11" localId="75" width="133" height="27">
+              <position x="827" y="1408"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="30" formalParameter="ACK">
+                  <position x="827" y="1424"/>
+                  <position x="797" y="1424"/>
+                </connection>
+              </connectionPointIn>
+            </connector>
+            <continuation name="Connection11" localId="76" width="133" height="27">
+              <position x="1157" y="304"/>
+              <connectionPointOut>
+                <relPosition x="133" y="16"/>
+              </connectionPointOut>
+            </continuation>
+          </FBD>
+        </body>
+        <documentation>
+          <xhtml:p><![CDATA[Read CSV file of type A]]></xhtml:p>
+        </documentation>
+      </pou>
+      <pou name="program0" pouType="program">
+        <interface>
+          <localVars>
+            <variable name="SAVE_BT">
+              <type>
+                <derived name="HMI_BOOL"/>
+              </type>
+            </variable>
+            <variable name="SAVE_AS_BT">
+              <type>
+                <derived name="HMI_BOOL"/>
+              </type>
+            </variable>
+            <variable name="RD_SUCCESS">
+              <type>
+                <derived name="HMI_BOOL"/>
+              </type>
+            </variable>
+            <variable name="SAVE_ACK">
+              <type>
+                <derived name="HMI_BOOL"/>
+              </type>
+            </variable>
+            <variable name="SAVE_SUCCESS">
+              <type>
+                <derived name="HMI_BOOL"/>
+              </type>
+            </variable>
+            <variable name="CURRENT_CSV">
+              <type>
+                <derived name="HMI_STRING"/>
+              </type>
+              <initialValue>
+                <simpleValue value="test.csv"/>
+              </initialValue>
+            </variable>
+            <variable name="SAVE_AS_CSV">
+              <type>
+                <derived name="HMI_STRING"/>
+              </type>
+              <initialValue>
+                <simpleValue value="test2.csv"/>
+              </initialValue>
+            </variable>
+            <variable name="Product_Name">
+              <type>
+                <derived name="HMI_STRING"/>
+              </type>
+              <initialValue>
+                <simpleValue value="'unknown'"/>
+              </initialValue>
+            </variable>
+            <variable name="Product_Image">
+              <type>
+                <derived name="HMI_INT"/>
+              </type>
+              <initialValue>
+                <simpleValue value="0"/>
+              </initialValue>
+            </variable>
+            <variable name="Step_1_Bake_Time">
+              <type>
+                <derived name="HMI_DINT"/>
+              </type>
+              <initialValue>
+                <simpleValue value="60"/>
+              </initialValue>
+            </variable>
+            <variable name="Step_1_Bake_Temp">
+              <type>
+                <derived name="HMI_DINT"/>
+              </type>
+              <initialValue>
+                <simpleValue value="120"/>
+              </initialValue>
+            </variable>
+            <variable name="Step_2_Bake_Time">
+              <type>
+                <derived name="HMI_DINT"/>
+              </type>
+              <initialValue>
+                <simpleValue value="90"/>
+              </initialValue>
+            </variable>
+            <variable name="Step_2_Bake_Temp">
+              <type>
+                <derived name="HMI_DINT"/>
+              </type>
+              <initialValue>
+                <simpleValue value="180"/>
+              </initialValue>
+            </variable>
+            <variable name="read_csv_A0">
+              <type>
+                <derived name="read_csv_A"/>
+              </type>
+            </variable>
+            <variable name="write_csv_A0">
+              <type>
+                <derived name="write_csv_A"/>
+              </type>
+            </variable>
+            <variable name="machine_A0">
+              <type>
+                <derived name="machine_A"/>
+              </type>
+            </variable>
+            <variable name="move_A0">
+              <type>
+                <derived name="move_A"/>
+              </type>
+            </variable>
+          </localVars>
+        </interface>
+        <body>
+          <FBD>
+            <block localId="1" typeName="read_csv_A" instanceName="read_csv_A0" executionOrderId="0" width="208" height="416">
+              <position x="272" y="232"/>
+              <inputVariables>
+                <variable formalParameter="CSV_NAME">
+                  <connectionPointIn>
+                    <relPosition x="0" y="48"/>
+                    <connection refLocalId="10">
+                      <position x="272" y="280"/>
+                      <position x="200" y="280"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="SUCCESS">
+                  <connectionPointOut>
+                    <relPosition x="208" y="48"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="Product_Name">
+                  <connectionPointOut>
+                    <relPosition x="208" y="104"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="Product_Image">
+                  <connectionPointOut>
+                    <relPosition x="208" y="160"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="Step_1_Bake_Time">
+                  <connectionPointOut>
+                    <relPosition x="208" y="216"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="Step_1_Bake_Temp">
+                  <connectionPointOut>
+                    <relPosition x="208" y="272"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="Step_2_Bake_Time">
+                  <connectionPointOut>
+                    <relPosition x="208" y="328"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="Step_2_Bake_Temp">
+                  <connectionPointOut>
+                    <relPosition x="208" y="384"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <block localId="2" typeName="write_csv_A" instanceName="write_csv_A0" executionOrderId="0" width="184" height="472">
+              <position x="1216" y="176"/>
+              <inputVariables>
+                <variable formalParameter="CSV_NAME">
+                  <connectionPointIn>
+                    <relPosition x="0" y="48"/>
+                    <connection refLocalId="12" formalParameter="OUT">
+                      <position x="1216" y="224"/>
+                      <position x="1184" y="224"/>
+                      <position x="1184" y="136"/>
+                      <position x="1138" y="136"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="SAVE">
+                  <connectionPointIn>
+                    <relPosition x="0" y="104"/>
+                    <connection refLocalId="16" formalParameter="OUT">
+                      <position x="1216" y="280"/>
+                      <position x="1164" y="280"/>
+                      <position x="1164" y="256"/>
+                      <position x="1138" y="256"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="Product_Name">
+                  <connectionPointIn>
+                    <relPosition x="0" y="160"/>
+                    <connection refLocalId="3">
+                      <position x="1216" y="336"/>
+                      <position x="1064" y="336"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="Product_Image">
+                  <connectionPointIn>
+                    <relPosition x="0" y="216"/>
+                    <connection refLocalId="4">
+                      <position x="1216" y="392"/>
+                      <position x="1072" y="392"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="Step_1_Bake_Time">
+                  <connectionPointIn>
+                    <relPosition x="0" y="272"/>
+                    <connection refLocalId="5">
+                      <position x="1216" y="448"/>
+                      <position x="1088" y="448"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="Step_1_Bake_Temp">
+                  <connectionPointIn>
+                    <relPosition x="0" y="328"/>
+                    <connection refLocalId="6">
+                      <position x="1216" y="504"/>
+                      <position x="1088" y="504"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="Step_2_Bake_Time">
+                  <connectionPointIn>
+                    <relPosition x="0" y="384"/>
+                    <connection refLocalId="7">
+                      <position x="1216" y="560"/>
+                      <position x="1088" y="560"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="Step_2_Bake_Temp">
+                  <connectionPointIn>
+                    <relPosition x="0" y="440"/>
+                    <connection refLocalId="8">
+                      <position x="1216" y="616"/>
+                      <position x="1088" y="616"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="ERROR" negated="true">
+                  <connectionPointOut>
+                    <relPosition x="184" y="48"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="ACK">
+                  <connectionPointOut>
+                    <relPosition x="184" y="104"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <inOutVariable localId="3" executionOrderId="0" width="112" height="32" negatedOut="false" negatedIn="false">
+              <position x="952" y="320"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="23" formalParameter="Product_Name">
+                  <position x="952" y="336"/>
+                  <position x="842" y="336"/>
+                </connection>
+              </connectionPointIn>
+              <connectionPointOut>
+                <relPosition x="112" y="16"/>
+              </connectionPointOut>
+              <expression>Product_Name</expression>
+            </inOutVariable>
+            <inOutVariable localId="4" executionOrderId="0" width="120" height="32" negatedOut="false" negatedIn="false">
+              <position x="952" y="376"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="23" formalParameter="Product_Image">
+                  <position x="952" y="392"/>
+                  <position x="842" y="392"/>
+                </connection>
+              </connectionPointIn>
+              <connectionPointOut>
+                <relPosition x="120" y="16"/>
+              </connectionPointOut>
+              <expression>Product_Image</expression>
+            </inOutVariable>
+            <inOutVariable localId="5" executionOrderId="0" width="144" height="32" negatedOut="false" negatedIn="false">
+              <position x="944" y="432"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="23" formalParameter="Step_1_Bake_Time">
+                  <position x="944" y="448"/>
+                  <position x="842" y="448"/>
+                </connection>
+              </connectionPointIn>
+              <connectionPointOut>
+                <relPosition x="144" y="16"/>
+              </connectionPointOut>
+              <expression>Step_1_Bake_Time</expression>
+            </inOutVariable>
+            <inOutVariable localId="6" executionOrderId="0" width="144" height="32" negatedOut="false" negatedIn="false">
+              <position x="944" y="488"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="23" formalParameter="Step_1_Bake_Temp">
+                  <position x="944" y="504"/>
+                  <position x="842" y="504"/>
+                </connection>
+              </connectionPointIn>
+              <connectionPointOut>
+                <relPosition x="144" y="16"/>
+              </connectionPointOut>
+              <expression>Step_1_Bake_Temp</expression>
+            </inOutVariable>
+            <inOutVariable localId="7" executionOrderId="0" width="144" height="32" negatedOut="false" negatedIn="false">
+              <position x="944" y="544"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="23" formalParameter="Step_2_Bake_Time">
+                  <position x="944" y="560"/>
+                  <position x="842" y="560"/>
+                </connection>
+              </connectionPointIn>
+              <connectionPointOut>
+                <relPosition x="144" y="16"/>
+              </connectionPointOut>
+              <expression>Step_2_Bake_Time</expression>
+            </inOutVariable>
+            <inOutVariable localId="8" executionOrderId="0" width="144" height="32" negatedOut="false" negatedIn="false">
+              <position x="944" y="600"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="23" formalParameter="Step_2_Bake_Temp">
+                  <position x="944" y="616"/>
+                  <position x="842" y="616"/>
+                </connection>
+              </connectionPointIn>
+              <connectionPointOut>
+                <relPosition x="144" y="16"/>
+              </connectionPointOut>
+              <expression>Step_2_Bake_Temp</expression>
+            </inOutVariable>
+            <inVariable localId="9" executionOrderId="0" width="104" height="32" negated="false">
+              <position x="920" y="240"/>
+              <connectionPointOut>
+                <relPosition x="104" y="16"/>
+              </connectionPointOut>
+              <expression>SAVE_BT</expression>
+            </inVariable>
+            <inVariable localId="10" executionOrderId="0" width="104" height="32" negated="false">
+              <position x="96" y="264"/>
+              <connectionPointOut>
+                <relPosition x="104" y="16"/>
+              </connectionPointOut>
+              <expression>CURRENT_CSV</expression>
+            </inVariable>
+            <inVariable localId="11" executionOrderId="0" width="128" height="32" negated="false">
+              <position x="896" y="120"/>
+              <connectionPointOut>
+                <relPosition x="128" y="16"/>
+              </connectionPointOut>
+              <expression>SAVE_AS_BT</expression>
+            </inVariable>
+            <block localId="12" typeName="SEL" executionOrderId="0" width="66" height="120">
+              <position x="1072" y="99"/>
+              <inputVariables>
+                <variable formalParameter="G">
+                  <connectionPointIn>
+                    <relPosition x="0" y="37"/>
+                    <connection refLocalId="11">
+                      <position x="1072" y="136"/>
+                      <position x="1024" y="136"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN0">
+                  <connectionPointIn>
+                    <relPosition x="0" y="69"/>
+                    <connection refLocalId="13">
+                      <position x="1072" y="168"/>
+                      <position x="1024" y="168"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN1">
+                  <connectionPointIn>
+                    <relPosition x="0" y="101"/>
+                    <connection refLocalId="14">
+                      <position x="1072" y="200"/>
+                      <position x="1024" y="200"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="66" y="37"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <inVariable localId="13" executionOrderId="0" width="104" height="32" negated="false">
+              <position x="920" y="152"/>
+              <connectionPointOut>
+                <relPosition x="104" y="16"/>
+              </connectionPointOut>
+              <expression>CURRENT_CSV</expression>
+            </inVariable>
+            <inVariable localId="14" executionOrderId="0" width="104" height="32" negated="false">
+              <position x="920" y="184"/>
+              <connectionPointOut>
+                <relPosition x="104" y="16"/>
+              </connectionPointOut>
+              <expression>SAVE_AS_CSV</expression>
+            </inVariable>
+            <inVariable localId="15" executionOrderId="0" width="128" height="32" negated="false">
+              <position x="896" y="272"/>
+              <connectionPointOut>
+                <relPosition x="128" y="16"/>
+              </connectionPointOut>
+              <expression>SAVE_AS_BT</expression>
+            </inVariable>
+            <block localId="16" typeName="OR" executionOrderId="0" width="66" height="80">
+              <position x="1072" y="223"/>
+              <inputVariables>
+                <variable formalParameter="IN1">
+                  <connectionPointIn>
+                    <relPosition x="0" y="33"/>
+                    <connection refLocalId="9">
+                      <position x="1072" y="256"/>
+                      <position x="1024" y="256"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN2">
+                  <connectionPointIn>
+                    <relPosition x="0" y="65"/>
+                    <connection refLocalId="15">
+                      <position x="1072" y="288"/>
+                      <position x="1024" y="288"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="66" y="33"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <inVariable localId="17" executionOrderId="0" width="144" height="32" negated="false">
+              <position x="656" y="768"/>
+              <connectionPointOut>
+                <relPosition x="144" y="16"/>
+              </connectionPointOut>
+              <expression>Step_1_Bake_Time</expression>
+            </inVariable>
+            <inVariable localId="18" executionOrderId="0" width="144" height="32" negated="false">
+              <position x="656" y="824"/>
+              <connectionPointOut>
+                <relPosition x="144" y="16"/>
+              </connectionPointOut>
+              <expression>Step_1_Bake_Temp</expression>
+            </inVariable>
+            <inVariable localId="19" executionOrderId="0" width="144" height="32" negated="false">
+              <position x="656" y="880"/>
+              <connectionPointOut>
+                <relPosition x="144" y="16"/>
+              </connectionPointOut>
+              <expression>Step_2_Bake_Time</expression>
+            </inVariable>
+            <inVariable localId="20" executionOrderId="0" width="144" height="32" negated="false">
+              <position x="656" y="936"/>
+              <connectionPointOut>
+                <relPosition x="144" y="16"/>
+              </connectionPointOut>
+              <expression>Step_2_Bake_Temp</expression>
+            </inVariable>
+            <block localId="21" typeName="machine_A" instanceName="machine_A0" executionOrderId="0" width="146" height="248">
+              <position x="864" y="736"/>
+              <inputVariables>
+                <variable formalParameter="Step_1_Bake_Time">
+                  <connectionPointIn>
+                    <relPosition x="0" y="48"/>
+                    <connection refLocalId="17">
+                      <position x="864" y="784"/>
+                      <position x="800" y="784"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="Step_1_Bake_Temp">
+                  <connectionPointIn>
+                    <relPosition x="0" y="104"/>
+                    <connection refLocalId="18">
+                      <position x="864" y="840"/>
+                      <position x="800" y="840"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="Step_2_Bake_Time">
+                  <connectionPointIn>
+                    <relPosition x="0" y="160"/>
+                    <connection refLocalId="19">
+                      <position x="864" y="896"/>
+                      <position x="800" y="896"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="Step_2_Bake_Temp">
+                  <connectionPointIn>
+                    <relPosition x="0" y="216"/>
+                    <connection refLocalId="20">
+                      <position x="864" y="952"/>
+                      <position x="800" y="952"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables/>
+            </block>
+            <outVariable localId="22" executionOrderId="0" width="96" height="32" negated="false">
+              <position x="568" y="168"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="1" formalParameter="SUCCESS">
+                  <position x="568" y="184"/>
+                  <position x="528" y="184"/>
+                  <position x="528" y="280"/>
+                  <position x="480" y="280"/>
+                </connection>
+              </connectionPointIn>
+              <expression>RD_SUCCESS</expression>
+            </outVariable>
+            <block localId="23" typeName="move_A" instanceName="move_A0" executionOrderId="0" width="274" height="416">
+              <position x="568" y="232"/>
+              <inputVariables>
+                <variable formalParameter="EN" edge="rising">
+                  <connectionPointIn>
+                    <relPosition x="0" y="48"/>
+                    <connection refLocalId="1" formalParameter="SUCCESS">
+                      <position x="568" y="280"/>
+                      <position x="480" y="280"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="Product_Name">
+                  <connectionPointIn>
+                    <relPosition x="0" y="104"/>
+                    <connection refLocalId="1" formalParameter="Product_Name">
+                      <position x="568" y="336"/>
+                      <position x="480" y="336"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="Product_Image">
+                  <connectionPointIn>
+                    <relPosition x="0" y="160"/>
+                    <connection refLocalId="1" formalParameter="Product_Image">
+                      <position x="568" y="392"/>
+                      <position x="480" y="392"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="Step_1_Bake_Time">
+                  <connectionPointIn>
+                    <relPosition x="0" y="216"/>
+                    <connection refLocalId="1" formalParameter="Step_1_Bake_Time">
+                      <position x="568" y="448"/>
+                      <position x="480" y="448"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="Step_1_Bake_Temp">
+                  <connectionPointIn>
+                    <relPosition x="0" y="272"/>
+                    <connection refLocalId="1" formalParameter="Step_1_Bake_Temp">
+                      <position x="568" y="504"/>
+                      <position x="480" y="504"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="Step_2_Bake_Time">
+                  <connectionPointIn>
+                    <relPosition x="0" y="328"/>
+                    <connection refLocalId="1" formalParameter="Step_2_Bake_Time">
+                      <position x="568" y="560"/>
+                      <position x="480" y="560"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="Step_2_Bake_Temp">
+                  <connectionPointIn>
+                    <relPosition x="0" y="384"/>
+                    <connection refLocalId="1" formalParameter="Step_2_Bake_Temp">
+                      <position x="568" y="616"/>
+                      <position x="480" y="616"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="ENO">
+                  <connectionPointOut>
+                    <relPosition x="274" y="48"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="Product_Name">
+                  <connectionPointOut>
+                    <relPosition x="274" y="104"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="Product_Image">
+                  <connectionPointOut>
+                    <relPosition x="274" y="160"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="Step_1_Bake_Time">
+                  <connectionPointOut>
+                    <relPosition x="274" y="216"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="Step_1_Bake_Temp">
+                  <connectionPointOut>
+                    <relPosition x="274" y="272"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="Step_2_Bake_Time">
+                  <connectionPointOut>
+                    <relPosition x="274" y="328"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="Step_2_Bake_Temp">
+                  <connectionPointOut>
+                    <relPosition x="274" y="384"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <outVariable localId="24" executionOrderId="0" width="112" height="32" negated="false">
+              <position x="1456" y="208"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="2" formalParameter="ERROR">
+                  <position x="1456" y="224"/>
+                  <position x="1400" y="224"/>
+                </connection>
+              </connectionPointIn>
+              <expression>SAVE_SUCCESS</expression>
+            </outVariable>
+            <outVariable localId="25" executionOrderId="0" width="80" height="32" negated="false">
+              <position x="1456" y="264"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="2" formalParameter="ACK">
+                  <position x="1456" y="280"/>
+                  <position x="1400" y="280"/>
+                </connection>
+              </connectionPointIn>
+              <expression>SAVE_ACK</expression>
+            </outVariable>
+          </FBD>
+        </body>
+      </pou>
+      <pou name="read_csv_A" pouType="functionBlock">
+        <interface>
+          <inputVars>
+            <variable name="CSV_NAME">
+              <type>
+                <string/>
+              </type>
+              <documentation>
+                <xhtml:p><![CDATA[ CSV file name]]></xhtml:p>
+              </documentation>
+            </variable>
+          </inputVars>
+          <outputVars>
+            <variable name="SUCCESS">
+              <type>
+                <BOOL/>
+              </type>
+              <documentation>
+                <xhtml:p><![CDATA[TRUE if data comes from file FALSE if default values]]></xhtml:p>
+              </documentation>
+            </variable>
+            <variable name="Product_Name">
+              <type>
+                <string/>
+              </type>
+              <initialValue>
+                <simpleValue value="'unknown'"/>
+              </initialValue>
+            </variable>
+            <variable name="Product_Image">
+              <type>
+                <INT/>
+              </type>
+              <initialValue>
+                <simpleValue value="0"/>
+              </initialValue>
+            </variable>
+            <variable name="Step_1_Bake_Time">
+              <type>
+                <DINT/>
+              </type>
+              <initialValue>
+                <simpleValue value="60"/>
+              </initialValue>
+            </variable>
+            <variable name="Step_1_Bake_Temp">
+              <type>
+                <DINT/>
+              </type>
+              <initialValue>
+                <simpleValue value="120"/>
+              </initialValue>
+            </variable>
+            <variable name="Step_2_Bake_Time">
+              <type>
+                <DINT/>
+              </type>
+              <initialValue>
+                <simpleValue value="90"/>
+              </initialValue>
+            </variable>
+            <variable name="Step_2_Bake_Temp">
+              <type>
+                <DINT/>
+              </type>
+              <initialValue>
+                <simpleValue value="180"/>
+              </initialValue>
+            </variable>
+          </outputVars>
+          <localVars>
+            <variable name="csv_read_by_string0">
+              <type>
+                <derived name="csv_read_by_string"/>
+              </type>
+            </variable>
+            <variable name="csv_read_by_string1">
+              <type>
+                <derived name="csv_read_by_string"/>
+              </type>
+            </variable>
+            <variable name="csv_read_by_string2">
+              <type>
+                <derived name="csv_read_by_string"/>
+              </type>
+            </variable>
+            <variable name="csv_read_by_string3">
+              <type>
+                <derived name="csv_read_by_string"/>
+              </type>
+            </variable>
+            <variable name="csv_read_by_string4">
+              <type>
+                <derived name="csv_read_by_string"/>
+              </type>
+            </variable>
+            <variable name="csv_read_by_string5">
+              <type>
+                <derived name="csv_read_by_string"/>
+              </type>
+            </variable>
+          </localVars>
+        </interface>
+        <body>
+          <FBD>
+            <block localId="2" typeName="csv_read_by_string" instanceName="csv_read_by_string0" executionOrderId="0" width="160" height="112">
+              <position x="312" y="88"/>
+              <inputVariables>
+                <variable formalParameter="FILE_NAME">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="3">
+                      <position x="312" y="120"/>
+                      <position x="272" y="120"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="ROW">
+                  <connectionPointIn>
+                    <relPosition x="0" y="64"/>
+                    <connection refLocalId="4">
+                      <position x="312" y="152"/>
+                      <position x="272" y="152"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="COLUMN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="96"/>
+                    <connection refLocalId="1">
+                      <position x="312" y="184"/>
+                      <position x="272" y="184"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="ACK">
+                  <connectionPointOut>
+                    <relPosition x="160" y="32"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="RESULT">
+                  <connectionPointOut>
+                    <relPosition x="160" y="64"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <inVariable localId="3" executionOrderId="0" width="88" height="32" negated="false">
+              <position x="184" y="104"/>
+              <connectionPointOut>
+                <relPosition x="88" y="16"/>
+              </connectionPointOut>
+              <expression>CSV_NAME</expression>
+            </inVariable>
+            <inVariable localId="4" executionOrderId="0" width="128" height="32" negated="false">
+              <position x="144" y="136"/>
+              <connectionPointOut>
+                <relPosition x="128" y="16"/>
+              </connectionPointOut>
+              <expression>'Product_Name'</expression>
+            </inVariable>
+            <inVariable localId="1" executionOrderId="0" width="152" height="32" negated="false">
+              <position x="120" y="168"/>
+              <connectionPointOut>
+                <relPosition x="152" y="16"/>
+              </connectionPointOut>
+              <expression>'Parameter_Value'</expression>
+            </inVariable>
+            <outVariable localId="5" executionOrderId="0" width="123" height="35" negated="false">
+              <position x="720" y="136"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="2" formalParameter="RESULT">
+                  <position x="720" y="152"/>
+                  <position x="472" y="152"/>
+                </connection>
+              </connectionPointIn>
+              <expression>Product_Name</expression>
+            </outVariable>
+            <block localId="6" typeName="csv_read_by_string" instanceName="csv_read_by_string1" executionOrderId="0" width="160" height="112">
+              <position x="312" y="248"/>
+              <inputVariables>
+                <variable formalParameter="FILE_NAME">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="7">
+                      <position x="312" y="280"/>
+                      <position x="272" y="280"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="ROW">
+                  <connectionPointIn>
+                    <relPosition x="0" y="64"/>
+                    <connection refLocalId="8">
+                      <position x="312" y="312"/>
+                      <position x="272" y="312"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="COLUMN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="96"/>
+                    <connection refLocalId="9">
+                      <position x="312" y="344"/>
+                      <position x="272" y="344"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="ACK">
+                  <connectionPointOut>
+                    <relPosition x="160" y="32"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="RESULT">
+                  <connectionPointOut>
+                    <relPosition x="160" y="64"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <inVariable localId="7" executionOrderId="0" width="88" height="32" negated="false">
+              <position x="184" y="264"/>
+              <connectionPointOut>
+                <relPosition x="88" y="16"/>
+              </connectionPointOut>
+              <expression>CSV_NAME</expression>
+            </inVariable>
+            <inVariable localId="8" executionOrderId="0" width="136" height="32" negated="false">
+              <position x="136" y="296"/>
+              <connectionPointOut>
+                <relPosition x="136" y="16"/>
+              </connectionPointOut>
+              <expression>'Product_Image'</expression>
+            </inVariable>
+            <inVariable localId="9" executionOrderId="0" width="152" height="32" negated="false">
+              <position x="120" y="328"/>
+              <connectionPointOut>
+                <relPosition x="152" y="16"/>
+              </connectionPointOut>
+              <expression>'Parameter_Value'</expression>
+            </inVariable>
+            <outVariable localId="10" executionOrderId="0" width="120" height="32" negated="false">
+              <position x="720" y="296"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="11" formalParameter="OUT">
+                  <position x="720" y="312"/>
+                  <position x="651" y="312"/>
+                </connection>
+              </connectionPointIn>
+              <expression>Product_Image</expression>
+            </outVariable>
+            <block localId="11" typeName="STRING_TO_INT" executionOrderId="0" width="123" height="80">
+              <position x="528" y="247"/>
+              <inputVariables>
+                <variable formalParameter="EN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="33"/>
+                    <connection refLocalId="6" formalParameter="ACK">
+                      <position x="528" y="280"/>
+                      <position x="472" y="280"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="65"/>
+                    <connection refLocalId="6" formalParameter="RESULT">
+                      <position x="528" y="312"/>
+                      <position x="472" y="312"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="ENO">
+                  <connectionPointOut>
+                    <relPosition x="123" y="33"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="123" y="65"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <block localId="12" typeName="csv_read_by_string" instanceName="csv_read_by_string2" executionOrderId="0" width="160" height="112">
+              <position x="312" y="408"/>
+              <inputVariables>
+                <variable formalParameter="FILE_NAME">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="13">
+                      <position x="312" y="440"/>
+                      <position x="272" y="440"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="ROW">
+                  <connectionPointIn>
+                    <relPosition x="0" y="64"/>
+                    <connection refLocalId="14">
+                      <position x="312" y="472"/>
+                      <position x="272" y="472"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="COLUMN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="96"/>
+                    <connection refLocalId="15">
+                      <position x="312" y="504"/>
+                      <position x="272" y="504"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="ACK">
+                  <connectionPointOut>
+                    <relPosition x="160" y="32"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="RESULT">
+                  <connectionPointOut>
+                    <relPosition x="160" y="64"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <inVariable localId="13" executionOrderId="0" width="88" height="32" negated="false">
+              <position x="184" y="424"/>
+              <connectionPointOut>
+                <relPosition x="88" y="16"/>
+              </connectionPointOut>
+              <expression>CSV_NAME</expression>
+            </inVariable>
+            <inVariable localId="14" executionOrderId="0" width="160" height="32" negated="false">
+              <position x="112" y="456"/>
+              <connectionPointOut>
+                <relPosition x="160" y="16"/>
+              </connectionPointOut>
+              <expression>'Step_1_Bake_Time'</expression>
+            </inVariable>
+            <inVariable localId="15" executionOrderId="0" width="152" height="32" negated="false">
+              <position x="120" y="488"/>
+              <connectionPointOut>
+                <relPosition x="152" y="16"/>
+              </connectionPointOut>
+              <expression>'Parameter_Value'</expression>
+            </inVariable>
+            <outVariable localId="16" executionOrderId="0" width="141" height="35" negated="false">
+              <position x="720" y="456"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="17" formalParameter="OUT">
+                  <position x="720" y="472"/>
+                  <position x="656" y="472"/>
+                </connection>
+              </connectionPointIn>
+              <expression>Step_1_Bake_Time</expression>
+            </outVariable>
+            <block localId="17" typeName="STRING_TO_DINT" executionOrderId="0" width="128" height="80">
+              <position x="528" y="407"/>
+              <inputVariables>
+                <variable formalParameter="EN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="33"/>
+                    <connection refLocalId="12" formalParameter="ACK">
+                      <position x="528" y="440"/>
+                      <position x="472" y="440"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="65"/>
+                    <connection refLocalId="12" formalParameter="RESULT">
+                      <position x="528" y="472"/>
+                      <position x="472" y="472"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="ENO">
+                  <connectionPointOut>
+                    <relPosition x="128" y="33"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="128" y="65"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <block localId="18" typeName="csv_read_by_string" instanceName="csv_read_by_string3" executionOrderId="0" width="160" height="112">
+              <position x="312" y="576"/>
+              <inputVariables>
+                <variable formalParameter="FILE_NAME">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="19">
+                      <position x="312" y="608"/>
+                      <position x="272" y="608"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="ROW">
+                  <connectionPointIn>
+                    <relPosition x="0" y="64"/>
+                    <connection refLocalId="20">
+                      <position x="312" y="640"/>
+                      <position x="272" y="640"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="COLUMN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="96"/>
+                    <connection refLocalId="21">
+                      <position x="312" y="672"/>
+                      <position x="272" y="672"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="ACK">
+                  <connectionPointOut>
+                    <relPosition x="160" y="32"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="RESULT">
+                  <connectionPointOut>
+                    <relPosition x="160" y="64"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <inVariable localId="19" executionOrderId="0" width="88" height="32" negated="false">
+              <position x="184" y="592"/>
+              <connectionPointOut>
+                <relPosition x="88" y="16"/>
+              </connectionPointOut>
+              <expression>CSV_NAME</expression>
+            </inVariable>
+            <inVariable localId="20" executionOrderId="0" width="160" height="32" negated="false">
+              <position x="112" y="624"/>
+              <connectionPointOut>
+                <relPosition x="160" y="16"/>
+              </connectionPointOut>
+              <expression>'Step_1_Bake_Temp'</expression>
+            </inVariable>
+            <inVariable localId="21" executionOrderId="0" width="152" height="32" negated="false">
+              <position x="120" y="656"/>
+              <connectionPointOut>
+                <relPosition x="152" y="16"/>
+              </connectionPointOut>
+              <expression>'Parameter_Value'</expression>
+            </inVariable>
+            <outVariable localId="22" executionOrderId="0" width="144" height="38" negated="false">
+              <position x="720" y="624"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="23" formalParameter="OUT">
+                  <position x="720" y="640"/>
+                  <position x="656" y="640"/>
+                </connection>
+              </connectionPointIn>
+              <expression>Step_1_Bake_Temp</expression>
+            </outVariable>
+            <block localId="24" typeName="csv_read_by_string" instanceName="csv_read_by_string4" executionOrderId="0" width="160" height="112">
+              <position x="312" y="744"/>
+              <inputVariables>
+                <variable formalParameter="FILE_NAME">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="25">
+                      <position x="312" y="776"/>
+                      <position x="272" y="776"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="ROW">
+                  <connectionPointIn>
+                    <relPosition x="0" y="64"/>
+                    <connection refLocalId="26">
+                      <position x="312" y="808"/>
+                      <position x="272" y="808"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="COLUMN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="96"/>
+                    <connection refLocalId="27">
+                      <position x="312" y="840"/>
+                      <position x="272" y="840"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="ACK">
+                  <connectionPointOut>
+                    <relPosition x="160" y="32"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="RESULT">
+                  <connectionPointOut>
+                    <relPosition x="160" y="64"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <inVariable localId="25" executionOrderId="0" width="88" height="32" negated="false">
+              <position x="184" y="760"/>
+              <connectionPointOut>
+                <relPosition x="88" y="16"/>
+              </connectionPointOut>
+              <expression>CSV_NAME</expression>
+            </inVariable>
+            <inVariable localId="26" executionOrderId="0" width="160" height="32" negated="false">
+              <position x="112" y="792"/>
+              <connectionPointOut>
+                <relPosition x="160" y="16"/>
+              </connectionPointOut>
+              <expression>'Step_2_Bake_Time'</expression>
+            </inVariable>
+            <inVariable localId="27" executionOrderId="0" width="152" height="32" negated="false">
+              <position x="120" y="824"/>
+              <connectionPointOut>
+                <relPosition x="152" y="16"/>
+              </connectionPointOut>
+              <expression>'Parameter_Value'</expression>
+            </inVariable>
+            <outVariable localId="28" executionOrderId="0" width="150" height="44" negated="false">
+              <position x="720" y="784"/>
+              <connectionPointIn>
+                <relPosition x="0" y="24"/>
+                <connection refLocalId="29" formalParameter="OUT">
+                  <position x="720" y="808"/>
+                  <position x="656" y="808"/>
+                </connection>
+              </connectionPointIn>
+              <expression>Step_2_Bake_Time</expression>
+            </outVariable>
+            <block localId="30" typeName="csv_read_by_string" instanceName="csv_read_by_string5" executionOrderId="0" width="160" height="112">
+              <position x="312" y="912"/>
+              <inputVariables>
+                <variable formalParameter="FILE_NAME">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="31">
+                      <position x="312" y="944"/>
+                      <position x="272" y="944"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="ROW">
+                  <connectionPointIn>
+                    <relPosition x="0" y="64"/>
+                    <connection refLocalId="32">
+                      <position x="312" y="976"/>
+                      <position x="272" y="976"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="COLUMN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="96"/>
+                    <connection refLocalId="33">
+                      <position x="312" y="1008"/>
+                      <position x="272" y="1008"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="ACK">
+                  <connectionPointOut>
+                    <relPosition x="160" y="32"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="RESULT">
+                  <connectionPointOut>
+                    <relPosition x="160" y="64"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <inVariable localId="31" executionOrderId="0" width="88" height="32" negated="false">
+              <position x="184" y="928"/>
+              <connectionPointOut>
+                <relPosition x="88" y="16"/>
+              </connectionPointOut>
+              <expression>CSV_NAME</expression>
+            </inVariable>
+            <inVariable localId="32" executionOrderId="0" width="160" height="32" negated="false">
+              <position x="112" y="960"/>
+              <connectionPointOut>
+                <relPosition x="160" y="16"/>
+              </connectionPointOut>
+              <expression>'Step_2_Bake_Temp'</expression>
+            </inVariable>
+            <inVariable localId="33" executionOrderId="0" width="152" height="32" negated="false">
+              <position x="120" y="992"/>
+              <connectionPointOut>
+                <relPosition x="152" y="16"/>
+              </connectionPointOut>
+              <expression>'Parameter_Value'</expression>
+            </inVariable>
+            <outVariable localId="34" executionOrderId="0" width="147" height="41" negated="false">
+              <position x="720" y="960"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="35" formalParameter="OUT">
+                  <position x="720" y="976"/>
+                  <position x="656" y="976"/>
+                </connection>
+              </connectionPointIn>
+              <expression>Step_2_Bake_Temp</expression>
+            </outVariable>
+            <block localId="23" typeName="STRING_TO_DINT" executionOrderId="0" width="128" height="80">
+              <position x="528" y="576"/>
+              <inputVariables>
+                <variable formalParameter="EN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="18" formalParameter="ACK">
+                      <position x="528" y="608"/>
+                      <position x="472" y="608"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="64"/>
+                    <connection refLocalId="18" formalParameter="RESULT">
+                      <position x="528" y="640"/>
+                      <position x="472" y="640"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="ENO">
+                  <connectionPointOut>
+                    <relPosition x="128" y="32"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="128" y="64"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <block localId="29" typeName="STRING_TO_DINT" executionOrderId="0" width="128" height="80">
+              <position x="528" y="744"/>
+              <inputVariables>
+                <variable formalParameter="EN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="24" formalParameter="ACK">
+                      <position x="528" y="776"/>
+                      <position x="472" y="776"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="64"/>
+                    <connection refLocalId="24" formalParameter="RESULT">
+                      <position x="528" y="808"/>
+                      <position x="472" y="808"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="ENO">
+                  <connectionPointOut>
+                    <relPosition x="128" y="32"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="128" y="64"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <block localId="35" typeName="STRING_TO_DINT" executionOrderId="0" width="128" height="80">
+              <position x="528" y="913"/>
+              <inputVariables>
+                <variable formalParameter="EN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="31"/>
+                    <connection refLocalId="30" formalParameter="ACK">
+                      <position x="528" y="944"/>
+                      <position x="472" y="944"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="63"/>
+                    <connection refLocalId="30" formalParameter="RESULT">
+                      <position x="528" y="976"/>
+                      <position x="472" y="976"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="ENO">
+                  <connectionPointOut>
+                    <relPosition x="128" y="31"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="128" y="63"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <outVariable localId="42" executionOrderId="0" width="72" height="32" negated="false">
+              <position x="1264" y="104"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="43" formalParameter="OUT">
+                  <position x="1264" y="120"/>
+                  <position x="1229" y="120"/>
+                </connection>
+              </connectionPointIn>
+              <expression>SUCCESS</expression>
+            </outVariable>
+            <block localId="43" typeName="AND" executionOrderId="0" width="69" height="168">
+              <position x="1160" y="88"/>
+              <inputVariables>
+                <variable formalParameter="IN1">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="45">
+                      <position x="1160" y="120"/>
+                      <position x="1130" y="120"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN2">
+                  <connectionPointIn>
+                    <relPosition x="0" y="56"/>
+                    <connection refLocalId="47">
+                      <position x="1160" y="144"/>
+                      <position x="1130" y="144"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN3">
+                  <connectionPointIn>
+                    <relPosition x="0" y="80"/>
+                    <connection refLocalId="49">
+                      <position x="1160" y="168"/>
+                      <position x="1130" y="168"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN4">
+                  <connectionPointIn>
+                    <relPosition x="0" y="104"/>
+                    <connection refLocalId="51">
+                      <position x="1160" y="192"/>
+                      <position x="1130" y="192"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN5">
+                  <connectionPointIn>
+                    <relPosition x="0" y="128"/>
+                    <connection refLocalId="53">
+                      <position x="1160" y="216"/>
+                      <position x="1130" y="216"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN6">
+                  <connectionPointIn>
+                    <relPosition x="0" y="152"/>
+                    <connection refLocalId="55">
+                      <position x="1160" y="240"/>
+                      <position x="1130" y="240"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="69" y="32"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <connector name="Connection0" localId="44" width="125" height="27">
+              <position x="715" y="104"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="2" formalParameter="ACK">
+                  <position x="715" y="120"/>
+                  <position x="472" y="120"/>
+                </connection>
+              </connectionPointIn>
+            </connector>
+            <continuation name="Connection0" localId="45" width="125" height="27">
+              <position x="1005" y="104"/>
+              <connectionPointOut>
+                <relPosition x="125" y="16"/>
+              </connectionPointOut>
+            </continuation>
+            <connector name="Connection1" localId="46" width="125" height="27">
+              <position x="715" y="264"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="11" formalParameter="ENO">
+                  <position x="715" y="280"/>
+                  <position x="651" y="280"/>
+                </connection>
+              </connectionPointIn>
+            </connector>
+            <continuation name="Connection1" localId="47" width="125" height="27">
+              <position x="1005" y="128"/>
+              <connectionPointOut>
+                <relPosition x="125" y="16"/>
+              </connectionPointOut>
+            </continuation>
+            <connector name="Connection2" localId="48" width="125" height="27">
+              <position x="715" y="424"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="17" formalParameter="ENO">
+                  <position x="715" y="440"/>
+                  <position x="656" y="440"/>
+                </connection>
+              </connectionPointIn>
+            </connector>
+            <continuation name="Connection2" localId="49" width="125" height="27">
+              <position x="1005" y="152"/>
+              <connectionPointOut>
+                <relPosition x="125" y="16"/>
+              </connectionPointOut>
+            </continuation>
+            <connector name="Connection3" localId="50" width="125" height="27">
+              <position x="715" y="592"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="23" formalParameter="ENO">
+                  <position x="715" y="608"/>
+                  <position x="656" y="608"/>
+                </connection>
+              </connectionPointIn>
+            </connector>
+            <continuation name="Connection3" localId="51" width="125" height="27">
+              <position x="1005" y="176"/>
+              <connectionPointOut>
+                <relPosition x="125" y="16"/>
+              </connectionPointOut>
+            </continuation>
+            <connector name="Connection4" localId="52" width="125" height="27">
+              <position x="715" y="760"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="29" formalParameter="ENO">
+                  <position x="715" y="776"/>
+                  <position x="656" y="776"/>
+                </connection>
+              </connectionPointIn>
+            </connector>
+            <continuation name="Connection4" localId="53" width="125" height="27">
+              <position x="1005" y="200"/>
+              <connectionPointOut>
+                <relPosition x="125" y="16"/>
+              </connectionPointOut>
+            </continuation>
+            <connector name="Connection5" localId="54" width="125" height="27">
+              <position x="715" y="928"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="35" formalParameter="ENO">
+                  <position x="715" y="944"/>
+                  <position x="656" y="944"/>
+                </connection>
+              </connectionPointIn>
+            </connector>
+            <continuation name="Connection5" localId="55" width="125" height="27">
+              <position x="1005" y="224"/>
+              <connectionPointOut>
+                <relPosition x="125" y="16"/>
+              </connectionPointOut>
+            </continuation>
+          </FBD>
+        </body>
+        <documentation>
+          <xhtml:p><![CDATA[Read CSV file of type A]]></xhtml:p>
+        </documentation>
+      </pou>
+    </pous>
+  </types>
+  <instances>
+    <configurations>
+      <configuration name="config">
+        <resource name="resource1">
+          <task name="task0" priority="0" interval="T#20ms">
+            <pouInstance name="instance0" typeName="program0"/>
+          </task>
+        </resource>
+      </configuration>
+    </configurations>
+  </instances>
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/exemples/csv_by_string/svghmi_0@svghmi/baseconfnode.xml	Fri Feb 07 18:42:43 2025 +0100
@@ -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/exemples/csv_by_string/svghmi_0@svghmi/confnode.xml	Fri Feb 07 18:42:43 2025 +0100
@@ -0,0 +1,2 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SVGHMI xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/exemples/csv_by_string/svghmi_0@svghmi/svghmi.svg	Fri Feb 07 18:42:43 2025 +0100
@@ -0,0 +1,1814 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
+   sodipodi:docname="svghmi.svg"
+   id="hmi0"
+   version="1.1"
+   viewBox="0 0 1280 720"
+   height="720"
+   width="1280">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6">
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3492"
+       id="radialGradient3514"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4681866,-0.02473347,0.01595521,0.5306128,3839.5399,691.78474)"
+       cx="958.08276"
+       cy="613.50269"
+       fx="958.08276"
+       fy="613.50269"
+       r="163.49561" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3492">
+      <stop
+         style="stop-color:#ffe7c7;stop-opacity:1"
+         offset="0"
+         id="stop3488" />
+      <stop
+         style="stop-color:#ffa32a;stop-opacity:1"
+         offset="1"
+         id="stop3490" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3492"
+       id="radialGradient10028"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4681866,-0.02473347,0.01595521,0.5306128,3839.5399,1115.9357)"
+       cx="958.08276"
+       cy="613.50269"
+       fx="958.08276"
+       fy="613.50269"
+       r="163.49561" />
+  </defs>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1850"
+     inkscape:window-height="909"
+     id="namedview4"
+     showgrid="false"
+     inkscape:zoom="0.32777778"
+     inkscape:cx="-330.62448"
+     inkscape:cy="-900.61006"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="hmi0"
+     inkscape:pagecheckerboard="0" />
+  <rect
+     inkscape:label="HMI:Page:Home"
+     y="0"
+     x="0"
+     height="720"
+     width="1280"
+     id="rect1016"
+     style="color:#000000;opacity:1;fill:#d6d6d6;fill-opacity:1" />
+  <g
+     style="stroke-width:0.377115"
+     inkscape:label="HMI:Input@/CURRENT_CSV"
+     transform="matrix(0.75813069,0,0,0.75813069,298.48618,17.66828)"
+     id="g112">
+    <text
+       inkscape:label="value"
+       id="text102"
+       y="192.18758"
+       x="-257.78806"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:62.1669px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff8c00;fill-opacity:1;stroke:none;stroke-width:0.377115px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:62.1669px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff8c00;stroke-width:0.377115px"
+         y="192.18758"
+         x="-257.78806"
+         id="tspan100"
+         sodipodi:role="line">file.csv</tspan></text>
+    <rect
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.88558;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       id="rect106"
+       width="456.29868"
+       height="128"
+       x="-359.35144"
+       y="95.40741"
+       onclick=""
+       inkscape:label="edit" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="196.74792"
+     y="81.446617"
+     id="text116"><tspan
+       sodipodi:role="line"
+       id="tspan114"
+       x="196.74792"
+       y="81.446617">Current CSV name</tspan></text>
+  <g
+     id="g4278"
+     style="fill-rule:evenodd;stroke-width:0.47631353"
+     transform="matrix(3.3549332,0,0,3.14525,-181.87457,1036.0198)"
+     inkscape:label="HMI:Keypad:HMI_STRING:HMI_LOCAL:PAGE_LOCAL">
+    <path
+       sodipodi:nodetypes="ccccc"
+       inkscape:label="Background"
+       inkscape:connector-curvature="0"
+       id="rect1006-3"
+       d="M 54.211084,1.2654702 H 435.7388 V 230.18209 H 54.211084 Z"
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.6;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.16776976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+    <path
+       inkscape:label="Space"
+       inkscape:connector-curvature="0"
+       d="m 162,197 h -11 c -2,0 -3,1 -3,3 v 18 c 0,2 1,3 3,3 h 11 168 18 c 0,0 1,-1 1,-3 v -18 c 0,-2 -1,-3 -1,-3 h -18 z"
+       id="path185"
+       style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <g
+       transform="translate(0,-19.076386)"
+       style="stroke-width:0.47631353"
+       inkscape:label="Keys"
+       id="g4380">
+      <g
+         transform="translate(0,-9.5381931)"
+         style="stroke-width:0.47631353"
+         inkscape:label="q Q"
+         id="g4283">
+        <path
+           inkscape:connector-curvature="0"
+           d="m 95,121 h 19 c 2,0 3,1 3,3 v 18 c 0,1 -1,3 -3,3 H 95 c -1,0 -3,-2 -3,-3 v -18 c 0,-2 2,-3 3,-3 z"
+           id="path41"
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826"
+           id="text203"
+           y="138.28395"
+           x="99.378708">Q</text>
+      </g>
+      <g
+         transform="translate(0,-9.5381931)"
+         style="stroke-width:0.47631353"
+         inkscape:label="w W"
+         id="g4337">
+        <path
+           inkscape:connector-curvature="0"
+           d="m 124,121 h 20 c 2,0 3,1 3,3 v 18 c 0,1 -1,3 -3,3 h -20 c -1,0 -3,-2 -3,-3 v -18 c 0,-2 2,-3 3,-3 z"
+           id="path43"
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826"
+           id="text207"
+           y="138.28395"
+           x="127.0709">W</text>
+      </g>
+      <g
+         transform="translate(0,-9.5381931)"
+         style="stroke-width:0.47631353"
+         inkscape:label="e E"
+         id="g4332">
+        <path
+           inkscape:connector-curvature="0"
+           d="m 154,121 h 20 c 2,0 3,1 3,3 v 18 c 0,1 -1,3 -3,3 h -20 c -1,0 -3,-2 -3,-3 v -18 c 0,-2 2,-3 3,-3 z"
+           id="path45"
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826"
+           id="text211"
+           y="138.28395"
+           x="159.70854">E</text>
+      </g>
+      <g
+         transform="translate(0,-9.5381931)"
+         style="stroke-width:0.47631353"
+         inkscape:label="r R"
+         id="g4326">
+        <path
+           inkscape:connector-curvature="0"
+           d="m 184,121 h 19 c 2,0 3,1 3,3 v 18 c 0,1 -1,3 -3,3 h -19 c -1,0 -3,-2 -3,-3 v -18 c 0,-2 2,-3 3,-3 z"
+           id="path47"
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826"
+           id="text215"
+           y="138.28395"
+           x="188.39003">R</text>
+      </g>
+      <g
+         transform="translate(0,-9.5381931)"
+         style="stroke-width:0.47631353"
+         inkscape:label="t T"
+         id="g4321">
+        <path
+           inkscape:connector-curvature="0"
+           d="m 213,121 h 20 c 2,0 3,1 3,3 v 18 c 0,1 -1,3 -3,3 h -20 c -1,0 -2,-2 -2,-3 v -18 c 0,-2 1,-3 2,-3 z"
+           id="path49"
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826"
+           id="text219"
+           y="138.28395"
+           x="219.04961">T</text>
+      </g>
+      <g
+         transform="translate(0,-9.5381931)"
+         style="stroke-width:0.47631353"
+         inkscape:label="y Y"
+         id="g4316">
+        <path
+           inkscape:connector-curvature="0"
+           d="m 243,121 h 20 c 2,0 3,1 3,3 v 18 c 0,1 -1,3 -3,3 h -20 c -1,0 -2,-2 -2,-3 v -18 c 0,-2 1,-3 2,-3 z"
+           id="path51"
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826"
+           id="text223"
+           y="138.28395"
+           x="248.72017">Y</text>
+      </g>
+      <g
+         transform="translate(0,-9.5381931)"
+         style="stroke-width:0.47631353"
+         inkscape:label="u U"
+         id="g4311">
+        <path
+           inkscape:connector-curvature="0"
+           d="m 273,121 h 20 c 2,0 3,1 3,3 v 18 c 0,1 -1,3 -3,3 h -20 c -1,0 -2,-2 -2,-3 v -18 c 0,-2 1,-3 2,-3 z"
+           id="path53"
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826"
+           id="text227"
+           y="138.28395"
+           x="278.39075">U</text>
+      </g>
+      <g
+         transform="translate(0,-9.5381931)"
+         style="stroke-width:0.47631353"
+         inkscape:label="i I"
+         id="g4306">
+        <path
+           inkscape:connector-curvature="0"
+           d="m 302,121 h 20 c 2,0 3,1 3,3 v 18 c 0,1 -1,3 -3,3 h -20 c -1,0 -2,-2 -2,-3 v -18 c 0,-2 1,-3 2,-3 z"
+           id="path55"
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826"
+           id="text231"
+           y="138.28395"
+           x="311.02859">I</text>
+      </g>
+      <g
+         transform="translate(0,-9.5381931)"
+         style="stroke-width:0.47631353"
+         inkscape:label="o O"
+         id="g4301">
+        <path
+           inkscape:connector-curvature="0"
+           d="m 332,121 h 20 c 2,0 3,1 3,3 v 18 c 0,1 -1,3 -3,3 h -20 c -1,0 -2,-2 -2,-3 v -18 c 0,-2 1,-3 2,-3 z"
+           id="path57"
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826"
+           id="text235"
+           y="138.28395"
+           x="336.74319">O</text>
+      </g>
+      <g
+         transform="translate(0,-9.5381931)"
+         style="stroke-width:0.47631353"
+         inkscape:label="p P"
+         id="g4296">
+        <path
+           inkscape:connector-curvature="0"
+           d="m 362,121 h 20 c 2,0 3,1 3,3 v 18 c 0,1 -1,3 -3,3 h -20 c -1,0 -2,-2 -2,-3 v -18 c 0,-2 1,-3 2,-3 z"
+           id="path59"
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826"
+           id="text239"
+           y="138.28395"
+           x="367.40256">P</text>
+      </g>
+      <g
+         inkscape:label="a A"
+         id="g4511"
+         style="fill-rule:evenodd;stroke-width:0.47631353">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path65"
+           d="m 103,147 h 19 c 1,0 3,1 3,2 v 19 c 0,1 -2,2 -3,2 h -19 c -2,0 -3,-1 -3,-2 v -19 c 0,-1 1,-2 3,-2 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="107.29005"
+           y="163.99854"
+           id="text243"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">A</text>
+      </g>
+      <g
+         inkscape:label="s S"
+         id="g4516"
+         style="fill-rule:evenodd;stroke-width:0.47631353">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path67"
+           d="m 132,147 h 20 c 1,0 3,1 3,2 v 19 c 0,1 -2,2 -3,2 h -20 c -2,0 -3,-1 -3,-2 v -19 c 0,-1 1,-2 3,-2 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="137.95012"
+           y="163.99854"
+           id="text247"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">S</text>
+      </g>
+      <g
+         inkscape:label="d D"
+         id="g4521"
+         style="fill-rule:evenodd;stroke-width:0.47631353">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path69"
+           d="m 162,147 h 20 c 2,0 3,1 3,2 v 19 c 0,1 -1,2 -3,2 h -20 c -2,0 -3,-1 -3,-2 v -19 c 0,-1 1,-2 3,-2 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="166.63159"
+           y="163.99854"
+           id="text251"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">D</text>
+      </g>
+      <g
+         inkscape:label="f F"
+         id="g4526"
+         style="fill-rule:evenodd;stroke-width:0.47631353">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path71"
+           d="m 192,147 h 19 c 2,0 3,1 3,2 v 19 c 0,1 -1,2 -3,2 h -19 c -2,0 -3,-1 -3,-2 v -19 c 0,-1 1,-2 3,-2 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="197.29166"
+           y="163.99854"
+           id="text255"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">F</text>
+      </g>
+      <g
+         inkscape:label="g G"
+         id="g4531"
+         style="fill-rule:evenodd;stroke-width:0.47631353">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path73"
+           d="m 221,147 h 20 c 2,0 3,1 3,2 v 19 c 0,1 -1,2 -3,2 h -20 c -2,0 -3,-1 -3,-2 v -19 c 0,-1 1,-2 3,-2 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="225.97284"
+           y="163.99854"
+           id="text259"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">G</text>
+      </g>
+      <g
+         inkscape:label="h H"
+         id="g4536"
+         style="fill-rule:evenodd;stroke-width:0.47631353">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path75"
+           d="m 251,147 h 20 c 2,0 3,1 3,2 v 19 c 0,1 -1,2 -3,2 h -20 c -1,0 -3,-1 -3,-2 v -19 c 0,-1 2,-2 3,-2 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="255.64342"
+           y="163.99854"
+           id="text263"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">H</text>
+      </g>
+      <g
+         inkscape:label="j J"
+         id="g4541"
+         style="fill-rule:evenodd;stroke-width:0.47631353">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path77"
+           d="m 281,147 h 19 c 2,0 3,1 3,2 v 19 c 0,1 -1,2 -3,2 h -19 c -1,0 -3,-1 -3,-2 v -19 c 0,-1 2,-2 3,-2 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="287.29208"
+           y="163.99854"
+           id="text267"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">J</text>
+      </g>
+      <g
+         inkscape:label="k K"
+         id="g4546"
+         style="fill-rule:evenodd;stroke-width:0.47631353">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path79"
+           d="m 310,147 h 20 c 2,0 3,1 3,2 v 19 c 0,1 -1,2 -3,2 h -20 c -1,0 -3,-1 -3,-2 v -19 c 0,-1 2,-2 3,-2 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="314.98465"
+           y="163.99854"
+           id="text271"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">K</text>
+      </g>
+      <g
+         inkscape:label="l L"
+         id="g4551"
+         style="fill-rule:evenodd;stroke-width:0.47631353">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path81"
+           d="m 340,147 h 20 c 2,0 3,1 3,2 v 19 c 0,1 -1,2 -3,2 h -20 c -1,0 -3,-1 -3,-2 v -19 c 0,-1 2,-2 3,-2 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="345.64444"
+           y="163.99854"
+           id="text275"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">L</text>
+      </g>
+      <g
+         transform="translate(0,9.5381929)"
+         inkscape:label="z Z"
+         id="g4586"
+         style="fill-rule:evenodd;stroke-width:0.47631353">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path87-3"
+           d="m 113,172 h 21 c 1,0 2,2 2,3 v 17 c 0,2 -1,3 -2,3 h -21 c -1,0 -2,-1 -2,-3 v -17 c 0,-1 1,-3 2,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="119.15855"
+           y="188.72411"
+           id="text279"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">Z</text>
+      </g>
+      <g
+         transform="translate(0,9.5381929)"
+         inkscape:label="x X"
+         id="g4581"
+         style="fill-rule:evenodd;stroke-width:0.47631353">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path89-6"
+           d="m 143,172 h 21 c 1,0 2,2 2,3 v 17 c 0,2 -1,3 -2,3 h -21 c -1,0 -2,-1 -2,-3 v -17 c 0,-1 1,-3 2,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="148.82933"
+           y="188.72411"
+           id="text283"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">X</text>
+      </g>
+      <g
+         transform="translate(0,9.5381929)"
+         inkscape:label="c C"
+         id="g4576"
+         style="fill-rule:evenodd;stroke-width:0.47631353">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path91-7"
+           d="m 173,172 h 21 c 1,0 2,2 2,3 v 17 c 0,2 -1,3 -2,3 h -21 c -1,0 -2,-1 -2,-3 v -17 c 0,-1 1,-3 2,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="178.50011"
+           y="188.72411"
+           id="text287"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">C</text>
+      </g>
+      <g
+         transform="translate(0,9.5381929)"
+         inkscape:label="v V"
+         id="g4571"
+         style="fill-rule:evenodd;stroke-width:0.47631353">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path195"
+           d="m 202,172 h 21 c 1,0 2,2 2,3 v 17 c 0,2 -1,3 -2,3 h -21 c 0,0 -1,-1 -1,-3 v -17 c 0,-1 1,-3 1,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="208.16988"
+           y="188.72411"
+           id="text291"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">V</text>
+      </g>
+      <g
+         transform="translate(0,9.5381929)"
+         inkscape:label="b B"
+         id="g4566"
+         style="fill-rule:evenodd;stroke-width:0.47631353">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path93"
+           d="m 233,172 h 20 c 1,0 2,2 2,3 v 17 c 0,2 -1,3 -2,3 h -20 c -2,0 -3,-1 -3,-3 v -17 c 0,-1 1,-3 3,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="237.84096"
+           y="188.72411"
+           id="text295"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">B</text>
+      </g>
+      <g
+         transform="translate(0,9.5381929)"
+         inkscape:label="n N"
+         id="g4561"
+         style="fill-rule:evenodd;stroke-width:0.47631353">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path95"
+           d="m 263,172 h 20 c 1,0 2,2 2,3 v 17 c 0,2 -1,3 -2,3 h -20 c -2,0 -3,-1 -3,-3 v -17 c 0,-1 1,-3 3,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="267.51193"
+           y="188.72411"
+           id="text299"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">N</text>
+      </g>
+      <g
+         transform="translate(0,9.5381929)"
+         inkscape:label="m M"
+         id="g4556"
+         style="fill-rule:evenodd;stroke-width:0.47631353">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path97"
+           d="m 293,172 h 19 c 1,0 2,2 2,3 v 17 c 0,2 -1,3 -2,3 h -19 c -2,0 -3,-1 -3,-3 v -17 c 0,-1 1,-3 3,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="296.1933"
+           y="188.72411"
+           id="text303"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">M</text>
+      </g>
+      <g
+         transform="translate(0,9.5381929)"
+         style="stroke-width:0.47631353"
+         inkscape:label=". :"
+         id="g4818">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path101"
+           d="m 352,172 h 20 c 1,0 2,2 2,3 v 17 c 0,2 -1,3 -2,3 h -20 c -2,0 -3,-1 -3,-3 v -17 c 0,-1 1,-3 3,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           x="359.58276"
+           y="189.66107"
+           id="text719"
+           style="font-weight:normal;font-size:9.28803921px;font-family:Arial;fill:#2b2828;fill-rule:evenodd;stroke-width:0.36866826"
+           transform="scale(1.0007154,0.99928513)">.</text>
+        <text
+           transform="scale(1.0007154,0.99928512)"
+           style="font-weight:normal;font-size:9.28803921px;font-family:Arial;fill:#2b2828;fill-rule:evenodd;stroke-width:0.36866826"
+           id="text4834"
+           y="181.64532"
+           x="359.58276">:</text>
+      </g>
+      <g
+         transform="translate(0,9.5381929)"
+         style="stroke-width:0.47631353"
+         inkscape:label=", ;"
+         id="g4813">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path99"
+           d="m 322,172 h 20 c 1,0 2,2 2,3 v 17 c 0,2 -1,3 -2,3 h -20 c -2,0 -3,-1 -3,-3 v -17 c 0,-1 1,-3 3,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928512)"
+           x="330.00806"
+           y="181.64532"
+           id="text727"
+           style="font-weight:normal;font-size:9.28803921px;font-family:Arial;fill:#2b2828;fill-rule:evenodd;stroke-width:0.36866826">;</text>
+        <text
+           id="text4826"
+           transform="scale(1.0007154,0.99928512)"
+           x="330.00806"
+           y="189.66107"
+           style="font-weight:normal;font-size:9.28803921px;font-family:Arial;fill:#2b2828;fill-rule:evenodd;stroke-width:0.36866826">,</text>
+      </g>
+      <g
+         transform="translate(-13.353469,-45.783327)"
+         id="g2845"
+         inkscape:label="1"
+         style="stroke-width:0.47631353">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path2839"
+           d="m 95,121 h 19 c 2,0 3,1 3,3 v 18 c 0,1 -1,3 -3,3 H 95 c -1,0 -3,-2 -3,-3 v -18 c 0,-2 2,-3 3,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928513)"
+           x="101.07153"
+           y="138.28395"
+           id="text2841"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">1</text>
+      </g>
+      <g
+         transform="translate(-13.353469,-45.783327)"
+         id="g2853"
+         inkscape:label="2"
+         style="stroke-width:0.47631353">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path2847"
+           d="m 124,121 h 20 c 2,0 3,1 3,3 v 18 c 0,1 -1,3 -3,3 h -20 c -1,0 -3,-2 -3,-3 v -18 c 0,-2 2,-3 3,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928513)"
+           x="130.18704"
+           y="138.28395"
+           id="text2849"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">2</text>
+      </g>
+      <g
+         transform="translate(-13.353469,-45.783327)"
+         style="stroke-width:0.47631353"
+         id="g2861"
+         inkscape:label="3">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path2855"
+           d="m 154,121 h 20 c 2,0 3,1 3,3 v 18 c 0,1 -1,3 -3,3 h -20 c -1,0 -3,-2 -3,-3 v -18 c 0,-2 2,-3 3,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="159.70854"
+           y="138.28395"
+           id="text2857"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">3</text>
+      </g>
+      <g
+         transform="translate(0,-19.076386)"
+         inkscape:label="4"
+         id="g2957">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path2865"
+           d="m 170.64653,94.293059 h 19 c 2,0 3,1 3,3 v 18.000001 c 0,1 -1,3 -3,3 h -19 c -1,0 -3,-2 -3,-3 V 97.293059 c 0,-2 2,-3 3,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="176.39188"
+           y="111.55791"
+           id="text2867"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">4</text>
+      </g>
+      <g
+         transform="translate(0,-19.076386)"
+         inkscape:label="5"
+         id="g2962">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path2873"
+           d="m 199.64653,94.293059 h 20 c 2,0 3,1 3,3 v 18.000001 c 0,1 -1,3 -3,3 h -20 c -1,0 -2,-2 -2,-3 V 97.293059 c 0,-2 1,-3 2,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="205.70567"
+           y="111.55791"
+           id="text2875"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">5</text>
+      </g>
+      <g
+         transform="translate(0,-19.076386)"
+         inkscape:label="6"
+         id="g2967">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path2881"
+           d="m 229.64653,94.293059 h 20 c 2,0 3,1 3,3 v 18.000001 c 0,1 -1,3 -3,3 h -20 c -1,0 -2,-2 -2,-3 V 97.293059 c 0,-2 1,-3 2,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="236.15851"
+           y="111.55791"
+           id="text2883"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">6</text>
+      </g>
+      <g
+         transform="translate(0,-19.076386)"
+         inkscape:label="7"
+         id="g2972">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path2889"
+           d="m 259.64653,94.293059 h 20 c 2,0 3,1 3,3 v 18.000001 c 0,1 -1,3 -3,3 h -20 c -1,0 -2,-2 -2,-3 V 97.293059 c 0,-2 1,-3 2,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="266.06564"
+           y="111.55791"
+           id="text2891"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">7</text>
+      </g>
+      <g
+         transform="translate(0,-19.076386)"
+         inkscape:label="8"
+         id="g2977">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path2897"
+           d="m 288.64653,94.293059 h 20 c 2,0 3,1 3,3 v 18.000001 c 0,1 -1,3 -3,3 h -20 c -1,0 -2,-2 -2,-3 V 97.293059 c 0,-2 1,-3 2,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="295.08231"
+           y="111.55791"
+           id="text2899"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">8</text>
+      </g>
+      <g
+         transform="translate(0,-19.076386)"
+         inkscape:label="9 -"
+         id="g2982">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path2905"
+           d="m 318.64653,94.293059 h 20 c 2,0 3,1 3,3 v 18.000001 c 0,1 -1,3 -3,3 h -20 c -1,0 -2,-2 -2,-3 V 97.293059 c 0,-2 1,-3 2,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="325.05408"
+           y="111.55791"
+           id="text2907"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">9</text>
+        <text
+           style="font-weight:normal;font-size:9.28803921px;font-family:Arial;fill:#2b2828;fill-rule:evenodd;stroke-width:0.36866826"
+           id="text806"
+           y="102.42173"
+           x="335.72681"
+           transform="scale(1.0007154,0.99928511)">-</text>
+      </g>
+      <g
+         transform="translate(0,-19.076386)"
+         inkscape:label="0 +"
+         id="g2987">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path2913"
+           d="m 348.64653,94.293059 h 20 c 2,0 3,1 3,3 v 18.000001 c 0,1 -1,3 -3,3 h -20 c -1,0 -2,-2 -2,-3 V 97.293059 c 0,-2 1,-3 2,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="355.05984"
+           y="111.55791"
+           id="text2915"
+           style="font-weight:normal;font-size:13.93205929px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">0</text>
+        <text
+           x="365.30151"
+           y="102.42173"
+           id="text804"
+           style="font-weight:normal;font-size:9.28803921px;font-family:Arial;fill:#2b2828;fill-rule:evenodd;stroke-width:0.36866826"
+           transform="scale(1.0007154,0.99928511)">+</text>
+      </g>
+    </g>
+    <g
+       style="stroke-width:0.47631353"
+       inkscape:label="Esc"
+       id="g3544"
+       transform="translate(335.89988,-58.934803)">
+      <path
+         sodipodi:nodetypes="sssssssss"
+         inkscape:connector-curvature="0"
+         d="m 47.948645,115.07509 h 39.076386 c 1,0 3,1 3,3 v 18 c 0,1 -2,3 -3,3 H 47.948645 c -2,0 -3,-2 -3,-3 v -18 c 0,-2 1,-3 3,-3 z"
+         id="path105"
+         style="opacity:1;vector-effect:none;fill:#4f4c4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.16824313;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <text
+         x="59.288635"
+         y="130.02028"
+         id="text469"
+         style="font-weight:normal;font-size:9.37966251px;font-family:Arial;fill:#ffffff;fill-rule:evenodd;stroke-width:0.36866826"
+         transform="scale(1.0007154,0.99928512)">Esc</text>
+    </g>
+    <g
+       transform="translate(0,-19.076386)"
+       style="stroke-width:0.47631353"
+       id="g4291"
+       inkscape:label="Enter">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 368.68274,170 c -1,0 -2,-1 -2,-3 v -17 c 0,-1 1,-3 2,-3 h 54.24217 c 2,0 3,2 3,3 v 17 c 0,2 -1,3 -3,3 z"
+         id="path3616"
+         style="opacity:1;vector-effect:none;fill:#4f4c4d;fill-opacity:1;stroke:none;stroke-width:0.16824313;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         sodipodi:nodetypes="sssssssss" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path6545"
+         transform="matrix(0.47690966,0,0,0.47690966,531.12074,-361.18588)"
+         d="m -260.23633,1080.8125 v 15.7949 h -38.68555 v -3 l -6.91992,4 6.91992,4 v -3.0019 h 40.6836 v -17.793 z"
+         style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+    </g>
+    <g
+       transform="translate(2.3648311e-6,-28.614579)"
+       style="fill-rule:evenodd;stroke-width:0.47631353"
+       id="g4287"
+       inkscape:label="BackSpace">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 391.97749,144 c -1,0 -2,-1 -2,-3 v -17 c 0,-1 1,-3 2,-3 h 30.94742 c 2,0 3,2 3,3 v 17 c 0,2 -1,3 -3,3 z"
+         id="path3624"
+         style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         sodipodi:nodetypes="sssssssss" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path11623-1-0"
+         transform="matrix(0.47690966,0,0,0.47690966,531.12074,-351.64769)"
+         d="m -268.72656,1011.1777 -6.91992,4 6.91992,4 v -3.0019 h 29.18945 v -1.9981 h -29.18945 z"
+         style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2b2828;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+    </g>
+    <g
+       inkscape:label="CapsLock"
+       id="g934">
+      <g
+         transform="translate(0,-19.076386)"
+         style="display:inline;fill-rule:evenodd;stroke-width:0.47631353"
+         id="g942"
+         inkscape:label="inactive">
+        <path
+           inkscape:connector-curvature="0"
+           d="m 67.025031,170 c -1,0 -3,-1 -3,-2 v -19 c 0,-1 2,-2 3,-2 H 92 c 2,0 4,1 4,2 v 19 c 0,1 -2,2 -4,2 z"
+           id="path936"
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           sodipodi:nodetypes="sssssssss" />
+        <text
+           transform="scale(1.0007154,0.99928515)"
+           style="font-weight:normal;font-size:8.66233635px;font-family:Arial;fill:#2b2828;stroke-width:0.36866823"
+           id="text938-5"
+           y="156.71973"
+           x="69.789322">Caps</text>
+        <text
+           transform="scale(1.0007154,0.99928515)"
+           style="font-weight:normal;font-size:8.66233635px;font-family:Arial;fill:#2b2828;stroke-width:0.36866823"
+           id="text940"
+           y="166.5585"
+           x="69.789322">Lock</text>
+      </g>
+      <g
+         inkscape:label="active"
+         id="g4429"
+         style="fill-rule:evenodd;stroke-width:0.47631353"
+         transform="translate(0,-19.076386)">
+        <path
+           sodipodi:nodetypes="sssssssss"
+           style="opacity:1;vector-effect:none;fill:#4f4c4d;fill-opacity:1;stroke:none;stroke-width:0.16824313;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path199"
+           d="m 67.025031,170 c -1,0 -3,-1 -3,-2 v -19 c 0,-1 2,-2 3,-2 H 92 c 2,0 4,1 4,2 v 19 c 0,1 -2,2 -4,2 z"
+           inkscape:connector-curvature="0" />
+        <text
+           x="69.789322"
+           y="156.71973"
+           id="text647"
+           style="font-weight:normal;font-size:8.66233635px;font-family:Arial;fill:#ffffff;stroke-width:0.36866823"
+           transform="scale(1.0007154,0.99928515)">Caps</text>
+        <text
+           x="69.789322"
+           y="166.5585"
+           id="text651"
+           style="font-weight:normal;font-size:8.66233635px;font-family:Arial;fill:#ffffff;stroke-width:0.36866823"
+           transform="scale(1.0007154,0.99928515)">Lock</text>
+      </g>
+    </g>
+    <rect
+       inkscape:label="Field"
+       ry="3.8152773"
+       rx="3.8152773"
+       y="15.771065"
+       x="64.024956"
+       height="30.150299"
+       width="361.89996"
+       id="rect2130"
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#fffff5;fill-opacity:1;fill-rule:nonzero;stroke:#202326;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+    <text
+       inkscape:label="Value"
+       id="text1309"
+       y="38.296417"
+       x="72.50132"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:19.0763855px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.47690967px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         style="text-align:start;text-anchor:start;stroke-width:0.47690967px"
+         y="38.296417"
+         x="72.50132"
+         id="tspan1307"
+         sodipodi:role="line">text</tspan></text>
+    <g
+       inkscape:label="Shift"
+       id="g437">
+      <g
+         inkscape:label="inactive"
+         id="g421">
+        <path
+           sodipodi:nodetypes="sssssssss"
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path910"
+           d="m 379.96247,185.46181 c -1,0 -2,-1 -2,-3 v -17 c 0,-1 1,-3 2,-3 h 42.96244 c 2,0 3,2 3,3 v 17 c 0,2 -1,3 -3,3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928513)"
+           x="392.55679"
+           y="177.90059"
+           id="text912"
+           style="font-weight:normal;font-size:8.92098808px;font-family:Arial;fill:#2b2828;stroke-width:0.36866826">Shift</text>
+        <path
+           inkscape:connector-curvature="0"
+           d="m 67.025031,185.46181 c -1,0 -3,-1 -3,-3 v -17 c 0,-1 2,-3 3,-3 H 104 c 1,0 2,2 2,3 v 17 c 0,2 -1,3 -2,3 z"
+           id="path856"
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           sodipodi:nodetypes="sssssssss" />
+        <text
+           transform="scale(1.0007154,0.99928513)"
+           style="font-weight:normal;font-size:8.92098808px;font-family:Arial;fill:#2b2828;fill-rule:evenodd;stroke-width:0.36866826"
+           id="text858"
+           y="177.90059"
+           x="75.85218">Shift</text>
+      </g>
+      <g
+         inkscape:label="active"
+         id="g413">
+        <path
+           inkscape:connector-curvature="0"
+           d="m 379.96247,185.46181 c -1,0 -2,-1 -2,-3 v -17 c 0,-1 1,-3 2,-3 h 42.96244 c 2,0 3,2 3,3 v 17 c 0,2 -1,3 -3,3 z"
+           id="path551"
+           style="opacity:1;vector-effect:none;fill:#4f4c4d;fill-opacity:1;stroke:none;stroke-width:0.16824313;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           sodipodi:nodetypes="sssssssss" />
+        <text
+           style="font-weight:normal;font-size:8.92098808px;font-family:Arial;fill:#ffffff;stroke-width:0.36866826"
+           id="text629"
+           y="177.90059"
+           x="392.55679"
+           transform="scale(1.0007154,0.99928513)">Shift</text>
+        <path
+           sodipodi:nodetypes="sssssssss"
+           style="opacity:1;vector-effect:none;fill:#4f4c4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.16824313;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path879"
+           d="m 67.025031,185.46181 c -1,0 -3,-1 -3,-3 v -17 c 0,-1 2,-3 3,-3 H 104 c 1,0 2,2 2,3 v 17 c 0,2 -1,3 -2,3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           x="75.85218"
+           y="177.90059"
+           id="text881"
+           style="font-weight:normal;font-size:8.92098808px;font-family:Arial;fill:#ffffff;fill-rule:evenodd;stroke-width:0.36866826"
+           transform="scale(1.0007154,0.99928513)">Shift</text>
+      </g>
+    </g>
+    <text
+       inkscape:label="Info"
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.31375408px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.30784383px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="252.9579"
+       y="12.333657"
+       id="text471"
+       transform="scale(0.96824588,1.0327955)"><tspan
+         sodipodi:role="line"
+         id="tspan469"
+         x="252.9579"
+         y="12.333657"
+         style="stroke-width:0.30784383px">information</tspan></text>
+  </g>
+  <g
+     transform="matrix(3.3549332,0,0,3.14525,-181.87461,1836.0198)"
+     style="fill-rule:evenodd;stroke-width:0.47631353"
+     id="g2432"
+     inkscape:label="HMI:Keypad:HMI_INT:HMI_REAL:HMI_DINT">
+    <path
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.6;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.16776976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       d="M 54.211099,1.2654702 H 435.73881 V 230.18209 H 54.211099 Z"
+       id="path2136"
+       inkscape:connector-curvature="0"
+       inkscape:label="Background"
+       sodipodi:nodetypes="ccccc" />
+    <rect
+       inkscape:label="Field"
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#fffff5;fill-opacity:1;fill-rule:nonzero;stroke:#202326;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       id="rect2426"
+       width="361.89996"
+       height="30.150299"
+       x="64.024963"
+       y="15.77106"
+       rx="3.8152773"
+       ry="3.8152773" />
+    <text
+       inkscape:label="Value"
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:19.0763855px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.47690967px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="72.50132"
+       y="37.408375"
+       id="text2430"><tspan
+         sodipodi:role="line"
+         id="tspan2428"
+         x="72.50132"
+         y="37.408375"
+         style="text-align:start;text-anchor:start;stroke-width:0.47690967px">number</tspan></text>
+    <g
+       transform="matrix(1.6700128,0,0,1.6700128,-826.83854,-145.60855)"
+       id="g4947"
+       inkscape:label="Enter"
+       style="fill-rule:evenodd;stroke-width:0.13585199">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 750,175 c 0,-2 -1,-3 -3,-3 h -20 c -1,0 -3,1 -3,3 v 43 c 0,1 2,2 3,2 h 20 c 2,0 3,-1 3,-2 z"
+         id="path193"
+         style="opacity:1;vector-effect:none;fill:#4f4c4d;fill-opacity:1;stroke:none;stroke-width:0.10074362;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path6545-4"
+         transform="matrix(0.28557246,0,0,0.28557246,1098.7155,-140.51013)"
+         d="m -1244.2949,1166.5938 v 15.791 h -38.6875 v -2.9981 l -6.9199,4 6.9199,4 v -2.998 h 40.6836 v -17.7949 z"
+         style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+    </g>
+    <g
+       transform="matrix(1.6700128,0,0,1.6700128,-826.83854,-145.60855)"
+       id="g4993"
+       inkscape:label="Keys"
+       style="fill-rule:evenodd;stroke-width:0.13585199">
+      <g
+         id="g4892"
+         inkscape:label="7"
+         style="stroke-width:0.13585199">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.10074359;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path163"
+           d="m 638,120 h 20 c 2,0 3,2 3,3 v 18 c 0,2 -1,3 -3,3 h -20 c -1,0 -3,-1 -3,-3 v -18 c 0,-1 2,-3 3,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="636.4165"
+           y="129.38269"
+           id="text331"
+           style="font-weight:normal;font-size:9.28803921px;font-family:Arial;fill:#2b2828;stroke-width:0.10514989">7</text>
+      </g>
+      <g
+         id="g4907"
+         inkscape:label="4"
+         style="stroke-width:0.13585199">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.10074359;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path169"
+           d="m 638,146 h 20 c 2,0 3,1 3,3 v 18 c 0,2 -1,3 -3,3 h -20 c -1,0 -3,-1 -3,-3 v -18 c 0,-2 2,-3 3,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="636.4165"
+           y="154.10822"
+           id="text335"
+           style="font-weight:normal;font-size:9.28803921px;font-family:Arial;fill:#2b2828;stroke-width:0.10514989">4</text>
+      </g>
+      <g
+         id="g4922"
+         inkscape:label="1"
+         style="stroke-width:0.13585199">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.10074359;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path175"
+           d="m 638,172 h 20 c 2,0 3,1 3,3 v 17 c 0,1 -1,3 -3,3 h -20 c -1,0 -3,-2 -3,-3 v -17 c 0,-2 2,-3 3,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="636.4165"
+           y="179.82285"
+           id="text339"
+           style="font-weight:normal;font-size:9.28803921px;font-family:Arial;fill:#2b2828;stroke-width:0.10514989">1</text>
+      </g>
+      <g
+         id="g4897"
+         inkscape:label="8"
+         style="stroke-width:0.13585199">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.10074359;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path165"
+           d="m 668,120 h 19 c 2,0 3,2 3,3 v 18 c 0,2 -1,3 -3,3 h -19 c -1,0 -3,-1 -3,-3 v -18 c 0,-1 2,-3 3,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="667.07562"
+           y="129.38269"
+           id="text347"
+           style="font-weight:normal;font-size:9.28803921px;font-family:Arial;fill:#2b2828;stroke-width:0.10514989">8</text>
+      </g>
+      <g
+         id="g4912"
+         inkscape:label="5"
+         style="stroke-width:0.13585199">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.10074359;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path171"
+           d="m 668,146 h 19 c 2,0 3,1 3,3 v 18 c 0,2 -1,3 -3,3 h -19 c -1,0 -3,-1 -3,-3 v -18 c 0,-2 2,-3 3,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="667.07562"
+           y="154.10822"
+           id="text351"
+           style="font-weight:normal;font-size:9.28803921px;font-family:Arial;fill:#2b2828;stroke-width:0.10514989">5</text>
+      </g>
+      <g
+         id="g4927"
+         inkscape:label="2"
+         style="stroke-width:0.13585199">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.10074359;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path177"
+           d="m 668,172 h 19 c 2,0 3,1 3,3 v 17 c 0,1 -1,3 -3,3 h -19 c -1,0 -3,-2 -3,-3 v -17 c 0,-2 2,-3 3,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="667.07562"
+           y="179.82285"
+           id="text355"
+           style="font-weight:normal;font-size:9.28803921px;font-family:Arial;fill:#2b2828;stroke-width:0.10514989">2</text>
+      </g>
+      <g
+         id="g4902"
+         inkscape:label="9"
+         style="stroke-width:0.13585199">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.10074359;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path167"
+           d="m 697,120 h 20 c 2,0 3,2 3,3 v 18 c 0,2 -1,3 -3,3 h -20 c -1,0 -3,-1 -3,-3 v -18 c 0,-1 2,-3 3,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="695.75708"
+           y="129.38269"
+           id="text363"
+           style="font-weight:normal;font-size:9.28803921px;font-family:Arial;fill:#2b2828;stroke-width:0.10514989">9</text>
+      </g>
+      <g
+         id="g4917"
+         inkscape:label="6"
+         style="stroke-width:0.13585199">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.10074359;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path173"
+           d="m 697,146 h 20 c 2,0 3,1 3,3 v 18 c 0,2 -1,3 -3,3 h -20 c -1,0 -3,-1 -3,-3 v -18 c 0,-2 2,-3 3,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="695.75708"
+           y="154.10822"
+           id="text367"
+           style="font-weight:normal;font-size:9.28803921px;font-family:Arial;fill:#2b2828;stroke-width:0.10514989">6</text>
+      </g>
+      <g
+         id="g4932"
+         inkscape:label="3"
+         style="stroke-width:0.13585199">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.10074359;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path179"
+           d="m 697,172 h 20 c 2,0 3,1 3,3 v 17 c 0,1 -1,3 -3,3 h -20 c -1,0 -3,-2 -3,-3 v -17 c 0,-2 2,-3 3,-3 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="695.75708"
+           y="179.82285"
+           id="text371"
+           style="font-weight:normal;font-size:9.28803921px;font-family:Arial;fill:#2b2828;stroke-width:0.10514989">3</text>
+      </g>
+      <g
+         id="g4937"
+         inkscape:label="0"
+         style="stroke-width:0.13585199">
+        <path
+           style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.10074359;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path373"
+           d="m 638,220 c -1,0 -3,-1 -3,-2 v -19 c 0,-1 2,-2 3,-2 h 49 c 2,0 3,1 3,2 v 19 c 0,1 -1,2 -3,2 z"
+           inkscape:connector-curvature="0" />
+        <text
+           transform="scale(1.0007154,0.99928514)"
+           x="636.4165"
+           y="205.53712"
+           id="text377"
+           style="font-weight:normal;font-size:9.28803921px;font-family:Arial;fill:#2b2828;stroke-width:0.10514989">0</text>
+      </g>
+    </g>
+    <g
+       transform="translate(-318.22576)"
+       inkscape:label="Esc"
+       id="g3113">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 387.26079,54.792986 h 33.40019 c 3.34,0 5.01006,3.34003 5.01006,5.010045 v 30.060225 c 0,3.340029 -1.67006,5.010032 -5.01006,5.010032 h -33.40019 c -1.67006,0 -5.01007,-1.670003 -5.01007,-5.010032 V 59.803031 c 0,-1.670015 3.34001,-5.010045 5.01007,-5.010045 z"
+         id="path167-3"
+         style="opacity:1;vector-effect:none;fill:#4f4c4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.16824313;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <text
+         transform="scale(1.0007154,0.99928511)"
+         style="font-weight:normal;font-size:10.63882256px;font-family:Arial;fill:#ffffff;fill-rule:evenodd;stroke-width:0.36866826"
+         id="text469-4"
+         y="78.632088"
+         x="394.42801">Esc</text>
+    </g>
+    <g
+       transform="translate(0,-43.420332)"
+       inkscape:label="BackSpace"
+       id="g3109">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 387.26079,98.213318 h 33.40019 c 3.34,0 5.01006,1.670013 5.01006,5.010032 v 30.06024 c 0,3.34002 -1.67006,5.01003 -5.01006,5.01003 h -33.40019 c -1.67006,0 -5.01007,-1.67001 -5.01007,-5.01003 v -30.06024 c 0,-3.340019 3.34001,-5.010032 5.01007,-5.010032 z"
+         id="path173-1"
+         style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.16824308;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path11623-1-0-2"
+         transform="matrix(0.47690966,0,0,0.47690966,1008.0304,-380.26227)"
+         d="m -1278.9668,1041.3047 -6.9199,4 6.9199,4 v -3 h 33.416 v -1.9981 h -33.416 z"
+         style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2b2828;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+    </g>
+    <g
+       transform="matrix(1.6700128,0,0,1.6700128,-678.20742,-102.18822)"
+       style="fill-rule:evenodd;stroke-width:0.13585199"
+       inkscape:label="Sign"
+       id="g787">
+      <path
+         inkscape:connector-curvature="0"
+         d="m 638,120 h 20 c 2,0 3,2 3,3 v 18 c 0,2 -1,3 -3,3 h -20 c -1,0 -3,-1 -3,-3 v -18 c 0,-1 2,-3 3,-3 z"
+         id="path781"
+         style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.10074359;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <text
+         transform="scale(1.0007154,0.99928514)"
+         style="font-weight:normal;font-size:9.28803921px;font-family:Arial;fill:#2b2828;stroke-width:0.10514989"
+         id="text783"
+         y="135.09822"
+         x="642.1239">+/-</text>
+    </g>
+    <text
+       inkscape:label="Info"
+       transform="scale(0.96824589,1.0327955)"
+       id="text509"
+       y="12.333653"
+       x="252.9579"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.31375408px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.30784383px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         style="stroke-width:0.30784383px"
+         y="12.333653"
+         x="252.9579"
+         id="tspan507"
+         sodipodi:role="line">information</tspan></text>
+    <g
+       inkscape:label="NumDot"
+       id="g4942"
+       style="fill-rule:evenodd;stroke-width:0.13585199"
+       transform="matrix(1.6700128,0,0,1.6700128,-826.83854,-145.60856)">
+      <path
+         style="opacity:1;vector-effect:none;fill:#d3d2d2;fill-opacity:1;stroke:none;stroke-width:0.10074359;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         id="path181"
+         d="m 697,197 h 20 c 2,0 3,1 3,2 v 19 c 0,1 -1,2 -3,2 h -20 c -1,0 -3,-1 -3,-2 v -19 c 0,-1 2,-2 3,-2 z"
+         inkscape:connector-curvature="0" />
+      <text
+         transform="scale(1.0007154,0.99928514)"
+         x="696.7464"
+         y="204.54802"
+         id="text771"
+         style="font-weight:normal;font-size:6.96602964px;font-family:Arial;fill:#2b2828;stroke-width:0.10514989">.</text>
+    </g>
+  </g>
+  <g
+     style="stroke-width:0.377115"
+     inkscape:label="HMI:Input@/PRODUCT_NAME"
+     transform="matrix(0.75813069,0,0,0.75813069,598.48618,37.66828)"
+     id="g1226">
+    <text
+       inkscape:label="value"
+       id="text1216"
+       y="181.75911"
+       x="67.884193"
+       style="font-style:normal;font-weight:normal;font-size:93.4523px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ff8c00;fill-opacity:1;stroke:none;stroke-width:0.377115px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         style="font-size:49.2439px;text-align:center;text-anchor:middle;fill:#ff8c00;stroke-width:0.377115px"
+         y="181.75911"
+         x="67.884201"
+         id="tspan1214"
+         sodipodi:role="line">XXX</tspan></text>
+    <rect
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.88558;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       id="rect1220"
+       width="333.56146"
+       height="128"
+       x="-100.79848"
+       y="95.40741"
+       onclick=""
+       inkscape:label="edit" />
+  </g>
+  <g
+     style="stroke-width:0.377115"
+     inkscape:label="HMI:Input@/PRODUCT_IMAGE"
+     transform="matrix(0.75813069,0,0,0.75813069,974.6282,37.66828)"
+     id="g1240">
+    <text
+       inkscape:label="value"
+       id="text1230"
+       y="186.09921"
+       x="115.21943"
+       style="font-style:normal;font-weight:normal;font-size:160px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ff8c00;fill-opacity:1;stroke:none;stroke-width:0.377115px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         style="font-size:49.2439px;text-align:center;text-anchor:middle;fill:#ff8c00;stroke-width:0.377115px"
+         y="186.09921"
+         x="115.21944"
+         id="tspan1228"
+         sodipodi:role="line">XXX</tspan></text>
+    <rect
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.88558;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       id="rect1234"
+       width="311.42853"
+       height="128"
+       x="-78.665535"
+       y="95.40741"
+       onclick=""
+       inkscape:label="edit" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="629.58868"
+     y="115.44662"
+     id="text1258"><tspan
+       sodipodi:role="line"
+       id="tspan1256"
+       x="629.58868"
+       y="115.44662">Product Name</tspan></text>
+  <text
+     id="text1262"
+     y="115.44662"
+     x="1051.5886"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       y="115.44662"
+       x="1051.5886"
+       id="tspan1260"
+       sodipodi:role="line">Product Image</tspan></text>
+  <g
+     id="g1270"
+     transform="matrix(0.75813069,0,0,0.75813069,298.48618,317.66828)"
+     inkscape:label="HMI:Input@/SAVE_AS_CSV"
+     style="stroke-width:0.377115">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:62.1669px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ff8c00;fill-opacity:1;stroke:none;stroke-width:0.377115px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="-257.78806"
+       y="192.18758"
+       id="text1266"
+       inkscape:label="value"><tspan
+         sodipodi:role="line"
+         id="tspan1264"
+         x="-257.78806"
+         y="192.18758"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:62.1669px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff8c00;stroke-width:0.377115px">file.csv</tspan></text>
+    <rect
+       inkscape:label="edit"
+       onclick=""
+       y="111.23583"
+       x="-359.35144"
+       height="128"
+       width="465.35306"
+       id="rect1268"
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.88558;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+  </g>
+  <text
+     id="text1274"
+     y="395.44662"
+     x="196.74792"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       y="395.44662"
+       x="196.74792"
+       id="tspan1272"
+       sodipodi:role="line">Save As CSV name</tspan></text>
+  <g
+     inkscape:label="HMI:Switch@/SAVE_SUCCESS"
+     id="g2101"
+     transform="matrix(9.928748,0,0,9.9287551,-28.29598,-139.30786)"
+     style="stroke-width:0.380665">
+    <text
+       id="text2095"
+       y="83.254463"
+       x="112.6369"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.5833px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#008000;fill-opacity:1;stroke:none;stroke-width:0.100718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"
+       inkscape:label="true"><tspan
+         style="fill:#008000;stroke-width:0.100718px"
+         y="83.254463"
+         x="112.6369"
+         id="tspan2093"
+         sodipodi:role="line">✔</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.5833px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.100718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="112.6369"
+       y="83.254463"
+       id="text2099"
+       inkscape:label="false"><tspan
+         sodipodi:role="line"
+         id="tspan2097"
+         x="112.6369"
+         y="83.254463"
+         style="fill:#ff0000;stroke-width:0.100718px">✕</tspan></text>
+  </g>
+  <g
+     style="stroke-width:1.42987"
+     inkscape:label="HMI:Button@/SAVE_AS_BT"
+     id="g3512"
+     transform="translate(-481.11028,195.52394)">
+    <g
+       id="g3500"
+       inkscape:label="active"
+       transform="matrix(1,0,0,0.75444798,-380,-152.4469)"
+       style="stroke-width:1.6462">
+      <rect
+         style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:url(#radialGradient3514);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:6.90775;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+         id="rect3496"
+         width="320.99121"
+         height="125.00497"
+         x="518.36066"
+         y="618.00537"
+         ry="28.3067"
+         rx="21.355932" />
+      <rect
+         style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.15129;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.45388, 3.45388;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+         id="rect3498"
+         width="320.99121"
+         height="125.00497"
+         x="518.36066"
+         y="618.00537"
+         inkscape:label="frame" />
+    </g>
+    <rect
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77953;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       id="rect3502"
+       width="320.99121"
+       height="94.309746"
+       x="518.36066"
+       y="318.00534"
+       ry="21.355932"
+       rx="21.355932"
+       inkscape:label="inactive" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="677.57697"
+       y="379.98633"
+       id="text3508"><tspan
+         sodipodi:role="line"
+         x="677.57697"
+         y="379.98633"
+         id="tspan3506">Save As</tspan></text>
+    <rect
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       id="rect3510"
+       width="320.99121"
+       height="94.309746"
+       x="518.36066"
+       y="318.00534"
+       inkscape:label="reference" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="62.560974"
+     y="676.85449"
+     id="text292"><tspan
+       sodipodi:role="line"
+       id="tspan290"
+       x="62.560974"
+       y="712.24512" /></text>
+  <g
+     style="stroke-width:1.42987"
+     inkscape:label="HMI:Button@/SAVE_BT"
+     id="g10026"
+     transform="translate(-481.11028,-124.47606)">
+    <g
+       id="g10016"
+       inkscape:label="active"
+       transform="matrix(1,0,0,0.75444798,-380,-152.4469)"
+       style="stroke-width:1.6462">
+      <rect
+         style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:url(#radialGradient10028);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:6.90775;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+         id="rect10012"
+         width="320.99121"
+         height="125.00497"
+         x="518.36066"
+         y="618.00537"
+         ry="28.3067"
+         rx="21.355932" />
+      <rect
+         style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.15129;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.45388, 3.45388;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+         id="rect10014"
+         width="320.99121"
+         height="125.00497"
+         x="518.36066"
+         y="618.00537"
+         inkscape:label="frame" />
+    </g>
+    <rect
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffa32a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.77953;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       id="rect10018"
+       width="320.99121"
+       height="94.309746"
+       x="518.36066"
+       y="318.00534"
+       ry="21.355932"
+       rx="21.355932"
+       inkscape:label="inactive" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="677.57697"
+       y="379.98633"
+       id="text10022"><tspan
+         sodipodi:role="line"
+         x="677.57697"
+         y="379.98633"
+         id="tspan10020">Save</tspan></text>
+    <rect
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       id="rect10024"
+       width="320.99121"
+       height="94.309746"
+       x="518.36066"
+       y="318.00534"
+       inkscape:label="reference" />
+  </g>
+  <g
+     style="stroke-width:0.377115"
+     inkscape:label="HMI:Input@/STEP_1_BAKE_TIME"
+     transform="matrix(0.75813069,0,0,0.75813069,598.48618,177.66828)"
+     id="g15089">
+    <text
+       inkscape:label="value"
+       id="text15085"
+       y="181.75911"
+       x="67.884193"
+       style="font-style:normal;font-weight:normal;font-size:93.4523px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ff8c00;fill-opacity:1;stroke:none;stroke-width:0.377115px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         style="font-size:49.2439px;text-align:center;text-anchor:middle;fill:#ff8c00;stroke-width:0.377115px"
+         y="181.75911"
+         x="67.884201"
+         id="tspan15083"
+         sodipodi:role="line">XXX</tspan></text>
+    <rect
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.88558;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       id="rect15087"
+       width="333.56146"
+       height="128"
+       x="-100.79848"
+       y="95.40741"
+       onclick=""
+       inkscape:label="edit" />
+  </g>
+  <g
+     style="stroke-width:0.377115"
+     inkscape:label="HMI:Input@/STEP_1_BAKE_TEMP"
+     transform="matrix(0.75813069,0,0,0.75813069,974.6282,177.66828)"
+     id="g15097">
+    <text
+       inkscape:label="value"
+       id="text15093"
+       y="186.09921"
+       x="115.21943"
+       style="font-style:normal;font-weight:normal;font-size:160px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ff8c00;fill-opacity:1;stroke:none;stroke-width:0.377115px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         style="font-size:49.2439px;text-align:center;text-anchor:middle;fill:#ff8c00;stroke-width:0.377115px"
+         y="186.09921"
+         x="115.21944"
+         id="tspan15091"
+         sodipodi:role="line">XXX</tspan></text>
+    <rect
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.88558;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       id="rect15095"
+       width="311.42853"
+       height="128"
+       x="-78.665535"
+       y="95.40741"
+       onclick=""
+       inkscape:label="edit" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="629.58868"
+     y="255.44662"
+     id="text15101"><tspan
+       sodipodi:role="line"
+       id="tspan15099"
+       x="629.58868"
+       y="255.44662">Step 1 Bake Time</tspan></text>
+  <text
+     id="text15105"
+     y="255.44662"
+     x="1051.5886"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       y="255.44662"
+       x="1051.5886"
+       id="tspan15103"
+       sodipodi:role="line">Step 1 Bake Temp</tspan></text>
+  <g
+     style="stroke-width:0.377115"
+     inkscape:label="HMI:Input@/STEP_2_BAKE_TIME"
+     transform="matrix(0.75813069,0,0,0.75813069,598.48618,317.66828)"
+     id="g20945">
+    <text
+       inkscape:label="value"
+       id="text20941"
+       y="181.75911"
+       x="67.884193"
+       style="font-style:normal;font-weight:normal;font-size:93.4523px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ff8c00;fill-opacity:1;stroke:none;stroke-width:0.377115px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         style="font-size:49.2439px;text-align:center;text-anchor:middle;fill:#ff8c00;stroke-width:0.377115px"
+         y="181.75911"
+         x="67.884201"
+         id="tspan20939"
+         sodipodi:role="line">XXX</tspan></text>
+    <rect
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.88558;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       id="rect20943"
+       width="333.56146"
+       height="128"
+       x="-100.79848"
+       y="95.40741"
+       onclick=""
+       inkscape:label="edit" />
+  </g>
+  <g
+     style="stroke-width:0.377115"
+     inkscape:label="HMI:Input@/STEP_2_BAKE_TEMP"
+     transform="matrix(0.75813069,0,0,0.75813069,974.6282,317.66828)"
+     id="g20953">
+    <text
+       inkscape:label="value"
+       id="text20949"
+       y="186.09921"
+       x="115.21943"
+       style="font-style:normal;font-weight:normal;font-size:160px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ff8c00;fill-opacity:1;stroke:none;stroke-width:0.377115px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         style="font-size:49.2439px;text-align:center;text-anchor:middle;fill:#ff8c00;stroke-width:0.377115px"
+         y="186.09921"
+         x="115.21944"
+         id="tspan20947"
+         sodipodi:role="line">XXX</tspan></text>
+    <rect
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.88558;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       id="rect20951"
+       width="311.42853"
+       height="128"
+       x="-78.665535"
+       y="95.40741"
+       onclick=""
+       inkscape:label="edit" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="629.58868"
+     y="395.44662"
+     id="text20957"><tspan
+       sodipodi:role="line"
+       id="tspan20955"
+       x="629.58868"
+       y="395.44662">Step 2 Bake Time</tspan></text>
+  <text
+     id="text20961"
+     y="395.44662"
+     x="1051.5886"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       y="395.44662"
+       x="1051.5886"
+       id="tspan20959"
+       sodipodi:role="line">Step 2 Bake Temp</tspan></text>
+  <text
+     id="text26523"
+     y="661.44666"
+     x="1025.7683"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       y="661.44666"
+       x="1025.7683"
+       id="tspan26521"
+       sodipodi:role="line">Save Status</tspan></text>
+  <g
+     inkscape:label="HMI:Switch@/RD_SUCCESS"
+     id="g1117"
+     transform="matrix(9.928748,0,0,9.9287551,-28.29598,-247.30786)"
+     style="stroke-width:0.380665">
+    <text
+       id="text1111"
+       y="83.254463"
+       x="112.6369"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.5833px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#008000;fill-opacity:1;stroke:none;stroke-width:0.100718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"
+       inkscape:label="true"><tspan
+         style="fill:#008000;stroke-width:0.100718px"
+         y="83.254463"
+         x="112.6369"
+         id="tspan1109"
+         sodipodi:role="line">✔</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.5833px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.100718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="112.6369"
+       y="83.254463"
+       id="text1115"
+       inkscape:label="false"><tspan
+         sodipodi:role="line"
+         id="tspan1113"
+         x="112.6369"
+         y="83.254463"
+         style="fill:#ff0000;stroke-width:0.100718px">✕</tspan></text>
+  </g>
+  <text
+     id="text1121"
+     y="553.44666"
+     x="1025.7683"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       y="553.44666"
+       x="1025.7683"
+       id="tspan1119"
+       sodipodi:role="line">Read Success</tspan></text>
+  <g
+     inkscape:label="HMI:Switch@/SAVE_ACK"
+     id="g1131"
+     transform="matrix(9.928748,0,0,9.9287551,-388.29598,-139.30786)"
+     style="stroke-width:0.380665">
+    <text
+       id="text1125"
+       y="83.254463"
+       x="112.6369"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.5833px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#008000;fill-opacity:1;stroke:none;stroke-width:0.100718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"
+       inkscape:label="true"><tspan
+         style="fill:#008000;stroke-width:0.100718px"
+         y="83.254463"
+         x="112.6369"
+         id="tspan1123"
+         sodipodi:role="line">✔</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.5833px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.100718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="112.6369"
+       y="83.254463"
+       id="text1129"
+       inkscape:label="false"><tspan
+         sodipodi:role="line"
+         id="tspan1127"
+         x="112.6369"
+         y="83.254463"
+         style="fill:#ff0000;stroke-width:0.100718px">✕</tspan></text>
+  </g>
+  <text
+     id="text1135"
+     y="661.44666"
+     x="665.76831"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"><tspan
+       y="661.44666"
+       x="665.76831"
+       id="tspan1133"
+       sodipodi:role="line">Save Done</tspan></text>
+</svg>
--- a/py_ext/plc_python.c	Sun Jan 26 14:58:13 2025 +0100
+++ b/py_ext/plc_python.c	Fri Feb 07 18:42:43 2025 +0100
@@ -156,7 +156,7 @@
 	}
 }
 
-char* PythonIterator(char* result, void** id)
+char* PythonIterator(char* result, void** id, int* is_last)
 {
 	char* next_command;
 	PYTHON_EVAL* data__;
@@ -213,6 +213,8 @@
 	/* next command is BUFFER */
 	next_command = (char*)__GET_VAR(data__->BUFFER, .body);
 	*id=data__;
+    /*check if last command in the queue */
+	*is_last = EvalFBs[(Current_Python_EvalFB + 1) %% %(python_eval_fb_count)d] == NULL;
 	/* free python mutex */
 	UnLockPython();
 	/* return the next command to eval */
--- a/py_ext/pous.xml	Sun Jan 26 14:58:13 2025 +0100
+++ b/py_ext/pous.xml	Fri Feb 07 18:42:43 2025 +0100
@@ -1,7 +1,7 @@
 <?xml version='1.0' encoding='utf-8'?>
 <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.plcopen.org/xml/tc6_0201" xmlns:xhtml="http://www.w3.org/1999/xhtml" xsi:schemaLocation="http://www.plcopen.org/xml/tc6_0201">
   <fileHeader companyName="Beremiz" productName="Beremiz" productVersion="0.0" creationDateTime="2008-12-14T16:53:26"/>
-  <contentHeader name="Beremiz non-standard POUs library" modificationDateTime="2024-12-06T15:13:47">
+  <contentHeader name="Beremiz non-standard POUs library" modificationDateTime="2025-02-03T14:57:54">
     <coordinateInfo>
       <fbd>
         <scaling x="8" y="8"/>
@@ -17,6 +17,512 @@
   <types>
     <dataTypes/>
     <pous>
+      <pou name="csv_write_by_string" pouType="functionBlock">
+        <interface>
+          <outputVars>
+            <variable name="ACK">
+              <type>
+                <BOOL/>
+              </type>
+            </variable>
+            <variable name="ERROR">
+              <type>
+                <BOOL/>
+              </type>
+            </variable>
+            <variable name="RESULT">
+              <type>
+                <string/>
+              </type>
+            </variable>
+          </outputVars>
+          <inputVars>
+            <variable name="FILE_NAME">
+              <type>
+                <string/>
+              </type>
+            </variable>
+            <variable name="ROW">
+              <type>
+                <string/>
+              </type>
+            </variable>
+            <variable name="COLUMN">
+              <type>
+                <string/>
+              </type>
+            </variable>
+            <variable name="CONTENT">
+              <type>
+                <string/>
+              </type>
+            </variable>
+            <variable name="SAVE">
+              <type>
+                <BOOL/>
+              </type>
+            </variable>
+          </inputVars>
+          <localVars>
+            <variable name="py_eval0">
+              <type>
+                <derived name="python_eval"/>
+              </type>
+            </variable>
+            <variable name="R_TRIG1">
+              <type>
+                <derived name="R_TRIG"/>
+              </type>
+            </variable>
+            <variable name="R_TRIG2">
+              <type>
+                <derived name="R_TRIG"/>
+              </type>
+            </variable>
+            <variable name="csv_refresh0">
+              <type>
+                <derived name="csv_refresh"/>
+              </type>
+            </variable>
+          </localVars>
+        </interface>
+        <body>
+          <FBD>
+            <inVariable localId="8" executionOrderId="0" height="27" width="112" negated="false">
+              <position x="384" y="128"/>
+              <connectionPointOut>
+                <relPosition x="112" y="16"/>
+              </connectionPointOut>
+              <expression>'CSVWrStr("'</expression>
+            </inVariable>
+            <inVariable localId="52" executionOrderId="0" height="32" width="112" negated="false">
+              <position x="216" y="296"/>
+              <connectionPointOut>
+                <relPosition x="112" y="16"/>
+              </connectionPointOut>
+              <expression>CONTENT</expression>
+            </inVariable>
+            <comment localId="29" height="40" width="232">
+              <position x="64" y="32"/>
+              <content>
+                <xhtml:p><![CDATA[Generate python code line]]></xhtml:p>
+              </content>
+            </comment>
+            <block localId="40" width="104" height="80" typeName="python_eval" instanceName="py_eval0" executionOrderId="0">
+              <position x="552" y="480"/>
+              <inputVariables>
+                <variable formalParameter="TRIG">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="46" formalParameter="Q">
+                      <position x="552" y="512"/>
+                      <position x="360" y="512"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="CODE">
+                  <connectionPointIn>
+                    <relPosition x="0" y="64"/>
+                    <connection refLocalId="41">
+                      <position x="552" y="544"/>
+                      <position x="520" y="544"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="ACK">
+                  <connectionPointOut>
+                    <relPosition x="104" y="32"/>
+                  </connectionPointOut>
+                </variable>
+                <variable formalParameter="RESULT">
+                  <connectionPointOut>
+                    <relPosition x="104" y="64"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <continuation name="Code" localId="41" height="24" width="128">
+              <position x="392" y="528"/>
+              <connectionPointOut>
+                <relPosition x="128" y="16"/>
+              </connectionPointOut>
+            </continuation>
+            <inVariable localId="42" height="24" width="64" executionOrderId="0" negated="false">
+              <position x="208" y="496"/>
+              <connectionPointOut>
+                <relPosition x="64" y="16"/>
+              </connectionPointOut>
+              <expression>SAVE</expression>
+            </inVariable>
+            <outVariable localId="43" height="32" width="40" executionOrderId="0" negated="false">
+              <position x="736" y="400"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="40" formalParameter="ACK">
+                  <position x="736" y="416"/>
+                  <position x="688" y="416"/>
+                  <position x="688" y="512"/>
+                  <position x="656" y="512"/>
+                </connection>
+              </connectionPointIn>
+              <expression>ACK</expression>
+            </outVariable>
+            <outVariable localId="44" height="24" width="64" executionOrderId="0" negated="false">
+              <position x="688" y="584"/>
+              <connectionPointIn>
+                <relPosition x="0" y="8"/>
+                <connection refLocalId="40" formalParameter="RESULT">
+                  <position x="688" y="592"/>
+                  <position x="672" y="592"/>
+                  <position x="672" y="544"/>
+                  <position x="656" y="544"/>
+                </connection>
+              </connectionPointIn>
+              <expression>RESULT</expression>
+            </outVariable>
+            <block localId="46" typeName="R_TRIG" instanceName="R_TRIG1" executionOrderId="0" height="48" width="64">
+              <position x="296" y="480"/>
+              <inputVariables>
+                <variable formalParameter="CLK">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="42">
+                      <position x="296" y="512"/>
+                      <position x="272" y="512"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="Q">
+                  <connectionPointOut>
+                    <relPosition x="64" y="32"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <block localId="33" typeName="LEFT" executionOrderId="0" height="64" width="56">
+              <position x="736" y="512"/>
+              <inputVariables>
+                <variable formalParameter="IN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="40" formalParameter="RESULT">
+                      <position x="736" y="544"/>
+                      <position x="656" y="544"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="L">
+                  <connectionPointIn>
+                    <relPosition x="0" y="56"/>
+                    <connection refLocalId="35">
+                      <position x="736" y="568"/>
+                      <position x="724" y="568"/>
+                      <position x="724" y="560"/>
+                      <position x="712" y="560"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="56" y="32"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <block localId="34" typeName="EQ" executionOrderId="0" height="72" width="64">
+              <position x="880" y="512"/>
+              <inputVariables>
+                <variable formalParameter="IN1">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="33" formalParameter="OUT">
+                      <position x="880" y="544"/>
+                      <position x="792" y="544"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN2">
+                  <connectionPointIn>
+                    <relPosition x="0" y="56"/>
+                    <connection refLocalId="36">
+                      <position x="880" y="568"/>
+                      <position x="848" y="568"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="64" y="32"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <inVariable localId="35" executionOrderId="0" height="24" width="24" negated="false">
+              <position x="688" y="552"/>
+              <connectionPointOut>
+                <relPosition x="24" y="8"/>
+              </connectionPointOut>
+              <expression>1</expression>
+            </inVariable>
+            <inVariable localId="36" executionOrderId="0" height="32" width="40" negated="false">
+              <position x="808" y="552"/>
+              <connectionPointOut>
+                <relPosition x="40" y="16"/>
+              </connectionPointOut>
+              <expression>'#'</expression>
+            </inVariable>
+            <block localId="37" typeName="R_TRIG" instanceName="R_TRIG2" executionOrderId="0" height="48" width="64">
+              <position x="736" y="456"/>
+              <inputVariables>
+                <variable formalParameter="CLK">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="40" formalParameter="ACK">
+                      <position x="736" y="488"/>
+                      <position x="688" y="488"/>
+                      <position x="688" y="512"/>
+                      <position x="656" y="512"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="Q">
+                  <connectionPointOut>
+                    <relPosition x="64" y="32"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <block localId="39" typeName="AND" executionOrderId="0" height="72" width="64">
+              <position x="984" y="456"/>
+              <inputVariables>
+                <variable formalParameter="IN1">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="37" formalParameter="Q">
+                      <position x="984" y="488"/>
+                      <position x="800" y="488"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN2" negated="true">
+                  <connectionPointIn>
+                    <relPosition x="0" y="56"/>
+                    <connection refLocalId="34" formalParameter="OUT">
+                      <position x="984" y="512"/>
+                      <position x="974" y="512"/>
+                      <position x="974" y="544"/>
+                      <position x="944" y="544"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="64" y="32"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <block localId="53" typeName="csv_refresh" instanceName="csv_refresh0" executionOrderId="0" width="104" height="48">
+              <position x="1112" y="456"/>
+              <inputVariables>
+                <variable formalParameter="TRIG">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="39" formalParameter="OUT">
+                      <position x="1112" y="488"/>
+                      <position x="1048" y="488"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables/>
+            </block>
+            <outVariable localId="54" executionOrderId="0" width="56" height="32" negated="false">
+              <position x="1096" y="528"/>
+              <connectionPointIn>
+                <relPosition x="0" y="16"/>
+                <connection refLocalId="34" formalParameter="OUT">
+                  <position x="1096" y="544"/>
+                  <position x="944" y="544"/>
+                </connection>
+              </connectionPointIn>
+              <expression>ERROR</expression>
+            </outVariable>
+            <block localId="7" typeName="CONCAT" executionOrderId="0" height="240" width="67">
+              <position x="536" y="112"/>
+              <inputVariables>
+                <variable formalParameter="IN1">
+                  <connectionPointIn>
+                    <relPosition x="0" y="32"/>
+                    <connection refLocalId="8">
+                      <position x="536" y="144"/>
+                      <position x="496" y="144"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN2">
+                  <connectionPointIn>
+                    <relPosition x="0" y="56"/>
+                    <connection refLocalId="2">
+                      <position x="536" y="168"/>
+                      <position x="328" y="168"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN3">
+                  <connectionPointIn>
+                    <relPosition x="0" y="80"/>
+                    <connection refLocalId="10">
+                      <position x="536" y="192"/>
+                      <position x="496" y="192"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN4">
+                  <connectionPointIn>
+                    <relPosition x="0" y="104"/>
+                    <connection refLocalId="3">
+                      <position x="536" y="216"/>
+                      <position x="328" y="216"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN5">
+                  <connectionPointIn>
+                    <relPosition x="0" y="128"/>
+                    <connection refLocalId="12">
+                      <position x="536" y="240"/>
+                      <position x="496" y="240"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN6">
+                  <connectionPointIn>
+                    <relPosition x="0" y="152"/>
+                    <connection refLocalId="4">
+                      <position x="536" y="264"/>
+                      <position x="328" y="264"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN7">
+                  <connectionPointIn>
+                    <relPosition x="0" y="176"/>
+                    <connection refLocalId="1">
+                      <position x="536" y="288"/>
+                      <position x="496" y="288"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN8">
+                  <connectionPointIn>
+                    <relPosition x="0" y="200"/>
+                    <connection refLocalId="52">
+                      <position x="536" y="312"/>
+                      <position x="328" y="312"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="IN9">
+                  <connectionPointIn>
+                    <relPosition x="0" y="224"/>
+                    <connection refLocalId="14">
+                      <position x="536" y="336"/>
+                      <position x="496" y="336"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="67" y="32"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <inVariable localId="2" executionOrderId="0" height="32" width="112" negated="false">
+              <position x="216" y="152"/>
+              <connectionPointOut>
+                <relPosition x="112" y="16"/>
+              </connectionPointOut>
+              <expression>FILE_NAME</expression>
+            </inVariable>
+            <inVariable localId="10" executionOrderId="0" height="24" width="112" negated="false">
+              <position x="384" y="184"/>
+              <connectionPointOut>
+                <relPosition x="112" y="8"/>
+              </connectionPointOut>
+              <expression>'","'</expression>
+            </inVariable>
+            <inVariable localId="3" executionOrderId="0" height="32" width="112" negated="false">
+              <position x="216" y="200"/>
+              <connectionPointOut>
+                <relPosition x="112" y="16"/>
+              </connectionPointOut>
+              <expression>ROW</expression>
+            </inVariable>
+            <inVariable localId="12" executionOrderId="0" height="24" width="112" negated="false">
+              <position x="384" y="224"/>
+              <connectionPointOut>
+                <relPosition x="112" y="16"/>
+              </connectionPointOut>
+              <expression>'","'</expression>
+            </inVariable>
+            <inVariable localId="4" executionOrderId="0" height="32" width="112" negated="false">
+              <position x="216" y="248"/>
+              <connectionPointOut>
+                <relPosition x="112" y="16"/>
+              </connectionPointOut>
+              <expression>COLUMN</expression>
+            </inVariable>
+            <inVariable localId="14" executionOrderId="0" height="24" width="112" negated="false">
+              <position x="384" y="320"/>
+              <connectionPointOut>
+                <relPosition x="112" y="16"/>
+              </connectionPointOut>
+              <expression>'")'</expression>
+            </inVariable>
+            <connector name="Code" localId="19" height="24" width="128">
+              <position x="656" y="136"/>
+              <connectionPointIn>
+                <relPosition x="0" y="8"/>
+                <connection refLocalId="7" formalParameter="OUT">
+                  <position x="656" y="144"/>
+                  <position x="603" y="144"/>
+                </connection>
+              </connectionPointIn>
+            </connector>
+            <inVariable localId="1" executionOrderId="0" height="24" width="112" negated="false">
+              <position x="384" y="272"/>
+              <connectionPointOut>
+                <relPosition x="112" y="16"/>
+              </connectionPointOut>
+              <expression>'","'</expression>
+            </inVariable>
+          </FBD>
+        </body>
+      </pou>
       <pou name="_csv_update" pouType="functionBlock">
         <interface>
           <externalVars>
@@ -1058,7 +1564,7 @@
               <connectionPointOut>
                 <relPosition x="176" y="16"/>
               </connectionPointOut>
-              <expression>'pyext_csv_reload()'</expression>
+              <expression>'CSVReload()'</expression>
             </inVariable>
             <block localId="15" typeName="csv_refresh" instanceName="csv_refresh0" executionOrderId="0" width="104" height="64">
               <position x="568" y="32"/>
@@ -1930,9 +2436,9 @@
               </outputVariables>
             </block>
             <inVariable localId="8" executionOrderId="0" height="24" width="160" negated="false">
-              <position x="352" y="112"/>
-              <connectionPointOut>
-                <relPosition x="160" y="8"/>
+              <position x="352" y="104"/>
+              <connectionPointOut>
+                <relPosition x="160" y="16"/>
               </connectionPointOut>
               <expression>'CSVWrInt("'</expression>
             </inVariable>
@@ -1944,9 +2450,9 @@
               <expression>FILE_NAME</expression>
             </inVariable>
             <inVariable localId="10" executionOrderId="0" height="24" width="112" negated="false">
-              <position x="504" y="152"/>
-              <connectionPointOut>
-                <relPosition x="112" y="16"/>
+              <position x="504" y="160"/>
+              <connectionPointOut>
+                <relPosition x="112" y="8"/>
               </connectionPointOut>
               <expression>'",'</expression>
             </inVariable>
@@ -1958,9 +2464,9 @@
               <expression>ROW</expression>
             </inVariable>
             <inVariable localId="12" executionOrderId="0" height="24" width="112" negated="false">
-              <position x="504" y="208"/>
-              <connectionPointOut>
-                <relPosition x="112" y="8"/>
+              <position x="504" y="200"/>
+              <connectionPointOut>
+                <relPosition x="112" y="16"/>
               </connectionPointOut>
               <expression>','</expression>
             </inVariable>
@@ -1972,9 +2478,9 @@
               <expression>COLUMN</expression>
             </inVariable>
             <inVariable localId="51" executionOrderId="0" height="24" width="112" negated="false">
-              <position x="504" y="256"/>
-              <connectionPointOut>
-                <relPosition x="112" y="8"/>
+              <position x="504" y="248"/>
+              <connectionPointOut>
+                <relPosition x="112" y="16"/>
               </connectionPointOut>
               <expression>',"'</expression>
             </inVariable>
@@ -1986,18 +2492,12 @@
               <expression>CONTENT</expression>
             </inVariable>
             <inVariable localId="14" executionOrderId="0" height="24" width="112" negated="false">
-              <position x="504" y="304"/>
+              <position x="504" y="296"/>
               <connectionPointOut>
                 <relPosition x="112" y="16"/>
               </connectionPointOut>
               <expression>'")'</expression>
             </inVariable>
-            <comment localId="28" height="48" width="520">
-              <position x="48" y="400"/>
-              <content>
-                <xhtml:p><![CDATA[Execute python code on change or globally when CSV is updated]]></xhtml:p>
-              </content>
-            </comment>
             <comment localId="29" height="40" width="232">
               <position x="64" y="32"/>
               <content>
@@ -2005,9 +2505,9 @@
               </content>
             </comment>
             <connector name="Code" localId="30" height="24" width="128">
-              <position x="856" y="112"/>
+              <position x="856" y="104"/>
               <connectionPointIn>
-                <relPosition x="0" y="8"/>
+                <relPosition x="0" y="16"/>
                 <connection refLocalId="7" formalParameter="OUT">
                   <position x="856" y="120"/>
                   <position x="752" y="120"/>
--- a/py_ext/py_ext.py	Sun Jan 26 14:58:13 2025 +0100
+++ b/py_ext/py_ext.py	Fri Feb 07 18:42:43 2025 +0100
@@ -1,186 +1,21 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
-# This file is part of Beremiz, a Integrated Development Environment for
-# programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
+# This file is part of Beremiz IDE
 #
-# Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2013: Laurent BESSARD
 # Copyright (C) 2017: Andrey Skvortsov
+# Copyright (C) 2025: Edouard TISSERANT
 #
 # See COPYING file for copyrights details.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
 
 import os
 from POULibrary import POULibrary
 from py_ext.PythonFileCTNMixin import PythonFileCTNMixin
 import util.paths as paths
 
-pyext_python_lib_code = """
 
-import csv
-from collections import OrderedDict
-
-csv_int_files = {}
-def CSVRdInt(fname, rowidx, colidx):
-    \"\"\"
-    Return value at row/column pointed by integer indexes
-    Assumes data starts at first row and first column, no headers.
-    \"\"\"
-    global csv_int_files
-    data = csv_int_files.get(fname, None)
-    if data is None:
-        data = list()
-        try:
-            csvfile = open(fname, 'rt', encoding='utf-8')
-        except IOError:
-            return "#FILE_NOT_FOUND"
-        try:
-            dialect = csv.Sniffer().sniff(csvfile.read(1024))
-            csvfile.seek(0)
-            reader = csv.reader(csvfile, dialect)
-            for row in reader:
-                data.append(row)
-        except csv.Error as e:
-            return "#CSV_ERROR"
-        finally:
-            csvfile.close()
-        csv_int_files[fname] = data
-
-    try:
-        row = data[rowidx]
-        if not row and rowidx == len(data)-1:
-            raise IndexError
-    except IndexError:
-        return "#ROW_NOT_FOUND"
-
-    try:
-        return row[colidx]
-    except IndexError:
-        return "#COL_NOT_FOUND"
-
-
-csv_str_files = {}
-def CSVRdStr(fname, rowname, colname):
-    \"\"\"
-    Return value at row/column pointed by a pair of names as string
-    Assumes first row is column headers and first column is row name.
-    \"\"\"
-    global csv_str_files
-    entry = csv_str_files.get(fname, None)
-    if entry is None:
-        data = dict()
-        try:
-            csvfile = open(fname, 'rt', encoding='utf-8')
-        except IOError:
-            return "#FILE_NOT_FOUND"
-        try:
-            dialect = csv.Sniffer().sniff(csvfile.read(1024))
-            csvfile.seek(0)
-            reader = csv.reader(csvfile, dialect)
-            headers = dict([(name, index) for index, name in enumerate(reader.__next__()[1:])])
-            for row in reader:
-                data[row[0]] = row[1:]
-        except csv.Error:
-            return "#CSV_ERROR"
-        finally:
-            csvfile.close()
-        csv_str_files[fname] = (headers, data)
-    else:
-        headers, data = entry
-
-    try:
-        row = data[rowname]
-    except KeyError:
-        return "#ROW_NOT_FOUND"
-
-    try:
-        colidx = headers[colname]
-    except KeyError:
-        return "#COL_NOT_FOUND"
-
-    try:
-        return row[colidx]
-    except IndexError:
-        return "#COL_NOT_FOUND"
-
-
-def CSVWrInt(fname, rowidx, colidx, content):
-    \"\"\"
-    Update value at row/column pointed by integer indexes
-    Assumes data starts at first row and first column, no headers.
-    \"\"\"
-
-    global csv_int_files
-    dialect = None
-    data = csv_int_files.get(fname, None)
-    if data is None:
-        data = list()
-        try:
-            csvfile = open(fname, 'rt', encoding='utf-8')
-        except IOError:
-            return "#FILE_NOT_FOUND"
-        try:
-            dialect = csv.Sniffer().sniff(csvfile.read(1024))
-            csvfile.seek(0)
-            reader = csv.reader(csvfile, dialect)
-            for row in reader:
-                data.append(row)
-        except csv.Error as e:
-            return "#CSV_ERROR"
-        finally:
-            csvfile.close()
-        csv_int_files[fname] = data
-
-    try:
-        if rowidx == len(data):
-            row = []
-            data.append(row)
-        else:
-            row = data[rowidx]
-    except IndexError:
-        return "#ROW_NOT_FOUND"
-
-    try:
-        if rowidx > 0 and colidx >= len(data[0]):
-            raise IndexError
-        if colidx >= len(row):
-            row.extend([""] * (colidx - len(row)) + [content])
-        else:
-            row[colidx] = content
-    except IndexError:
-        return "#COL_NOT_FOUND"
-
-    try:
-        wfile = open(fname, 'wt')
-        writer = csv.writer(wfile) if not(dialect) else csv.writer(wfile, dialect)
-        for row in data:
-            writer.writerow(row)
-    finally:
-        wfile.close()
-
-    return "OK"
-
-
-def pyext_csv_reload():
-    global csv_int_files, csv_str_files
-    csv_int_files.clear()
-    csv_str_files.clear()
-
-"""
+pyext_python_lib_code = open(paths.AbsNeighbourFile(__file__, "py_ext_rt.py"), "r").read()
 
 
 class PythonLibrary(POULibrary):
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/py_ext/py_ext_rt.py	Fri Feb 07 18:42:43 2025 +0100
@@ -0,0 +1,297 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# This file is part of Beremiz Runtime
+#
+# Copyright (C) 2013: Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov
+# Copyright (C) 2025: Edouard Tisserant
+#
+# See COPYING file for copyrights details.
+
+import csv
+from collections import OrderedDict
+
+csv_int_files = {}
+cvs_int_changed = set()
+csv_str_files = {}
+cvs_str_changed = set()
+
+class Entry():
+    def __init__(self, *args):
+        self.args = args
+    def __call__(self):
+        return self.args
+
+def _CSV_int_Load(fname):
+    global csv_int_files
+    entry = csv_int_files.get(fname, None)
+    if entry is None:
+        data = list()
+        csvfile = open(fname, 'rt', encoding='utf-8')
+
+        try:
+            dialect = csv.Sniffer().sniff(csvfile.read(1024))
+            csvfile.seek(0)
+            reader = csv.reader(csvfile, dialect)
+            for row in reader:
+                data.append(row)
+        finally:
+            csvfile.close()
+        entry = Entry(fname, dialect, data)
+        csv_int_files[fname] = entry
+    return entry
+
+
+def _CSV_str_Load(fname):
+    global csv_str_files
+    entry = csv_str_files.get(fname, None)
+    if entry is None:
+        data = []
+        csvfile = open(fname, 'rt', encoding='utf-8')
+
+        try:
+            dialect = csv.Sniffer().sniff(csvfile.read(1024))
+            csvfile.seek(0)
+            reader = csv.reader(csvfile, dialect)
+            first_row = reader.__next__()
+            data.append(first_row)
+            col_headers = OrderedDict([(name, index+1) for index, name 
+                                        in enumerate(first_row[1:])])
+            max_row_len = len(first_row)
+            row_headers = OrderedDict()
+            for index, row in enumerate(reader):
+                row_headers[row[0]] = index+1
+                data.append(row)
+                max_row_len = max(max_row_len, len(row))
+        finally:
+            csvfile.close()
+        entry = Entry(fname, dialect, col_headers, row_headers, max_row_len, data)
+        csv_str_files[fname] = entry
+    return entry
+
+
+def _CSV_str_Create(fname):
+    global csv_str_files
+    data = [[]] # start with an empty row, acounting for header row
+    dialect = None
+    col_headers = OrderedDict()
+    row_headers = OrderedDict()
+    max_row_len = 1  # set to one initialy, accounting for header column
+    entry = Entry(fname, dialect, col_headers, row_headers, max_row_len, data)
+    csv_str_files[fname] = entry
+    return entry
+
+
+def _CSV_Save_data(fname, dialect, data):
+    try:
+        wfile = open(fname, 'wt')
+        writer = csv.writer(wfile) if not(dialect) else csv.writer(wfile, dialect)
+        for row in data:
+            writer.writerow(row)
+    finally:
+        wfile.close()
+
+def _CSV_int_Save(entry):
+    fname, dialect, data = entry()
+    _CSV_Save_data(fname, dialect, data)
+
+
+def _CSV_str_Save(entry):
+    fname, dialect, col_headers, row_headers, max_row_len, data = entry()
+    _CSV_Save_data(fname, dialect, data)
+
+
+_already_registered_cb = False
+def _CSV_OnIdle_callback():
+    global _already_registered_cb, cvs_int_changed, cvs_str_changed
+    _already_registered_cb = False
+    while len(cvs_int_changed):
+        entry = cvs_int_changed.pop()
+        _CSV_int_Save(entry)
+
+    while len(cvs_str_changed):
+        entry = cvs_str_changed.pop()
+        _CSV_str_Save(entry)
+
+
+def _CSV_register_OnIdle_callback():
+    global _already_registered_cb
+    if not _already_registered_cb:
+        OnIdle.append(_CSV_OnIdle_callback)
+        _already_registered_cb = True
+
+
+def _CSV_int_modified(entry):
+    global cvs_int_changed
+    cvs_int_changed.add(entry)
+    _CSV_register_OnIdle_callback()
+    
+
+def _CSV_str_modified(entry):
+    global cvs_str_changed
+    cvs_str_changed.add(entry)
+    _CSV_register_OnIdle_callback()
+
+
+def CSVRdInt(fname, rowidx, colidx):
+    """
+    Return value at row/column pointed by integer indexes
+    Assumes data starts at first row and first column, no headers.
+    """
+
+    try:
+        _fname, _dialect, data = _CSV_int_Load(fname)()
+    except IOError:
+        return "#FILE_NOT_FOUND"
+    except csv.Error as e:
+        return "#CSV_ERROR"
+
+    try:
+        row = data[rowidx]
+        if not row and rowidx == len(data)-1:
+            raise IndexError
+    except IndexError:
+        return "#ROW_NOT_FOUND"
+
+    try:
+        return row[colidx]
+    except IndexError:
+        return "#COL_NOT_FOUND"
+
+
+def CSVRdStr(fname, rowname, colname):
+    """
+    Return value at row/column pointed by a pair of names as string
+    Assumes first row is column headers and first column is row name.
+    """
+
+    if not rowname:
+        return "#INVALID_ROW"
+    if not colname:
+        return "#INVALID_COLUMN"
+
+    try:
+        fname, dialect, col_headers, row_headers, max_row_len, data = _CSV_str_Load(fname)()
+    except IOError:
+        return "#FILE_NOT_FOUND"
+    except csv.Error:
+        return "#CSV_ERROR"
+
+    try:
+        rowidx = row_headers[rowname]
+    except KeyError:
+        return "#ROW_NOT_FOUND"
+
+    try:
+        colidx = col_headers[colname]
+    except KeyError:
+        return "#COL_NOT_FOUND"
+
+    try:
+        return data[rowidx][colidx]
+    except IndexError:
+        return "#COL_NOT_FOUND"
+
+
+def CSVWrInt(fname, rowidx, colidx, content):
+    """
+    Update value at row/column pointed by integer indexes
+    Assumes data starts at first row and first column, no headers.
+    """
+
+    try:
+        entry = _CSV_int_Load(fname)
+    except IOError:
+        return "#FILE_NOT_FOUND"
+    except csv.Error as e:
+        return "#CSV_ERROR"
+
+    fname, dialect, data = entry()
+    try:
+        if rowidx == len(data):
+            row = []
+            data.append(row)
+        else:
+            row = data[rowidx]
+    except IndexError:
+        return "#ROW_NOT_FOUND"
+
+    try:
+        if rowidx > 0 and colidx >= len(data[0]):
+            raise IndexError
+        if colidx >= len(row):
+            row.extend([""] * (colidx - len(row)) + [content])
+        else:
+            row[colidx] = content
+    except IndexError:
+        return "#COL_NOT_FOUND"
+
+    _CSV_int_modified(entry)
+
+    return "OK"
+
+
+def CSVWrStr(fname, rowname, colname, content):
+    """
+    Update value at row/column pointed by a pair of names as string.
+    Assumes first row is column headers and first column is row name.
+    """
+
+    if not rowname:
+        return "#INVALID_ROW"
+    if not colname:
+        return "#INVALID_COLUMN"
+
+    try:
+        entry = _CSV_str_Load(fname)
+    except IOError:
+        entry = _CSV_str_Create(fname)
+    except csv.Error:
+        return "#CSV_ERROR"
+
+    fname, dialect, col_headers, row_headers, max_row_len, data = entry()
+    try:
+        rowidx = row_headers[rowname]
+        row = data[rowidx]
+    except KeyError:
+        # create a new row with appropriate header
+        row = [rowname]
+        # put it at the end
+        rowidx = len(data)
+        data.append(row)
+        row_headers[rowname] = rowidx
+
+    try:
+        colidx = col_headers[colname]
+    except KeyError:
+        # adjust col headers content
+        first_row = data[0] 
+        first_row += [""]*(max_row_len - len(first_row)) + [colname]
+        # create a new column
+        colidx = col_headers[colname] = max_row_len
+        max_row_len = max_row_len + 1
+
+    try:
+        row[colidx] = content
+    except IndexError:
+        # create a new cell
+        row += [""]*(colidx - len(row)) + [content]
+
+    _CSV_str_modified(entry)
+
+    return "OK"
+
+
+def CSVReload():
+    global csv_int_files, csv_str_files, cvs_int_changed, cvs_str_changed
+
+    # Force saving modified CSV files
+    _CSV_OnIdle_callback()
+
+    # Wipe data model
+    csv_int_files.clear()
+    csv_str_files.clear()
+    cvs_int_changed.clear()
+    cvs_str_changed.clear()
+
--- a/runtime/PLCObject.py	Sun Jan 26 14:58:13 2025 +0100
+++ b/runtime/PLCObject.py	Fri Feb 07 18:42:43 2025 +0100
@@ -207,7 +207,7 @@
             self._PythonIterator = getattr(self.PLClibraryHandle, "PythonIterator", None)
             if self._PythonIterator is not None:
                 self._PythonIterator.restype = ctypes.c_char_p
-                self._PythonIterator.argtypes = [ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)]
+                self._PythonIterator.argtypes = [ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p), ctypes.POINTER(ctypes.c_int)]
 
                 self._stopPLC = self._stopPLC_real
             else:
@@ -215,7 +215,7 @@
                 # as a call that block pythonthread until StopPLC
                 self.PlcStopping = Event()
 
-                def PythonIterator(res, blkid):
+                def PythonIterator(res, blkid, is_last):
                     self.PlcStopping.clear()
                     self.PlcStopping.wait()
                     return None
@@ -307,7 +307,7 @@
         self._GetDebugData = lambda: -1
         self._suspendDebug = lambda x: -1
         self._resumeDebug = lambda: None
-        self._PythonIterator = lambda: ""
+        self._PythonIterator = lambda *a: ""
         self._GetLogCount = None
         self._LogMessage = None
         self._GetLogMessage = None
@@ -389,7 +389,8 @@
             "WorkingDir":     self.workingdir,
             "PLCObject":      self,
             "PLCBinary":      self.PLClibraryHandle,
-            "PLCGlobalsDesc": []})
+            "PLCGlobalsDesc": [],
+            "OnIdle":         []})
 
         for methodname in MethodNames:
             self.python_runtime_vars["_runtime_%s" % methodname] = []
@@ -429,11 +430,12 @@
         self.python_runtime_vars = None
 
     def PythonThreadLoop(self):
-        res, cmd, blkid = "None", "None", ctypes.c_void_p()
+        res, cmd, blkid, is_last = "None", "None", ctypes.c_void_p(), ctypes.c_int()
         compile_cache = {}
         while True:
-            cmd = self._PythonIterator(res.encode(), blkid)
+            cmd = self._PythonIterator(res.encode(), blkid, ctypes.byref(is_last))
             FBID = blkid.value
+            GOING_IDLE = is_last.value != 0
             if cmd is None:
                 break
             cmd = cmd.decode()
@@ -455,6 +457,11 @@
                 res = "#EXCEPTION : "+str(e)
                 self.LogMessage(1, ('PyEval@0x%x(Code="%s") Exception "%s"') % (FBID, cmd, str(e)))
 
+            if GOING_IDLE:
+                todo = self.python_runtime_vars["OnIdle"]
+                while todo:
+                    todo.pop(0)()
+
     def PythonThreadProc(self):
         while True:
             self.PythonThreadCondLock.acquire()