SVGHMI: add support of all IEC61131 interger types.
authorEdouard Tisserant
Fri, 18 Aug 2023 11:38:20 +0200
changeset 3837 efe0b5b21842
parent 3744 65969628e920
child 3854 d29d67e86532
child 3855 beccb995b10e
SVGHMI: add support of all IEC61131 interger types.

- add HMI_*INT types
- fix sprintf.js with big int (64b)
- extend svghmi_real test project
svghmi/gen_index_xhtml.xslt
svghmi/hmi_tree.py
svghmi/pous.xml
svghmi/sprintf.js
svghmi/svghmi.js
tests/projects/svghmi_real/plc.xml
tests/projects/svghmi_real/svghmi_0@svghmi/svghmi.svg
--- a/svghmi/gen_index_xhtml.xslt	Fri Mar 10 09:13:29 2023 +0100
+++ b/svghmi/gen_index_xhtml.xslt	Fri Aug 18 11:38:20 2023 +0200
@@ -2170,8 +2170,6 @@
 </xsl:text>
     <xsl:text>        this.incoming[index] = undefined;
 </xsl:text>
-    <xsl:text>        // TODO: add timestamp argument to dispatch, so that defered data do not appear wrong on graphs
-</xsl:text>
     <xsl:text>        this.lastdispatch[index] = Date.now();
 </xsl:text>
     <xsl:text>        this.do_dispatch(new_val, old_val, index);
@@ -9273,8 +9271,6 @@
 </xsl:text>
     <xsl:text>
 </xsl:text>
-    <xsl:text>        console.log("dispatch(",value,oldval, index, time);
-</xsl:text>
     <xsl:text>        // naive local buffer impl. 
 </xsl:text>
     <xsl:text>        // data is updated only when graph is visible
@@ -10985,9 +10981,19 @@
 </xsl:text>
           <xsl:text>
 </xsl:text>
-          <xsl:text>                if (re.numeric_arg.test(ph.type) &amp;&amp; (typeof arg !== 'number' &amp;&amp; isNaN(arg))) {
-</xsl:text>
-          <xsl:text>                    throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg))
+          <xsl:text>                if (re.numeric_arg.test(ph.type)){
+</xsl:text>
+          <xsl:text>                    let argtype = typeof arg;
+</xsl:text>
+          <xsl:text>                    if ( argtype !== 'bigint') {
+</xsl:text>
+          <xsl:text>                        if ( argtype !== 'number' &amp;&amp; isNaN(arg) ) {
+</xsl:text>
+          <xsl:text>                            throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg))
+</xsl:text>
+          <xsl:text>                        }
+</xsl:text>
+          <xsl:text>                    }
 </xsl:text>
           <xsl:text>                }
 </xsl:text>
