tests/svghmi/py_ext_0@py_ext/pyfile.xml
branchsvghmi
changeset 3048 d46d545ff7b7
parent 3046 d1bb0c09e412
child 3065 c369a742443d
equal deleted inserted replaced
3047:c113904f0e62 3048:d46d545ff7b7
     7     <variable name="AlarmStatus" type="HMI_STRING" initial="'alarm'"/>
     7     <variable name="AlarmStatus" type="HMI_STRING" initial="'alarm'"/>
     8   </variables>
     8   </variables>
     9   <globals>
     9   <globals>
    10     <xhtml:p><![CDATA[
    10     <xhtml:p><![CDATA[
    11 from twisted.web.resource import Resource
    11 from twisted.web.resource import Resource
    12 import json, time, random
    12 import json, time, random, collections
    13 
    13 
    14 Alarms = []
    14 Alarms = []
       
    15 AlarmIndex = {}
       
    16 lastid = 0
    15 
    17 
    16 def TriggerAlarm(changed_var_name):
    18 def TriggerAlarm(changed_var_name):
    17     global Alarms
    19     global Alarms, lastid
    18     Alarms.append((time.time(), PLCGlobals.AlarmText, PLCGlobals.AlarmStatus))
    20     new_entry = [time.time(), PLCGlobals.AlarmText, PLCGlobals.AlarmStatus, lastid]
       
    21     Alarms.append(new_entry)
       
    22     AlarmIndex[lastid] = new_entry
       
    23     lastid = lastid + 1
    19     PLCGlobals.AlarmNotify = random.randint(0, 4294967296)
    24     PLCGlobals.AlarmNotify = random.randint(0, 4294967296)
    20 
    25 
    21 class AlarmJsonResource(Resource):
    26 class AlarmJsonResource(Resource):
    22     def render_GET(self, request):
    27     def render_GET(self, request):
    23         return ''
    28         return ''
    24 
    29 
    25     def render_POST(self, request):
    30     def render_POST(self, request):
    26         newstr = request.content.getvalue()
    31         newstr = request.content.getvalue()
    27         newdata = json.loads(newstr)
    32         newdata = json.loads(newstr)
    28         print newdata
       
    29         vars = newdata[u'vars']
    33         vars = newdata[u'vars']
    30         args = newdata[u'args']
    34         args = newdata[u'args']
    31         visible = newdata[u'visible']
    35         visible = newdata[u'visible']
       
    36         options = newdata[u'options']
       
    37 
       
    38         if len(options) == 2 :
       
    39             action, alarmid = options
       
    40             if action == "onClick[acknowledge]":
       
    41                 AlarmIndex[int(alarmid)][2] = "ack"
       
    42 
    32         svars = (vars + [0,0])[:3]
    43         svars = (vars + [0,0])[:3]
    33         range_feedback = svars[1]
    44         range_feedback = svars[1]
    34         slider_position = svars[2]
    45         slider_position = svars[2]
    35         answer = self.renderTable(range_feedback, slider_position, visible, *(args+svars[3:]))
    46         answer = self.renderTable(range_feedback, slider_position, visible, *(args+svars[3:]))
    36         janswer = json.dumps(answer)
    47         janswer = json.dumps(answer)
    37         print janswer
       
    38         return janswer
    48         return janswer
    39 
    49 
    40     def renderTable(self, old_range, old_position, visible, *options):
    50     def renderTable(self, old_range, old_position, visible, *options):
    41         new_range = len(Alarms)
    51         new_range = len(Alarms)
    42         delta = new_range - visible
    52         delta = new_range - visible
    43         new_position = 0 if delta <= 0 else delta if old_position > delta else old_position
    53         new_position = 0 if delta <= 0 else delta if old_position > delta else old_position
    44         new_visible = new_range if delta <= 0 else visible
    54         new_visible = new_range if delta <= 0 else visible
    45         
    55         
    46         visible_alarms = []
    56         visible_alarms = []
    47         for ts, text, status in Alarms[new_position:new_position + new_visible]:
    57         for ts, text, status, alarmid in Alarms[new_position:new_position + new_visible]:
    48             visible_alarms.append({
    58             visible_alarms.append({
    49                 "time": time.ctime(ts),
    59                 "time": time.ctime(ts),
    50                 "text": text, # TODO translate text
    60                 "text": text, # TODO translate text
    51                 "status": status
    61                 "status": status,
       
    62                 "alarmid": alarmid
    52             })
    63             })
    53 
    64 
    54         return new_range, new_position, visible_alarms
    65         return new_range, new_position, visible_alarms
    55 
    66 
    56 
    67