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