Ausgabe der Warnungen optimiert

no_warn parameter aus mainloop entfernt (jetzt über debug einstellbar)
Kein Warnungsspam mehr - debug ist True als Vorbelegung
This commit is contained in:
2019-08-31 16:40:36 +02:00
parent fe023a6f5c
commit 485aad020f
6 changed files with 68 additions and 41 deletions

View File

@@ -179,7 +179,7 @@ Static Methods</h3>
<a NAME="RevPiModIO.__init__" ID="RevPiModIO.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO (Constructor)</h3>
<b>RevPiModIO</b>(<i>autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False, debug=False, replace_io_file=None, direct_output=False</i>)
<b>RevPiModIO</b>(<i>autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False, debug=True, replace_io_file=None, direct_output=False</i>)
<p>
Instantiiert die Grundfunktionen.
</p><dl>
@@ -203,7 +203,7 @@ Abweichender Pfad zur piCtory Konfigurationsdatei
Laedt das Modul als Simulator und vertauscht IOs
</dd><dt><i>debug</i></dt>
<dd>
Gibt bei allen Fehlern komplette Meldungen aus
Gibt alle Warnungen inkl. Zyklusprobleme aus
</dd><dt><i>replace_io_file</i></dt>
<dd>
Replace IO Konfiguration aus Datei laden
@@ -388,7 +388,7 @@ True, wenn als Simulator gestartet
</dl><a NAME="RevPiModIO._gotioerror" ID="RevPiModIO._gotioerror"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO._gotioerror</h3>
<b>_gotioerror</b>(<i>action, e=None</i>)
<b>_gotioerror</b>(<i>action, e=None, show_warn=True</i>)
<p>
IOError Verwaltung fuer Prozessabbildzugriff.
</p><dl>
@@ -398,6 +398,9 @@ Zusatzinformationen zum loggen
</dd><dt><i>e</i></dt>
<dd>
Exception to log if debug is enabled
</dd><dt><i>show_warn</i></dt>
<dd>
Warnung anzeigen
</dd>
</dl><a NAME="RevPiModIO._set_cycletime" ID="RevPiModIO._set_cycletime"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -573,7 +576,7 @@ Funktion wird nach dem letzten Lesen der Inputs
</dl><a NAME="RevPiModIO.mainloop" ID="RevPiModIO.mainloop"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO.mainloop</h3>
<b>mainloop</b>(<i>blocking=True, no_warn=False</i>)
<b>mainloop</b>(<i>blocking=True</i>)
<p>
Startet den Mainloop mit Eventueberwachung.
</p><p>
@@ -591,10 +594,7 @@ Startet den Mainloop mit Eventueberwachung.
</p><dl>
<dt><i>blocking</i></dt>
<dd>
Wenn False, blockiert das Programm NICHT
</dd><dt><i>no_warn</i></dt>
<dd>
Keine Warnungen bei langsamen Funktionen ausgeben
Wenn False, blockiert das Programm hier NICHT
</dd>
</dl><dl>
<dt>Returns:</dt>
@@ -716,7 +716,7 @@ Static Methods</h3>
<a NAME="RevPiModIODriver.__init__" ID="RevPiModIODriver.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIODriver (Constructor)</h3>
<b>RevPiModIODriver</b>(<i>virtdev, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, debug=False, replace_io_file=None, direct_output=False</i>)
<b>RevPiModIODriver</b>(<i>virtdev, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, debug=True, replace_io_file=None, direct_output=False</i>)
<p>
Instantiiert die Grundfunktionen.
</p><p>
@@ -776,7 +776,7 @@ Static Methods</h3>
<a NAME="RevPiModIOSelected.__init__" ID="RevPiModIOSelected.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIOSelected (Constructor)</h3>
<b>RevPiModIOSelected</b>(<i>deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False, debug=False, replace_io_file=None, direct_output=False</i>)
<b>RevPiModIOSelected</b>(<i>deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False, debug=True, replace_io_file=None, direct_output=False</i>)
<p>
Instantiiert nur fuer angegebene Devices die Grundfunktionen.
</p><p>

View File

