Beremiz_service.py
changeset 1988 19ca02e8074f
parent 1987 8d1aca3c9e83
child 1994 1fdc32be71b8
equal deleted inserted replaced
1987:8d1aca3c9e83 1988:19ca02e8074f
   409         self.servicename = servicename
   409         self.servicename = servicename
   410         self.ip_addr = ip_addr
   410         self.ip_addr = ip_addr
   411         self.port = port
   411         self.port = port
   412         self.workdir = workdir
   412         self.workdir = workdir
   413         self.argv = argv
   413         self.argv = argv
   414         self.plcobj = None
       
   415         self.servicepublisher = None
   414         self.servicepublisher = None
   416         self.statuschange = statuschange
   415         self.statuschange = statuschange
   417         self.evaluator = evaluator
   416         self.evaluator = evaluator
   418         self.pyruntimevars = pyruntimevars
   417         self.pyruntimevars = pyruntimevars
       
   418         self.plcobj = PLCObject(self)
   419 
   419 
   420     def _to_be_published(self):
   420     def _to_be_published(self):
   421         return self.servicename is not None and \
   421         return self.servicename is not None and \
   422                self.ip_addr is not None and \
   422                self.ip_addr is not None and \
   423                self.ip_addr != "localhost" and \
   423                self.ip_addr != "localhost" and \
   462         self.continueloop = False
   462         self.continueloop = False
   463         if self.plcobj is not None:
   463         if self.plcobj is not None:
   464             self.plcobj.StopPLC()
   464             self.plcobj.StopPLC()
   465             self.plcobj.UnLoadPLC()
   465             self.plcobj.UnLoadPLC()
   466         self._stop()
   466         self._stop()
   467 
       
   468     def RegisterPLCObject(self, plcobj):
       
   469         self.plcobj = plcobj
       
   470 
   467 
   471     def _stop(self):
   468     def _stop(self):
   472         if self.plcobj is not None:
   469         if self.plcobj is not None:
   473             self.plcobj.StopPLC()
   470             self.plcobj.StopPLC()
   474         if self.servicepublisher is not None:
   471         if self.servicepublisher is not None:
   475             self.servicepublisher.UnRegisterService()
   472             self.servicepublisher.UnRegisterService()
   476             self.servicepublisher = None
   473             self.servicepublisher = None
   477         self.daemon.shutdown(True)
   474         self.daemon.shutdown(True)
       
   475 
       
   476     def AutoLoad(self):
       
   477         self.plcobj.AutoLoad()
       
   478         if self.plcobj.GetPLCstatus()[0] == "Stopped":
       
   479             if autostart:
       
   480                 self.plcobj.StartPLC()
       
   481         self.plcobj.StatusChange()
       
   482 
   478 
   483 
   479 
   484 
   480 if enabletwisted:
   485 if enabletwisted:
   481     import warnings
   486     import warnings
   482     with warnings.catch_warnings():
   487     with warnings.catch_warnings():
   624             else:
   629             else:
   625                 raise Exception(_("WAMP config is missing."))
   630                 raise Exception(_("WAMP config is missing."))
   626         except Exception:
   631         except Exception:
   627             LogMessageAndException(_("WAMP client startup failed. "))
   632             LogMessageAndException(_("WAMP client startup failed. "))
   628 
   633 
   629 plcobj = PLCObject(pyroserver)
       
   630 
       
   631 plcobj.AutoLoad()
       
   632 if plcobj.GetPLCstatus()[0] == "Stopped":
       
   633     if autostart:
       
   634         plcobj.StartPLC()
       
   635 plcobj.StatusChange()
       
   636 
       
   637 pyro_thread = Thread(target=pyroserver.PyroLoop)
   634 pyro_thread = Thread(target=pyroserver.PyroLoop)
   638 pyro_thread.start()
   635 pyro_thread.start()
   639 
   636 
   640 pyroserver.PrintServerInfo()
   637 pyroserver.PrintServerInfo()
   641 
   638 
   651 
   648 
   652     ui_thread = Thread(target = ui_thread_target)
   649     ui_thread = Thread(target = ui_thread_target)
   653     ui_thread.start()
   650     ui_thread.start()
   654 
   651 
   655 try:
   652 try:
   656     MainWorker.runloop()
   653     MainWorker.runloop(pyroserver.AutoLoad)
   657 except KeyboardInterrupt:
   654 except KeyboardInterrupt:
   658     pass
   655     pass
   659 
   656 
   660 pyroserver.Quit()
   657 pyroserver.Quit()
   661 sys.exit(0)
   658 sys.exit(0)