--- a/Beremiz_service.py Fri Apr 13 00:29:52 2018 +0200
+++ b/Beremiz_service.py Sat Apr 14 10:09:33 2018 +0200
@@ -411,11 +411,11 @@
self.servicepublisher = None
self.statuschange = statuschange
self.evaluator = evaluator
self.pyruntimevars = pyruntimevars
+ self.plcobj = PLCObject(self) def _to_be_published(self):
return self.servicename is not None and \
@@ -465,9 +465,6 @@
- def RegisterPLCObject(self, plcobj):
if self.plcobj is not None:
@@ -476,6 +473,14 @@
self.servicepublisher = None
self.daemon.shutdown(True)
+ if self.plcobj.GetPLCstatus()[0] == "Stopped": + self.plcobj.StatusChange() @@ -626,14 +631,6 @@
LogMessageAndException(_("WAMP client startup failed. "))
-plcobj = PLCObject(pyroserver)
-if plcobj.GetPLCstatus()[0] == "Stopped":
pyro_thread = Thread(target=pyroserver.PyroLoop)
@@ -653,7 +650,7 @@
+ MainWorker.runloop(pyroserver.AutoLoad) except KeyboardInterrupt:
--- a/runtime/PLCObject.py Fri Apr 13 00:29:52 2018 +0200
+++ b/runtime/PLCObject.py Sat Apr 14 10:09:33 2018 +0200
@@ -97,11 +97,14 @@
self.done = Condition(self.mutex)
+ def runloop(self,*args,**kwargs): meant to be called by worker thread (blocking)
self._threadID = thread.get_ident()
+ job(*args,**kwargs).do() @@ -186,7 +189,6 @@
self.TraceWakeup = Event()
- server.RegisterPLCObject(self)
# Get the last transfered PLC if connector must be restart
@@ -273,6 +275,7 @@
self._stopPLC_real.restype = None
self._PythonIterator = getattr(self.PLClibraryHandle, "PythonIterator", None)
+ print(self._PythonIterator) if self._PythonIterator is not None:
self._PythonIterator.restype = ctypes.c_char_p
self._PythonIterator.argtypes = [ctypes.c_char_p, ctypes.POINTER(ctypes.c_void_p)]
@@ -480,6 +483,7 @@
res = "#EXCEPTION : "+str(e)
self.LogMessage(1, ('PyEval@0x%x(Code="%s") Exception "%s"') % (FBID, cmd, str(e)))
if self.CurrentPLCFilename is not None and self.PLCStatus == "Stopped":
c_argv = ctypes.c_char_p * len(self.argv)
@@ -498,6 +502,7 @@
self.PLCStatus = "Broken"
if self.PLCStatus == "Started":
self.LogMessage("PLC stopped")
@@ -516,6 +521,7 @@
return self.PLCStatus, map(self.GetLogCount, xrange(LogLevelsCount))
def NewPLC(self, md5sum, data, extrafiles):
if self.PLCStatus in ["Stopped", "Empty", "Broken"]:
NewFileName = md5sum + lib_ext