# HG changeset patch # User Edouard Tisserant # Date 1598358759 -7200 # Node ID 4930455428df90aeefd771f1feb5002c3bda6635 # Parent d1fc8c55c1d312d21f957a79b27c90490b4a827c 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. diff -r d1fc8c55c1d3 -r 4930455428df svghmi/widget_jsontable.ysl2 --- 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:*"; diff -r d1fc8c55c1d3 -r 4930455428df tests/svghmi/py_ext_0@py_ext/pyfile.xml --- 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> diff -r d1fc8c55c1d3 -r 4930455428df tests/svghmi/svghmi_0@svghmi/svghmi.svg --- 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="+"dhu"" - 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="="plop"" - 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="="mhoo"" - 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="="yodl"" - 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="="mhe"" - 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>