@@ -11481,13 +11487,27 @@
 </xsl:text>
           <xsl:text>const dvgetters = {
 </xsl:text>
-          <xsl:text>    INT: (dv,offset) =&gt; [dv.getInt16(offset, true), 2],
-</xsl:text>
-          <xsl:text>    BOOL: (dv,offset) =&gt; [dv.getInt8(offset, true), 1],
-</xsl:text>
-          <xsl:text>    NODE: (dv,offset) =&gt; [dv.getInt8(offset, true), 1],
-</xsl:text>
-          <xsl:text>    REAL: (dv,offset) =&gt; [dv.getFloat32(offset, true), 4],
+          <xsl:text>    SINT:  (dv,offset) =&gt; [dv.getInt8(offset, true), 1],
+</xsl:text>
+          <xsl:text>    INT:   (dv,offset) =&gt; [dv.getInt16(offset, true), 2],
+</xsl:text>
+          <xsl:text>    DINT:  (dv,offset) =&gt; [dv.getInt32(offset, true), 4],
+</xsl:text>
+          <xsl:text>    LINT:  (dv,offset) =&gt; [dv.getBigInt64(offset, true), 8],
+</xsl:text>
+          <xsl:text>    USINT: (dv,offset) =&gt; [dv.getUint8(offset, true), 1],
+</xsl:text>
+          <xsl:text>    UINT:  (dv,offset) =&gt; [dv.getUint16(offset, true), 2],
+</xsl:text>
+          <xsl:text>    UDINT: (dv,offset) =&gt; [dv.getUint32(offset, true), 4],
+</xsl:text>
+          <xsl:text>    ULINT: (dv,offset) =&gt; [dv.getBigUint64(offset, true), 8],
+</xsl:text>
+          <xsl:text>    BOOL:  (dv,offset) =&gt; [dv.getInt8(offset, true), 1],
+</xsl:text>
+          <xsl:text>    NODE:  (dv,offset) =&gt; [dv.getInt8(offset, true), 1],
+</xsl:text>
+          <xsl:text>    REAL:  (dv,offset) =&gt; [dv.getFloat32(offset, true), 4],
 </xsl:text>
           <xsl:text>    STRING: (dv, offset) =&gt; {
 </xsl:text>
@@ -11717,8 +11737,22 @@
 </xsl:text>
           <xsl:text>const typedarray_types = {
 </xsl:text>
+          <xsl:text>    SINT: (number) =&gt; new Int8Array([number]),
+</xsl:text>
           <xsl:text>    INT: (number) =&gt; new Int16Array([number]),
 </xsl:text>
+          <xsl:text>    DINT: (number) =&gt; new Int32Array([number]),
+</xsl:text>
+          <xsl:text>    LINT: (number) =&gt; new Int64Array([number]),
+</xsl:text>
+          <xsl:text>    USINT: (number) =&gt; new Uint8Array([number]),
+</xsl:text>
+          <xsl:text>    UINT: (number) =&gt; new Uint16Array([number]),
+</xsl:text>
+          <xsl:text>    UDINT: (number) =&gt; new Uint32Array([number]),
+</xsl:text>
+          <xsl:text>    ULINT: (number) =&gt; new Uint64Array([number]),
+</xsl:text>
           <xsl:text>    BOOL: (truth) =&gt; new Int8Array([truth]),
 </xsl:text>
           <xsl:text>    NODE: (truth) =&gt; new Int8Array([truth]),
--- a/svghmi/hmi_tree.py	Fri Mar 10 09:13:29 2023 +0100
+++ b/svghmi/hmi_tree.py	Fri Aug 18 11:38:20 2023 +0200
@@ -17,7 +17,15 @@
 HMI_TYPES_DESC = {
     "HMI_NODE":{},
     "HMI_STRING":{},
+    "HMI_SINT":{},
     "HMI_INT":{},
+    "HMI_DINT":{},
+    "HMI_LINT":{},
+    "HMI_DINT":{},
+    "HMI_USINT":{},
+    "HMI_UINT":{},
+    "HMI_UDINT":{},
+    "HMI_ULINT":{},
     "HMI_BOOL":{},
     "HMI_REAL":{}
 }
--- a/svghmi/pous.xml	Fri Mar 10 09:13:29 2023 +0100
+++ b/svghmi/pous.xml	Fri Aug 18 11:38:20 2023 +0200
@@ -16,11 +16,46 @@
   </contentHeader>
   <types>
     <dataTypes>
+      <dataType name="HMI_SINT">
+        <baseType>
+          <SINT/>
+        </baseType>
+      </dataType>
       <dataType name="HMI_INT">
         <baseType>
           <INT/>
         </baseType>
       </dataType>
+      <dataType name="HMI_DINT">
+        <baseType>
+          <DINT/>
+        </baseType>
+      </dataType>
+      <dataType name="HMI_LINT">
+        <baseType>
+          <LINT/>
+        </baseType>
+      </dataType>
+      <dataType name="HMI_USINT">
+        <baseType>
+          <USINT/>
+        </baseType>
+      </dataType>
+      <dataType name="HMI_UINT">
+        <baseType>
+          <UINT/>
+        </baseType>
+      </dataType>
+      <dataType name="HMI_UDINT">
+        <baseType>
+          <UDINT/>
+        </baseType>
+      </dataType>
+      <dataType name="HMI_ULINT">
+        <baseType>
+          <ULINT/>
+        </baseType>
+      </dataType>
       <dataType name="HMI_REAL">
         <baseType>
           <REAL/>
--- a/svghmi/sprintf.js	Fri Mar 10 09:13:29 2023 +0100
+++ b/svghmi/sprintf.js	Fri Aug 18 11:38:20 2023 +0200
@@ -59,8 +59,13 @@
                     arg = arg()
                 }
 
-                if (re.numeric_arg.test(ph.type) && (typeof arg !== 'number' && isNaN(arg))) {
-                    throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg))
+                if (re.numeric_arg.test(ph.type)){
+                    let argtype = typeof arg;
+                    if ( argtype !== 'bigint') {
+                        if ( argtype !== 'number' && isNaN(arg) ) {
+                            throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg))
+                        }
+                    }
                 }
 
                 if (re.number.test(ph.type)) {
--- a/svghmi/svghmi.js	Fri Mar 10 09:13:29 2023 +0100
+++ b/svghmi/svghmi.js	Fri Aug 18 11:38:20 2023 +0200
@@ -24,10 +24,17 @@
 var has_watchdog = window.location.hash == "#watchdog";
 
 const dvgetters = {
-    INT: (dv,offset) => [dv.getInt16(offset, true), 2],
-    BOOL: (dv,offset) => [dv.getInt8(offset, true), 1],
-    NODE: (dv,offset) => [dv.getInt8(offset, true), 1],
-    REAL: (dv,offset) => [dv.getFloat32(offset, true), 4],
+    SINT:  (dv,offset) => [dv.getInt8(offset, true), 1],
+    INT:   (dv,offset) => [dv.getInt16(offset, true), 2],
+    DINT:  (dv,offset) => [dv.getInt32(offset, true), 4],
+    LINT:  (dv,offset) => [dv.getBigInt64(offset, true), 8],
+    USINT: (dv,offset) => [dv.getUint8(offset, true), 1],
+    UINT:  (dv,offset) => [dv.getUint16(offset, true), 2],
+    UDINT: (dv,offset) => [dv.getUint32(offset, true), 4],
+    ULINT: (dv,offset) => [dv.getBigUint64(offset, true), 8],
+    BOOL:  (dv,offset) => [dv.getInt8(offset, true), 1],
+    NODE:  (dv,offset) => [dv.getInt8(offset, true), 1],
+    REAL:  (dv,offset) => [dv.getFloat32(offset, true), 4],
     STRING: (dv, offset) => {
         const size = dv.getInt8(offset);
         return [
@@ -142,7 +149,14 @@
 };
 
 const typedarray_types = {
+    SINT: (number) => new Int8Array([number]),
     INT: (number) => new Int16Array([number]),
+    DINT: (number) => new Int32Array([number]),
+    LINT: (number) => new Int64Array([number]),
+    USINT: (number) => new Uint8Array([number]),
+    UINT: (number) => new Uint16Array([number]),
+    UDINT: (number) => new Uint32Array([number]),
+    ULINT: (number) => new Uint64Array([number]),
     BOOL: (truth) => new Int8Array([truth]),
     NODE: (truth) => new Int8Array([truth]),
     REAL: (number) => new Float32Array([number]),
--- a/tests/projects/svghmi_real/plc.xml	Fri Mar 10 09:13:29 2023 +0100
+++ b/tests/projects/svghmi_real/plc.xml	Fri Aug 18 11:38:20 2023 +0200
@@ -1,7 +1,7 @@
 <?xml version='1.0' encoding='utf-8'?>
 <project xmlns:ns1="http://www.plcopen.org/xml/tc6_0201" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.plcopen.org/xml/tc6_0201">
   <fileHeader companyName="Unknown" productName="Unnamed" productVersion="1" creationDateTime="2019-08-06T14:23:42"/>
-  <contentHeader name="Unnamed" modificationDateTime="2021-02-16T10:38:12">
+  <contentHeader name="Unnamed" modificationDateTime="2023-08-18T11:29:36">
     <coordinateInfo>
       <fbd>
         <scaling x="5" y="5"/>
@@ -27,53 +27,334 @@
             </variable>
             <variable name="var1">
               <type>
+                <derived name="HMI_SINT"/>
+              </type>
+            </variable>
+            <variable name="var2">
+              <type>
                 <derived name="HMI_INT"/>
               </type>
             </variable>
+            <variable name="var3">
+              <type>
+                <derived name="HMI_DINT"/>
+              </type>
+            </variable>
+            <variable name="var4">
+              <type>
+                <derived name="HMI_LINT"/>
+              </type>
+            </variable>
+            <variable name="var5">
+              <type>
+                <derived name="HMI_USINT"/>
+              </type>
+            </variable>
+            <variable name="var6">
+              <type>
+                <derived name="HMI_UINT"/>
+              </type>
+            </variable>
+            <variable name="var7">
+              <type>
+                <derived name="HMI_UDINT"/>
+              </type>
+            </variable>
+            <variable name="var8">
+              <type>
+                <derived name="HMI_ULINT"/>
+              </type>
+            </variable>
+            <variable name="var9">
+              <type>
+                <derived name="HMI_UDINT"/>
+              </type>
+            </variable>
           </localVars>
         </interface>
         <body>
           <FBD>
             <inVariable localId="5" executionOrderId="0" height="30" width="125" negated="false">
-              <position x="240" y="45"/>
+              <position x="320" y="60"/>
               <connectionPointOut>
                 <relPosition x="125" y="15"/>
               </connectionPointOut>
               <expression>var0</expression>
             </inVariable>
-            <outVariable localId="10" executionOrderId="0" height="25" width="85" negated="false">
-              <position x="720" y="70"/>
+            <block localId="11" typeName="REAL_TO_INT" executionOrderId="0" height="40" width="100">
+              <position x="495" y="95"/>
+              <inputVariables>
+                <variable formalParameter="IN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="30"/>
+                    <connection refLocalId="5">
+                      <position x="495" y="125"/>
+                      <position x="470" y="125"/>
+                      <position x="470" y="75"/>
+                      <position x="445" y="75"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="100" y="30"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <outVariable localId="12" executionOrderId="0" height="25" width="45" negated="false">
+              <position x="680" y="65"/>
+              <connectionPointIn>
+                <relPosition x="0" y="10"/>
+                <connection refLocalId="1" formalParameter="OUT">
+                  <position x="680" y="75"/>
+                  <position x="610" y="75"/>
+                </connection>
+              </connectionPointIn>
+              <expression>var1</expression>
+            </outVariable>
+            <outVariable localId="13" executionOrderId="0" height="25" width="45" negated="false">
+              <position x="680" y="115"/>
               <connectionPointIn>
                 <relPosition x="0" y="10"/>
                 <connection refLocalId="11" formalParameter="OUT">
-                  <position x="720" y="80"/>
-                  <position x="667" y="80"/>
-                  <position x="667" y="75"/>
-                  <position x="605" y="75"/>
-                </connection>
-              </connectionPointIn>
-              <expression>var1</expression>
-            </outVariable>
-            <block localId="11" typeName="REAL_TO_INT" executionOrderId="0" height="40" width="100">
-              <position x="505" y="45"/>
-              <inputVariables>
-                <variable formalParameter="IN">
-                  <connectionPointIn>
-                    <relPosition x="0" y="30"/>
-                    <connection refLocalId="5">
-                      <position x="505" y="75"/>
-                      <position x="445" y="75"/>
-                      <position x="445" y="60"/>
-                      <position x="365" y="60"/>
-                    </connection>
-                  </connectionPointIn>
-                </variable>
-              </inputVariables>
-              <inOutVariables/>
-              <outputVariables>
-                <variable formalParameter="OUT">
-                  <connectionPointOut>
-                    <relPosition x="100" y="30"/>
+                  <position x="680" y="125"/>
+                  <position x="595" y="125"/>
+                </connection>
+              </connectionPointIn>
+              <expression>var2</expression>
+            </outVariable>
+            <outVariable localId="14" executionOrderId="0" height="25" width="45" negated="false">
+              <position x="680" y="165"/>
+              <connectionPointIn>
+                <relPosition x="0" y="10"/>
+                <connection refLocalId="21" formalParameter="OUT">
+                  <position x="680" y="175"/>
+                  <position x="605" y="175"/>
+                </connection>
+              </connectionPointIn>
+              <expression>var3</expression>
+            </outVariable>
+            <outVariable localId="15" executionOrderId="0" height="25" width="45" negated="false">
+              <position x="680" y="215"/>
+              <connectionPointIn>
+                <relPosition x="0" y="10"/>
+                <connection refLocalId="20" formalParameter="OUT">
+                  <position x="680" y="225"/>
+                  <position x="605" y="225"/>
+                </connection>
+              </connectionPointIn>
+              <expression>var4</expression>
+            </outVariable>
+            <outVariable localId="16" executionOrderId="0" height="25" width="45" negated="false">
+              <position x="680" y="265"/>
+              <connectionPointIn>
+                <relPosition x="0" y="10"/>
+                <connection refLocalId="22" formalParameter="OUT">
+                  <position x="680" y="275"/>
+                  <position x="610" y="275"/>
+                </connection>
+              </connectionPointIn>
+              <expression>var5</expression>
+            </outVariable>
+            <outVariable localId="17" executionOrderId="0" height="25" width="45" negated="false">
+              <position x="680" y="315"/>
+              <connectionPointIn>
+                <relPosition x="0" y="10"/>
+                <connection refLocalId="23" formalParameter="OUT">
+                  <position x="680" y="325"/>
+                  <position x="605" y="325"/>
+                </connection>
+              </connectionPointIn>
+              <expression>var6</expression>
+            </outVariable>
+            <outVariable localId="18" executionOrderId="0" height="25" width="45" negated="false">
+              <position x="680" y="365"/>
+              <connectionPointIn>
+                <relPosition x="0" y="10"/>
+                <connection refLocalId="24" formalParameter="OUT">
+                  <position x="680" y="375"/>
+                  <position x="610" y="375"/>
+                </connection>
+              </connectionPointIn>
+              <expression>var7</expression>
+            </outVariable>
+            <outVariable localId="19" executionOrderId="0" height="25" width="45" negated="false">
+              <position x="680" y="415"/>
+              <connectionPointIn>
+                <relPosition x="0" y="10"/>
+                <connection refLocalId="25" formalParameter="OUT">
+                  <position x="680" y="425"/>
+                  <position x="610" y="425"/>
+                </connection>
+              </connectionPointIn>
+              <expression>var8</expression>
+            </outVariable>
+            <block localId="1" typeName="REAL_TO_SINT" executionOrderId="0" height="40" width="115">
+              <position x="495" y="45"/>
+              <inputVariables>
+                <variable formalParameter="IN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="30"/>
+                    <connection refLocalId="5">
+                      <position x="495" y="75"/>
+                      <position x="445" y="75"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="115" y="30"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <block localId="20" typeName="REAL_TO_LINT" executionOrderId="0" height="40" width="110">
+              <position x="495" y="195"/>
+              <inputVariables>
+                <variable formalParameter="IN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="30"/>
+                    <connection refLocalId="5">
+                      <position x="495" y="225"/>
+                      <position x="470" y="225"/>
+                      <position x="470" y="75"/>
+                      <position x="445" y="75"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="110" y="30"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <block localId="21" typeName="REAL_TO_DINT" executionOrderId="0" height="40" width="110">
+              <position x="495" y="145"/>
+              <inputVariables>
+                <variable formalParameter="IN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="30"/>
+                    <connection refLocalId="5">
+                      <position x="495" y="175"/>
+                      <position x="470" y="175"/>
+                      <position x="470" y="75"/>
+                      <position x="445" y="75"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="110" y="30"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <block localId="22" typeName="REAL_TO_USINT" executionOrderId="0" height="40" width="115">
+              <position x="495" y="245"/>
+              <inputVariables>
+                <variable formalParameter="IN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="30"/>
+                    <connection refLocalId="5">
+                      <position x="495" y="275"/>
+                      <position x="470" y="275"/>
+                      <position x="470" y="75"/>
+                      <position x="445" y="75"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="115" y="30"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <block localId="23" typeName="REAL_TO_UINT" executionOrderId="0" height="40" width="110">
+              <position x="495" y="295"/>
+              <inputVariables>
+                <variable formalParameter="IN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="30"/>
+                    <connection refLocalId="5">
+                      <position x="495" y="325"/>
+                      <position x="470" y="325"/>
+                      <position x="470" y="75"/>
+                      <position x="445" y="75"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="110" y="30"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <block localId="24" typeName="REAL_TO_UDINT" executionOrderId="0" height="40" width="115">
+              <position x="495" y="345"/>
+              <inputVariables>
+                <variable formalParameter="IN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="30"/>
+                    <connection refLocalId="5">
+                      <position x="495" y="375"/>
+                      <position x="470" y="375"/>
+                      <position x="470" y="75"/>
+                      <position x="445" y="75"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="115" y="30"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <block localId="25" typeName="REAL_TO_ULINT" executionOrderId="0" height="40" width="115">
+              <position x="495" y="395"/>
+              <inputVariables>
+                <variable formalParameter="IN">
+                  <connectionPointIn>
+                    <relPosition x="0" y="30"/>
+                    <connection refLocalId="5">
+                      <position x="495" y="425"/>
+                      <position x="470" y="425"/>
+                      <position x="470" y="75"/>
+                      <position x="445" y="75"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="115" y="30"/>
                   </connectionPointOut>
                 </variable>
               </outputVariables>
--- a/tests/projects/svghmi_real/svghmi_0@svghmi/svghmi.svg	Fri Mar 10 09:13:29 2023 +0100
+++ b/tests/projects/svghmi_real/svghmi_0@svghmi/svghmi.svg	Fri Aug 18 11:38:20 2023 +0200
@@ -25,7 +25,7 @@
         <dc:format>image/svg+xml</dc:format>
         <dc:type
            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
+        <dc:title></dc:title>
       </cc:Work>
     </rdf:RDF>
   </metadata>
@@ -59,14 +59,14 @@
      inkscape:current-layer="hmi0"
      showgrid="false"
      units="px"
-     inkscape:zoom="0.64"
-     inkscape:cx="106.50649"
-     inkscape:cy="372.66049"
-     inkscape:window-width="1600"
-     inkscape:window-height="836"
-     inkscape:window-x="1600"
+     inkscape:zoom="0.90509668"
+     inkscape:cx="672.72033"
+     inkscape:cy="359.05499"
+     inkscape:window-width="1850"
+     inkscape:window-height="1036"
+     inkscape:window-x="0"
      inkscape:window-y="27"
-     inkscape:window-maximized="0"
+     inkscape:window-maximized="1"
      showguides="true"
      inkscape:guide-bbox="true"
      inkscape:snap-global="true"
@@ -381,13 +381,13 @@
   <g
      id="g4490"
      inkscape:label="HMI:Input:%.4f@/VAR0"
-     transform="translate(220,-220)">
+     transform="translate(220,-480)">
     <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:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;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="rect4452"
-       width="165.96402"
-       height="78.240181"
-       x="207.3945"
+       width="525.04169"
+       height="78.240173"
+       x="147.3945"
        y="501.87585"
        rx="7"
        ry="7"
@@ -395,18 +395,18 @@
     <text
        id="text4456"
        y="551.66504"
-       x="289.30231"
-       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="161.72418"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
        xml:space="preserve"
        inkscape:label="value"><tspan
          y="551.66504"
-         x="289.30231"
+         x="161.72418"
          id="tspan4454"
          sodipodi:role="line">1234</tspan></text>
     <g
        id="g4464"
        inkscape:label="-1"
-       transform="translate(-414.79908,-17.189114)">
+       transform="translate(-474.79908,-17.189114)">
       <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:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;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="rect4458"
@@ -428,7 +428,7 @@
            y="566.1087">-1</tspan></text>
     </g>
     <g
-       transform="translate(-534.79908,-17.189114)"
+       transform="translate(-594.79908,-17.189114)"
        inkscape:label="-10"
        id="g4472">
       <rect
@@ -452,7 +452,7 @@
            sodipodi:role="line">-10</tspan></text>
     </g>
     <g
-       transform="translate(111.20092,-17.189114)"
+       transform="translate(411.20092,-17.189114)"
        inkscape:label="+1"
        id="g4480">
       <rect
@@ -478,7 +478,7 @@
     <g
        id="g4488"
        inkscape:label="+10"
-       transform="translate(231.20092,-17.189114)">
+       transform="translate(531.20092,-17.189114)">
       <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:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;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="rect4482"
@@ -502,7 +502,7 @@
     <g
        id="g154"
        inkscape:label="+0.1"
-       transform="translate(-8.7991028,-17.189114)">
+       transform="translate(291.2009,-17.189114)">
       <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:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;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="rect148"
@@ -524,7 +524,7 @@
            y="566.1087">+.1</tspan></text>
     </g>
     <g
-       transform="translate(-294.79907,-17.189114)"
+       transform="translate(-354.79907,-17.189114)"
        inkscape:label="-0.1"
        id="g162">
       <rect
@@ -551,85 +551,69 @@
   <g
      id="g170"
      inkscape:label="HMI:Display@/VAR0"
-     transform="translate(-400)">
+     transform="translate(-380,60)">
     <text
        id="text166"
        y="96.5625"
-       x="595.3125"
-       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="550.9082"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
        xml:space="preserve"
        inkscape:label="format"><tspan
          y="96.5625"
-         x="595.3125"
+         x="550.9082"
          id="tspan164"
          sodipodi:role="line">%.2f</tspan></text>
   </g>
   <g
-     inkscape:label="HMI:Display@/VAR1"
-     id="g3879"
-     transform="translate(-400,80)">
-    <text
-       inkscape:label="format"
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       x="595.3125"
-       y="96.5625"
-       id="text3877"><tspan
-         sodipodi:role="line"
-         id="tspan3875"
-         x="595.3125"
-         y="96.5625">%d</tspan></text>
-  </g>
-  <g
      inkscape:label="HMI:Display@/VAR0"
      id="g3885"
-     transform="translate(-140)">
+     transform="translate(20,60)">
     <text
        inkscape:label="format"
        xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       x="595.3125"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="464.23828"
        y="96.5625"
        id="text3883"><tspan
          sodipodi:role="line"
          id="tspan3881"
-         x="595.3125"
+         x="464.23828"
          y="96.5625">temp: %.2f℃</tspan></text>
   </g>
   <g
-     transform="translate(220)"
+     transform="translate(460,60)"
      id="g3895"
      inkscape:label="HMI:Display@/VAR0">
     <text
        id="text3893"
        y="96.5625"
-       x="595.3125"
-       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="455.88867"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
        xml:space="preserve"
        inkscape:label="format"><tspan
          y="96.5625"
-         x="595.3125"
+         x="455.88867"
          id="tspan3891"
          sodipodi:role="line">ratio: %.2f%%</tspan></text>
   </g>
   <g
-     transform="translate(-220,80)"
+     transform="translate(-240,120.96802)"
      id="g3901"
      inkscape:label="HMI:Display@/VAR1">
     <text
        id="text3899"
        y="96.5625"
-       x="655.3125"
-       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="507.86133"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
        xml:space="preserve"
        inkscape:label="format"><tspan
          y="96.5625"
-         x="655.3125"
+         x="507.86133"
          id="tspan3897"
          sodipodi:role="line">padded: %'04d</tspan></text>
   </g>
   <g
-     transform="translate(-140,440)"
+     transform="translate(-18.895146,610.14757)"
      id="g3907"
      inkscape:label="HMI:Display@/VAR1@/VAR0">
     <text
@@ -642,6 +626,356 @@
          y="96.5625"
          x="595.3125"
          id="tspan3903"
-         sodipodi:role="line">this way, %d and %.3f are together</tspan></text>
+         sodipodi:role="line">Multiple variable display: var1 %d and var0 %.3f</tspan></text>
+  </g>
+  <text
+     inkscape:label="format"
+     xml:space="preserve"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="19.93924"
+     y="156.82739"
+     id="text3883-3"><tspan
+       sodipodi:role="line"
+       id="tspan3881-6"
+       x="19.93924"
+       y="156.82739">REAL</tspan></text>
+  <text
+     id="text631"
+     y="216.82739"
+     x="19.93924"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"
+     inkscape:label="format"><tspan
+       y="216.82739"
+       x="19.93924"
+       sodipodi:role="line"
+       id="tspan637">SINT</tspan></text>
+  <text
+     inkscape:label="format"
+     xml:space="preserve"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="19.93924"
+     y="276.82739"
+     id="text643"><tspan
+       id="tspan641"
+       sodipodi:role="line"
+       x="19.93924"
+       y="276.82739">INT</tspan></text>
+  <text
+     id="text647"
+     y="336.82739"
+     x="19.93924"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"
+     inkscape:label="format"><tspan
+       y="336.82739"
+       x="19.93924"
+       sodipodi:role="line"
+       id="tspan645">DINT</tspan></text>
+  <text
+     inkscape:label="format"
+     xml:space="preserve"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="19.93924"
+     y="396.82739"
+     id="text651"><tspan
+       id="tspan649"
+       sodipodi:role="line"
+       x="19.93924"
+       y="396.82739">LINT</tspan></text>
+  <text
+     inkscape:label="format"
+     xml:space="preserve"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="19.93924"
+     y="456.82739"
+     id="text655"><tspan
+       id="tspan653"
+       sodipodi:role="line"
+       x="19.93924"
+       y="456.82739">USINT</tspan></text>
+  <text
+     id="text659"
+     y="516.82739"
+     x="19.93924"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"
+     inkscape:label="format"><tspan
+       y="516.82739"
+       x="19.93924"
+       sodipodi:role="line"
+       id="tspan657">UINT</tspan></text>
+  <text
+     inkscape:label="format"
+     xml:space="preserve"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     x="19.93924"
+     y="576.82739"
+     id="text663"><tspan
+       id="tspan661"
+       sodipodi:role="line"
+       x="19.93924"
+       y="576.82739">UDINT</tspan></text>
+  <text
+     id="text667"
+     y="636.82739"
+     x="19.93924"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     xml:space="preserve"
+     inkscape:label="format"><tspan
+       y="636.82739"
+       x="19.93924"
+       sodipodi:role="line"
+       id="tspan665">ULINT</tspan></text>
+  <g
+     transform="translate(-400,120.96802)"
+     id="g673"
+     inkscape:label="HMI:Display@/VAR1"
+     style="">
+    <text
+       id="text671"
+       y="96.5625"
+       x="595.3125"
+       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"
+       inkscape:label="format"><tspan
+         y="96.5625"
+         x="595.3125"
+         id="tspan669"
+         sodipodi:role="line">%d</tspan></text>
+  </g>
+  <g
+     inkscape:label="HMI:Display@/VAR2"
+     id="g679"
+     transform="translate(-400,180.96802)">
+    <text
+       inkscape:label="format"
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="566.5332"
+       y="96.5625"
+       id="text677"><tspan
+         sodipodi:role="line"
+         id="tspan675"
+         x="566.5332"
+         y="96.5625">%d</tspan></text>
+  </g>
+  <g
+     transform="translate(-400,240.96802)"
+     id="g685"
+     inkscape:label="HMI:Display@/VAR3">
+    <text
+       id="text683"
+       y="96.5625"
+       x="566.5332"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"
+       inkscape:label="format"><tspan
+         y="96.5625"
+         x="566.5332"
+         id="tspan681"
+         sodipodi:role="line">%d</tspan></text>
+  </g>
+  <g
+     inkscape:label="HMI:Display@/VAR4"
+     id="g691"
+     transform="translate(-400,300.96802)">
+    <text
+       inkscape:label="format"
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="566.5332"
+       y="96.5625"
+       id="text689"><tspan
+         sodipodi:role="line"
+         id="tspan687"
+         x="566.5332"
+         y="96.5625">%d</tspan></text>
+  </g>
+  <g
+     transform="translate(-400,360.96802)"
+     id="g697"
+     inkscape:label="HMI:Display@/VAR5">
+    <text
+       id="text695"
+       y="96.5625"
+       x="566.5332"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"
+       inkscape:label="format"><tspan
+         y="96.5625"
+         x="566.5332"
+         id="tspan693"
+         sodipodi:role="line">%d</tspan></text>
+  </g>
+  <g
+     inkscape:label="HMI:Display@/VAR6"
+     id="g703"
+     transform="translate(-400,420.96802)">
+    <text
+       inkscape:label="format"
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="566.5332"
+       y="96.5625"
+       id="text701"><tspan
+         sodipodi:role="line"
+         id="tspan699"
+         x="566.5332"
+         y="96.5625">%d</tspan></text>
+  </g>
+  <g
+     transform="translate(-400,480.96802)"
+     id="g709"
+     inkscape:label="HMI:Display@/VAR7">
+    <text
+       id="text707"
+       y="96.5625"
+       x="566.5332"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"
+       inkscape:label="format"><tspan
+         y="96.5625"
+         x="566.5332"
+         id="tspan705"
+         sodipodi:role="line">%d</tspan></text>
+  </g>
+  <g
+     inkscape:label="HMI:Display@/VAR8"
+     id="g3879"
+     transform="translate(-400,540.96802)">
+    <text
+       inkscape:label="format"
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="566.5332"
+       y="96.5625"
+       id="text3877"><tspan
+         sodipodi:role="line"
+         id="tspan3875"
+         x="566.5332"
+         y="96.5625">%d</tspan></text>
+  </g>
+  <g
+     transform="translate(480,24)"
+     inkscape:label="HMI:Input:%d@/VAR9"
+     id="g765">
+    <rect
+       inkscape:label="edit"
+       ry="7"
+       rx="7"
+       y="501.87585"
+       x="281.3945"
+       height="78.240173"
+       width="236.67467"
+       id="rect711"
+       style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;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"
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="289.72418"
+       y="551.66504"
+       id="text715"><tspan
+         sodipodi:role="line"
+         id="tspan713"
+         x="289.72418"
+         y="551.66504">1234</tspan></text>
+    <g
+       transform="translate(-234.79908,-17.189114)"
+       inkscape:label="-1"
+       id="g723">
+      <rect
+         ry="7"
+         rx="7"
+         y="513.73041"
+         x="392.38638"
+         height="88.909302"
+         width="99.578415"
+         id="rect717"
+         style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+      <text
+         id="text721"
+         y="566.1087"
+         x="441.65189"
+         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="566.1087"
+           x="441.65189"
+           id="tspan719"
+           sodipodi:role="line">-1</tspan></text>
+    </g>
+    <g
+       id="g731"
+       inkscape:label="-10"
+       transform="translate(-354.79908,-17.189114)">
+      <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:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;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="rect725"
+         width="99.578415"
+         height="88.909302"
+         x="392.38638"
+         y="513.73041"
+         rx="7"
+         ry="7" />
+      <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="441.65189"
+         y="566.1087"
+         id="text729"><tspan
+           sodipodi:role="line"
+           id="tspan727"
+           x="441.65189"
+           y="566.1087">-10</tspan></text>
+    </g>
+    <g
+       id="g739"
+       inkscape:label="+1"
+       transform="translate(145.20092,-17.189114)">
+      <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:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;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="rect733"
+         width="99.578415"
+         height="88.909302"
+         x="392.38638"
+         y="513.73041"
+         rx="7"
+         ry="7" />
+      <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="441.65189"
+         y="566.1087"
+         id="text737"><tspan
+           sodipodi:role="line"
+           id="tspan735"
+           x="441.65189"
+           y="566.1087">+1</tspan></text>
+    </g>
+    <g
+       transform="translate(265.20092,-17.189114)"
+       inkscape:label="+10"
+       id="g747">
+      <rect
+         ry="7"
+         rx="7"
+         y="513.73041"
+         x="392.38638"
+         height="88.909302"
+         width="99.578415"
+         id="rect741"
+         style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+      <text
+         id="text745"
+         y="566.1087"
+         x="441.65189"
+         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="566.1087"
+           x="441.65189"
+           id="tspan743"
+           sodipodi:role="line">+10</tspan></text>
+    </g>
   </g>
 </svg>