From 2e802544c978f4f5b5de8f0a0b636d6174bd401a Mon Sep 17 00:00:00 2001 From: NaruX Date: Wed, 12 Jun 2019 17:18:15 +0200 Subject: [PATCH] Import und Export der Dateien verbessert --- doc/revpimodio2.io.html | 4 ++-- doc/revpimodio2.modio.html | 37 +++++++++++++++++++++++++++++++ eric-revpimodio2.api | 2 ++ revpimodio2.e4p | 4 ++-- revpimodio2/__init__.py | 2 +- revpimodio2/io.py | 5 +++-- revpimodio2/modio.py | 45 +++++++++++++++++++++++++++++++------- setup.py | 2 +- 8 files changed, 85 insertions(+), 16 deletions(-) diff --git a/doc/revpimodio2.io.html b/doc/revpimodio2.io.html index 7398e5f..0637b6f 100644 --- a/doc/revpimodio2.io.html +++ b/doc/revpimodio2.io.html @@ -1045,8 +1045,8 @@ struct formatierung (1 Zeichen) oder 'ANZAHLs' z.B. '8s' Weitere Parameter: - bmk: Bezeichnung fuer IO - bit: Registriert IO als am angegebenen Bit im Byte - - byteorder: Byteorder fuer IO, Standardwert vom ersetzter IO - - defaultvalue: Standardwert fuer IO, Standard vom ersetzter IO + - byteorder: Byteorder fuer IO, Standardwert vom ersetzten IO + - defaultvalue: Standardwert fuer IO, Standard vom ersetzten IO

diff --git a/doc/revpimodio2.modio.html b/doc/revpimodio2.modio.html index fcca538..b7ce297 100644 --- a/doc/revpimodio2.modio.html +++ b/doc/revpimodio2.modio.html @@ -125,12 +125,18 @@ Methods

exit Beendet mainloop() und optional autorefresh. +export_replaced_ios +Exportiert ersetzte IOs dieser Instanz. + get_jconfigrsc Laedt die piCtory Konfiguration und erstellt ein . handlesignalend Signalhandler fuer Programmende verwalten. +import_replaced_ios +Importiert ersetzte IOs in diese Instanz. + mainloop Startet den Mainloop mit Eventueberwachung. @@ -411,6 +417,22 @@ Beendet mainloop() und optional autorefresh.
Entfernt auch alle Devices aus autorefresh
+ +

+RevPiModIO.export_replaced_ios

+export_replaced_ios(filename) +

+Exportiert ersetzte IOs dieser Instanz. +

+ Exportiert alle ersetzten IOs, welche mit .replace_io(...) angelegt + wurden. Die Datei kann z.B. fuer RevPiPyLoad verwndet werden um Daten + in den neuen Formaten per MQTT zu uebertragen oder mit RevPiPyControl + anzusehen. +

+
filename
+
+Dateiname fuer Exportdatei +

RevPiModIO.get_jconfigrsc

@@ -449,6 +471,21 @@ Signalhandler fuer Programmende verwalten. Funktion wird nach dem letzten Lesen der Inputs ausgefuehrt, gefolgt vom letzten Schreiben der Outputs + +

+RevPiModIO.import_replaced_ios

+import_replaced_ios(filename) +

+Importiert ersetzte IOs in diese Instanz. +

+ Importiert ersetzte IOs, welche vorher mit .export_replaced_ios(...) + in eine Datei exportiert worden sind. Diese IOs werden in dieser + Instanz wieder hergestellt. +

+
filename
+
+Dateiname der Exportdatei +

RevPiModIO.mainloop

