runtime/PLCObject.py
changeset 2429 15f18dc8b56a
parent 2324 1cf3768ebf85
parent 2419 c081dabc0f63
child 2459 21164625b393
--- a/runtime/PLCObject.py	Thu Nov 22 23:39:54 2018 +0100
+++ b/runtime/PLCObject.py	Fri Nov 23 00:33:04 2018 +0100
@@ -34,6 +34,7 @@
 from runtime.typemapping import TypeTranslator
 from runtime.loglevels import LogLevelsDefault, LogLevelsCount
 from runtime.Stunnel import getPSKID
+from runtime import PlcStatus
 from runtime import MainWorker
 
 if os.name in ("nt", "ce"):
@@ -75,7 +76,7 @@
         self.statuschange = statuschange
         self.evaluator = evaluator
         self.pyruntimevars = pyruntimevars
-        self.PLCStatus = "Empty"
+        self.PLCStatus = PlcStatus.Empty
         self.PLClibraryHandle = None
         self.PLClibraryLock = Lock()
         # Creates fake C funcs proxies
@@ -396,17 +397,17 @@
                 else:
                     res = str(result)
                 self.python_runtime_vars["FBID"] = None
-            except Exception, e:
+            except Exception as e:
                 res = "#EXCEPTION : "+str(e)
                 self.LogMessage(1, ('PyEval@0x%x(Code="%s") Exception "%s"') % (FBID, cmd, str(e)))
 
     @RunInMain
     def StartPLC(self):
-        if self.CurrentPLCFilename is not None and self.PLCStatus == "Stopped":
+        if self.CurrentPLCFilename is not None and self.PLCStatus == PlcStatus.Stopped:
             c_argv = ctypes.c_char_p * len(self.argv)
             res = self._startPLC(len(self.argv), c_argv(*self.argv))
             if res == 0:
-                self.PLCStatus = "Started"
+                self.PLCStatus = PlcStatus.Started
                 self.StatusChange()
                 self.PythonRuntimeCall("start")
                 self.StartSem = Semaphore(0)
@@ -416,16 +417,16 @@
                 self.LogMessage("PLC started")
             else:
                 self.LogMessage(0, _("Problem starting PLC : error %d" % res))
-                self.PLCStatus = "Broken"
+                self.PLCStatus = PlcStatus.Broken
                 self.StatusChange()
 
     @RunInMain
     def StopPLC(self):
-        if self.PLCStatus == "Started":
+        if self.PLCStatus == PlcStatus.Started:
             self.LogMessage("PLC stopped")
             self._stopPLC()
             self.PythonThread.join()
-            self.PLCStatus = "Stopped"
+            self.PLCStatus = PlcStatus.Stopped
             self.StatusChange()
             self.PythonRuntimeCall("stop")
             if self.TraceThread is not None:
@@ -444,7 +445,7 @@
 
     @RunInMain
     def NewPLC(self, md5sum, data, extrafiles):
-        if self.PLCStatus in ["Stopped", "Empty", "Broken"]:
+        if self.PLCStatus in [PlcStatus.Stopped, PlcStatus.Empty, PlcStatus.Broken]:
             NewFileName = md5sum + lib_ext
             extra_files_log = os.path.join(self.workingdir, "extra_files.txt")
 
@@ -460,7 +461,7 @@
                 self.UnLoadPLC()
 
             self.LogMessage("NewPLC (%s)" % md5sum)
-            self.PLCStatus = "Empty"
+            self.PLCStatus = PlcStatus.Empty
 
             try:
                 if replace_PLC_shared_object:
@@ -491,20 +492,20 @@
                 # Store new PLC filename
                 self.CurrentPLCFilename = NewFileName
             except Exception:
-                self.PLCStatus = "Broken"
+                self.PLCStatus = PlcStatus.Broken
                 self.StatusChange()
                 PLCprint(traceback.format_exc())
                 return False
 
             if not replace_PLC_shared_object:
-                self.PLCStatus = "Stopped"
+                self.PLCStatus = PlcStatus.Stopped
             elif self.LoadPLC():
-                self.PLCStatus = "Stopped"
+                self.PLCStatus = PlcStatus.Stopped
             else:
-                self.PLCStatus = "Broken"
+                self.PLCStatus = PlcStatus.Broken
             self.StatusChange()
 
-            return self.PLCStatus == "Stopped"
+            return self.PLCStatus == PlcStatus.Stopped
         return False
 
     def MatchMD5(self, MD5):
@@ -539,7 +540,7 @@
 
     def _TracesSwap(self):
         self.LastSwapTrace = time()
-        if self.TraceThread is None and self.PLCStatus == "Started":
+        if self.TraceThread is None and self.PLCStatus == PlcStatus.Started:
             self.TraceThread = Thread(target=self.TraceThreadProc)
             self.TraceThread.start()
         self.TraceLock.acquire()
@@ -557,7 +558,7 @@
         Return a list of traces, corresponding to the list of required idx
         """
         self._resumeDebug()  # Re-enable debugger
-        while self.PLCStatus == "Started":
+        while self.PLCStatus == PlcStatus.Started:
             tick = ctypes.c_uint32()
             size = ctypes.c_uint32()
             buff = ctypes.c_void_p()
@@ -600,7 +601,7 @@
 
     def RemoteExec(self, script, *kwargs):
         try:
-            exec script in kwargs
+            exec(script, kwargs)
         except Exception:
             _e_type, e_value, e_traceback = sys.exc_info()
             line_no = traceback.tb_lineno(get_last_traceback(e_traceback))