mirror of
https://github.com/naruxde/revpimodio2.git
synced 2025-11-08 13:53:53 +01:00
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:
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user