SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
--- a/svghmi/gen_index_xhtml.xslt Thu Aug 06 15:01:01 2020 +0200
+++ b/svghmi/gen_index_xhtml.xslt Sat Aug 08 15:53:28 2020 +0200
@@ -169,14 +169,30 @@
</xsl:attribute>
<xsl:variable name="path" select="."/>
<xsl:variable name="item" select="$indexed_hmitree/*[@hmipath = $path]"/>
- <xsl:if test="count($item) = 1">
- <xsl:attribute name="index">
- <xsl:value-of select="$item/@index"/>
- </xsl:attribute>
- <xsl:attribute name="type">
- <xsl:value-of select="local-name($item)"/>
- </xsl:attribute>
- </xsl:if>
+ <xsl:choose>
+ <xsl:when test="count($item) = 1">
+ <xsl:attribute name="index">
+ <xsl:value-of select="$item/@index"/>
+ </xsl:attribute>
+ <xsl:attribute name="type">
+ <xsl:value-of select="local-name($item)"/>
+ </xsl:attribute>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="regexp:test($path,'^\.[a-zA-Z0-9_]+')">
+ <xsl:attribute name="type">
+ <xsl:text>PAGE_LOCAL</xsl:text>
+ </xsl:attribute>
+ </xsl:when>
+ <xsl:when test="regexp:test($path,'^[a-zA-Z0-9_]+')">
+ <xsl:attribute name="type">
+ <xsl:text>HMI_LOCAL</xsl:text>
+ </xsl:attribute>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
</path>
</xsl:if>
</xsl:for-each>
@@ -845,15 +861,35 @@
<xsl:for-each select="$widget/path">
<xsl:choose>
<xsl:when test="not(@index)">
- <xsl:message terminate="no">
- <xsl:text>Widget </xsl:text>
- <xsl:value-of select="$widget/@type"/>
- <xsl:text> id="</xsl:text>
- <xsl:value-of select="$eltid"/>
- <xsl:text>" : No match for path "</xsl:text>
- <xsl:value-of select="@value"/>
- <xsl:text>" in HMI tree</xsl:text>
- </xsl:message>
+ <xsl:choose>
+ <xsl:when test="not(@type)">
+ <xsl:message terminate="yes">
+ <xsl:text>Widget </xsl:text>
+ <xsl:value-of select="$widget/@type"/>
+ <xsl:text> id="</xsl:text>
+ <xsl:value-of select="$eltid"/>
+ <xsl:text>" : No match for path "</xsl:text>
+ <xsl:value-of select="@value"/>
+ <xsl:text>" in HMI tree</xsl:text>
+ </xsl:message>
+ </xsl:when>
+ <xsl:when test="@type = 'PAGE_LOCAL'">
+ <xsl:text>"</xsl:text>
+ <xsl:value-of select="substring(1,@value)"/>
+ <xsl:text>"</xsl:text>
+ <xsl:if test="position()!=last()">
+ <xsl:text>,</xsl:text>
+ </xsl:if>
+ </xsl:when>
+ <xsl:when test="@type = 'HMI_LOCAL'">
+ <xsl:text>hmi_local_index("</xsl:text>
+ <xsl:value-of select="@value"/>
+ <xsl:text>")</xsl:text>
+ <xsl:if test="position()!=last()">
+ <xsl:text>,</xsl:text>
+ </xsl:if>
+ </xsl:when>
+ </xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@index"/>
@@ -905,8 +941,8 @@
</xsl:otherwise>
</xsl:choose>
</func:function>
- <preamble:widget-base-class/>
- <xsl:template match="preamble:widget-base-class">
+ <preamble:local-variable-indexes/>
+ <xsl:template match="preamble:local-variable-indexes">
<xsl:text>
</xsl:text>
<xsl:text>/* </xsl:text>
@@ -915,6 +951,67 @@
</xsl:text>
<xsl:text>
</xsl:text>
+ <xsl:text>let hmi_locals = {};
+</xsl:text>
+ <xsl:text>var last_remote_index = hmitree_types.length - 1;
+</xsl:text>
+ <xsl:text>var next_available_index = hmitree_types.length;
+</xsl:text>
+ <xsl:text>
+</xsl:text>
+ <xsl:text>function page_local_index(varname, pagename){
+</xsl:text>
+ <xsl:text> let pagevars = hmi_locals[pagename];
+</xsl:text>
+ <xsl:text> if(pagevars == undefined){
+</xsl:text>
+ <xsl:text> let new_index = next_available_index++;
+</xsl:text>
+ <xsl:text> hmi_locals[pagename] = {varname:new_index}
+</xsl:text>
+ <xsl:text> return new_index;
+</xsl:text>
+ <xsl:text> } else {
+</xsl:text>
+ <xsl:text> let result = pagevars[varname];
+</xsl:text>
+ <xsl:text> if(result==undefined){
+</xsl:text>
+ <xsl:text> let new_index = next_available_index++;
+</xsl:text>
+ <xsl:text> pagevars[varname] = new_index;
+</xsl:text>
+ <xsl:text> return new_index;
+</xsl:text>
+ <xsl:text> }
+</xsl:text>
+ <xsl:text> return result;
+</xsl:text>
+ <xsl:text> }
+</xsl:text>
+ <xsl:text>}
+</xsl:text>
+ <xsl:text>
+</xsl:text>
+ <xsl:text>function hmi_local_index(varname){
+</xsl:text>
+ <xsl:text> return page_local_index(varname, "HMI_LOCAL");
+</xsl:text>
+ <xsl:text>}
+</xsl:text>
+ <xsl:text>
+</xsl:text>
+ </xsl:template>
+ <preamble:widget-base-class/>
+ <xsl:template match="preamble:widget-base-class">
+ <xsl:text>
+</xsl:text>
+ <xsl:text>/* </xsl:text>
+ <xsl:value-of select="local-name()"/>
+ <xsl:text> */
+</xsl:text>
+ <xsl:text>
+</xsl:text>
<xsl:text>class Widget {
</xsl:text>
<xsl:text> offset = 0;
@@ -965,23 +1062,23 @@
</xsl:text>
<xsl:text>
</xsl:text>
- <xsl:text> sub(new_offset=0, relativeness){
+ <xsl:text> sub(new_offset=0, relativeness, container_id){
</xsl:text>
<xsl:text> this.offset = new_offset;
</xsl:text>
<xsl:text> this.relativeness = relativeness;
</xsl:text>
+ <xsl:text> this.container_id = container_id ;
+</xsl:text>
<xsl:text> /* add this's subsribers */
</xsl:text>
<xsl:text> if(!this.unsubscribable)
</xsl:text>
<xsl:text> for(let i = 0; i < this.indexes.length; i++) {
</xsl:text>
- <xsl:text> let index = this.indexes[i];
-</xsl:text>
- <xsl:text> if(relativeness[i])
-</xsl:text>
- <xsl:text> index += new_offset;
+ <xsl:text> let index = this.get_variable_index(i);
+</xsl:text>
+ <xsl:text> if(index > last_remote_index) return;
</xsl:text>
<xsl:text> subscribers[index].add(this);
</xsl:text>
@@ -995,11 +1092,11 @@
</xsl:text>
<xsl:text> apply_cache() {
</xsl:text>
- <xsl:text> if(!this.unsubscribable) for(let index of this.indexes){
+ <xsl:text> if(!this.unsubscribable) for(let i = 0; i < this.indexes.length; i++) {
</xsl:text>
<xsl:text> /* dispatch current cache in newly opened page widgets */
</xsl:text>
- <xsl:text> let realindex = index+this.offset;
+ <xsl:text> let realindex = this.get_variable_index(i);
</xsl:text>
<xsl:text> let cached_val = cache[realindex];
</xsl:text>
@@ -1013,17 +1110,33 @@
</xsl:text>
<xsl:text>
</xsl:text>
- <xsl:text> get_idx(index) {
-</xsl:text>
- <xsl:text> let orig = this.indexes[index];
-</xsl:text>
- <xsl:text> return this.relativeness[index] ? orig + this.offset : orig;
+ <xsl:text> get_variable_index(varnum) {
+</xsl:text>
+ <xsl:text> let index = this.indexes[varnum];
+</xsl:text>
+ <xsl:text> if(typeof(index) == "string"){
+</xsl:text>
+ <xsl:text> let page = this.relativeness[varnum];
+</xsl:text>
+ <xsl:text> index = page_local_index(index, this.container_id);
+</xsl:text>
+ <xsl:text> } else {
+</xsl:text>
+ <xsl:text> if(this.relativeness[varnum]){
+</xsl:text>
+ <xsl:text> index += this.offset;
+</xsl:text>
+ <xsl:text> }
+</xsl:text>
+ <xsl:text> }
+</xsl:text>
+ <xsl:text> return index;
</xsl:text>
<xsl:text> }
</xsl:text>
<xsl:text> change_hmi_value(index,opstr) {
</xsl:text>
- <xsl:text> return change_hmi_value(this.get_idx(index), opstr);
+ <xsl:text> return change_hmi_value(this.get_variable_index(index), opstr);
</xsl:text>
<xsl:text> }
</xsl:text>
@@ -1031,7 +1144,7 @@
</xsl:text>
<xsl:text> apply_hmi_value(index, new_val) {
</xsl:text>
- <xsl:text> return apply_hmi_value(this.get_idx(0), new_val);
+ <xsl:text> return apply_hmi_value(this.get_variable_index(0), new_val);
</xsl:text>
<xsl:text> }
</xsl:text>
@@ -1045,11 +1158,7 @@
</xsl:text>
<xsl:text> for(let i = 0; i < this.indexes.length; i++) {
</xsl:text>
- <xsl:text> let refindex = this.indexes[i];
-</xsl:text>
- <xsl:text> if(this.relativeness[i])
-</xsl:text>
- <xsl:text> refindex += this.offset;
+ <xsl:text> let refindex = this.get_variable_index(i);
</xsl:text>
<xsl:text>
</xsl:text>
@@ -4056,6 +4165,20 @@
</xsl:text>
<xsl:text>function send_hmi_value(index, value) {
</xsl:text>
+ <xsl:text> if(index > last_remote_index){
+</xsl:text>
+ <xsl:text> cache[index] = value;
+</xsl:text>
+ <xsl:text> console.log("updated local variable ",index,value);
+</xsl:text>
+ <xsl:text> /* TODO : dispatch value ASAP */
+</xsl:text>
+ <xsl:text> return;
+</xsl:text>
+ <xsl:text> }
+</xsl:text>
+ <xsl:text>
+</xsl:text>
<xsl:text> let iectype = hmitree_types[index];
</xsl:text>
<xsl:text> let tobinary = typedarray_types[iectype];
@@ -4250,7 +4373,13 @@
</xsl:text>
<xsl:text> var new_offset = page_index == undefined ? 0 : page_index - new_desc.page_index;
</xsl:text>
- <xsl:text> new_desc.widgets.map(([widget,relativeness])=>widget.sub(new_offset,relativeness));
+ <xsl:text>
+</xsl:text>
+ <xsl:text> container_id = String([page_name, page_index]);
+</xsl:text>
+ <xsl:text>
+</xsl:text>
+ <xsl:text> new_desc.widgets.map(([widget,relativeness])=>widget.sub(new_offset,relativeness,container_id));
</xsl:text>
<xsl:text>
</xsl:text>
--- a/svghmi/hmi_tree.ysl2 Thu Aug 06 15:01:01 2020 +0200
+++ b/svghmi/hmi_tree.ysl2 Sat Aug 08 15:53:28 2020 +0200
@@ -107,9 +107,21 @@
attrib "value" > «.»
const "path", ".";
const "item", "$indexed_hmitree/*[@hmipath = $path]";
- if "count($item) = 1" {
- attrib "index" > «$item/@index»
- attrib "type" > «local-name($item)»
+ choose {
+ when "count($item) = 1" {
+ attrib "index" > «$item/@index»
+ attrib "type" > «local-name($item)»
+ }
+ otherwise {
+ choose {
+ when "regexp:test($path,'^\.[a-zA-Z0-9_]+')" {
+ attrib "type" > PAGE_LOCAL
+ }
+ when "regexp:test($path,'^[a-zA-Z0-9_]+')" {
+ attrib "type" > HMI_LOCAL
+ }
+ }
+ }
}
}
}
--- a/svghmi/svghmi.js Thu Aug 06 15:01:01 2020 +0200
+++ b/svghmi/svghmi.js Sat Aug 08 15:53:28 2020 +0200
@@ -210,6 +210,13 @@
};
function send_hmi_value(index, value) {
+ if(index > last_remote_index){
+ cache[index] = value;
+ console.log("updated local variable ",index,value);
+ /* TODO : dispatch value ASAP */
+ return;
+ }
+
let iectype = hmitree_types[index];
let tobinary = typedarray_types[iectype];
send_blob([
@@ -307,7 +314,10 @@
old_desc.widgets.map(([widget,relativeness])=>widget.unsub());
}
var new_offset = page_index == undefined ? 0 : page_index - new_desc.page_index;
- new_desc.widgets.map(([widget,relativeness])=>widget.sub(new_offset,relativeness));
+
+ container_id = String([page_name, page_index]);
+
+ new_desc.widgets.map(([widget,relativeness])=>widget.sub(new_offset,relativeness,container_id));
update_subscriptions();
--- a/svghmi/widgets_common.ysl2 Thu Aug 06 15:01:01 2020 +0200
+++ b/svghmi/widgets_common.ysl2 Sat Aug 08 15:53:28 2020 +0200
@@ -28,7 +28,14 @@
const "indexes" foreach "$widget/path" {
choose {
when "not(@index)" {
- warning > Widget «$widget/@type» id="«$eltid»" : No match for path "«@value»" in HMI tree
+ choose {
+ when "not(@type)"
+ error > Widget «$widget/@type» id="«$eltid»" : No match for path "«@value»" in HMI tree
+ when "@type = 'PAGE_LOCAL'"
+ > "«substring(1,@value)»"`if "position()!=last()" > ,`
+ when "@type = 'HMI_LOCAL'"
+ > hmi_local_index("«@value»")`if "position()!=last()" > ,`
+ }
}
otherwise {
> «@index»`if "position()!=last()" > ,`
@@ -62,8 +69,37 @@
}
}
+emit "preamble:local-variable-indexes" {
+ ||
+ let hmi_locals = {};
+ var last_remote_index = hmitree_types.length - 1;
+ var next_available_index = hmitree_types.length;
+
+ function page_local_index(varname, pagename){
+ let pagevars = hmi_locals[pagename];
+ if(pagevars == undefined){
+ let new_index = next_available_index++;
+ hmi_locals[pagename] = {varname:new_index}
+ return new_index;
+ } else {
+ let result = pagevars[varname];
+ if(result==undefined){
+ let new_index = next_available_index++;
+ pagevars[varname] = new_index;
+ return new_index;
+ }
+ return result;
+ }
+ }
+
+ function hmi_local_index(varname){
+ return page_local_index(varname, "HMI_LOCAL");
+ }
+ ||
+}
+
emit "preamble:widget-base-class" {
- ||
+ ||
class Widget {
offset = 0;
frequency = 10; /* FIXME arbitrary default max freq. Obtain from config ? */
@@ -89,49 +125,55 @@
this.relativeness = undefined;
}
- sub(new_offset=0, relativeness){
+ sub(new_offset=0, relativeness, container_id){
this.offset = new_offset;
this.relativeness = relativeness;
+ this.container_id = container_id ;
/* add this's subsribers */
if(!this.unsubscribable)
for(let i = 0; i < this.indexes.length; i++) {
- let index = this.indexes[i];
- if(relativeness[i])
- index += new_offset;
+ let index = this.get_variable_index(i);
+ if(index > last_remote_index) return;
subscribers[index].add(this);
}
need_cache_apply.push(this);
}
apply_cache() {
- if(!this.unsubscribable) for(let index of this.indexes){
+ if(!this.unsubscribable) for(let i = 0; i < this.indexes.length; i++) {
/* dispatch current cache in newly opened page widgets */
- let realindex = index+this.offset;
+ let realindex = this.get_variable_index(i);
let cached_val = cache[realindex];
if(cached_val != undefined)
this.new_hmi_value(realindex, cached_val, cached_val);
}
}
- get_idx(index) {
- let orig = this.indexes[index];
- return this.relativeness[index] ? orig + this.offset : orig;
+ get_variable_index(varnum) {
+ let index = this.indexes[varnum];
+ if(typeof(index) == "string"){
+ let page = this.relativeness[varnum];
+ index = page_local_index(index, this.container_id);
+ } else {
+ if(this.relativeness[varnum]){
+ index += this.offset;
+ }
+ }
+ return index;
}
change_hmi_value(index,opstr) {
- return change_hmi_value(this.get_idx(index), opstr);
+ return change_hmi_value(this.get_variable_index(index), opstr);
}
apply_hmi_value(index, new_val) {
- return apply_hmi_value(this.get_idx(0), new_val);
+ return apply_hmi_value(this.get_variable_index(0), new_val);
}
new_hmi_value(index, value, oldval) {
try {
// TODO avoid searching, store index at sub()
for(let i = 0; i < this.indexes.length; i++) {
- let refindex = this.indexes[i];
- if(this.relativeness[i])
- refindex += this.offset;
+ let refindex = this.get_variable_index(i);
if(index == refindex) {
let d = this.dispatch;
--- a/tests/svghmi/svghmi_0@svghmi/svghmi.svg Thu Aug 06 15:01:01 2020 +0200
+++ b/tests/svghmi/svghmi_0@svghmi/svghmi.svg Sat Aug 08 15:53:28 2020 +0200
@@ -170,13 +170,13 @@
inkscape:current-layer="hmi0"
showgrid="false"
units="px"
- inkscape:zoom="0.7071068"
- inkscape:cx="543.82641"
- inkscape:cy="218.7845"
- inkscape:window-width="2419"
+ inkscape:zoom="1"
+ inkscape:cx="864.70245"
+ inkscape:cy="281.30768"
+ inkscape:window-width="2693"
inkscape:window-height="1266"
- inkscape:window-x="1405"
- inkscape:window-y="37"
+ inkscape:window-x="31"
+ inkscape:window-y="828"
inkscape:window-maximized="0"
showguides="true"
inkscape:guide-bbox="true" />
@@ -266,7 +266,7 @@
<g
id="g84"
inkscape:label="HMI:Input@/TARGETPRESSURE"
- transform="matrix(0.63690435,0,0,0.63690435,12.496106,18.355376)">
+ transform="matrix(0.35865594,0,0,0.35865594,22.072155,63.074421)">
<text
inkscape:label="value"
id="text5151"
@@ -379,13 +379,13 @@
<text
inkscape:label="HMI:Display@/PUMP0/PRESSURE"
id="text823"
- y="157.35477"
- x="494.20477"
- style="font-style:normal;font-weight:normal;font-size:101.9046936px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.63690436px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ y="141.34827"
+ x="293.33374"
+ style="font-style:normal;font-weight:normal;font-size:57.38494873px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35865593px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
- style="fill:#ffffff;fill-opacity:1;stroke-width:0.63690436px"
- y="157.35477"
- x="494.20477"
+ style="fill:#ffffff;fill-opacity:1;stroke-width:0.35865593px"
+ y="141.34827"
+ x="293.33374"
id="tspan821"
sodipodi:role="line">8888</tspan></text>
<g
@@ -463,28 +463,28 @@
</g>
<text
xml:space="preserve"
- style="font-style:normal;font-weight:normal;font-size:25.4761734px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.63690436px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- x="175.94542"
- y="67.487991"
+ style="font-style:normal;font-weight:normal;font-size:14.34623718px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.35865593px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="114.11434"
+ y="90.742165"
id="text827"
inkscape:label="setpoint_label"><tspan
sodipodi:role="line"
id="tspan825"
- x="175.94542"
- y="67.487991"
- style="stroke-width:0.63690436px">SetPoint</tspan></text>
+ x="114.11434"
+ y="90.742165"
+ style="stroke-width:0.35865593px">SetPoint</tspan></text>
<text
id="text831"
- y="67.487991"
- x="585.08185"
- style="font-style:normal;font-weight:normal;font-size:25.4761734px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#008000;fill-opacity:1;stroke:none;stroke-width:0.63690436px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ y="90.742165"
+ x="344.50876"
+ style="font-style:normal;font-weight:normal;font-size:14.34623718px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#008000;fill-opacity:1;stroke:none;stroke-width:0.35865593px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"
inkscape:label="actual_label"><tspan
- y="67.487991"
- x="585.08185"
+ y="90.742165"
+ x="344.50876"
id="tspan829"
sodipodi:role="line"
- style="stroke-width:0.63690436px">Actual</tspan></text>
+ style="stroke-width:0.35865593px">Actual</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:22.87221527px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.57180536px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
@@ -2809,31 +2809,8 @@
</g>
<g
id="g1289"
- inkscape:label="HMI:JsonTable:/alarms@/ALARMCOUNT">
- <rect
- inkscape:label="cursor"
- ry="14"
- rx="12.247418"
- y="68.515991"
- x="1192.0886"
- height="165.68298"
- width="68.255615"
- id="rect1264"
- 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:#bc8f8f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
- <path
- inkscape:label="backward"
- 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:#bc8f8f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- d="m 1226.2165,18.9847 34.1278,34.74552 h -68.2556 z"
- id="path1266"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccc" />
- <path
- inkscape:label="forward"
- sodipodi:nodetypes="cccc"
- inkscape:connector-curvature="0"
- id="path1268"
- d="m 1226.2165,283.7301 34.1278,-34.7453 h -68.2556 z"
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#bc8f8f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ inkscape:label="HMI:JsonTable:/alarms@/ALARMCOUNT"
+ transform="matrix(0.5,0,0,0.5,635.30409,71.500438)">
<g
id="g5231"
inkscape:label="data">
@@ -3147,7 +3124,7 @@
sodipodi:role="line">information</tspan></text>
</g>
<g
- transform="matrix(0.31845218,0,0,0.31845218,701.53368,169.53582)"
+ transform="matrix(0.2527605,0,0,0.2527605,1089.2831,6.7725187)"
inkscape:label="HMI:Input@/ALARMCOUNT"
id="g5222">
<text
@@ -4224,4 +4201,460 @@
id="tspan829-7"
sodipodi:role="line"
style="stroke-width:0.63690436px">Multiple variables</tspan></text>
+ <text
+ inkscape:label="HMI:Display@paff"
+ id="text1457"
+ y="108.60184"
+ x="902.83728"
+ style="font-style:normal;font-weight:normal;font-size:45.74443054px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.28590268px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ style="fill:#ffffff;fill-opacity:1;stroke-width:0.28590268px"
+ y="108.60184"
+ x="902.83728"
+ id="tspan1455"
+ sodipodi:role="line">8888</tspan></text>
+ <g
+ style="stroke-width:2"
+ inkscape:label="HMI:Input@paff"
+ id="g1505"
+ transform="matrix(0.28590269,0,0,0.28590269,700.70444,46.1427)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:160px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="136.32812"
+ y="218.24219"
+ id="text1461"
+ inkscape:label="value"><tspan
+ sodipodi:role="line"
+ id="tspan1459"
+ x="136.32812"
+ y="218.24219"
+ style="stroke-width:2px">8888</tspan></text>
+ <rect
+ inkscape:label="edit"
+ onclick=""
+ y="95.40741"
+ x="139.85185"
+ height="128"
+ width="407.7037"
+ id="rect1463"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <g
+ style="stroke-width:2"
+ id="g1471"
+ inkscape:label="+"dhu""
+ transform="translate(-416.52022,170.47452)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path1465"
+ d="m 797.19546,145.18619 -80.62929,0.60214 -0.60215,-80.629288 80.6293,-0.60214 z"
+ inkscape:transform-center-y="-14.956361"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <text
+ id="text1469"
+ y="111.05016"
+ x="733.58197"
+ style="font-style:normal;font-weight:normal;font-size:20px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ style="stroke-width:1px"
+ y="111.05016"
+ x="733.58197"
+ id="tspan1467"
+ sodipodi:role="line">dhu</tspan></text>
+ </g>
+ <g
+ style="stroke-width:2"
+ id="g1479"
+ inkscape:label="="plop""
+ transform="translate(-416.52022,170.47452)">
+ <path
+ inkscape:transform-center-x="14.956371"
+ inkscape:transform-center-y="-3.6154501e-05"
+ d="m 622.6459,-170.03172 -51.81035,0 25.90517,-44.86908 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="true"
+ sodipodi:arg2="1.5707963"
+ sodipodi:arg1="0.52359878"
+ sodipodi:r2="14.956361"
+ sodipodi:r1="29.912722"
+ sodipodi:cy="-184.98808"
+ sodipodi:cx="596.74072"
+ sodipodi:sides="3"
+ id="path1473"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ sodipodi:type="star"
+ transform="matrix(0,-2.0000001,1.9999999,0,1034.195,1298.6541)" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:20px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="633.09552"
+ y="111.05016"
+ id="text1477"><tspan
+ sodipodi:role="line"
+ id="tspan1475"
+ x="633.09552"
+ y="111.05016"
+ style="stroke-width:1px">plop</tspan></text>
+ </g>
+ <g
+ style="stroke-width:2"
+ id="g1487"
+ inkscape:label="="mhoo""
+ transform="translate(-416.52022,170.47452)">
+ <path
+ inkscape:transform-center-x="14.956364"
+ transform="rotate(-90,746.45698,-44.543641)"
+ sodipodi:type="star"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="path1481"
+ sodipodi:sides="3"
+ sodipodi:cx="596.74072"
+ sodipodi:cy="-216.2599"
+ sodipodi:r1="59.825443"
+ sodipodi:r2="29.912722"
+ sodipodi:arg1="0.52359878"
+ sodipodi:arg2="1.5707963"
+ inkscape:flatsided="true"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 648.55108,-186.34718 -103.62071,0 51.81035,-89.73817 z"
+ inkscape:transform-center-y="-5.9989963e-06" />
+ <text
+ id="text1485"
+ y="111.05016"
+ x="537.25018"
+ style="font-style:normal;font-weight:normal;font-size:20px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ style="stroke-width:1px"
+ y="111.05016"
+ x="537.25018"
+ id="tspan1483"
+ sodipodi:role="line">mhoo</tspan></text>
+ </g>
+ <g
+ style="stroke-width:2"
+ id="g1495"
+ inkscape:label="="yodl""
+ transform="translate(-416.52022,170.47452)">
+ <path
+ inkscape:transform-center-x="-14.956365"
+ transform="matrix(0,-1,-1,0,1043.9134,701.91334)"
+ inkscape:transform-center-y="-5.5023185e-06"
+ d="m 648.55108,135.08534 -103.62071,0 51.81035,-89.738161 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="true"
+ sodipodi:arg2="1.5707963"
+ sodipodi:arg1="0.52359878"
+ sodipodi:r2="29.912722"
+ sodipodi:r1="59.825443"
+ sodipodi:cy="105.17262"
+ sodipodi:cx="596.74072"
+ sodipodi:sides="3"
+ id="path1489"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ sodipodi:type="star" />
+ <text
+ id="text1493"
+ y="111.05016"
+ x="925.82605"
+ style="font-style:normal;font-weight:normal;font-size:20px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ style="stroke-width:1px"
+ y="111.05016"
+ x="925.82605"
+ id="tspan1491"
+ sodipodi:role="line">yodl</tspan></text>
+ </g>
+ <g
+ style="stroke-width:2"
+ id="g1503"
+ inkscape:label="="mhe""
+ transform="translate(-416.52022,170.47452)">
+ <path
+ inkscape:transform-center-x="-14.956349"
+ transform="matrix(0,-2.0000001,-1.9999999,0,1122.1514,1298.6541)"
+ sodipodi:type="star"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="path1497"
+ sodipodi:sides="3"
+ sodipodi:cx="596.74072"
+ sodipodi:cy="136.44444"
+ sodipodi:r1="29.912722"
+ sodipodi:r2="14.956361"
+ sodipodi:arg1="0.52359878"
+ sodipodi:arg2="1.5707963"
+ inkscape:flatsided="true"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 622.6459,151.4008 -51.81035,0 25.90517,-44.86908 z"
+ inkscape:transform-center-y="-3.3040441e-05" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:20px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="842.71497"
+ y="111.05016"
+ id="text1501"><tspan
+ sodipodi:role="line"
+ id="tspan1499"
+ x="842.71497"
+ y="111.05016"
+ style="stroke-width:1px">mhe</tspan></text>
+ </g>
+ </g>
+ <text
+ inkscape:label="actual_label"
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:25.4761734px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#008000;fill-opacity:1;stroke:none;stroke-width:0.63690436px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="741.62634"
+ y="57.767578"
+ id="text1527"><tspan
+ style="stroke-width:0.63690436px"
+ sodipodi:role="line"
+ id="tspan1525"
+ x="741.62634"
+ y="57.767578">HMI_LOCAL variables</tspan></text>
+ <g
+ id="g1553"
+ transform="matrix(0.5,0,0,0.5,645.20358,-103.15494)">
+ <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:#bc8f8f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect1264"
+ width="68.255615"
+ height="165.68298"
+ x="1141.0836"
+ y="420.78394"
+ rx="12.247418"
+ ry="14"
+ inkscape:label="cursor" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path1266"
+ d="m 1175.2115,371.25263 34.1278,34.74552 h -68.2556 z"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#bc8f8f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:label="backward" />
+ <path
+ 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:#bc8f8f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 1175.2115,635.99803 34.1278,-34.7453 h -68.2556 z"
+ id="path1268"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc"
+ inkscape:label="forward" />
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:45.74443054px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.28590268px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="902.83728"
+ y="228.60184"
+ id="text1557"
+ inkscape:label="HMI:Display@.piff"><tspan
+ sodipodi:role="line"
+ id="tspan1555"
+ x="902.83728"
+ y="228.60184"
+ style="fill:#ffffff;fill-opacity:1;stroke-width:0.28590268px">8888</tspan></text>
+ <g
+ transform="matrix(0.28590269,0,0,0.28590269,700.70444,166.1427)"
+ id="g1605"
+ inkscape:label="HMI:Input@.piff"
+ style="stroke-width:2">
+ <text
+ inkscape:label="value"
+ id="text1561"
+ y="218.24219"
+ x="136.32812"
+ style="font-style:normal;font-weight:normal;font-size:160px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ style="stroke-width:2px"
+ y="218.24219"
+ x="136.32812"
+ id="tspan1559"
+ sodipodi:role="line">8888</tspan></text>
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect1563"
+ width="407.7037"
+ height="128"
+ x="139.85185"
+ y="95.40741"
+ onclick=""
+ inkscape:label="edit" />
+ <g
+ transform="translate(-416.52022,170.47452)"
+ inkscape:label="+"dhu""
+ id="g1571"
+ style="stroke-width:2">
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:transform-center-y="-14.956361"
+ d="m 797.19546,145.18619 -80.62929,0.60214 -0.60215,-80.629288 80.6293,-0.60214 z"
+ id="path1565"
+ inkscape:connector-curvature="0" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:20px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="733.58197"
+ y="111.05016"
+ id="text1569"><tspan
+ sodipodi:role="line"
+ id="tspan1567"
+ x="733.58197"
+ y="111.05016"
+ style="stroke-width:1px">dhu</tspan></text>
+ </g>
+ <g
+ transform="translate(-416.52022,170.47452)"
+ inkscape:label="="plop""
+ id="g1579"
+ style="stroke-width:2">
+ <path
+ transform="matrix(0,-2.0000001,1.9999999,0,1034.195,1298.6541)"
+ sodipodi:type="star"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="path1573"
+ sodipodi:sides="3"
+ sodipodi:cx="596.74072"
+ sodipodi:cy="-184.98808"
+ sodipodi:r1="29.912722"
+ sodipodi:r2="14.956361"
+ sodipodi:arg1="0.52359878"
+ sodipodi:arg2="1.5707963"
+ inkscape:flatsided="true"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 622.6459,-170.03172 -51.81035,0 25.90517,-44.86908 z"
+ inkscape:transform-center-y="-3.6154501e-05"
+ inkscape:transform-center-x="14.956371" />
+ <text
+ id="text1577"
+ y="111.05016"
+ x="633.09552"
+ style="font-style:normal;font-weight:normal;font-size:20px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ style="stroke-width:1px"
+ y="111.05016"
+ x="633.09552"
+ id="tspan1575"
+ sodipodi:role="line">plop</tspan></text>
+ </g>
+ <g
+ transform="translate(-416.52022,170.47452)"
+ inkscape:label="="mhoo""
+ id="g1587"
+ style="stroke-width:2">
+ <path
+ inkscape:transform-center-y="-5.9989963e-06"
+ d="m 648.55108,-186.34718 -103.62071,0 51.81035,-89.73817 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="true"
+ sodipodi:arg2="1.5707963"
+ sodipodi:arg1="0.52359878"
+ sodipodi:r2="29.912722"
+ sodipodi:r1="59.825443"
+ sodipodi:cy="-216.2599"
+ sodipodi:cx="596.74072"
+ sodipodi:sides="3"
+ id="path1581"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ sodipodi:type="star"
+ transform="rotate(-90,746.45698,-44.543641)"
+ inkscape:transform-center-x="14.956364" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:20px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="537.25018"
+ y="111.05016"
+ id="text1585"><tspan
+ sodipodi:role="line"
+ id="tspan1583"
+ x="537.25018"
+ y="111.05016"
+ style="stroke-width:1px">mhoo</tspan></text>
+ </g>
+ <g
+ transform="translate(-416.52022,170.47452)"
+ inkscape:label="="yodl""
+ id="g1595"
+ style="stroke-width:2">
+ <path
+ sodipodi:type="star"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="path1589"
+ sodipodi:sides="3"
+ sodipodi:cx="596.74072"
+ sodipodi:cy="105.17262"
+ sodipodi:r1="59.825443"
+ sodipodi:r2="29.912722"
+ sodipodi:arg1="0.52359878"
+ sodipodi:arg2="1.5707963"
+ inkscape:flatsided="true"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 648.55108,135.08534 -103.62071,0 51.81035,-89.738161 z"
+ inkscape:transform-center-y="-5.5023185e-06"
+ transform="matrix(0,-1,-1,0,1043.9134,701.91334)"
+ inkscape:transform-center-x="-14.956365" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:20px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="925.82605"
+ y="111.05016"
+ id="text1593"><tspan
+ sodipodi:role="line"
+ id="tspan1591"
+ x="925.82605"
+ y="111.05016"
+ style="stroke-width:1px">yodl</tspan></text>
+ </g>
+ <g
+ transform="translate(-416.52022,170.47452)"
+ inkscape:label="="mhe""
+ id="g1603"
+ style="stroke-width:2">
+ <path
+ inkscape:transform-center-y="-3.3040441e-05"
+ d="m 622.6459,151.4008 -51.81035,0 25.90517,-44.86908 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="true"
+ sodipodi:arg2="1.5707963"
+ sodipodi:arg1="0.52359878"
+ sodipodi:r2="14.956361"
+ sodipodi:r1="29.912722"
+ sodipodi:cy="136.44444"
+ sodipodi:cx="596.74072"
+ sodipodi:sides="3"
+ id="path1597"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ sodipodi:type="star"
+ transform="matrix(0,-2.0000001,-1.9999999,0,1122.1514,1298.6541)"
+ inkscape:transform-center-x="-14.956349" />
+ <text
+ id="text1601"
+ y="111.05016"
+ x="842.71497"
+ style="font-style:normal;font-weight:normal;font-size:20px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ style="stroke-width:1px"
+ y="111.05016"
+ x="842.71497"
+ id="tspan1599"
+ sodipodi:role="line">mhe</tspan></text>
+ </g>
+ </g>
+ <text
+ id="text1609"
+ y="177.76758"
+ x="741.62634"
+ style="font-style:normal;font-weight:normal;font-size:25.4761734px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#008000;fill-opacity:1;stroke:none;stroke-width:0.63690436px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"
+ inkscape:label="actual_label"><tspan
+ y="177.76758"
+ x="741.62634"
+ sodipodi:role="line"
+ style="stroke-width:0.63690436px"
+ id="tspan1611">PAGE_LOCAL variables</tspan></text>
</svg>