--- a/svghmi/gen_index_xhtml.xslt Tue Oct 03 21:33:13 2023 +0200
+++ b/svghmi/gen_index_xhtml.xslt Wed Oct 04 16:24:00 2023 +0200
@@ -2170,8 +2170,6 @@
<xsl:text> this.incoming[index] = undefined;
- <xsl:text> // TODO: add timestamp argument to dispatch, so that defered data do not appear wrong on graphs
<xsl:text> this.lastdispatch[index] = Date.now();
<xsl:text> this.do_dispatch(new_val, old_val, index);
@@ -9273,8 +9271,6 @@
- <xsl:text> console.log("dispatch(",value,oldval, index, time);
<xsl:text> // naive local buffer impl.
<xsl:text> // data is updated only when graph is visible
@@ -10985,9 +10981,19 @@
- <xsl:text> if (re.numeric_arg.test(ph.type) && (typeof arg !== 'number' && isNaN(arg))) {
- <xsl:text> throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg))
+ <xsl:text> if (re.numeric_arg.test(ph.type)){ + <xsl:text> let argtype = typeof arg; + <xsl:text> if ( argtype !== 'bigint') { + <xsl:text> if ( argtype !== 'number' && isNaN(arg) ) { + <xsl:text> throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg)) @@ -11481,13 +11487,27 @@
<xsl:text>const dvgetters = {
- <xsl:text> INT: (dv,offset) => [dv.getInt16(offset, true), 2],
- <xsl:text> BOOL: (dv,offset) => [dv.getInt8(offset, true), 1],
- <xsl:text> NODE: (dv,offset) => [dv.getInt8(offset, true), 1],
- <xsl:text> REAL: (dv,offset) => [dv.getFloat32(offset, true), 4],
+ <xsl:text> SINT: (dv,offset) => [dv.getInt8(offset, true), 1], + <xsl:text> INT: (dv,offset) => [dv.getInt16(offset, true), 2], + <xsl:text> DINT: (dv,offset) => [dv.getInt32(offset, true), 4], + <xsl:text> LINT: (dv,offset) => [dv.getBigInt64(offset, true), 8], + <xsl:text> USINT: (dv,offset) => [dv.getUint8(offset, true), 1], + <xsl:text> UINT: (dv,offset) => [dv.getUint16(offset, true), 2], + <xsl:text> UDINT: (dv,offset) => [dv.getUint32(offset, true), 4], + <xsl:text> ULINT: (dv,offset) => [dv.getBigUint64(offset, true), 8], + <xsl:text> BOOL: (dv,offset) => [dv.getInt8(offset, true), 1], + <xsl:text> NODE: (dv,offset) => [dv.getInt8(offset, true), 1], + <xsl:text> REAL: (dv,offset) => [dv.getFloat32(offset, true), 4], <xsl:text> STRING: (dv, offset) => {
@@ -11717,8 +11737,22 @@
<xsl:text>const typedarray_types = {
+ <xsl:text> SINT: (number) => new Int8Array([number]), <xsl:text> INT: (number) => new Int16Array([number]),
+ <xsl:text> DINT: (number) => new Int32Array([number]), + <xsl:text> LINT: (number) => new Int64Array([number]), + <xsl:text> USINT: (number) => new Uint8Array([number]), + <xsl:text> UINT: (number) => new Uint16Array([number]), + <xsl:text> UDINT: (number) => new Uint32Array([number]), + <xsl:text> ULINT: (number) => new Uint64Array([number]), <xsl:text> BOOL: (truth) => new Int8Array([truth]),
<xsl:text> NODE: (truth) => new Int8Array([truth]),
--- a/svghmi/hmi_tree.py Tue Oct 03 21:33:13 2023 +0200
+++ b/svghmi/hmi_tree.py Wed Oct 04 16:24:00 2023 +0200
@@ -17,7 +17,15 @@
--- a/svghmi/pous.xml Tue Oct 03 21:33:13 2023 +0200
+++ b/svghmi/pous.xml Wed Oct 04 16:24:00 2023 +0200
@@ -16,11 +16,46 @@
+ <dataType name="HMI_SINT"> <dataType name="HMI_INT">
+ <dataType name="HMI_DINT"> + <dataType name="HMI_LINT"> + <dataType name="HMI_USINT"> + <dataType name="HMI_UINT"> + <dataType name="HMI_UDINT"> + <dataType name="HMI_ULINT"> <dataType name="HMI_REAL">
--- a/svghmi/sprintf.js Tue Oct 03 21:33:13 2023 +0200
+++ b/svghmi/sprintf.js Wed Oct 04 16:24:00 2023 +0200
@@ -59,8 +59,13 @@
- 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 Tue Oct 03 21:33:13 2023 +0200
+++ b/svghmi/svghmi.js Wed Oct 04 16:24:00 2023 +0200
@@ -24,10 +24,17 @@
var has_watchdog = window.location.hash == "#watchdog";
- 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);
@@ -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 Tue Oct 03 21:33:13 2023 +0200
+++ b/tests/projects/svghmi_real/plc.xml Wed Oct 04 16:24:00 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"> @@ -27,44 +27,71 @@
+ <derived name="HMI_SINT"/> <derived name="HMI_INT"/>
+ <derived name="HMI_DINT"/> + <derived name="HMI_LINT"/> + <derived name="HMI_USINT"/> + <derived name="HMI_UINT"/> + <derived name="HMI_UDINT"/> + <derived name="HMI_ULINT"/> + <derived name="HMI_UDINT"/> <inVariable localId="5" executionOrderId="0" height="30" width="125" negated="false">
- <position x="240" y="45"/>
+ <position x="320" y="60"/> <relPosition x="125" y="15"/>
<expression>var0</expression>
- <outVariable localId="10" executionOrderId="0" height="25" width="85" negated="false">
- <position x="720" y="70"/>
- <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"/>
- <expression>var1</expression>
<block localId="11" typeName="REAL_TO_INT" executionOrderId="0" height="40" width="100">
- <position x="505" y="45"/>
+ <position x="495" y="95"/> <variable formalParameter="IN">
<relPosition x="0" y="30"/>
<connection refLocalId="5">
- <position x="505" y="75"/>
+ <position x="495" y="125"/> + <position x="470" y="125"/> + <position x="470" y="75"/> <position x="445" y="75"/>
- <position x="445" y="60"/>
- <position x="365" y="60"/>
@@ -78,6 +105,260 @@
+ <outVariable localId="12" executionOrderId="0" height="25" width="45" negated="false"> + <position x="680" y="65"/> + <relPosition x="0" y="10"/> + <connection refLocalId="1" formalParameter="OUT"> + <position x="680" y="75"/> + <position x="610" y="75"/> + <expression>var1</expression> + <outVariable localId="13" executionOrderId="0" height="25" width="45" negated="false"> + <position x="680" y="115"/> + <relPosition x="0" y="10"/> + <connection refLocalId="11" formalParameter="OUT"> + <position x="680" y="125"/> + <position x="595" y="125"/> + <expression>var2</expression> + <outVariable localId="14" executionOrderId="0" height="25" width="45" negated="false"> + <position x="680" y="165"/> + <relPosition x="0" y="10"/> + <connection refLocalId="21" formalParameter="OUT"> + <position x="680" y="175"/> + <position x="605" y="175"/> + <expression>var3</expression> + <outVariable localId="15" executionOrderId="0" height="25" width="45" negated="false"> + <position x="680" y="215"/> + <relPosition x="0" y="10"/> + <connection refLocalId="20" formalParameter="OUT"> + <position x="680" y="225"/> + <position x="605" y="225"/> + <expression>var4</expression> + <outVariable localId="16" executionOrderId="0" height="25" width="45" negated="false"> + <position x="680" y="265"/> + <relPosition x="0" y="10"/> + <connection refLocalId="22" formalParameter="OUT"> + <position x="680" y="275"/> + <position x="610" y="275"/> + <expression>var5</expression> + <outVariable localId="17" executionOrderId="0" height="25" width="45" negated="false"> + <position x="680" y="315"/> + <relPosition x="0" y="10"/> + <connection refLocalId="23" formalParameter="OUT"> + <position x="680" y="325"/> + <position x="605" y="325"/> + <expression>var6</expression> + <outVariable localId="18" executionOrderId="0" height="25" width="45" negated="false"> + <position x="680" y="365"/> + <relPosition x="0" y="10"/> + <connection refLocalId="24" formalParameter="OUT"> + <position x="680" y="375"/> + <position x="610" y="375"/> + <expression>var7</expression> + <outVariable localId="19" executionOrderId="0" height="25" width="45" negated="false"> + <position x="680" y="415"/> + <relPosition x="0" y="10"/> + <connection refLocalId="25" formalParameter="OUT"> + <position x="680" y="425"/> + <position x="610" y="425"/> + <expression>var8</expression> + <block localId="1" typeName="REAL_TO_SINT" executionOrderId="0" height="40" width="115"> + <position x="495" y="45"/> + <variable formalParameter="IN"> + <relPosition x="0" y="30"/> + <connection refLocalId="5"> + <position x="495" y="75"/> + <position x="445" y="75"/> + <variable formalParameter="OUT"> + <relPosition x="115" y="30"/> + <block localId="20" typeName="REAL_TO_LINT" executionOrderId="0" height="40" width="110"> + <position x="495" y="195"/> + <variable formalParameter="IN"> + <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"/> + <variable formalParameter="OUT"> + <relPosition x="110" y="30"/> + <block localId="21" typeName="REAL_TO_DINT" executionOrderId="0" height="40" width="110"> + <position x="495" y="145"/> + <variable formalParameter="IN"> + <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"/> + <variable formalParameter="OUT"> + <relPosition x="110" y="30"/> + <block localId="22" typeName="REAL_TO_USINT" executionOrderId="0" height="40" width="115"> + <position x="495" y="245"/> + <variable formalParameter="IN"> + <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"/> + <variable formalParameter="OUT"> + <relPosition x="115" y="30"/> + <block localId="23" typeName="REAL_TO_UINT" executionOrderId="0" height="40" width="110"> + <position x="495" y="295"/> + <variable formalParameter="IN"> + <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"/> + <variable formalParameter="OUT"> + <relPosition x="110" y="30"/> + <block localId="24" typeName="REAL_TO_UDINT" executionOrderId="0" height="40" width="115"> + <position x="495" y="345"/> + <variable formalParameter="IN"> + <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"/> + <variable formalParameter="OUT"> + <relPosition x="115" y="30"/> + <block localId="25" typeName="REAL_TO_ULINT" executionOrderId="0" height="40" width="115"> + <position x="495" y="395"/> + <variable formalParameter="IN"> + <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"/> + <variable formalParameter="OUT"> + <relPosition x="115" y="30"/> --- a/tests/projects/svghmi_real/svghmi_0@svghmi/svghmi.svg Tue Oct 03 21:33:13 2023 +0200
+++ b/tests/projects/svghmi_real/svghmi_0@svghmi/svghmi.svg Wed Oct 04 16:24:00 2023 +0200
@@ -25,7 +25,7 @@
<dc:format>image/svg+xml</dc:format>
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
@@ -59,14 +59,14 @@
inkscape:current-layer="hmi0"
- 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-maximized="0"
+ inkscape:window-maximized="1" inkscape:guide-bbox="true"
inkscape:snap-global="true"
@@ -381,13 +381,13 @@
inkscape:label="HMI:Input:%.4f@/VAR0"
- transform="translate(220,-220)">
+ transform="translate(220,-480)"> 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"
@@ -395,18 +395,18 @@
- 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"
+ 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" inkscape:label="value"><tspan
sodipodi:role="line">1234</tspan></text>
- transform="translate(-414.79908,-17.189114)">
+ transform="translate(-474.79908,-17.189114)"> 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"
@@ -428,7 +428,7 @@
y="566.1087">-1</tspan></text>
- transform="translate(-534.79908,-17.189114)"
+ transform="translate(-594.79908,-17.189114)" @@ -452,7 +452,7 @@
sodipodi:role="line">-10</tspan></text>
- transform="translate(111.20092,-17.189114)"
+ transform="translate(411.20092,-17.189114)" @@ -478,7 +478,7 @@
- transform="translate(231.20092,-17.189114)">
+ transform="translate(531.20092,-17.189114)"> 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"
@@ -502,7 +502,7 @@
- transform="translate(-8.7991028,-17.189114)">
+ transform="translate(291.2009,-17.189114)"> 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"
@@ -524,7 +524,7 @@
y="566.1087">+.1</tspan></text>
- transform="translate(-294.79907,-17.189114)"
+ transform="translate(-354.79907,-17.189114)" @@ -551,85 +551,69 @@
inkscape:label="HMI:Display@/VAR0"
- transform="translate(-400)">
+ transform="translate(-380,60)">
- 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"
+ 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" inkscape:label="format"><tspan
sodipodi:role="line">%.2f</tspan></text>
- inkscape:label="HMI:Display@/VAR1"
- transform="translate(-400,80)">
+ inkscape:label="HMI:Display@/VAR0" + transform="translate(20,60)"> - 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"
- y="96.5625">%d</tspan></text>
- inkscape:label="HMI:Display@/VAR0"
- transform="translate(-140)">
- inkscape:label="format"
- 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"
+ 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"
y="96.5625">temp: %.2f℃</tspan></text>
- transform="translate(220)"
+ transform="translate(460,60)" inkscape:label="HMI:Display@/VAR0">
- 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"
+ 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" inkscape:label="format"><tspan
sodipodi:role="line">ratio: %.2f%%</tspan></text>
- transform="translate(-220,80)"
+ transform="translate(-240,120.96802)" inkscape:label="HMI:Display@/VAR1">
- 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"
+ 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" inkscape:label="format"><tspan
sodipodi:role="line">padded: %'04d</tspan></text>
- transform="translate(-140,440)"
+ transform="translate(-18.895146,610.14757)" inkscape:label="HMI:Display@/VAR1@/VAR0">
@@ -642,6 +626,356 @@
- 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> + inkscape:label="format" + 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" + y="156.82739">REAL</tspan></text> + 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" + inkscape:label="format"><tspan + id="tspan637">SINT</tspan></text> + inkscape:label="format" + 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" + y="276.82739">INT</tspan></text> + 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" + inkscape:label="format"><tspan + id="tspan645">DINT</tspan></text> + inkscape:label="format" + 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" + y="396.82739">LINT</tspan></text> + inkscape:label="format" + 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" + y="456.82739">USINT</tspan></text> + 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" + inkscape:label="format"><tspan + id="tspan657">UINT</tspan></text> + inkscape:label="format" + 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" + y="576.82739">UDINT</tspan></text> + 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" + inkscape:label="format"><tspan + id="tspan665">ULINT</tspan></text> + transform="translate(-400,120.96802)" + inkscape:label="HMI:Display@/VAR1" + 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" + inkscape:label="format"><tspan + sodipodi:role="line">%d</tspan></text> + inkscape:label="HMI:Display@/VAR2" + transform="translate(-400,180.96802)"> + inkscape:label="format" + 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" + y="96.5625">%d</tspan></text> + transform="translate(-400,240.96802)" + inkscape:label="HMI:Display@/VAR3"> + 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" + inkscape:label="format"><tspan + sodipodi:role="line">%d</tspan></text> + inkscape:label="HMI:Display@/VAR4" + transform="translate(-400,300.96802)"> + inkscape:label="format" + 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" + y="96.5625">%d</tspan></text> + transform="translate(-400,360.96802)" + inkscape:label="HMI:Display@/VAR5"> + 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" + inkscape:label="format"><tspan + sodipodi:role="line">%d</tspan></text> + inkscape:label="HMI:Display@/VAR6" + transform="translate(-400,420.96802)"> + inkscape:label="format" + 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" + y="96.5625">%d</tspan></text> + transform="translate(-400,480.96802)" + inkscape:label="HMI:Display@/VAR7"> + 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" + inkscape:label="format"><tspan + sodipodi:role="line">%d</tspan></text> + inkscape:label="HMI:Display@/VAR8" + transform="translate(-400,540.96802)"> + inkscape:label="format" + 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" + y="96.5625">%d</tspan></text> + transform="translate(480,24)" + inkscape:label="HMI:Input:%d@/VAR9" + 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" /> + 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" + y="551.66504">1234</tspan></text> + transform="translate(-234.79908,-17.189114)" + 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" /> + 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 + sodipodi:role="line">-1</tspan></text> + transform="translate(-354.79908,-17.189114)"> + 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" + 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" + y="566.1087">-10</tspan></text> + transform="translate(145.20092,-17.189114)"> + 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" + 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" + y="566.1087">+1</tspan></text> + transform="translate(265.20092,-17.189114)" + 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" /> + 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 + sodipodi:role="line">+10</tspan></text>