tests/svghmi/py_ext_0@py_ext/pyfile.xml
branchsvghmi
changeset 3036 4930455428df
parent 3034 793ce2117258
child 3038 92101729f7b7
--- 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>