SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables. svghmi
authorEdouard Tisserant
Tue, 25 Aug 2020 14:32:39 +0200
branchsvghmi
changeset 3036 4930455428df
parent 3035 d1fc8c55c1d3
child 3037 da51baea69cb
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
svghmi/widget_jsontable.ysl2
tests/svghmi/py_ext_0@py_ext/pyfile.xml
tests/svghmi/svghmi_0@svghmi/svghmi.svg
--- a/svghmi/widget_jsontable.ysl2	Mon Aug 24 09:48:35 2020 +0200
+++ b/svghmi/widget_jsontable.ysl2	Tue Aug 25 14:32:39 2020 +0200
@@ -7,7 +7,8 @@
         do_http_request() {
             const query = {
                 args: this.args,
-                vars: this.cache
+                vars: this.cache,
+                visible: this.visible
             };
 
             const options = {
@@ -155,15 +156,37 @@
 template "svg:g", mode="json_table_render" {
     param "expressions";
     param "widget_elts";
-    /* TODO : use intermediate variables for optimization
-    foreach "$new_expressions"
-    |         let obj_«@id»_«position()» = «.»;
-    */
+    const "gid", "@id";
+
+    // use intermediate variables for optimization
+    const "varprefix" > obj_«$gid»_
+    |         try {
+
+    foreach "$expressions/expression"{
+    |          let «$varprefix»«position()» = «@content»;
+    |          if(«$varprefix»«position()» == undefined) {
+    |               console.log("«$varprefix»«position()» = «@content»");
+    |               throw null;
+    |          }
+    }
+
+    // because we put values in a variables, we can replace corresponding expression with variable name
+    const "new_expressions" foreach "$expressions/expression" xsl:copy {
+        copy "@name";
+        attrib "content" > «$varprefix»«position()»
+    }
+
+    // revert hiding in case it did happen before
+    |           id("«@id»").setAttribute("style", "«@style»");
+
     const "label", "func:filter_non_widget_label(., $widget_elts)";
     apply "*", mode="json_table_render" {
-        with "expressions", "func:json_expressions($expressions, $label)";
+        with "expressions", "func:json_expressions(exsl:node-set($new_expressions), $label)";
         with "widget_elts", "$widget_elts";
     }
+    |         } catch(err) {
+    |           id("«$gid»").setAttribute("style", "display:none");
+    |         }
 }
 
 template "widget[@type='JsonTable']", mode="widget_defs" {
@@ -171,7 +194,10 @@
     labels("data");
     optional_labels("forward backward cursor");
     const "data_elt", "$result_svg_ns//*[@id = $hmi_element/@id]/*[@inkscape:label = 'data']";
-    |     spread_json_data: function(jdata) {
+    |     visible: «count($data_elt/*[@inkscape:label])»,
+    |     spread_json_data: function(janswer) {
+    |         let [range,position,jdata] = janswer;
+    |         console.log(range,position,jdata);
     apply "$data_elt/*", mode="json_table_render" {
         with "expressions","$initexpr_ns";
         with "widget_elts","$hmi_element/*[@inkscape:label = 'data']/descendant::svg:*";
--- a/tests/svghmi/py_ext_0@py_ext/pyfile.xml	Mon Aug 24 09:48:35 2020 +0200
+++ b/tests/svghmi/py_ext_0@py_ext/pyfile.xml	Tue Aug 25 14:32:39 2020 +0200
@@ -1,33 +1,59 @@
 <?xml version='1.0' encoding='utf-8'?>
 <PyFile xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <variables>
-    <variable name="SomePLCglobal" type="HMI_STRING" onchange="MyOnChangeFunc"/>
     <variable name="AlarmNotify" type="HMI_INT"/>
+    <variable name="SendAlarm" type="HMI_BOOL" onchange="TriggerAlarm"/>
+    <variable name="AlarmText" type="HMI_STRING" initial="'POS'"/>
+    <variable name="AlarmStatus" type="HMI_STRING" initial="'alarm'"/>
   </variables>
   <globals>
     <xhtml:p><![CDATA[
 from twisted.web.resource import Resource
-import json
+import json, time, random
+
+Alarms = []
+
+def TriggerAlarm(changed_var_name):
+    global Alarms
+    if(getattr(PLCGlobals, changed_var_name)):
+        Alarms.append((time.time(), PLCGlobals.AlarmText, PLCGlobals.AlarmStatus))
+        PLCGlobals.AlarmNotify = random.randint(0, 4294967296)
 
 class AlarmJsonResource(Resource):
     def render_GET(self, request):
         return ''
 
     def render_POST(self, request):
-        newdata = request.content.getvalue()
+        newstr = request.content.getvalue()
+        newdata = json.loads(newstr)
         print newdata
-        print json.loads(newdata)
-        selected_alarms = [
-            {"name":"three", "sides":3, "textstyle":"alarm"},
-            {"name":"four", "sides":4, "textstyle":"ack"},
-            {"name":"five", "sides":5, "textstyle":"active"},
-            {"name":"six", "sides":6, "textstyle":"disabled"},
-        ]
-        return json.dumps(selected_alarms)
+        vars = newdata[u'vars']
+        args = newdata[u'args']
+        visible = newdata[u'visible']
+        svars = (vars + [0,0])[:3]
+        range_feedback = svars[1]
+        slider_position = svars[2]
+        answer = self.renderTable(range_feedback, slider_position, visible, *(args+svars[3:]))
+        janswer = json.dumps(answer)
+        print janswer
+        return janswer
 
+    def renderTable(self, old_range, old_position, visible, *options):
+        new_range = len(Alarms)
+        delta = new_range - visible
+        new_position = 0 if delta <= 0 else delta if old_position > delta else old_position
+        new_visible = new_range if delta <= 0 else visible
+        
+        visible_alarms = []
+        for ts, text, status in Alarms[new_position:new_position + new_visible]:
+            visible_alarms.append({
+                "time": time.ctime(ts),
+                "text": text, # TODO translate text
+                "status": status
+            })
 
-def MyOnChangeFunc(changed_var_name):
-    print changed_var_name + ": " + getattr(PLCGlobals, changed_var_name)
+        return new_range, new_position, visible_alarms
+
 
 ]]></xhtml:p>
   </globals>
--- a/tests/svghmi/svghmi_0@svghmi/svghmi.svg	Mon Aug 24 09:48:35 2020 +0200
+++ b/tests/svghmi/svghmi_0@svghmi/svghmi.svg	Tue Aug 25 14:32:39 2020 +0200
@@ -185,9 +185,9 @@
      inkscape:current-layer="hmi0"
      showgrid="false"
      units="px"
-     inkscape:zoom="0.43668246"
-     inkscape:cx="735.62981"
-     inkscape:cy="-925.76586"
+     inkscape:zoom="0.61756226"
+     inkscape:cx="494.4152"
+     inkscape:cy="527.07406"
      inkscape:window-width="1800"
      inkscape:window-height="836"
      inkscape:window-x="0"
@@ -2639,196 +2639,6 @@
     </g>
   </g>
   <g
-     transform="matrix(0.28590269,0,0,0.28590269,-13.279646,425.80032)"
-     id="g208-1-3"
-     inkscape:label="HMI:Input@/SOMEPLCGLOBAL"
-     style="stroke-width:2">
-    <text
-       inkscape:label="value"
-       id="text164-6"
-       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="tspan162-7"
-         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="rect166-5"
-       width="407.7037"
-       height="128"
-       x="139.85185"
-       y="95.40741"
-       onclick=""
-       inkscape:label="edit" />
-    <g
-       transform="translate(-416.52022,170.47452)"
-       inkscape:label="+&quot;dhu&quot;"
-       id="g174-3"
-       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="path168-5"
-         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="text172-6"><tspan
-           sodipodi:role="line"
-           id="tspan170-2"
-           x="733.58197"
-           y="111.05016"
-           style="stroke-width:1px">dhu</tspan></text>
-    </g>
-    <g
-       transform="translate(-416.52022,170.47452)"
-       inkscape:label="=&quot;plop&quot;"
-       id="g182-9"
-       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="path176-1"
-         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="text180-2"
-         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="tspan178-7"
-           sodipodi:role="line">plop</tspan></text>
-    </g>
-    <g
-       transform="translate(-416.52022,170.47452)"
-       inkscape:label="=&quot;mhoo&quot;"
-       id="g190-0"
-       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="path184-9"
-         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="text188-3"><tspan
-           sodipodi:role="line"
-           id="tspan186-6"
-           x="537.25018"
-           y="111.05016"
-           style="stroke-width:1px">mhoo</tspan></text>
-    </g>
-    <g
-       transform="translate(-416.52022,170.47452)"
-       inkscape:label="=&quot;yodl&quot;"
-       id="g198-0"
-       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="path192-6"
-         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="text196-2"><tspan
-           sodipodi:role="line"
-           id="tspan194-6"
-           x="925.82605"
-           y="111.05016"
-           style="stroke-width:1px">yodl</tspan></text>
-    </g>
-    <g
-       transform="translate(-416.52022,170.47452)"
-       inkscape:label="=&quot;mhe&quot;"
-       id="g206-1-1"
-       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="path200-8"
-         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="text204-7"
-         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="tspan202-9"
-           sodipodi:role="line">mhe</tspan></text>
-    </g>
-  </g>
-  <g
      id="g1289"
      inkscape:label="HMI:JsonTable:/alarms@/ALARMNOTIFY@.position@.range"
      transform="matrix(0.5,0,0,0.5,515.30409,71.500438)">
@@ -2849,7 +2659,7 @@
            width="100%"
            height="100%"
            transform="matrix(0.7609336,0,0,0.7609336,199.15217,164.3798)"
-           inkscape:label=".sides" />
+           inkscape:label=".status" />
         <use
            transform="matrix(2,0,0,2,-474.04606,349.02524)"
            x="0"
@@ -2858,7 +2668,16 @@
            id="use966"
            width="100%"
            height="100%"
-           inkscape:label=".textstyle textContent=.name" />
+           inkscape:label=".status textContent=.time" />
+        <use
+           inkscape:label=".status textContent=.text"
+           height="100%"
+           width="100%"
+           id="use1832"
+           xlink:href="#use913"
+           y="0"
+           x="0"
+           transform="matrix(2,0,0,2,-314.04606,349.02524)" />
       </g>
       <use
          inkscape:label="[1]"
@@ -2965,47 +2784,11 @@
        inkscape:transform-center-x="0.14620371"
        inkscape:transform-center-y="2.9995242"
        inkscape:label="six" />
-    <path
-       inkscape:transform-center-y="2.9995242"
-       inkscape:transform-center-x="0.14620371"
-       d="m 1101.9632,-226.81598 -19.398,0.92116 -0.6089,19.41024 -12.8146,-14.59158 -15.5551,11.62603 3.4184,-19.11656 -18.7881,-4.91281 17.0772,-9.24638 -7.8732,-17.75221 17.8766,7.58652 8.9704,-17.22384 5.2145,18.70661 19.0591,-3.72556 -11.3742,15.74025 z"
-       inkscape:randomized="0"
-       inkscape:rounded="0"
-       inkscape:flatsided="false"
-       sodipodi:arg2="0.77735212"
-       sodipodi:arg1="0.32855317"
-       sodipodi:r2="16.43548"
-       sodipodi:r1="32.87096"
-       sodipodi:cy="-237.42258"
-       sodipodi:cx="1070.8505"
-       sodipodi:sides="7"
-       id="path1314"
-       style="fill:#ba55d3;fill-opacity:1;stroke:#ff0000"
-       sodipodi:type="star"
-       inkscape:label="seven" />
-    <path
-       sodipodi:type="star"
-       style="fill:#ffff00;fill-opacity:1;stroke:#ff0000"
-       id="path1316"
-       sodipodi:sides="8"
-       sodipodi:cx="1130.8505"
-       sodipodi:cy="-237.42258"
-       sodipodi:r1="32.87096"
-       sodipodi:r2="16.43548"
-       sodipodi:arg1="0.32855317"
-       sodipodi:arg2="0.72125225"
-       inkscape:flatsided="false"
-       inkscape:rounded="0"
-       inkscape:randomized="0"
-       d="m 1161.9632,-226.81598 -18.77,0.24617 2.1573,18.64723 -13.4465,-13.09832 -11.6601,14.71102 -0.2462,-18.76999 -18.6472,2.15729 13.0983,-13.44645 -14.711,-11.66015 18.77,-0.24617 -2.1573,-18.64723 13.4464,13.09832 11.6602,-14.71102 0.2461,18.77 18.6473,-2.1573 -13.0984,13.44646 z"
-       inkscape:transform-center-x="0.14620371"
-       inkscape:transform-center-y="2.9995242"
-       inkscape:label="eight" />
   </g>
   <g
      inkscape:label="HMI:List"
      id="g1311"
-     transform="translate(-126,32)">
+     transform="translate(-186,32)">
     <use
        x="0"
        y="0"
@@ -3017,7 +2800,7 @@
        height="100%"
        transform="translate(150.23297,80)"
        style="display:inline"
-       inkscape:label="3" />
+       inkscape:label="ack" />
     <use
        x="0"
        y="0"
@@ -3028,7 +2811,7 @@
        width="100%"
        height="100%"
        transform="translate(93.515259,80)"
-       inkscape:label="4" />
+       inkscape:label="alarm" />
     <use
        x="0"
        y="0"
@@ -3039,7 +2822,7 @@
        width="100%"
        height="100%"
        transform="translate(33.666488,80)"
-       inkscape:label="5" />
+       inkscape:label="active" />
     <use
        x="0"
        y="0"
@@ -3050,30 +2833,7 @@
        width="100%"
        height="100%"
        transform="translate(-26.484802,80)"
-       inkscape:label="6" />
-    <use
-       x="0"
-       y="0"
-       xlink:href="#path1314"
-       inkscape:transform-center-x="0.14620371"
-       inkscape:transform-center-y="2.9995242"
-       id="use1301"
-       width="100%"
-       height="100%"
-       transform="translate(-85.692787,80)"
-       inkscape:label="7" />
-    <use
-       x="0"
-       y="0"
-       xlink:href="#path1316"
-       inkscape:transform-center-x="0.14620371"
-       inkscape:transform-center-y="2.9995242"
-       id="use1303"
-       width="100%"
-       height="100%"
-       transform="translate(-146.48474,80)"
-       style="display:inline"
-       inkscape:label="8" />
+       inkscape:label="disabled" />
   </g>
   <g
      transform="matrix(3.3549332,0,0,3.14525,-181.87457,3116.0198)"
@@ -5986,4 +5746,113 @@
   <g
      id="g908"
      inkscape:label="HMI:VarInit:100@.range" />
+  <g
+     style="stroke-width:2"
+     inkscape:label="HMI:Input@/ALARMTEXT"
+     id="g1442-3"
+     transform="matrix(0.5,0,0,0.5,377.5977,130.12206)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:160px;line-height:125%;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="545.95312"
+       y="218.24219"
+       id="text1398-6"
+       inkscape:label="value"><tspan
+         sodipodi:role="line"
+         id="tspan1396-7"
+         x="545.95312"
+         y="218.24219"
+         style="text-align:end;text-anchor:end;stroke-width:2px">8888</tspan></text>
+    <rect
+       inkscape:label="edit"
+       onclick=""
+       y="95.40741"
+       x="139.85185"
+       height="128"
+       width="407.7037"
+       id="rect1400-5"
+       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>
+  <g
+     style="stroke-width:1.04184687"
+     inkscape:label="HMI:Button@/SENDALARM"
+     id="g953"
+     transform="matrix(0.51020953,0,0,0.5903916,155.46943,-173.35252)">
+    <g
+       style="stroke-width:1.04184687"
+       inkscape:label="bg"
+       id="g945">
+      <rect
+         rx="26.820074"
+         inkscape:label="button"
+         ry="23.177595"
+         y="594.82263"
+         x="971.96545"
+         height="95.723877"
+         width="245.44583"
+         id="rect943"
+         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:#ff6600;stroke-width:5.20923424;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>
+    <g
+       style="stroke-width:1.04184687"
+       inkscape:label="text"
+       id="g951">
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:1.04184675px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="1090.7626"
+         y="656.98151"
+         id="text949"
+         inkscape:label="setting_jmp"><tspan
+           sodipodi:role="line"
+           id="tspan947"
+           x="1090.7626"
+           y="656.98151"
+           style="text-align:center;text-anchor:middle;fill:#ff6600;stroke-width:1.04184675px">send</tspan></text>
+    </g>
+  </g>
+  <g
+     transform="matrix(0.28590269,0,0,0.28590269,568.76957,-66.870442)"
+     inkscape:label="HMI:DropDown:active:warning:normal:ack@/ALARMSTATUS"
+     id="g1830">
+    <rect
+       inkscape:label="box"
+       ry="7"
+       rx="7"
+       y="923.98993"
+       x="864.00842"
+       height="130.9433"
+       width="391.99988"
+       id="rect1822"
+       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:#53676c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+    <text
+       inkscape:label="text"
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:80px;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:#d42aff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="881.44226"
+       y="1011.9975"
+       id="text1826"><tspan
+         id="tspan1824"
+         sodipodi:role="line"
+         x="881.44226"
+         y="1011.9975"
+         style="text-align:start;text-anchor:start;fill:#d42aff;stroke-width:1px">sel_0</tspan></text>
+    <path
+       inkscape:label="button"
+       inkscape:transform-center-y="10.92088"
+       d="m 1200.5,1018.6835 -18.9155,-32.76262 -18.9155,-32.76264 37.831,0 37.831,0 -18.9155,32.76264 z"
+       inkscape:randomized="0"
+       inkscape:rounded="0"
+       inkscape:flatsided="false"
+       sodipodi:arg2="2.6179939"
+       sodipodi:arg1="1.5707963"
+       sodipodi:r2="21.841761"
+       sodipodi:r1="43.683521"
+       sodipodi:cy="975"
+       sodipodi:cx="1200.5"
+       sodipodi:sides="3"
+       id="path1828"
+       style="opacity:1;vector-effect:none;fill:#a7a5a6;fill-opacity:1;stroke:none;stroke-width:0.35277769;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       sodipodi:type="star" />
+  </g>
 </svg>