runtime/PLCObject.py
changeset 3887 2df45e4bd500
parent 3884 34da877021d5
equal deleted inserted replaced
3886:2adfa4c60bff 3887:2df45e4bd500
   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")