--- a/LPCconnector/LPCObject.py Mon Apr 29 17:29:59 2013 +0900
+++ b/LPCconnector/LPCObject.py Mon Apr 29 17:31:24 2013 +0900
@@ -24,15 +24,13 @@
from LPCProto import *
-
-
class LPCObject():
def __init__(self, confnodesroot, comportstr):
+ self.TransactionLock = Lock()
self.PLCStatus = "Disconnected"
self.confnodesroot = confnodesroot
self.PLCprint = confnodesroot.logger.writeyield
self._Idxs = []
- comport = int(comportstr[3:]) - 1
try:
self.connect(comportstr)
except Exception,e:
@@ -41,19 +39,28 @@
self.PLCStatus = "Disconnected"
def HandleSerialTransaction(self, transaction):
+ res = None
+ disconnected=False
+ failure=None
+ self.TransactionLock.acquire()
if self.SerialConnection is not None:
try:
- self.PLCStatus, res = self.SerialConnection.HandleTransaction(transaction)
- return res
+ self.PLCStatus, res = \
+ self.SerialConnection.HandleTransaction(transaction)
except LPCProtoError,e:
- self.confnodesroot.logger.write(_("PLC disconnected\n"))
+ disconnected=True
if self.SerialConnection is not None:
self.SerialConnection.close()
self.SerialConnection = None
self.PLCStatus = "Disconnected"
- return None
except Exception,e:
- self.confnodesroot.logger.write_warning(str(e)+"\n")
+ failure = str(e)
+ self.TransactionLock.release()
+ if disconnected:
+ self.confnodesroot.logger.write(_("PLC disconnected\n"))
+ if failure is not None:
+ self.confnodesroot.logger.write_warning(failure+"\n")
+ return res
def StartPLC(self, debug=False):
raise LPCProtoError("Not implemented")