equal
deleted
inserted
replaced
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 """ |