tests/projects/svghmi_widgets/py_ext_0@py_ext/pyfile.xml
changeset 3416 53c66c4aefa3
parent 3122 229795c03e11
equal deleted inserted replaced
3415:c270b6c8162b 3416:53c66c4aefa3
       
     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">
       
     3   <variables>
       
     4     <variable name="AlarmNotify" type="HMI_INT"/>
       
     5     <variable name="SendAlarm" type="HMI_INT" onchange="TriggerAlarm"/>
       
     6     <variable name="AlarmText" type="HMI_STRING" initial="'POS'"/>
       
     7     <variable name="AlarmStatus" type="HMI_STRING" initial="'alarm'"/>
       
     8   </variables>
       
     9   <globals>
       
    10     <xhtml:p><![CDATA[
       
    11 from twisted.web.resource import Resource
       
    12 import json, time, random, collections
       
    13 
       
    14 Alarms = []
       
    15 AlarmIndex = {}
       
    16 lastid = 0
       
    17 
       
    18 def TriggerAlarm(changed_var_name):
       
    19     global Alarms, lastid
       
    20     new_entry = [time.time(), PLCGlobals.AlarmText, PLCGlobals.AlarmStatus, lastid]
       
    21     Alarms.append(new_entry)
       
    22     AlarmIndex[lastid] = new_entry
       
    23     lastid = lastid + 1
       
    24     PLCGlobals.AlarmNotify = random.randint(0, 4294967296)
       
    25 
       
    26 class AlarmJsonResource(Resource):
       
    27     def render_GET(self, request):
       
    28         return ''
       
    29 
       
    30     def render_POST(self, request):
       
    31         newstr = request.content.getvalue()
       
    32         newdata = json.loads(newstr)
       
    33         args = newdata[u'args']
       
    34         range_feedback = newdata[u'range']
       
    35         slider_position = newdata[u'position']
       
    36         visible = newdata[u'visible']
       
    37         extra = newdata[u'extra']
       
    38         options = newdata[u'options']
       
    39 
       
    40         if len(options) == 2 :
       
    41             action, alarmid = options
       
    42             if action == "onClick[acknowledge]":
       
    43                 AlarmIndex[int(alarmid)][2] = "ack"
       
    44 
       
    45         answer = self.renderTable(range_feedback, slider_position, visible, extra)
       
    46         janswer = json.dumps(answer)
       
    47         return janswer
       
    48 
       
    49     def renderTable(self, old_range, old_position, visible, extra):
       
    50         if len(extra) > 0 and extra[0] != "":
       
    51             fAlarms = [alrm for alrm in Alarms if alrm[1].find(extra[0])!=-1]
       
    52         else:
       
    53             fAlarms = Alarms
       
    54         new_range = len(fAlarms)
       
    55         delta = new_range - visible
       
    56         new_position = 0 if delta <= 0 else delta if old_position > delta else old_position
       
    57         new_visible = new_range if delta <= 0 else visible
       
    58         
       
    59         visible_alarms = []
       
    60         for ts, text, status, alarmid in fAlarms[new_position:new_position + new_visible]:
       
    61             visible_alarms.append({
       
    62                 "time": time.ctime(ts),
       
    63                 "text": text, # TODO translate text
       
    64                 "status": status,
       
    65                 "alarmid": alarmid
       
    66             })
       
    67 
       
    68         return new_range, new_position, visible_alarms
       
    69 
       
    70 
       
    71 ]]></xhtml:p>
       
    72   </globals>
       
    73   <init>
       
    74     <xhtml:p><![CDATA[
       
    75 ]]></xhtml:p>
       
    76   </init>
       
    77   <cleanup>
       
    78     <xhtml:p><![CDATA[
       
    79 ]]></xhtml:p>
       
    80   </cleanup>
       
    81   <start>
       
    82     <xhtml:p><![CDATA[
       
    83 
       
    84 svghmi_root.putChild("alarms", AlarmJsonResource())
       
    85 
       
    86 
       
    87 ]]></xhtml:p>
       
    88   </start>
       
    89   <stop>
       
    90     <xhtml:p><![CDATA[
       
    91 ]]></xhtml:p>
       
    92   </stop>
       
    93 </PyFile>