1 <?xml version='1.0' encoding='utf-8'?> |
1 <?xml version='1.0' encoding='utf-8'?> |
2 <PyFile xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> |
2 <PyFile xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> |
3 <variables> |
3 <variables> |
4 <variable name="SomePLCglobal" type="HMI_STRING" onchange="MyOnChangeFunc"/> |
|
5 <variable name="AlarmNotify" type="HMI_INT"/> |
4 <variable name="AlarmNotify" type="HMI_INT"/> |
|
5 <variable name="SendAlarm" type="HMI_BOOL" onchange="TriggerAlarm"/> |
|
6 <variable name="AlarmText" type="HMI_STRING" initial="'POS'"/> |
|
7 <variable name="AlarmStatus" type="HMI_STRING" initial="'alarm'"/> |
6 </variables> |
8 </variables> |
7 <globals> |
9 <globals> |
8 <xhtml:p><![CDATA[ |
10 <xhtml:p><![CDATA[ |
9 from twisted.web.resource import Resource |
11 from twisted.web.resource import Resource |
10 import json |
12 import json, time, random |
|
13 |
|
14 Alarms = [] |
|
15 |
|
16 def TriggerAlarm(changed_var_name): |
|
17 global Alarms |
|
18 if(getattr(PLCGlobals, changed_var_name)): |
|
19 Alarms.append((time.time(), PLCGlobals.AlarmText, PLCGlobals.AlarmStatus)) |
|
20 PLCGlobals.AlarmNotify = random.randint(0, 4294967296) |
11 |
21 |
12 class AlarmJsonResource(Resource): |
22 class AlarmJsonResource(Resource): |
13 def render_GET(self, request): |
23 def render_GET(self, request): |
14 return '' |
24 return '' |
15 |
25 |
16 def render_POST(self, request): |
26 def render_POST(self, request): |
17 newdata = request.content.getvalue() |
27 newstr = request.content.getvalue() |
|
28 newdata = json.loads(newstr) |
18 print newdata |
29 print newdata |
19 print json.loads(newdata) |
30 vars = newdata[u'vars'] |
20 selected_alarms = [ |
31 args = newdata[u'args'] |
21 {"name":"three", "sides":3, "textstyle":"alarm"}, |
32 visible = newdata[u'visible'] |
22 {"name":"four", "sides":4, "textstyle":"ack"}, |
33 svars = (vars + [0,0])[:3] |
23 {"name":"five", "sides":5, "textstyle":"active"}, |
34 range_feedback = svars[1] |
24 {"name":"six", "sides":6, "textstyle":"disabled"}, |
35 slider_position = svars[2] |
25 ] |
36 answer = self.renderTable(range_feedback, slider_position, visible, *(args+svars[3:])) |
26 return json.dumps(selected_alarms) |
37 janswer = json.dumps(answer) |
|
38 print janswer |
|
39 return janswer |
27 |
40 |
|
41 def renderTable(self, old_range, old_position, visible, *options): |
|
42 new_range = len(Alarms) |
|
43 delta = new_range - visible |
|
44 new_position = 0 if delta <= 0 else delta if old_position > delta else old_position |
|
45 new_visible = new_range if delta <= 0 else visible |
|
46 |
|
47 visible_alarms = [] |
|
48 for ts, text, status in Alarms[new_position:new_position + new_visible]: |
|
49 visible_alarms.append({ |
|
50 "time": time.ctime(ts), |
|
51 "text": text, # TODO translate text |
|
52 "status": status |
|
53 }) |
28 |
54 |
29 def MyOnChangeFunc(changed_var_name): |
55 return new_range, new_position, visible_alarms |
30 print changed_var_name + ": " + getattr(PLCGlobals, changed_var_name) |
56 |
31 |
57 |
32 ]]></xhtml:p> |
58 ]]></xhtml:p> |
33 </globals> |
59 </globals> |
34 <init> |
60 <init> |
35 <xhtml:p><![CDATA[ |
61 <xhtml:p><![CDATA[ |