runtime/PLCObject.py
changeset 2485 ef327451d067
parent 2463 8742337a9fe3
child 2486 44c2a4e2b84d
equal deleted inserted replaced
2484:2318a7cde101 2485:ef327451d067
    97         self._loading_error = None
    97         self._loading_error = None
    98         self.python_runtime_vars = None
    98         self.python_runtime_vars = None
    99         self.TraceThread = None
    99         self.TraceThread = None
   100         self.TraceLock = Lock()
   100         self.TraceLock = Lock()
   101         self.Traces = []
   101         self.Traces = []
       
   102         self.DebugToken = 0
   102 
   103 
   103         self._init_blobs()
   104         self._init_blobs()
   104 
   105 
   105     # First task of worker -> no @RunInMain
   106     # First task of worker -> no @RunInMain
   106     def AutoLoad(self, autostart):
   107     def AutoLoad(self, autostart):
   565             return last_md5 == MD5
   566             return last_md5 == MD5
   566         except Exception:
   567         except Exception:
   567             pass
   568             pass
   568         return False
   569         return False
   569 
   570 
       
   571     @RunInMain
   570     def SetTraceVariablesList(self, idxs):
   572     def SetTraceVariablesList(self, idxs):
   571         """
   573         """
   572         Call ctype imported function to append
   574         Call ctype imported function to append
   573         these indexes to registred variables in PLC debugger
   575         these indexes to registred variables in PLC debugger
   574         """
   576         """
       
   577         self.DebugToken += 1
   575         if idxs:
   578         if idxs:
   576             # suspend but dont disable
   579             # suspend but dont disable
   577             if self._suspendDebug(False) == 0:
   580             if self._suspendDebug(False) == 0:
   578                 # keep a copy of requested idx
   581                 # keep a copy of requested idx
   579                 self._ResetDebugVariables()
   582                 self._ResetDebugVariables()
   584                                                (None, None, None))
   587                                                (None, None, None))
   585                         force = ctypes.byref(pack_func(c_type, force))
   588                         force = ctypes.byref(pack_func(c_type, force))
   586                     self._RegisterDebugVariable(idx, force)
   589                     self._RegisterDebugVariable(idx, force)
   587                 self._TracesSwap()
   590                 self._TracesSwap()
   588                 self._resumeDebug()
   591                 self._resumeDebug()
       
   592                 return self.DebugToken
   589         else:
   593         else:
   590             self._suspendDebug(True)
   594             self._suspendDebug(True)
       
   595         return None
   591 
   596 
   592     def _TracesSwap(self):
   597     def _TracesSwap(self):
   593         self.LastSwapTrace = time()
   598         self.LastSwapTrace = time()
   594         if self.TraceThread is None and self.PLCStatus == PlcStatus.Started:
   599         if self.TraceThread is None and self.PLCStatus == PlcStatus.Started:
   595             self.TraceThread = Thread(target=self.TraceThreadProc)
   600             self.TraceThread = Thread(target=self.TraceThreadProc)
   599         self.Traces = []
   604         self.Traces = []
   600         self.TraceLock.release()
   605         self.TraceLock.release()
   601         return Traces
   606         return Traces
   602 
   607 
   603     @RunInMain
   608     @RunInMain
   604     def GetTraceVariables(self):
   609     def GetTraceVariables(self, DebugToken):
   605         return self.PLCStatus, self._TracesSwap()
   610         if (DebugToken is not None and
       
   611             DebugToken == self.DebugToken):
       
   612             return self.PLCStatus, self._TracesSwap()
       
   613         return PlcStatus.Broken, []
   606 
   614 
   607     def TraceThreadProc(self):
   615     def TraceThreadProc(self):
   608         """
   616         """
   609         Return a list of traces, corresponding to the list of required idx
   617         Return a list of traces, corresponding to the list of required idx
   610         """
   618         """