Warnmeldungen überarbeitet

Warnungen erscheinen nur ein Mal, wenn debug=False ist
Filter für Warnungen werden nur für RevPiModIO verändert
This commit is contained in:
2019-08-28 09:34:08 +02:00
parent 2cf0514f64
commit 76cb1f57d1
5 changed files with 58 additions and 26 deletions

View File

@@ -122,6 +122,9 @@ Methods</h3>
<td><a style="color:#0000FF" href="#RevPiModIO._set_cycletime">_set_cycletime</a></td> <td><a style="color:#0000FF" href="#RevPiModIO._set_cycletime">_set_cycletime</a></td>
<td>Setzt Aktualisierungsrate der Prozessabbild-Synchronisierung.</td> <td>Setzt Aktualisierungsrate der Prozessabbild-Synchronisierung.</td>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO._set_debug">_set_debug</a></td>
<td>Setzt debugging Status um mehr Meldungen zu erhalten oder nicht.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO._set_maxioerrors">_set_maxioerrors</a></td> <td><a style="color:#0000FF" href="#RevPiModIO._set_maxioerrors">_set_maxioerrors</a></td>
<td>Setzt Anzahl der maximal erlaubten Fehler bei Prozessabbildzugriff.</td> <td>Setzt Anzahl der maximal erlaubten Fehler bei Prozessabbildzugriff.</td>
</tr><tr> </tr><tr>
@@ -407,6 +410,17 @@ Setzt Aktualisierungsrate der Prozessabbild-Synchronisierung.
<dd> <dd>
<class 'int'> in Millisekunden <class 'int'> in Millisekunden
</dd> </dd>
</dl><a NAME="RevPiModIO._set_debug" ID="RevPiModIO._set_debug"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO._set_debug</h3>
<b>_set_debug</b>(<i>value</i>)
<p>
Setzt debugging Status um mehr Meldungen zu erhalten oder nicht.
</p><dl>
<dt><i>value</i></dt>
<dd>
Wenn True, werden umfangreiche Medungen angezeigt
</dd>
</dl><a NAME="RevPiModIO._set_maxioerrors" ID="RevPiModIO._set_maxioerrors"></a> </dl><a NAME="RevPiModIO._set_maxioerrors" ID="RevPiModIO._set_maxioerrors"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO._set_maxioerrors</h3> RevPiModIO._set_maxioerrors</h3>

View File

@@ -157,6 +157,7 @@ revpimodio2.modio.RevPiModIO._get_replace_io_file?5()
revpimodio2.modio.RevPiModIO._get_simulator?5() revpimodio2.modio.RevPiModIO._get_simulator?5()
revpimodio2.modio.RevPiModIO._gotioerror?5(action, e=None) revpimodio2.modio.RevPiModIO._gotioerror?5(action, e=None)
revpimodio2.modio.RevPiModIO._set_cycletime?5(milliseconds) revpimodio2.modio.RevPiModIO._set_cycletime?5(milliseconds)
revpimodio2.modio.RevPiModIO._set_debug?5(value)
revpimodio2.modio.RevPiModIO._set_maxioerrors?5(value) revpimodio2.modio.RevPiModIO._set_maxioerrors?5(value)
revpimodio2.modio.RevPiModIO._simulate_ioctl?5(request, arg=b'') revpimodio2.modio.RevPiModIO._simulate_ioctl?5(request, arg=b'')
revpimodio2.modio.RevPiModIO.autorefresh_all?4() revpimodio2.modio.RevPiModIO.autorefresh_all?4()

View File

@@ -12,8 +12,6 @@ Auf alle IOs kann der Benutzer Funktionen als Events registrieren. Diese
fuehrt das Modul bei Datenaenderung aus. fuehrt das Modul bei Datenaenderung aus.
""" """
import warnings
__all__ = [ __all__ = [
"RevPiModIO", "RevPiModIOSelected", "RevPiModIODriver", "RevPiModIO", "RevPiModIOSelected", "RevPiModIODriver",
"RevPiNetIO", "RevPiNetIOSelected", "RevPiNetIODriver" "RevPiNetIO", "RevPiNetIOSelected", "RevPiNetIODriver"
@@ -35,8 +33,6 @@ INP = 300
OUT = 301 OUT = 301
MEM = 302 MEM = 302
warnings.simplefilter(action="always")
class DeviceNotFoundError(Exception): class DeviceNotFoundError(Exception):

View File

@@ -443,12 +443,17 @@ class ProcimgWriter(Thread):
self._maxioerrors self._maxioerrors
) )
) )
warnings.warn( if self._modio._debug:
"count {0} io errors on process image".format(self._ioerror), warnings.warn(
RuntimeWarning "count {0} io errors on process image | {1}"
) "".format(self._ioerror, str(e)),
if self._modio._debug and e is not None: RuntimeWarning
warnings.warn(str(e), RuntimeWarning) )
else:
warnings.warn(
"got io error on process image",
RuntimeWarning
)
def get_maxioerrors(self): def get_maxioerrors(self):
"""Gibt die Anzahl der maximal erlaubten Fehler zurueck. """Gibt die Anzahl der maximal erlaubten Fehler zurueck.
@@ -471,9 +476,8 @@ class ProcimgWriter(Thread):
# Lockobjekt holen und Fehler werfen, wenn nicht schnell genug # Lockobjekt holen und Fehler werfen, wenn nicht schnell genug
if not self.lck_refresh.acquire(timeout=self._adjwait): if not self.lck_refresh.acquire(timeout=self._adjwait):
warnings.warn( warnings.warn(
"cycle time of {0} ms exceeded on lock".format( "cycle time of {0} ms exceeded during executing function"
int(self._refresh * 1000) "".format(int(self._refresh * 1000)),
),
RuntimeWarning RuntimeWarning
) )
# Verzögerte Events pausieren an dieser Stelle # Verzögerte Events pausieren an dieser Stelle
@@ -546,9 +550,8 @@ class ProcimgWriter(Thread):
self._adjwait -= 0.001 self._adjwait -= 0.001
if self._adjwait < 0: if self._adjwait < 0:
warnings.warn( warnings.warn(
"cycle time of {0} ms exceeded".format( "cycle time of {0} ms exceeded several times - can not"
int(self._refresh * 1000) " hold cycle time!".format(int(self._refresh * 1000)),
),
RuntimeWarning RuntimeWarning
) )
self._adjwait = 0 self._adjwait = 0

View File

@@ -80,7 +80,7 @@ class RevPiModIO(object):
# Private Variablen # Private Variablen
self.__cleanupfunc = None self.__cleanupfunc = None
self._buffedwrite = False self._buffedwrite = False
self._debug = debug self._debug = False
self._exit = Event() self._exit = Event()
self._imgwriter = None self._imgwriter = None
self._ioerror = 0 self._ioerror = 0
@@ -107,6 +107,9 @@ class RevPiModIO(object):
# Event für Benutzeraktionen # Event für Benutzeraktionen
self.exitsignal = Event() self.exitsignal = Event()
# Wert über setter setzen
self.debug = debug
try: try:
self._run_on_pi = S_ISCHR(osstat(self._procimg).st_mode) self._run_on_pi = S_ISCHR(osstat(self._procimg).st_mode)
except Exception: except Exception:
@@ -234,7 +237,8 @@ class RevPiModIO(object):
else: else:
# Device-Type nicht gefunden # Device-Type nicht gefunden
warnings.warn( warnings.warn(
"device type '{0}' unknown".format(device["type"]), "device type '{0}' on position {1} unknown"
"".format(device["type"], device["position"]),
Warning Warning
) )
dev_new = None dev_new = None
@@ -457,13 +461,15 @@ class RevPiModIO(object):
"reach max io error count {0} on process image" "reach max io error count {0} on process image"
"".format(self._maxioerrors) "".format(self._maxioerrors)
) )
warnings.warn(
"got io error during {0} and count {1} errors now" if self._debug:
"".format(action, self._ioerror), warnings.warn(
RuntimeWarning "got io error during '{0}' and count {1} errors now | {2}"
) "".format(action, self._ioerror, str(e)),
if self._debug and e is not None: RuntimeWarning
warnings.warn(str(e), RuntimeWarning) )
else:
warnings.warn("got io error on process image", RuntimeWarning)
def _set_cycletime(self, milliseconds): def _set_cycletime(self, milliseconds):
"""Setzt Aktualisierungsrate der Prozessabbild-Synchronisierung. """Setzt Aktualisierungsrate der Prozessabbild-Synchronisierung.
@@ -476,6 +482,18 @@ class RevPiModIO(object):
else: else:
self._imgwriter.refresh = milliseconds self._imgwriter.refresh = milliseconds
def _set_debug(self, value):
"""Setzt debugging Status um mehr Meldungen zu erhalten oder nicht.
@param value Wenn True, werden umfangreiche Medungen angezeigt"""
if not isinstance(value, bool):
raise TypeError("value must be <class 'bool'>")
self._debug = value
if value:
warnings.filterwarnings("always", module="revpimodio2")
else:
warnings.filterwarnings("default", module="revpimodio2")
def _set_maxioerrors(self, value): def _set_maxioerrors(self, value):
"""Setzt Anzahl der maximal erlaubten Fehler bei Prozessabbildzugriff. """Setzt Anzahl der maximal erlaubten Fehler bei Prozessabbildzugriff.
@param value Anzahl erlaubte Fehler""" @param value Anzahl erlaubte Fehler"""
@@ -1087,7 +1105,7 @@ class RevPiModIO(object):
return workokay return workokay
debug = property(_get_debug) debug = property(_get_debug, _set_debug)
configrsc = property(_get_configrsc) configrsc = property(_get_configrsc)
cycletime = property(_get_cycletime, _set_cycletime) cycletime = property(_get_cycletime, _set_cycletime)
ioerrors = property(_get_ioerrors) ioerrors = property(_get_ioerrors)