runtime/PLCObject.py
changeset 1990 2e0fbdd152de
parent 1988 19ca02e8074f
child 1993 cbf0a9ffc782
equal deleted inserted replaced
1989:9b5c712f4488 1990:2e0fbdd152de
   457     def PythonThreadProc(self):
   457     def PythonThreadProc(self):
   458         self.StartSem.release()
   458         self.StartSem.release()
   459         res, cmd, blkid = "None", "None", ctypes.c_void_p()
   459         res, cmd, blkid = "None", "None", ctypes.c_void_p()
   460         compile_cache = {}
   460         compile_cache = {}
   461         while True:
   461         while True:
   462             # print "_PythonIterator(", res, ")",
       
   463             cmd = self._PythonIterator(res, blkid)
   462             cmd = self._PythonIterator(res, blkid)
   464             FBID = blkid.value
   463             FBID = blkid.value
   465             # print " -> ", cmd, blkid
       
   466             if cmd is None:
   464             if cmd is None:
   467                 break
   465                 break
   468             try:
   466             try:
   469                 self.python_runtime_vars["FBID"] = FBID
   467                 self.python_runtime_vars["FBID"] = FBID
   470                 ccmd, AST = compile_cache.get(FBID, (None, None))
   468                 ccmd, AST = compile_cache.get(FBID, (None, None))
   653             tick = ctypes.c_uint32()
   651             tick = ctypes.c_uint32()
   654             size = ctypes.c_uint32()
   652             size = ctypes.c_uint32()
   655             buff = ctypes.c_void_p()
   653             buff = ctypes.c_void_p()
   656             TraceBuffer = None
   654             TraceBuffer = None
   657             if self.PLClibraryLock.acquire(False):
   655             if self.PLClibraryLock.acquire(False):
   658                 if self._GetDebugData(ctypes.byref(tick),
   656                 res = self._GetDebugData(ctypes.byref(tick),
   659                                       ctypes.byref(size),
   657                                          ctypes.byref(size),
   660                                       ctypes.byref(buff)) == 0:
   658                                          ctypes.byref(buff)) 
       
   659                 if res == 0:
   661                     if size.value:
   660                     if size.value:
   662                         TraceBuffer = ctypes.string_at(buff.value, size.value)
   661                         TraceBuffer = ctypes.string_at(buff.value, size.value)
   663                     self._FreeDebugData()
   662                     self._FreeDebugData()
   664                 self.PLClibraryLock.release()
   663                 self.PLClibraryLock.release()
       
   664                 
       
   665                 if res != 0:
       
   666                     break
       
   667 
   665             if TraceBuffer is not None:
   668             if TraceBuffer is not None:
   666                 self._TracesPush((tick.value, TraceBuffer))
   669                 self._TracesPush((tick.value, TraceBuffer))
   667             self._TracesAutoSuspend()
   670             self._TracesAutoSuspend()
   668         self._TracesFlush()
   671         self._TracesFlush()
   669 
   672