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