diff --git a/doc/revpimodio2.__init__.html b/doc/revpimodio2.__init__.html
index 2bb8f2b..6441740 100644
--- a/doc/revpimodio2.__init__.html
+++ b/doc/revpimodio2.__init__.html
@@ -33,11 +33,32 @@ Classes
Functions
+| acheck |
+Check type of given arguments. |
+
| consttostr |
Gibt fuer Konstanten zurueck. |
+
+acheck
+acheck(check_type, **kwargs)
+
+Check type of given arguments.
+
+ Use the argument name as keyword and the argument itself as value.
+
+- check_type
+-
+Type to check
+
- kwargs
+-
+Arguments to check
+
+
+
+
consttostr
consttostr(value)
diff --git a/doc/revpimodio2.modio.html b/doc/revpimodio2.modio.html
index 2b6dead..fcca538 100644
--- a/doc/revpimodio2.modio.html
+++ b/doc/revpimodio2.modio.html
@@ -180,6 +180,9 @@ Abweichender Pfad zur piCtory Konfigurationsdatei
simulator
Laedt das Modul als Simulator und vertauscht IOs
+debug
+
+Gibt bei allen Fehlern komplette Meldungen aus
@@ -592,7 +595,7 @@ Static Methods
RevPiModIODriver (Constructor)
-RevPiModIODriver(virtdev, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None)
+RevPiModIODriver(virtdev, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, debug=False)
Instantiiert die Grundfunktionen.
@@ -652,7 +655,7 @@ Static Methods
RevPiModIOSelected (Constructor)
-RevPiModIOSelected(deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False)
+RevPiModIOSelected(deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False, debug=False)
Instantiiert nur fuer angegebene Devices die Grundfunktionen.
diff --git a/doc/revpimodio2.netio.html b/doc/revpimodio2.netio.html
index 9a11e8f..eb4a16a 100644
--- a/doc/revpimodio2.netio.html
+++ b/doc/revpimodio2.netio.html
@@ -423,7 +423,7 @@ Static Methods
RevPiNetIO (Constructor)
-RevPiNetIO(address, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False)
+RevPiNetIO(address, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=False)
Instantiiert die Grundfunktionen.
@@ -442,6 +442,9 @@ Aktuell gesetzte Outputs vom Prozessabbild einlesen
- simulator
-
Laedt das Modul als Simulator und vertauscht IOs
+
- debug
+-
+Gibt bei allen Fehlern komplette Meldungen aus
@@ -533,7 +536,7 @@ Static Methods
RevPiNetIODriver (Constructor)
-RevPiNetIODriver(address, virtdev, autorefresh=False, monitoring=False, syncoutputs=True)
+RevPiNetIODriver(address, virtdev, autorefresh=False, monitoring=False, syncoutputs=True, debug=False)
Instantiiert die Grundfunktionen.
@@ -596,7 +599,7 @@ Static Methods
RevPiNetIOSelected (Constructor)
-RevPiNetIOSelected(address, deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False)
+RevPiNetIOSelected(address, deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=False)
Instantiiert nur fuer angegebene Devices die Grundfunktionen.
diff --git a/eric-revpimodio2.api b/eric-revpimodio2.api
index 346f981..98bbf09 100644
--- a/eric-revpimodio2.api
+++ b/eric-revpimodio2.api
@@ -7,6 +7,7 @@ revpimodio2.OFF?7
revpimodio2.OUT?7
revpimodio2.RED?7
revpimodio2.RISING?7
+revpimodio2.acheck?4(check_type, **kwargs)
revpimodio2.app.App?1(app)
revpimodio2.consttostr?4(value)
revpimodio2.device.Connect.A3?7
@@ -173,8 +174,8 @@ 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)
-revpimodio2.modio.RevPiModIODriver?1(virtdev, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None)
-revpimodio2.modio.RevPiModIOSelected?1(deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False)
+revpimodio2.modio.RevPiModIODriver?1(virtdev, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, debug=False)
+revpimodio2.modio.RevPiModIOSelected?1(deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False, debug=False)
revpimodio2.netio.NetFH._connect?5()
revpimodio2.netio.NetFH._direct_send?5(send_bytes, recv_count)
revpimodio2.netio.NetFH.clear_dirtybytes?4(position=None)
@@ -201,9 +202,9 @@ revpimodio2.netio.RevPiNetIO.disconnect?4()
revpimodio2.netio.RevPiNetIO.get_jconfigrsc?4()
revpimodio2.netio.RevPiNetIO.net_cleardefaultvalues?4(device=None)
revpimodio2.netio.RevPiNetIO.net_setdefaultvalues?4(device=None)
-revpimodio2.netio.RevPiNetIO?1(address, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False)
-revpimodio2.netio.RevPiNetIODriver?1(address, virtdev, autorefresh=False, monitoring=False, syncoutputs=True)
-revpimodio2.netio.RevPiNetIOSelected?1(address, deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False)
+revpimodio2.netio.RevPiNetIO?1(address, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=False)
+revpimodio2.netio.RevPiNetIODriver?1(address, virtdev, autorefresh=False, monitoring=False, syncoutputs=True, debug=False)
+revpimodio2.netio.RevPiNetIOSelected?1(address, deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=False)
revpimodio2.netio._sysdeldirty?8
revpimodio2.netio._sysexit?8
revpimodio2.netio._sysflush?8
diff --git a/revpimodio2/__init__.py b/revpimodio2/__init__.py
index 946bf38..8feb06f 100644
--- a/revpimodio2/__init__.py
+++ b/revpimodio2/__init__.py
@@ -38,6 +38,28 @@ MEM = 302
warnings.simplefilter(action="always")
+def acheck(check_type, **kwargs):
+ """Check type of given arguments.
+
+ Use the argument name as keyword and the argument itself as value.
+
+ @param check_type Type to check
+ @param kwargs Arguments to check
+
+ """
+ for var_name in kwargs:
+ none_okay = var_name.endswith("_noneok")
+
+ if not (isinstance(kwargs[var_name], check_type) or
+ none_okay and kwargs[var_name] is None):
+
+ msg = "Argument '{0}' must be {1}{2}".format(
+ var_name.rstrip("_noneok"), str(check_type),
+ " or " if none_okay else ""
+ )
+ raise TypeError(msg)
+
+
def consttostr(value):
"""Gibt fuer Konstanten zurueck.
diff --git a/revpimodio2/helper.py b/revpimodio2/helper.py
index e6fd9e1..37af3cb 100644
--- a/revpimodio2/helper.py
+++ b/revpimodio2/helper.py
@@ -446,7 +446,7 @@ class ProcimgWriter(Thread):
RuntimeWarning
)
if self._modio._debug and e is not None:
- warnings.warn(str(e))
+ warnings.warn(str(e), RuntimeWarning)
def get_maxioerrors(self):
"""Gibt die Anzahl der maximal erlaubten Fehler zurueck.
diff --git a/revpimodio2/modio.py b/revpimodio2/modio.py
index 023e5a2..55f589a 100644
--- a/revpimodio2/modio.py
+++ b/revpimodio2/modio.py
@@ -9,6 +9,7 @@ from json import load as jload
from multiprocessing import cpu_count
from os import access, F_OK, R_OK
from queue import Empty
+from revpimodio2 import acheck
from signal import signal, SIG_DFL, SIGINT, SIGTERM
from threading import Thread, Event, Lock
from timeit import default_timer
@@ -45,8 +46,18 @@ 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
"""
+ # Parameterprüfung
+ acheck(
+ bool, autorefresh=autorefresh, monitoring=monitoring,
+ syncoutputs=syncoutputs, simulator=simulator, debug=debug
+ )
+ acheck(
+ str, procimg_noneok=procimg, configrsc_noneok=configrsc
+ )
+
self._autorefresh = autorefresh
self._configrsc = configrsc
self._monitoring = monitoring
@@ -336,7 +347,7 @@ class RevPiModIO(object):
RuntimeWarning
)
if self._debug and e is not None:
- warnings.warn(str(e))
+ warnings.warn(str(e), RuntimeWarning)
def _set_cycletime(self, milliseconds):
"""Setzt Aktualisierungsrate der Prozessabbild-Synchronisierung.
@@ -819,7 +830,7 @@ class RevPiModIO(object):
)
mylist = [dev]
- e = None
+ global_ex = None
workokay = True
for dev in mylist:
if not dev._selfupdate:
@@ -831,7 +842,7 @@ class RevPiModIO(object):
self._myfh.seek(dev._slc_outoff.start)
self._myfh.write(dev._ba_devdata[dev._slc_out])
except IOError as e:
- e = e
+ global_ex = e
workokay = False
finally:
self._myfh_lck.release()
@@ -842,11 +853,11 @@ class RevPiModIO(object):
try:
self._myfh.flush()
except IOError as e:
- e = e
+ global_ex = e
workokay = False
if not workokay:
- self._gotioerror("writeprocimg", e)
+ self._gotioerror("writeprocimg", global_ex)
return workokay
@@ -875,7 +886,8 @@ class RevPiModIOSelected(RevPiModIO):
def __init__(
self, deviceselection, autorefresh=False, monitoring=False,
- syncoutputs=True, procimg=None, configrsc=None, simulator=False):
+ syncoutputs=True, procimg=None, configrsc=None,
+ simulator=False, debug=False):
"""Instantiiert nur fuer angegebene Devices die Grundfunktionen.
Der Parameter deviceselection kann eine einzelne
@@ -887,7 +899,8 @@ class RevPiModIOSelected(RevPiModIO):
"""
super().__init__(
- autorefresh, monitoring, syncoutputs, procimg, configrsc, simulator
+ autorefresh, monitoring, syncoutputs, procimg, configrsc,
+ simulator, debug
)
# Device liste erstellen
@@ -941,7 +954,7 @@ class RevPiModIODriver(RevPiModIOSelected):
def __init__(
self, virtdev, autorefresh=False, monitoring=False,
- syncoutputs=True, procimg=None, configrsc=None):
+ syncoutputs=True, procimg=None, configrsc=None, debug=False):
"""Instantiiert die Grundfunktionen.
Parameter 'monitoring' und 'simulator' stehen hier nicht zur
@@ -953,7 +966,8 @@ class RevPiModIODriver(RevPiModIOSelected):
"""
# Parent mit monitoring=False und simulator=True laden
super().__init__(
- virtdev, autorefresh, False, syncoutputs, procimg, configrsc, True
+ virtdev, autorefresh, False, syncoutputs, procimg, configrsc,
+ True, debug
)
diff --git a/revpimodio2/netio.py b/revpimodio2/netio.py
index 04cdd2b..7ac2dc2 100644
--- a/revpimodio2/netio.py
+++ b/revpimodio2/netio.py
@@ -489,7 +489,7 @@ class RevPiNetIO(_RevPiModIO):
def __init__(
self, address, autorefresh=False, monitoring=False,
- syncoutputs=True, simulator=False):
+ syncoutputs=True, simulator=False, debug=False):
"""Instantiiert die Grundfunktionen.
@param address: IP-Adresse / (IP, Port)
@@ -497,6 +497,7 @@ class RevPiNetIO(_RevPiModIO):
@param monitoring In- und Outputs werden gelesen, niemals geschrieben
@param syncoutputs Aktuell gesetzte Outputs vom Prozessabbild einlesen
@param simulator Laedt das Modul als Simulator und vertauscht IOs
+ @param debug Gibt bei allen Fehlern komplette Meldungen aus
"""
check_ip = compile(
@@ -544,7 +545,8 @@ class RevPiNetIO(_RevPiModIO):
syncoutputs,
"{0}:{1}".format(*self._address),
None,
- simulator
+ simulator,
+ debug
)
# Netzwerkfilehandler anlegen
@@ -655,7 +657,7 @@ class RevPiNetIOSelected(RevPiNetIO):
def __init__(
self, address, deviceselection, autorefresh=False,
- monitoring=False, syncoutputs=True, simulator=False):
+ monitoring=False, syncoutputs=True, simulator=False, debug=False):
"""Instantiiert nur fuer angegebene Devices die Grundfunktionen.
Der Parameter deviceselection kann eine einzelne
@@ -668,7 +670,7 @@ class RevPiNetIOSelected(RevPiNetIO):
"""
super().__init__(
- address, autorefresh, monitoring, syncoutputs, simulator
+ address, autorefresh, monitoring, syncoutputs, simulator, debug
)
# Device liste erstellen
@@ -722,7 +724,7 @@ class RevPiNetIODriver(RevPiNetIOSelected):
def __init__(
self, address, virtdev, autorefresh=False, monitoring=False,
- syncoutputs=True):
+ syncoutputs=True, debug=False):
"""Instantiiert die Grundfunktionen.
Parameter 'monitoring' und 'simulator' stehen hier nicht zur
@@ -735,5 +737,5 @@ class RevPiNetIODriver(RevPiNetIOSelected):
"""
# Parent mit monitoring=False und simulator=True laden
super().__init__(
- address, virtdev, autorefresh, False, syncoutputs, True
+ address, virtdev, autorefresh, False, syncoutputs, True, debug
)