--- 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>