222 self._ResetDebugVariables = self.PLClibraryHandle.ResetDebugVariables |
222 self._ResetDebugVariables = self.PLClibraryHandle.ResetDebugVariables |
223 self._ResetDebugVariables.restype = None |
223 self._ResetDebugVariables.restype = None |
224 |
224 |
225 self._RegisterDebugVariable = self.PLClibraryHandle.RegisterDebugVariable |
225 self._RegisterDebugVariable = self.PLClibraryHandle.RegisterDebugVariable |
226 self._RegisterDebugVariable.restype = ctypes.c_int |
226 self._RegisterDebugVariable.restype = ctypes.c_int |
227 self._RegisterDebugVariable.argtypes = [ctypes.c_int, ctypes.c_void_p] |
227 self._RegisterDebugVariable.argtypes = [ctypes.c_int, ctypes.c_void_p, ctypes.c_uint32] |
228 |
228 |
229 self._FreeDebugData = self.PLClibraryHandle.FreeDebugData |
229 self._FreeDebugData = self.PLClibraryHandle.FreeDebugData |
230 self._FreeDebugData.restype = None |
230 self._FreeDebugData.restype = None |
231 |
231 |
232 self._GetDebugData = self.PLClibraryHandle.GetDebugData |
232 self._GetDebugData = self.PLClibraryHandle.GetDebugData |
721 if idxs: |
721 if idxs: |
722 # suspend but dont disable |
722 # suspend but dont disable |
723 if self._suspendDebug(False) == 0: |
723 if self._suspendDebug(False) == 0: |
724 # keep a copy of requested idx |
724 # keep a copy of requested idx |
725 self._ResetDebugVariables() |
725 self._ResetDebugVariables() |
726 for idx, iectype, force in idxs: |
726 for idx, force in idxs: |
727 if force is not None: |
727 res = self._RegisterDebugVariable(idx, force, 0 if force is None else len(force)) |
728 c_type, _unpack_func, pack_func = \ |
|
729 TypeTranslator.get(iectype, |
|
730 (None, None, None)) |
|
731 force = ctypes.byref(pack_func(c_type, force)) |
|
732 res = self._RegisterDebugVariable(idx, force) |
|
733 if res != 0: |
728 if res != 0: |
734 self._resumeDebug() |
729 self._resumeDebug() |
735 self._suspendDebug(True) |
730 self._suspendDebug(True) |
736 return -res |
731 return -res |
737 self._TracesSwap() |
732 self._TracesSwap() |
738 self._resumeDebug() |
733 self._resumeDebug() |
739 return self.DebugToken |
734 return self.DebugToken |
740 else: |
735 else: |
741 self._suspendDebug(True) |
736 self._suspendDebug(True) |
742 return 4 # DEBUG_SUSPENDED |
737 return 5 # DEBUG_SUSPENDED |
743 |
738 |
744 def _TracesSwap(self): |
739 def _TracesSwap(self): |
745 self.LastSwapTrace = time() |
740 self.LastSwapTrace = time() |
746 if self.TraceThread is None and self.PLCStatus == PlcStatus.Started: |
741 if self.TraceThread is None and self.PLCStatus == PlcStatus.Started: |
747 self.TraceThread = Thread(target=self.TraceThreadProc, name="PLCTrace") |
742 self.TraceThread = Thread(target=self.TraceThreadProc, name="PLCTrace") |