mirror of
https://github.com/naruxde/revpipyload.git
synced 2025-11-08 23:23:52 +01:00
debug lognachrichten angepasst
docstrings angepasst
This commit is contained in:
@@ -94,19 +94,19 @@ ProcimgServer (Constructor)</h3>
|
|||||||
<p>
|
<p>
|
||||||
Instantiiert RevPiCheckServer()-Klasse.
|
Instantiiert RevPiCheckServer()-Klasse.
|
||||||
</p><dl>
|
</p><dl>
|
||||||
<dt><i>xmlserver:</i></dt>
|
<dt><i>xmlserver</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
XML-RPC Server
|
XML-RPC Server
|
||||||
</dd><dt><i>procimg:</i></dt>
|
</dd><dt><i>procimg</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
Pfad zum Prozessabbild
|
Pfad zum Prozessabbild
|
||||||
</dd><dt><i>configrsc:</i></dt>
|
</dd><dt><i>configrsc</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
Pfad zur piCtory Konfigurationsdatei
|
Pfad zur piCtory Konfigurationsdatei
|
||||||
</dd><dt><i>logger:</i></dt>
|
</dd><dt><i>logger</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
Loggerinstanz
|
Loggerinstanz
|
||||||
</dd><dt><i>aclmode:</i></dt>
|
</dd><dt><i>aclmode</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
Zugriffsrechte
|
Zugriffsrechte
|
||||||
</dd>
|
</dd>
|
||||||
@@ -128,7 +128,7 @@ ProcimgServer.ios</h3>
|
|||||||
<p>
|
<p>
|
||||||
Generiert ein dict() der Devices und IOs.
|
Generiert ein dict() der Devices und IOs.
|
||||||
</p><dl>
|
</p><dl>
|
||||||
<dt><i>type:</i></dt>
|
<dt><i>type</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
IO Typ inp/out
|
IO Typ inp/out
|
||||||
</dd>
|
</dd>
|
||||||
@@ -144,13 +144,13 @@ ProcimgServer.setvalue</h3>
|
|||||||
<p>
|
<p>
|
||||||
Setzt einen Wert auf dem RevPi.
|
Setzt einen Wert auf dem RevPi.
|
||||||
</p><dl>
|
</p><dl>
|
||||||
<dt><i>device:</i></dt>
|
<dt><i>device</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
Device Position oder Name
|
Device Position oder Name
|
||||||
</dd><dt><i>io:</i></dt>
|
</dd><dt><i>io</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
IO Name fuer neuen Wert
|
IO Name fuer neuen Wert
|
||||||
</dd><dt><i>value:</i></dt>
|
</dd><dt><i>value</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
Neuer Wert
|
Neuer Wert
|
||||||
</dd>
|
</dd>
|
||||||
|
|||||||
@@ -123,10 +123,10 @@ LogReader.load_applog</h3>
|
|||||||
<p>
|
<p>
|
||||||
Uebertraegt Logdaten Binaer.
|
Uebertraegt Logdaten Binaer.
|
||||||
</p><dl>
|
</p><dl>
|
||||||
<dt><i>start:</i></dt>
|
<dt><i>start</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
Startbyte
|
Startbyte
|
||||||
</dd><dt><i>count:</i></dt>
|
</dd><dt><i>count</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
Max. Byteanzahl zum uebertragen
|
Max. Byteanzahl zum uebertragen
|
||||||
</dd>
|
</dd>
|
||||||
@@ -142,10 +142,10 @@ LogReader.load_plclog</h3>
|
|||||||
<p>
|
<p>
|
||||||
Uebertraegt Logdaten Binaer.
|
Uebertraegt Logdaten Binaer.
|
||||||
</p><dl>
|
</p><dl>
|
||||||
<dt><i>start:</i></dt>
|
<dt><i>start</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
Startbyte
|
Startbyte
|
||||||
</dd><dt><i>count:</i></dt>
|
</dd><dt><i>count</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
Max. Byteanzahl zum uebertragen
|
Max. Byteanzahl zum uebertragen
|
||||||
</dd>
|
</dd>
|
||||||
@@ -220,7 +220,7 @@ PipeLogwriter (Constructor)</h3>
|
|||||||
<p>
|
<p>
|
||||||
Instantiiert PipeLogwriter-Klasse.
|
Instantiiert PipeLogwriter-Klasse.
|
||||||
</p><dl>
|
</p><dl>
|
||||||
<dt><i>logfilename:</i></dt>
|
<dt><i>logfilename</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
Dateiname fuer Logdatei
|
Dateiname fuer Logdatei
|
||||||
</dd>
|
</dd>
|
||||||
@@ -248,7 +248,7 @@ PipeLogwriter.logline</h3>
|
|||||||
<p>
|
<p>
|
||||||
Schreibt eine Zeile in die Logdatei oder stdout.
|
Schreibt eine Zeile in die Logdatei oder stdout.
|
||||||
</p><dl>
|
</p><dl>
|
||||||
<dt><i>message:</i></dt>
|
<dt><i>message</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
Logzeile zum Schreiben
|
Logzeile zum Schreiben
|
||||||
</dd>
|
</dd>
|
||||||
@@ -362,7 +362,7 @@ RevPiPlc._spopen</h3>
|
|||||||
<p>
|
<p>
|
||||||
Startet das PLC Programm.
|
Startet das PLC Programm.
|
||||||
</p><dl>
|
</p><dl>
|
||||||
<dt><i>lst_proc:</i></dt>
|
<dt><i>lst_proc</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
Prozessliste
|
Prozessliste
|
||||||
</dd>
|
</dd>
|
||||||
@@ -486,7 +486,7 @@ Methods</h3>
|
|||||||
<td>Loescht das gesamte plcworkdir Verzeichnis.</td>
|
<td>Loescht das gesamte plcworkdir Verzeichnis.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<td><a style="color:#0000FF" href="#RevPiPyLoad.xml_psstart">xml_psstart</a></td>
|
<td><a style="color:#0000FF" href="#RevPiPyLoad.xml_psstart">xml_psstart</a></td>
|
||||||
<td>Starten den Prozessabbildserver.</td>
|
<td>Startet den Prozessabbildserver.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<td><a style="color:#0000FF" href="#RevPiPyLoad.xml_psstop">xml_psstop</a></td>
|
<td><a style="color:#0000FF" href="#RevPiPyLoad.xml_psstop">xml_psstop</a></td>
|
||||||
<td>Stoppt den Prozessabbildserver.</td>
|
<td>Stoppt den Prozessabbildserver.</td>
|
||||||
@@ -554,10 +554,10 @@ RevPiPyLoad.packapp</h3>
|
|||||||
<p>
|
<p>
|
||||||
Erzeugt aus dem PLC-Programm ein TAR-File.
|
Erzeugt aus dem PLC-Programm ein TAR-File.
|
||||||
</p><dl>
|
</p><dl>
|
||||||
<dt><i>mode:</i></dt>
|
<dt><i>mode</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
Packart 'tar' oder 'zip'
|
Packart 'tar' oder 'zip'
|
||||||
</dd><dt><i>pictory:</i></dt>
|
</dd><dt><i>pictory</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
piCtory Konfiguration mit einpacken
|
piCtory Konfiguration mit einpacken
|
||||||
</dd>
|
</dd>
|
||||||
@@ -629,10 +629,10 @@ RevPiPyLoad.xml_plcdownload</h3>
|
|||||||
<p>
|
<p>
|
||||||
Uebertraegt ein Archiv vom plcworkdir.
|
Uebertraegt ein Archiv vom plcworkdir.
|
||||||
</p><dl>
|
</p><dl>
|
||||||
<dt><i>mode:</i></dt>
|
<dt><i>mode</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
Archivart 'tar' 'zip'
|
Archivart 'tar' 'zip'
|
||||||
</dd><dt><i>pictory:</i></dt>
|
</dd><dt><i>pictory</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
piCtory Konfiguraiton mit einpacken
|
piCtory Konfiguraiton mit einpacken
|
||||||
</dd>
|
</dd>
|
||||||
@@ -698,10 +698,10 @@ RevPiPyLoad.xml_plcupload</h3>
|
|||||||
<p>
|
<p>
|
||||||
Empfaengt Dateien fuer das PLC Programm.
|
Empfaengt Dateien fuer das PLC Programm.
|
||||||
</p><dl>
|
</p><dl>
|
||||||
<dt><i>filedata:</i></dt>
|
<dt><i>filedata</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
GZIP Binary data der datei
|
GZIP Binary data der datei
|
||||||
</dd><dt><i>filename:</i></dt>
|
</dd><dt><i>filename</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
Name inkl. Unterverzeichnis der Datei
|
Name inkl. Unterverzeichnis der Datei
|
||||||
</dd>
|
</dd>
|
||||||
@@ -726,7 +726,7 @@ True, wenn erfolgreich
|
|||||||
RevPiPyLoad.xml_psstart</h3>
|
RevPiPyLoad.xml_psstart</h3>
|
||||||
<b>xml_psstart</b>(<i></i>)
|
<b>xml_psstart</b>(<i></i>)
|
||||||
<p>
|
<p>
|
||||||
Starten den Prozessabbildserver.
|
Startet den Prozessabbildserver.
|
||||||
</p><dl>
|
</p><dl>
|
||||||
<dt>Returns:</dt>
|
<dt>Returns:</dt>
|
||||||
<dd>
|
<dd>
|
||||||
@@ -767,10 +767,10 @@ RevPiPyLoad.xml_setpictoryrsc</h3>
|
|||||||
<p>
|
<p>
|
||||||
Schreibt die config.rsc Datei von piCotry.
|
Schreibt die config.rsc Datei von piCotry.
|
||||||
</p><dl>
|
</p><dl>
|
||||||
<dt><i>filebytes:</i></dt>
|
<dt><i>filebytes</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
xmlrpc.client.Binary()-Objekt
|
xmlrpc.client.Binary()-Objekt
|
||||||
</dd><dt><i>reset:</i></dt>
|
</dd><dt><i>reset</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
Reset piControl Device
|
Reset piControl Device
|
||||||
</dd>
|
</dd>
|
||||||
|
|||||||
@@ -30,11 +30,11 @@ class ProcimgServer():
|
|||||||
def __init__(self, logger, xmlserver, configrsc, procimg, aclmode):
|
def __init__(self, logger, xmlserver, configrsc, procimg, aclmode):
|
||||||
"""Instantiiert RevPiCheckServer()-Klasse.
|
"""Instantiiert RevPiCheckServer()-Klasse.
|
||||||
|
|
||||||
@param xmlserver: XML-RPC Server
|
@param xmlserver XML-RPC Server
|
||||||
@param procimg: Pfad zum Prozessabbild
|
@param procimg Pfad zum Prozessabbild
|
||||||
@param configrsc: Pfad zur piCtory Konfigurationsdatei
|
@param configrsc Pfad zur piCtory Konfigurationsdatei
|
||||||
@param logger: Loggerinstanz
|
@param logger Loggerinstanz
|
||||||
@param aclmode: Zugriffsrechte
|
@param aclmode Zugriffsrechte
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# Logger übernehmen
|
# Logger übernehmen
|
||||||
@@ -68,15 +68,15 @@ class ProcimgServer():
|
|||||||
|
|
||||||
def devices(self):
|
def devices(self):
|
||||||
"""Generiert Deviceliste mit Position und Namen.
|
"""Generiert Deviceliste mit Position und Namen.
|
||||||
@returns: list() mit Tuple (pos, name)"""
|
@return list() mit Tuple (pos, name)"""
|
||||||
return [
|
return [
|
||||||
(dev.position, dev.name) for dev in self.rpi.devices
|
(dev.position, dev.name) for dev in self.rpi.devices
|
||||||
]
|
]
|
||||||
|
|
||||||
def ios(self, type):
|
def ios(self, type):
|
||||||
"""Generiert ein dict() der Devices und IOs.
|
"""Generiert ein dict() der Devices und IOs.
|
||||||
@param type: IO Typ inp/out
|
@param type IO Typ inp/out
|
||||||
@returns: pickled dict()"""
|
@return pickled dict()"""
|
||||||
dict_ios = {}
|
dict_ios = {}
|
||||||
for dev in self.rpi.devices:
|
for dev in self.rpi.devices:
|
||||||
dict_ios[dev.position] = []
|
dict_ios[dev.position] = []
|
||||||
@@ -104,10 +104,10 @@ class ProcimgServer():
|
|||||||
def setvalue(self, device, io, value):
|
def setvalue(self, device, io, value):
|
||||||
"""Setzt einen Wert auf dem RevPi.
|
"""Setzt einen Wert auf dem RevPi.
|
||||||
|
|
||||||
@param device: Device Position oder Name
|
@param device Device Position oder Name
|
||||||
@param io: IO Name fuer neuen Wert
|
@param io IO Name fuer neuen Wert
|
||||||
@param value: Neuer Wert
|
@param value Neuer Wert
|
||||||
@returns: list() [device, io, status, msg]
|
@return list() [device, io, status, msg]
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# Zugriffsrechte prüfen
|
# Zugriffsrechte prüfen
|
||||||
@@ -141,7 +141,7 @@ class ProcimgServer():
|
|||||||
|
|
||||||
def values(self):
|
def values(self):
|
||||||
"""Liefert Prozessabbild an Client.
|
"""Liefert Prozessabbild an Client.
|
||||||
@returns: Binary() bytes or None"""
|
@return Binary() bytes or None"""
|
||||||
if self.rpi.devices.readprocimg() and self.rpi.devices.syncoutputs():
|
if self.rpi.devices.readprocimg() and self.rpi.devices.syncoutputs():
|
||||||
bytebuff = b''
|
bytebuff = b''
|
||||||
for dev in self.rpi.devices:
|
for dev in self.rpi.devices:
|
||||||
|
|||||||
@@ -85,9 +85,9 @@ class LogReader():
|
|||||||
def load_applog(self, start, count):
|
def load_applog(self, start, count):
|
||||||
"""Uebertraegt Logdaten Binaer.
|
"""Uebertraegt Logdaten Binaer.
|
||||||
|
|
||||||
@param start: Startbyte
|
@param start Startbyte
|
||||||
@param count: Max. Byteanzahl zum uebertragen
|
@param count Max. Byteanzahl zum uebertragen
|
||||||
@returns: Binary() der Logdatei
|
@return Binary() der Logdatei
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if not os.access(proginit.logapp, os.R_OK):
|
if not os.access(proginit.logapp, os.R_OK):
|
||||||
@@ -105,9 +105,9 @@ class LogReader():
|
|||||||
def load_plclog(self, start, count):
|
def load_plclog(self, start, count):
|
||||||
"""Uebertraegt Logdaten Binaer.
|
"""Uebertraegt Logdaten Binaer.
|
||||||
|
|
||||||
@param start: Startbyte
|
@param start Startbyte
|
||||||
@param count: Max. Byteanzahl zum uebertragen
|
@param count Max. Byteanzahl zum uebertragen
|
||||||
@returns: Binary() der Logdatei
|
@return Binary() der Logdatei
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if not os.access(proginit.logplc, os.R_OK):
|
if not os.access(proginit.logplc, os.R_OK):
|
||||||
@@ -136,7 +136,7 @@ class PipeLogwriter(Thread):
|
|||||||
|
|
||||||
def __init__(self, logfilename):
|
def __init__(self, logfilename):
|
||||||
"""Instantiiert PipeLogwriter-Klasse.
|
"""Instantiiert PipeLogwriter-Klasse.
|
||||||
@param logfilename: Dateiname fuer Logdatei"""
|
@param logfilename Dateiname fuer Logdatei"""
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self._exit = Event()
|
self._exit = Event()
|
||||||
self._fh = None
|
self._fh = None
|
||||||
@@ -159,11 +159,10 @@ class PipeLogwriter(Thread):
|
|||||||
|
|
||||||
def _configurefh(self):
|
def _configurefh(self):
|
||||||
"""Konfiguriert den FileHandler fuer Ausgaben der PLCAPP.
|
"""Konfiguriert den FileHandler fuer Ausgaben der PLCAPP.
|
||||||
@returns: FileHandler-Objekt"""
|
@return FileHandler-Objekt"""
|
||||||
proginit.logger.debug("enter PipeLogwriter._configurefh()")
|
proginit.logger.debug("enter PipeLogwriter._configurefh()")
|
||||||
|
|
||||||
dirname = os.path.dirname(self.logfile)
|
dirname = os.path.dirname(self.logfile)
|
||||||
|
|
||||||
proginit.logger.debug("dirname = {}".format(os.path.abspath(dirname)))
|
proginit.logger.debug("dirname = {}".format(os.path.abspath(dirname)))
|
||||||
|
|
||||||
if os.access(dirname, os.R_OK | os.W_OK):
|
if os.access(dirname, os.R_OK | os.W_OK):
|
||||||
@@ -176,7 +175,7 @@ class PipeLogwriter(Thread):
|
|||||||
|
|
||||||
def logline(self, message):
|
def logline(self, message):
|
||||||
"""Schreibt eine Zeile in die Logdatei oder stdout.
|
"""Schreibt eine Zeile in die Logdatei oder stdout.
|
||||||
@param message: Logzeile zum Schreiben"""
|
@param message Logzeile zum Schreiben"""
|
||||||
with self._lckfh:
|
with self._lckfh:
|
||||||
self._fh.write("{}\n".format(message))
|
self._fh.write("{}\n".format(message))
|
||||||
self._fh.flush()
|
self._fh.flush()
|
||||||
@@ -194,7 +193,6 @@ class PipeLogwriter(Thread):
|
|||||||
proginit.logger.debug("enter PipeLogwriter.run()")
|
proginit.logger.debug("enter PipeLogwriter.run()")
|
||||||
|
|
||||||
fhread = os.fdopen(self._fdr)
|
fhread = os.fdopen(self._fdr)
|
||||||
proginit.logger.debug("enter logreader pipe loop")
|
|
||||||
while not self._exit.is_set():
|
while not self._exit.is_set():
|
||||||
line = fhread.readline()
|
line = fhread.readline()
|
||||||
self._lckfh.acquire()
|
self._lckfh.acquire()
|
||||||
@@ -258,7 +256,7 @@ class RevPiPlc(Thread):
|
|||||||
|
|
||||||
def _configureplw(self):
|
def _configureplw(self):
|
||||||
"""Konfiguriert den PipeLogwriter fuer Ausgaben der PLCAPP.
|
"""Konfiguriert den PipeLogwriter fuer Ausgaben der PLCAPP.
|
||||||
@returns: PipeLogwriter()"""
|
@return PipeLogwriter()"""
|
||||||
proginit.logger.debug("enter RevPiPlc._configureplw()")
|
proginit.logger.debug("enter RevPiPlc._configureplw()")
|
||||||
logfile = None
|
logfile = None
|
||||||
if proginit.pargs.daemon:
|
if proginit.pargs.daemon:
|
||||||
@@ -282,8 +280,8 @@ class RevPiPlc(Thread):
|
|||||||
|
|
||||||
def _spopen(self, lst_proc):
|
def _spopen(self, lst_proc):
|
||||||
"""Startet das PLC Programm.
|
"""Startet das PLC Programm.
|
||||||
@param lst_proc: Prozessliste
|
@param lst_proc Prozessliste
|
||||||
@returns: subprocess"""
|
@return subprocess"""
|
||||||
proginit.logger.debug("enter RevPiPlc._spopen({})".format(lst_proc))
|
proginit.logger.debug("enter RevPiPlc._spopen({})".format(lst_proc))
|
||||||
sp = subprocess.Popen(
|
sp = subprocess.Popen(
|
||||||
lst_proc,
|
lst_proc,
|
||||||
@@ -379,6 +377,12 @@ class RevPiPlc(Thread):
|
|||||||
|
|
||||||
self._evt_exit.wait(1)
|
self._evt_exit.wait(1)
|
||||||
|
|
||||||
|
if self._plw is not None:
|
||||||
|
self._plw.logline("-" * 55)
|
||||||
|
self._plw.logline("plc: {} stopped: {}".format(
|
||||||
|
os.path.basename(self._program), asctime()
|
||||||
|
))
|
||||||
|
|
||||||
proginit.logger.debug("leave RevPiPlc.run()")
|
proginit.logger.debug("leave RevPiPlc.run()")
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
@@ -391,9 +395,8 @@ class RevPiPlc(Thread):
|
|||||||
if self._procplc is None:
|
if self._procplc is None:
|
||||||
if self._plw is not None:
|
if self._plw is not None:
|
||||||
self._plw.stop()
|
self._plw.stop()
|
||||||
proginit.logger.debug("join after NONE pipe thread")
|
|
||||||
self._plw.join()
|
self._plw.join()
|
||||||
proginit.logger.debug("joined after NONE pipe thread")
|
proginit.logger.debug("log pipes successfully closed")
|
||||||
|
|
||||||
proginit.logger.debug("leave RevPiPlc.stop()")
|
proginit.logger.debug("leave RevPiPlc.stop()")
|
||||||
return
|
return
|
||||||
@@ -424,9 +427,8 @@ class RevPiPlc(Thread):
|
|||||||
|
|
||||||
if self._plw is not None:
|
if self._plw is not None:
|
||||||
self._plw.stop()
|
self._plw.stop()
|
||||||
proginit.logger.debug("join pipe thread")
|
|
||||||
self._plw.join()
|
self._plw.join()
|
||||||
proginit.logger.debug("joined pipe thread")
|
proginit.logger.debug("log pipes successfully closed")
|
||||||
|
|
||||||
proginit.logger.debug("leave RevPiPlc.stop()")
|
proginit.logger.debug("leave RevPiPlc.stop()")
|
||||||
|
|
||||||
@@ -443,6 +445,7 @@ class RevPiPyLoad():
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
"""Instantiiert RevPiPyLoad-Klasse."""
|
"""Instantiiert RevPiPyLoad-Klasse."""
|
||||||
proginit.configure()
|
proginit.configure()
|
||||||
|
proginit.logger.debug("enter RevPiPyLoad.__init__()")
|
||||||
|
|
||||||
# piCtory Konfiguration an bekannten Stellen prüfen
|
# piCtory Konfiguration an bekannten Stellen prüfen
|
||||||
global configrsc
|
global configrsc
|
||||||
@@ -492,8 +495,12 @@ class RevPiPyLoad():
|
|||||||
signal.signal(signal.SIGHUP, self._sigloadconfig)
|
signal.signal(signal.SIGHUP, self._sigloadconfig)
|
||||||
signal.signal(signal.SIGUSR1, self._signewlogfile)
|
signal.signal(signal.SIGUSR1, self._signewlogfile)
|
||||||
|
|
||||||
|
proginit.logger.debug("leave RevPiPyLoad.__init__()")
|
||||||
|
|
||||||
def _loadconfig(self):
|
def _loadconfig(self):
|
||||||
"""Load configuration file and setup modul."""
|
"""Load configuration file and setup modul."""
|
||||||
|
proginit.logger.debug("enter RevPiPyLoad._loadconfig()")
|
||||||
|
|
||||||
self.evt_loadconfig.clear()
|
self.evt_loadconfig.clear()
|
||||||
pauseproc = False
|
pauseproc = False
|
||||||
|
|
||||||
@@ -614,9 +621,12 @@ class RevPiPyLoad():
|
|||||||
)
|
)
|
||||||
self.start()
|
self.start()
|
||||||
|
|
||||||
|
proginit.logger.debug("leave RevPiPyLoad._loadconfig()")
|
||||||
|
|
||||||
def _plcthread(self):
|
def _plcthread(self):
|
||||||
"""Konfiguriert den PLC-Thread fuer die Ausfuehrung.
|
"""Konfiguriert den PLC-Thread fuer die Ausfuehrung.
|
||||||
@returns: PLC-Thread Object or None"""
|
@return PLC-Thread Object or None"""
|
||||||
|
proginit.logger.debug("enter RevPiPyLoad._plcthread()")
|
||||||
|
|
||||||
# Prüfen ob Programm existiert
|
# Prüfen ob Programm existiert
|
||||||
if not os.path.exists(os.path.join(self.plcworkdir, self.plcprog)):
|
if not os.path.exists(os.path.join(self.plcworkdir, self.plcprog)):
|
||||||
@@ -636,27 +646,29 @@ class RevPiPyLoad():
|
|||||||
th_plc.uid = int(self.globalconfig["DEFAULT"].get("plcuid", 65534))
|
th_plc.uid = int(self.globalconfig["DEFAULT"].get("plcuid", 65534))
|
||||||
th_plc.zeroonerror = self.zeroonerror
|
th_plc.zeroonerror = self.zeroonerror
|
||||||
th_plc.zeroonexit = self.zeroonexit
|
th_plc.zeroonexit = self.zeroonexit
|
||||||
proginit.logger.debug("created PLC watcher")
|
|
||||||
|
proginit.logger.debug("leave RevPiPyLoad._plcthread()")
|
||||||
return th_plc
|
return th_plc
|
||||||
|
|
||||||
def _sigexit(self, signum, frame):
|
def _sigexit(self, signum, frame):
|
||||||
"""Signal handler to clean and exit program."""
|
"""Signal handler to clean and exit program."""
|
||||||
proginit.logger.debug("got exit signal")
|
proginit.logger.debug("enter RevPiPyLoad._sigexit()")
|
||||||
self.stop()
|
|
||||||
|
|
||||||
# Programm aufräumen
|
# Programm stoppen und aufräumen
|
||||||
|
self.stop()
|
||||||
proginit.cleanup()
|
proginit.cleanup()
|
||||||
|
|
||||||
proginit.logger.debug("end revpipyload program")
|
proginit.logger.debug("leave RevPiPyLoad._sigexit()")
|
||||||
|
|
||||||
def _sigloadconfig(self, signum, frame):
|
def _sigloadconfig(self, signum, frame):
|
||||||
"""Signal handler to load configuration."""
|
"""Signal handler to load configuration."""
|
||||||
proginit.logger.debug("got reload config signal")
|
proginit.logger.debug("enter RevPiPyLoad._sigloadconfig()")
|
||||||
self.evt_loadconfig.set()
|
self.evt_loadconfig.set()
|
||||||
|
proginit.logger.debug("leave RevPiPyLoad._sigloadconfig()")
|
||||||
|
|
||||||
def _signewlogfile(self, signum, frame):
|
def _signewlogfile(self, signum, frame):
|
||||||
"""Signal handler to start new logfile."""
|
"""Signal handler to start new logfile."""
|
||||||
proginit.logger.debug("got new logfile signal")
|
proginit.logger.debug("enter RevPiPyLoad._signewlogfile()")
|
||||||
|
|
||||||
# Logger neu konfigurieren
|
# Logger neu konfigurieren
|
||||||
proginit.configure()
|
proginit.configure()
|
||||||
@@ -669,14 +681,18 @@ class RevPiPyLoad():
|
|||||||
# Logreader schließen
|
# Logreader schließen
|
||||||
self.logr.closeall()
|
self.logr.closeall()
|
||||||
|
|
||||||
|
proginit.logger.debug("leave RevPiPyLoad._signewlogfile()")
|
||||||
|
|
||||||
def packapp(self, mode="tar", pictory=False):
|
def packapp(self, mode="tar", pictory=False):
|
||||||
"""Erzeugt aus dem PLC-Programm ein TAR-File.
|
"""Erzeugt aus dem PLC-Programm ein TAR-File.
|
||||||
|
|
||||||
@param mode: Packart 'tar' oder 'zip'
|
@param mode Packart 'tar' oder 'zip'
|
||||||
@param pictory: piCtory Konfiguration mit einpacken
|
@param pictory piCtory Konfiguration mit einpacken
|
||||||
@returns: Dateinamen des Archivs
|
@return Dateinamen des Archivs
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
proginit.logger.debug("enter RevPiPyLoad.packapp()")
|
||||||
|
|
||||||
tup_file = mkstemp(suffix="_packed", prefix="plc_")
|
tup_file = mkstemp(suffix="_packed", prefix="plc_")
|
||||||
filename = tup_file[1]
|
filename = tup_file[1]
|
||||||
|
|
||||||
@@ -713,10 +729,13 @@ class RevPiPyLoad():
|
|||||||
finally:
|
finally:
|
||||||
fh_pack.close()
|
fh_pack.close()
|
||||||
|
|
||||||
|
proginit.logger.debug("leave RevPiPyLoad.packapp()")
|
||||||
return filename
|
return filename
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
"""Start plcload and PLC python program."""
|
"""Start plcload and PLC python program."""
|
||||||
|
proginit.logger.debug("enter RevPiPyLoad.start()")
|
||||||
|
|
||||||
proginit.logger.info("starting revpipyload")
|
proginit.logger.info("starting revpipyload")
|
||||||
self._exit = False
|
self._exit = False
|
||||||
|
|
||||||
@@ -738,8 +757,12 @@ class RevPiPyLoad():
|
|||||||
proginit.logger.info("exit python plc program to reload config")
|
proginit.logger.info("exit python plc program to reload config")
|
||||||
self._loadconfig()
|
self._loadconfig()
|
||||||
|
|
||||||
|
proginit.logger.debug("leave RevPiPyLoad.start()")
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
"""Stop PLC python program and plcload."""
|
"""Stop PLC python program and plcload."""
|
||||||
|
proginit.logger.debug("enter RevPiPyLoad.stop()")
|
||||||
|
|
||||||
proginit.logger.info("stopping revpipyload")
|
proginit.logger.info("stopping revpipyload")
|
||||||
self._exit = True
|
self._exit = True
|
||||||
|
|
||||||
@@ -747,6 +770,7 @@ class RevPiPyLoad():
|
|||||||
proginit.logger.debug("stopping revpiplc-thread")
|
proginit.logger.debug("stopping revpiplc-thread")
|
||||||
self.plc.stop()
|
self.plc.stop()
|
||||||
self.plc.join()
|
self.plc.join()
|
||||||
|
proginit.logger.debug("revpiplc-thread successfully closed")
|
||||||
|
|
||||||
if self.xmlrpc >= 1:
|
if self.xmlrpc >= 1:
|
||||||
proginit.logger.info("shutting down xmlrpc-server")
|
proginit.logger.info("shutting down xmlrpc-server")
|
||||||
@@ -754,9 +778,11 @@ class RevPiPyLoad():
|
|||||||
self.tpe.shutdown()
|
self.tpe.shutdown()
|
||||||
self.xsrv.server_close()
|
self.xsrv.server_close()
|
||||||
|
|
||||||
|
proginit.logger.debug("leave RevPiPyLoad.stop()")
|
||||||
|
|
||||||
def xml_getconfig(self):
|
def xml_getconfig(self):
|
||||||
"""Uebertraegt die RevPiPyLoad Konfiguration.
|
"""Uebertraegt die RevPiPyLoad Konfiguration.
|
||||||
@returns: dict() der Konfiguration"""
|
@return dict() der Konfiguration"""
|
||||||
proginit.logger.debug("xmlrpc call getconfig")
|
proginit.logger.debug("xmlrpc call getconfig")
|
||||||
dc = {}
|
dc = {}
|
||||||
dc["autoreload"] = self.autoreload
|
dc["autoreload"] = self.autoreload
|
||||||
@@ -775,7 +801,7 @@ class RevPiPyLoad():
|
|||||||
|
|
||||||
def xml_getfilelist(self):
|
def xml_getfilelist(self):
|
||||||
"""Uebertraegt die Dateiliste vom plcworkdir.
|
"""Uebertraegt die Dateiliste vom plcworkdir.
|
||||||
@returns: list() mit Dateinamen"""
|
@return list() mit Dateinamen"""
|
||||||
proginit.logger.debug("xmlrpc call getfilelist")
|
proginit.logger.debug("xmlrpc call getfilelist")
|
||||||
lst_file = []
|
lst_file = []
|
||||||
wd = os.walk("./")
|
wd = os.walk("./")
|
||||||
@@ -786,7 +812,7 @@ class RevPiPyLoad():
|
|||||||
|
|
||||||
def xml_getpictoryrsc(self):
|
def xml_getpictoryrsc(self):
|
||||||
"""Gibt die config.rsc Datei von piCotry zurueck.
|
"""Gibt die config.rsc Datei von piCotry zurueck.
|
||||||
@returns: xmlrpc.client.Binary()"""
|
@return xmlrpc.client.Binary()"""
|
||||||
proginit.logger.debug("xmlrpc call getpictoryrsc")
|
proginit.logger.debug("xmlrpc call getpictoryrsc")
|
||||||
with open(configrsc, "rb") as fh:
|
with open(configrsc, "rb") as fh:
|
||||||
buff = fh.read()
|
buff = fh.read()
|
||||||
@@ -794,7 +820,7 @@ class RevPiPyLoad():
|
|||||||
|
|
||||||
def xml_getprocimg(self):
|
def xml_getprocimg(self):
|
||||||
"""Gibt die Rohdaten aus piControl0 zurueck.
|
"""Gibt die Rohdaten aus piControl0 zurueck.
|
||||||
@returns: xmlrpc.client.Binary()"""
|
@return xmlrpc.client.Binary()"""
|
||||||
proginit.logger.debug("xmlrpc call getprocimg")
|
proginit.logger.debug("xmlrpc call getprocimg")
|
||||||
with open(procimg, "rb") as fh:
|
with open(procimg, "rb") as fh:
|
||||||
buff = fh.read()
|
buff = fh.read()
|
||||||
@@ -803,9 +829,9 @@ class RevPiPyLoad():
|
|||||||
def xml_plcdownload(self, mode="tar", pictory=False):
|
def xml_plcdownload(self, mode="tar", pictory=False):
|
||||||
"""Uebertraegt ein Archiv vom plcworkdir.
|
"""Uebertraegt ein Archiv vom plcworkdir.
|
||||||
|
|
||||||
@param mode: Archivart 'tar' 'zip'
|
@param mode Archivart 'tar' 'zip'
|
||||||
@param pictory: piCtory Konfiguraiton mit einpacken
|
@param pictory piCtory Konfiguraiton mit einpacken
|
||||||
@returns: Binary() mit Archivdatei
|
@return Binary() mit Archivdatei
|
||||||
|
|
||||||
"""
|
"""
|
||||||
proginit.logger.debug("xmlrpc call plcdownload")
|
proginit.logger.debug("xmlrpc call plcdownload")
|
||||||
@@ -824,7 +850,7 @@ class RevPiPyLoad():
|
|||||||
def xml_plcexitcode(self):
|
def xml_plcexitcode(self):
|
||||||
"""Gibt den aktuellen exitcode vom PLC Programm zurueck.
|
"""Gibt den aktuellen exitcode vom PLC Programm zurueck.
|
||||||
|
|
||||||
@returns: int() exitcode oder:
|
@return int() exitcode oder:
|
||||||
-1 laeuft noch
|
-1 laeuft noch
|
||||||
-2 Datei nicht gefunden
|
-2 Datei nicht gefunden
|
||||||
-3 Lief nie
|
-3 Lief nie
|
||||||
@@ -840,14 +866,14 @@ class RevPiPyLoad():
|
|||||||
|
|
||||||
def xml_plcrunning(self):
|
def xml_plcrunning(self):
|
||||||
"""Prueft ob das PLC Programm noch lauft.
|
"""Prueft ob das PLC Programm noch lauft.
|
||||||
@returns: True, wenn das PLC Programm noch lauft"""
|
@return True, wenn das PLC Programm noch lauft"""
|
||||||
proginit.logger.debug("xmlrpc call plcrunning")
|
proginit.logger.debug("xmlrpc call plcrunning")
|
||||||
return False if self.plc is None else self.plc.is_alive()
|
return False if self.plc is None else self.plc.is_alive()
|
||||||
|
|
||||||
def xml_plcstart(self):
|
def xml_plcstart(self):
|
||||||
"""Startet das PLC Programm.
|
"""Startet das PLC Programm.
|
||||||
|
|
||||||
@returns: int() Status:
|
@return int() Status:
|
||||||
-1 Programm lauft noch
|
-1 Programm lauft noch
|
||||||
-2 Datei nicht gefunden
|
-2 Datei nicht gefunden
|
||||||
|
|
||||||
@@ -866,7 +892,7 @@ class RevPiPyLoad():
|
|||||||
def xml_plcstop(self):
|
def xml_plcstop(self):
|
||||||
"""Stoppt das PLC Programm.
|
"""Stoppt das PLC Programm.
|
||||||
|
|
||||||
@returns: int() Exitcode vom PLC Programm
|
@return int() Exitcode vom PLC Programm
|
||||||
-1 PLC Programm lief nicht
|
-1 PLC Programm lief nicht
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@@ -874,6 +900,7 @@ class RevPiPyLoad():
|
|||||||
if self.plc is not None and self.plc.is_alive():
|
if self.plc is not None and self.plc.is_alive():
|
||||||
self.plc.stop()
|
self.plc.stop()
|
||||||
self.plc.join()
|
self.plc.join()
|
||||||
|
proginit.logger.debug("revpiplc-thread successfully closed")
|
||||||
return self.plc.exitcode
|
return self.plc.exitcode
|
||||||
else:
|
else:
|
||||||
return -1
|
return -1
|
||||||
@@ -881,9 +908,9 @@ class RevPiPyLoad():
|
|||||||
def xml_plcupload(self, filedata, filename):
|
def xml_plcupload(self, filedata, filename):
|
||||||
"""Empfaengt Dateien fuer das PLC Programm.
|
"""Empfaengt Dateien fuer das PLC Programm.
|
||||||
|
|
||||||
@param filedata: GZIP Binary data der datei
|
@param filedata GZIP Binary data der datei
|
||||||
@param filename: Name inkl. Unterverzeichnis der Datei
|
@param filename Name inkl. Unterverzeichnis der Datei
|
||||||
@returns: Ture, wenn Datei erfolgreich gespeichert wurde
|
@return Ture, wenn Datei erfolgreich gespeichert wurde
|
||||||
|
|
||||||
"""
|
"""
|
||||||
proginit.logger.debug("xmlrpc call plcupload")
|
proginit.logger.debug("xmlrpc call plcupload")
|
||||||
@@ -913,7 +940,7 @@ class RevPiPyLoad():
|
|||||||
|
|
||||||
def xml_plcuploadclean(self):
|
def xml_plcuploadclean(self):
|
||||||
"""Loescht das gesamte plcworkdir Verzeichnis.
|
"""Loescht das gesamte plcworkdir Verzeichnis.
|
||||||
@returns: True, wenn erfolgreich"""
|
@return True, wenn erfolgreich"""
|
||||||
proginit.logger.debug("xmlrpc call plcuploadclean")
|
proginit.logger.debug("xmlrpc call plcuploadclean")
|
||||||
try:
|
try:
|
||||||
rmtree(".", ignore_errors=True)
|
rmtree(".", ignore_errors=True)
|
||||||
@@ -928,7 +955,7 @@ class RevPiPyLoad():
|
|||||||
|
|
||||||
def xml_setconfig(self, dc, loadnow=False):
|
def xml_setconfig(self, dc, loadnow=False):
|
||||||
"""Empfaengt die RevPiPyLoad Konfiguration.
|
"""Empfaengt die RevPiPyLoad Konfiguration.
|
||||||
@returns: True, wenn erfolgreich angewendet"""
|
@return True, wenn erfolgreich angewendet"""
|
||||||
proginit.logger.debug("xmlrpc call setconfig")
|
proginit.logger.debug("xmlrpc call setconfig")
|
||||||
keys = {
|
keys = {
|
||||||
"autoreload": "[01]",
|
"autoreload": "[01]",
|
||||||
@@ -971,9 +998,9 @@ class RevPiPyLoad():
|
|||||||
def xml_setpictoryrsc(self, filebytes, reset=False):
|
def xml_setpictoryrsc(self, filebytes, reset=False):
|
||||||
"""Schreibt die config.rsc Datei von piCotry.
|
"""Schreibt die config.rsc Datei von piCotry.
|
||||||
|
|
||||||
@param filebytes: xmlrpc.client.Binary()-Objekt
|
@param filebytes xmlrpc.client.Binary()-Objekt
|
||||||
@param reset: Reset piControl Device
|
@param reset Reset piControl Device
|
||||||
@returns: Statuscode:
|
@return Statuscode:
|
||||||
0 Alles erfolgreich
|
0 Alles erfolgreich
|
||||||
-1 Kann JSON-Datei nicht laden
|
-1 Kann JSON-Datei nicht laden
|
||||||
-2 piCtory Elemente in JSON-Datei nicht gefunden
|
-2 piCtory Elemente in JSON-Datei nicht gefunden
|
||||||
@@ -1026,8 +1053,8 @@ class RevPiPyLoad():
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
def xml_psstart(self):
|
def xml_psstart(self):
|
||||||
"""Starten den Prozessabbildserver.
|
"""Startet den Prozessabbildserver.
|
||||||
@returns: True, wenn start erfolgreich"""
|
@return True, wenn start erfolgreich"""
|
||||||
if self.xml_ps is not None:
|
if self.xml_ps is not None:
|
||||||
self.xml_ps.start()
|
self.xml_ps.start()
|
||||||
return True
|
return True
|
||||||
@@ -1036,7 +1063,7 @@ class RevPiPyLoad():
|
|||||||
|
|
||||||
def xml_psstop(self):
|
def xml_psstop(self):
|
||||||
"""Stoppt den Prozessabbildserver.
|
"""Stoppt den Prozessabbildserver.
|
||||||
@returns: True, wenn stop erfolgreich"""
|
@return True, wenn stop erfolgreich"""
|
||||||
if self.xml_ps is not None:
|
if self.xml_ps is not None:
|
||||||
self.xml_ps.stop()
|
self.xml_ps.stop()
|
||||||
return True
|
return True
|
||||||
|
|||||||
Reference in New Issue
Block a user