runtime/PLCObject.py
changeset 1737 a39c2918c015
parent 1736 7e61baa047f0
child 1739 ec153828ded2
equal deleted inserted replaced
1736:7e61baa047f0 1737:a39c2918c015
    59 
    59 
    60 class PLCObject(pyro.ObjBase):
    60 class PLCObject(pyro.ObjBase):
    61     def __init__(self, workingdir, daemon, argv, statuschange, evaluator, pyruntimevars):
    61     def __init__(self, workingdir, daemon, argv, statuschange, evaluator, pyruntimevars):
    62         pyro.ObjBase.__init__(self)
    62         pyro.ObjBase.__init__(self)
    63         self.evaluator = evaluator
    63         self.evaluator = evaluator
    64         self.argv = [workingdir] + argv # force argv[0] to be "path" to exec...
    64         self.argv = [workingdir] + argv  # force argv[0] to be "path" to exec...
    65         self.workingdir = workingdir
    65         self.workingdir = workingdir
    66         self.PLCStatus = "Empty"
    66         self.PLCStatus = "Empty"
    67         self.PLClibraryHandle = None
    67         self.PLClibraryHandle = None
    68         self.PLClibraryLock = Lock()
    68         self.PLClibraryLock = Lock()
    69         self.DummyIteratorLock = None
    69         self.DummyIteratorLock = None
   213 
   213 
   214             self._LogMessage = self.PLClibraryHandle.LogMessage
   214             self._LogMessage = self.PLClibraryHandle.LogMessage
   215             self._LogMessage.restype = ctypes.c_int
   215             self._LogMessage.restype = ctypes.c_int
   216             self._LogMessage.argtypes = [ctypes.c_uint8, ctypes.c_char_p, ctypes.c_uint32]
   216             self._LogMessage.argtypes = [ctypes.c_uint8, ctypes.c_char_p, ctypes.c_uint32]
   217 
   217 
   218             self._log_read_buffer = ctypes.create_string_buffer(1<<14) #16K
   218             self._log_read_buffer = ctypes.create_string_buffer(1<<14)  #16K
   219             self._GetLogMessage = self.PLClibraryHandle.GetLogMessage
   219             self._GetLogMessage = self.PLClibraryHandle.GetLogMessage
   220             self._GetLogMessage.restype = ctypes.c_uint32
   220             self._GetLogMessage.restype = ctypes.c_uint32
   221             self._GetLogMessage.argtypes = [ctypes.c_uint8, ctypes.c_uint32, ctypes.c_char_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32)]
   221             self._GetLogMessage.argtypes = [ctypes.c_uint8, ctypes.c_uint32, ctypes.c_char_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32)]
   222 
   222 
   223             self._loading_error = None
   223             self._loading_error = None
   517         traces_age = time() - self.LastSwapTrace
   517         traces_age = time() - self.LastSwapTrace
   518         if traces_age > 3:
   518         if traces_age > 3:
   519             self.TraceLock.acquire()
   519             self.TraceLock.acquire()
   520             self.Traces = []
   520             self.Traces = []
   521             self.TraceLock.release()
   521             self.TraceLock.release()
   522             self._suspendDebug(True) # Disable debugger
   522             self._suspendDebug(True)  # Disable debugger
   523             self.TraceWakeup.clear()
   523             self.TraceWakeup.clear()
   524             self.TraceWakeup.wait()
   524             self.TraceWakeup.wait()
   525             self._resumeDebug() # Re-enable debugger
   525             self._resumeDebug()  # Re-enable debugger
   526 
   526 
   527     def _TracesFlush(self):
   527     def _TracesFlush(self):
   528         self.TraceLock.acquire()
   528         self.TraceLock.acquire()
   529         self.Traces = []
   529         self.Traces = []
   530         self.TraceLock.release()
   530         self.TraceLock.release()