diff --git a/eric-revpimodio2.api b/eric-revpimodio2.api index 98bbf09..b580270 100644 --- a/eric-revpimodio2.api +++ b/eric-revpimodio2.api @@ -159,8 +159,10 @@ revpimodio2.modio.RevPiModIO.configrsc?7 revpimodio2.modio.RevPiModIO.cycleloop?4(func, cycletime=50) revpimodio2.modio.RevPiModIO.cycletime?7 revpimodio2.modio.RevPiModIO.exit?4(full=True) +revpimodio2.modio.RevPiModIO.export_replaced_ios?4(filename) revpimodio2.modio.RevPiModIO.get_jconfigrsc?4() revpimodio2.modio.RevPiModIO.handlesignalend?4(cleanupfunc=None) +revpimodio2.modio.RevPiModIO.import_replaced_ios?4(filename) revpimodio2.modio.RevPiModIO.ioerrors?7 revpimodio2.modio.RevPiModIO.length?7 revpimodio2.modio.RevPiModIO.mainloop?4(blocking=True, no_warn=False) diff --git a/revpimodio2.e4p b/revpimodio2.e4p index 35a99a8..816e923 100644 --- a/revpimodio2.e4p +++ b/revpimodio2.e4p @@ -1,7 +1,7 @@ - + en_US @@ -9,7 +9,7 @@ Python3 Console Das Modul stellt alle Devices und IOs aus der piCtory Konfiguration in Python3 zur Verfügung. Es ermöglicht den direkten Zugriff auf die Werte über deren vergebenen Namen. Lese- und Schreibaktionen mit dem Prozessabbild werden von dem Modul selbst verwaltet, ohne dass sich der Programmierer um Offsets und Adressen kümmern muss. Für die Gatewaymodule wie ModbusTCP oder Profinet sind eigene 'Inputs' und 'Outputs' über einen bestimmten Adressbereich definierbar. Auf diese IOs kann mit Python3 über den Namen direkt auf die Werte zugegriffen werden. - 2.3.2 + 2.3.3 Sven Sager akira@narux.de diff --git a/revpimodio2/__init__.py b/revpimodio2/__init__.py index b435a20..26c7636 100644 --- a/revpimodio2/__init__.py +++ b/revpimodio2/__init__.py @@ -22,7 +22,7 @@ __author__ = "Sven Sager " __copyright__ = "Copyright (C) 2018 Sven Sager" __license__ = "LGPLv3" __name__ = "revpimodio2" -__version__ = "2.3.2" +__version__ = "2.3.3" # Global package values OFF = 0 diff --git a/revpimodio2/io.py b/revpimodio2/io.py index 9dc7c4a..3b0b9ca 100644 --- a/revpimodio2/io.py +++ b/revpimodio2/io.py @@ -961,8 +961,8 @@ class StructIO(IOBase): @param kwargs Weitere Parameter: - bmk: Bezeichnung fuer IO - bit: Registriert IO als am angegebenen Bit im Byte - - byteorder: Byteorder fuer IO, Standardwert vom ersetzter IO - - defaultvalue: Standardwert fuer IO, Standard vom ersetzter IO + - byteorder: Byteorder fuer IO, Standardwert vom ersetzten IO + - defaultvalue: Standardwert fuer IO, Standard vom ersetzten IO """ # Structformatierung prüfen @@ -1005,6 +1005,7 @@ class StructIO(IOBase): # [name,default,anzbits,adressbyte,export,adressid,bmk,bitaddress] valuelist = [ name, + # Darf nur bei StructIO None sein, wird nur dann berechnet kwargs.get("defaultvalue", None), bitlength, parentio._slc_address.start, diff --git a/revpimodio2/modio.py b/revpimodio2/modio.py index 418847b..306f75c 100644 --- a/revpimodio2/modio.py +++ b/revpimodio2/modio.py @@ -534,13 +534,20 @@ class RevPiModIO(object): cp = ConfigParser() for io in self.io: if isinstance(io, StructIO): + + # Required values cp.add_section(io.name) - cp[io.name]["parentio_name"] = io._parentio_name + cp[io.name]["replace"] = io._parentio_name cp[io.name]["frm"] = io.frm - cp[io.name]["bmk"] = io.bmk - cp[io.name]["bitaddress"] = str(io._bitaddress) + + # Optional values + if io._bitaddress >= 0: + cp[io.name]["bitaddress"] = str(io._bitaddress) cp[io.name]["byteorder"] = io._byteorder cp[io.name]["defaultvalue"] = str(io.defaultvalue) + if io.bmk != "": + cp[io.name]["bmk"] = io.bmk + try: with open(filename, "w") as fh: cp.write(fh) @@ -625,6 +632,7 @@ class RevPiModIO(object): @param filename Dateiname der Exportdatei""" acheck(str, filename=filename) + # Load config file cp = ConfigParser() try: with open(filename, "r") as fh: @@ -635,17 +643,38 @@ class RevPiModIO(object): "".format(filename, e) ) + # Pre-check for io in cp: if io == "DEFAULT": continue - self.io[cp[io].get("parentio_name")].replace_io( + do_replace_io = cp[io].get("replace", "") + if do_replace_io not in self.io: + raise RuntimeError( + "can not find io '{0}' to replace".format(do_replace_io) + ) + + # Replace IOs + for io in cp: + if io == "DEFAULT": + continue + + replace_io = cp[io].get("replace", "") + replace_frm = cp[io].get("frm") + + # Convert defaultvalue from config file + if replace_frm == "?": + replace_defaultvalue = cp[io].getboolean("defaultvalue") + else: + replace_defaultvalue = cp[io].getint("defaultvalue") + + self.io[replace_io].replace_io( io, - frm=cp[io].get("frm"), - bmk=cp[io].get("bmk"), - bit=cp[io].getint("bitaddress"), + frm=replace_frm, + bmk=cp[io].get("bmk", ""), + bit=cp[io].getint("bitaddress", 0), byteorder=cp[io].get("byteorder", "little"), - defaultvalue=cp[io].getint("defaultvalue") + defaultvalue=replace_defaultvalue ) def mainloop(self, blocking=True, no_warn=False): diff --git a/setup.py b/setup.py index dae3212..ed4e147 100644 --- a/setup.py +++ b/setup.py @@ -17,7 +17,7 @@ setup( license="LGPLv3", name="revpimodio2", - version="2.3.2", + version="2.3.3", packages=["revpimodio2"], python_requires="~=3.2",