LPCconnector/LPCObject.py
changeset 45 786b12887e91
parent 0 51f5a3138405
--- 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")