@@ -548,7 +548,7 @@ Static Methods</h3>
<a NAME="RevPiNetIO.__init__" ID="RevPiNetIO.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiNetIO (Constructor)</h3>
<b>RevPiNetIO</b>(<i>address, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=False, replace_io_file=None, direct_output=False</i>)
<b>RevPiNetIO</b>(<i>address, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=True, replace_io_file=None, direct_output=False</i>)
<p>
Instantiiert die Grundfunktionen.
</p><dl>
@@ -717,7 +717,7 @@ Static Methods</h3>
<a NAME="RevPiNetIODriver.__init__" ID="RevPiNetIODriver.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiNetIODriver (Constructor)</h3>
<b>RevPiNetIODriver</b>(<i>address, virtdev, autorefresh=False, monitoring=False, syncoutputs=True, debug=False, replace_io_file=None, direct_output=False</i>)
<b>RevPiNetIODriver</b>(<i>address, virtdev, autorefresh=False, monitoring=False, syncoutputs=True, debug=True, replace_io_file=None, direct_output=False</i>)
<p>
Instantiiert die Grundfunktionen.
</p><p>
@@ -780,7 +780,7 @@ Static Methods</h3>
<a NAME="RevPiNetIOSelected.__init__" ID="RevPiNetIOSelected.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiNetIOSelected (Constructor)</h3>
<b>RevPiNetIOSelected</b>(<i>address, deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=False, replace_io_file=None, direct_output=False</i>)
<b>RevPiNetIOSelected</b>(<i>address, deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=True, replace_io_file=None, direct_output=False</i>)
<p>
Instantiiert nur fuer angegebene Devices die Grundfunktionen.
</p><p>

View File

@@ -149,7 +149,7 @@ revpimodio2.modio.RevPiModIO._get_monitoring?5()
revpimodio2.modio.RevPiModIO._get_procimg?5()
revpimodio2.modio.RevPiModIO._get_replace_io_file?5()
revpimodio2.modio.RevPiModIO._get_simulator?5()
revpimodio2.modio.RevPiModIO._gotioerror?5(action, e=None)
revpimodio2.modio.RevPiModIO._gotioerror?5(action, e=None, show_warn=True)
revpimodio2.modio.RevPiModIO._set_cycletime?5(milliseconds)
revpimodio2.modio.RevPiModIO._set_debug?5(value)
revpimodio2.modio.RevPiModIO._set_maxioerrors?5(value)
@@ -166,7 +166,7 @@ revpimodio2.modio.RevPiModIO.get_jconfigrsc?4()
revpimodio2.modio.RevPiModIO.handlesignalend?4(cleanupfunc=None)
revpimodio2.modio.RevPiModIO.ioerrors?7
revpimodio2.modio.RevPiModIO.length?7
revpimodio2.modio.RevPiModIO.mainloop?4(blocking=True, no_warn=False)
revpimodio2.modio.RevPiModIO.mainloop?4(blocking=True)
revpimodio2.modio.RevPiModIO.maxioerrors?7
revpimodio2.modio.RevPiModIO.monitoring?7
revpimodio2.modio.RevPiModIO.procimg?7
@@ -177,9 +177,9 @@ revpimodio2.modio.RevPiModIO.setdefaultvalues?4(device=None)
revpimodio2.modio.RevPiModIO.simulator?7
revpimodio2.modio.RevPiModIO.syncoutputs?4(device=None)
revpimodio2.modio.RevPiModIO.writeprocimg?4(device=None)
revpimodio2.modio.RevPiModIO?1(autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False, debug=False, replace_io_file=None, direct_output=False)
revpimodio2.modio.RevPiModIODriver?1(virtdev, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, debug=False, replace_io_file=None, direct_output=False)
revpimodio2.modio.RevPiModIOSelected?1(deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False, debug=False, replace_io_file=None, direct_output=False)
revpimodio2.modio.RevPiModIO?1(autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False, debug=True, replace_io_file=None, direct_output=False)
revpimodio2.modio.RevPiModIODriver?1(virtdev, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, debug=True, replace_io_file=None, direct_output=False)
revpimodio2.modio.RevPiModIOSelected?1(deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False, debug=True, replace_io_file=None, direct_output=False)
revpimodio2.netio.HASH_FAIL?7
revpimodio2.netio.NetFH._connect?5()
revpimodio2.netio.NetFH._direct_send?5(send_bytes, recv_count)
@@ -218,9 +218,9 @@ revpimodio2.netio.RevPiNetIO.get_reconnecting?4()
revpimodio2.netio.RevPiNetIO.net_cleardefaultvalues?4(device=None)
revpimodio2.netio.RevPiNetIO.net_setdefaultvalues?4(device=None)
revpimodio2.netio.RevPiNetIO.reconnecting?7
revpimodio2.netio.RevPiNetIO?1(address, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=False, replace_io_file=None, direct_output=False)
revpimodio2.netio.RevPiNetIODriver?1(address, virtdev, autorefresh=False, monitoring=False, syncoutputs=True, debug=False, replace_io_file=None, direct_output=False)
revpimodio2.netio.RevPiNetIOSelected?1(address, deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=False, replace_io_file=None, direct_output=False)
revpimodio2.netio.RevPiNetIO?1(address, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=True, replace_io_file=None, direct_output=False)
revpimodio2.netio.RevPiNetIODriver?1(address, virtdev, autorefresh=False, monitoring=False, syncoutputs=True, debug=True, replace_io_file=None, direct_output=False)
revpimodio2.netio.RevPiNetIOSelected?1(address, deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=True, replace_io_file=None, direct_output=False)
revpimodio2.netio._sysdeldirty?8
revpimodio2.netio._sysexit?8
revpimodio2.netio._sysflush?8

View File

@@ -437,6 +437,8 @@ class ProcimgWriter(Thread):
fh = self._modio._create_myfh()
self._adjwait = self._refresh
mrk_warn = True
while not self._work.is_set():
ot = default_timer()
@@ -447,7 +449,7 @@ class ProcimgWriter(Thread):
"".format(int(self._refresh * 1000)),
RuntimeWarning
)
# Verzögerte Events pausieren an dieser Stelle
# Nur durch cycleloop erreichbar - keine verzögerten Events
continue
try:
@@ -482,11 +484,20 @@ class ProcimgWriter(Thread):
fh.flush()
except IOError as e:
self._modio._gotioerror("autorefresh", e)
self._modio._gotioerror("autorefresh", e, mrk_warn)
mrk_warn = False
self.lck_refresh.release()
continue
else:
if not mrk_warn:
warnings.warn(
"recover io errors on process image - total count "
"of {0} errors now".format(self._modio._ioerror),
RuntimeWarning
)
mrk_warn = True
# Alle aufwecken
self.lck_refresh.release()
self.newdata.set()

View File

@@ -41,7 +41,7 @@ class RevPiModIO(object):
def __init__(
self, autorefresh=False, monitoring=False, syncoutputs=True,
procimg=None, configrsc=None, simulator=False, debug=False,
procimg=None, configrsc=None, simulator=False, debug=True,
replace_io_file=None, direct_output=False):
"""Instantiiert die Grundfunktionen.
@@ -51,7 +51,7 @@ class RevPiModIO(object):
@param procimg Abweichender Pfad zum Prozessabbild
@param configrsc Abweichender Pfad zur piCtory Konfigurationsdatei
@param simulator Laedt das Modul als Simulator und vertauscht IOs
@param debug Gibt bei allen Fehlern komplette Meldungen aus
@param debug Gibt alle Warnungen inkl. Zyklusprobleme aus
@param replace_io_file Replace IO Konfiguration aus Datei laden
@param direct_output Write outputs immediately to process image (slow)
@@ -445,11 +445,12 @@ class RevPiModIO(object):
@return True, wenn als Simulator gestartet"""
return self._simulator
def _gotioerror(self, action, e=None):
def _gotioerror(self, action, e=None, show_warn=True):
"""IOError Verwaltung fuer Prozessabbildzugriff.
@param action Zusatzinformationen zum loggen
@param e Exception to log if debug is enabled
@param show_warn Warnung anzeigen
"""
self._ioerror += 1
@@ -459,6 +460,9 @@ class RevPiModIO(object):
"".format(self._maxioerrors)
)
if not show_warn:
return
if self._debug:
warnings.warn(
"got io error during '{0}' and count {1} errors now | {2}"
@@ -466,7 +470,10 @@ class RevPiModIO(object):
RuntimeWarning
)
else:
warnings.warn("got io error on process image", RuntimeWarning)
warnings.warn(
"got io error on process image",
RuntimeWarning
)
def _set_cycletime(self, milliseconds):
"""Setzt Aktualisierungsrate der Prozessabbild-Synchronisierung.
@@ -803,7 +810,7 @@ class RevPiModIO(object):
signal(SIGINT, self.__evt_exit)
signal(SIGTERM, self.__evt_exit)
def mainloop(self, blocking=True, no_warn=False):
def mainloop(self, blocking=True):
"""Startet den Mainloop mit Eventueberwachung.
Der aktuelle Programmthread wird hier bis Aufruf von
@@ -818,8 +825,7 @@ class RevPiModIO(object):
Events vom RevPi benoetigt werden, aber das Programm weiter ausgefuehrt
werden soll.
@param blocking Wenn False, blockiert das Programm NICHT
@param no_warn Keine Warnungen bei langsamen Funktionen ausgeben
@param blocking Wenn False, blockiert das Programm hier NICHT
@return None
"""
@@ -877,13 +883,13 @@ class RevPiModIO(object):
# ImgWriter mit Eventüberwachung aktivieren
self._imgwriter._collect_events(True)
e = None
runtime = -1 if no_warn else 0
runtime = 0
while not self._exit.is_set():
# Laufzeit der Eventqueue auf 0 setzen
if self._imgwriter._eventq.qsize() == 0:
runtime = -1 if no_warn else 0
runtime = 0
try:
tup_fire = self._imgwriter._eventq.get(timeout=1)
@@ -901,7 +907,7 @@ class RevPiModIO(object):
runtime = -1
warnings.warn(
"can not execute all event functions in one cycle - "
"rise .cycletime or optimize your event functions",
"optimize your event functions or rise .cycletime",
RuntimeWarning
)
except Empty:
@@ -1128,7 +1134,7 @@ class RevPiModIOSelected(RevPiModIO):
def __init__(
self, deviceselection, autorefresh=False, monitoring=False,
syncoutputs=True, procimg=None, configrsc=None,
simulator=False, debug=False, replace_io_file=None,
simulator=False, debug=True, replace_io_file=None,
direct_output=False):
"""Instantiiert nur fuer angegebene Devices die Grundfunktionen.
@@ -1197,7 +1203,7 @@ class RevPiModIODriver(RevPiModIOSelected):
def __init__(
self, virtdev, autorefresh=False, monitoring=False,
syncoutputs=True, procimg=None, configrsc=None, debug=False,
syncoutputs=True, procimg=None, configrsc=None, debug=True,
replace_io_file=None, direct_output=False):
"""Instantiiert die Grundfunktionen.

View File

@@ -487,14 +487,27 @@ class NetFH(Thread):
def run(self):
"""Handler fuer Synchronisierung."""
state_reconnect = False
while not self.__sockend.is_set():
# Bei Fehlermeldung neu verbinden
if self.__sockerr.is_set():
if not state_reconnect:
state_reconnect = True
warnings.warn(
"got a network error and try to reconnect",
RuntimeWarning
)
self._connect()
if self.__sockerr.is_set():
# Verhindert bei Scheitern 100% CPU last
self.__sockend.wait(self.__waitsync)
else:
state_reconnect = False
warnings.warn(
"successfully reconnected after network error",
RuntimeWarning
)
else:
# Kein Fehler aufgetreten, sync durchführen wenn socket frei
@@ -504,9 +517,6 @@ class NetFH(Thread):
self._slavesock.send(_syssync)
data = self._slavesock.recv(2)
except IOError as e:
warnings.warn(
"network error in sync of NetFH", RuntimeWarning
)
self.__sockerr.set()
else:
if data != b'\x06\x16':
@@ -661,7 +671,7 @@ class RevPiNetIO(_RevPiModIO):
def __init__(
self, address, autorefresh=False, monitoring=False,
syncoutputs=True, simulator=False, debug=False,
syncoutputs=True, simulator=False, debug=True,
replace_io_file=None, direct_output=False):
"""Instantiiert die Grundfunktionen.
@@ -885,7 +895,7 @@ class RevPiNetIOSelected(RevPiNetIO):
def __init__(
self, address, deviceselection, autorefresh=False,
monitoring=False, syncoutputs=True, simulator=False, debug=False,
monitoring=False, syncoutputs=True, simulator=False, debug=True,
replace_io_file=None, direct_output=False):
"""Instantiiert nur fuer angegebene Devices die Grundfunktionen.
@@ -955,7 +965,7 @@ class RevPiNetIODriver(RevPiNetIOSelected):
def __init__(
self, address, virtdev, autorefresh=False, monitoring=False,
syncoutputs=True, debug=False, replace_io_file=None,
syncoutputs=True, debug=True, replace_io_file=None,
direct_output=False):
"""Instantiiert die Grundfunktionen.