diff -r f6d06bdd31e8 -r ffa24427396a runtime/PLCObject.py --- a/runtime/PLCObject.py Thu Jan 24 17:44:44 2013 +1100 +++ b/runtime/PLCObject.py Tue Jan 29 16:21:01 2013 +1100 @@ -79,6 +79,23 @@ if self.statuschange is not None: self.statuschange(self.PLCStatus) + def LogMessage(self, msg): + return self._LogMessage(msg, len(msg)) + + + def GetLogCount(self): + if self._GetLogCount is not None : + return int(self._GetLogCount()) + + def GetLogMessage(self, msgid): + maxsz = len(self._log_read_buffer)-1 + sz = self._GetLogMessage(msgid, self._log_read_buffer, maxsz) + if sz and sz <= maxsz: + self._log_read_buffer[sz] = '\x00' + return self._log_read_buffer.value + else : + return None + def _GetMD5FileName(self): return os.path.join(self.workingdir, "lasttransferedPLC.md5") @@ -149,6 +166,15 @@ self._GetLogCount = self.PLClibraryHandle.GetLogCount self._GetLogCount.restype = ctypes.c_uint32 + self._LogMessage = self.PLClibraryHandle.LogMessage + self._LogMessage.restype = ctypes.c_int + self._LogMessage.argtypes = [ctypes.c_char_p, ctypes.c_uint32] + + self._log_read_buffer = ctypes.create_string_buffer(1<<14) #16K + self._GetLogMessage = self.PLClibraryHandle.GetLogMessage + self._GetLogMessage.restype = ctypes.c_uint32 + self._GetLogMessage.argtypes = [ctypes.c_uint32, ctypes.c_char_p, ctypes.c_uint32] + return True except: PLCprint(traceback.format_exc()) @@ -171,7 +197,9 @@ self._suspendDebug = lambda x:-1 self._resumeDebug = lambda:None self._PythonIterator = lambda:"" - self._GetLogCount = lambda:-1 + self._GetLogCount = None + self._LogMessage = lambda m,s:PLCprint("OFF LOG :"+m) + self._GetLogMessage = lambda i,b,s:None self.PLClibraryHandle = None # Unload library explicitely if getattr(self,"_PLClibraryHandle",None) is not None: @@ -258,6 +286,7 @@ def StartPLC(self): PLCprint("StartPLC") + self.LogMessage("Hello Log") if self.CurrentPLCFilename is not None and self.PLCStatus == "Stopped": c_argv = ctypes.c_char_p * len(self.argv) error = None @@ -293,7 +322,7 @@ return True def GetPLCstatus(self): - return self.PLCStatus, self._GetLogCount() + return self.PLCStatus, self.GetLogCount() def NewPLC(self, md5sum, data, extrafiles): PLCprint("NewPLC (%s)"%md5sum) @@ -414,10 +443,10 @@ self._FreeDebugData() self.PLClibraryLock.release() if offset and offset == size.value: - return self.PLCStatus, self._GetLogCount(), tick.value, res + return self.PLCStatus, self.GetLogCount(), tick.value, res #elif size.value: #PLCprint("Debug error - wrong buffer unpack ! %d != %d"%(offset, size.value)) - return self.PLCStatus, self._GetLogCount(), None, [] + return self.PLCStatus, self.GetLogCount(), None, [] def RemoteExec(self, script, **kwargs): try: