mirror of
https://github.com/naruxde/revpimodio2.git
synced 2025-11-08 22:03:53 +01:00
Import und Export der Dateien verbessert
This commit is contained in:
@@ -1045,8 +1045,8 @@ struct formatierung (1 Zeichen) oder 'ANZAHLs' z.B. '8s'
|
|||||||
Weitere Parameter:
|
Weitere Parameter:
|
||||||
- bmk: Bezeichnung fuer IO
|
- bmk: Bezeichnung fuer IO
|
||||||
- bit: Registriert IO als <class 'bool'> am angegebenen Bit im Byte
|
- bit: Registriert IO als <class 'bool'> am angegebenen Bit im Byte
|
||||||
- byteorder: Byteorder fuer IO, Standardwert vom ersetzter IO
|
- byteorder: Byteorder fuer IO, Standardwert vom ersetzten IO
|
||||||
- defaultvalue: Standardwert fuer IO, Standard vom ersetzter IO
|
- defaultvalue: Standardwert fuer IO, Standard vom ersetzten IO
|
||||||
</dd>
|
</dd>
|
||||||
</dl><a NAME="StructIO._get_frm" ID="StructIO._get_frm"></a>
|
</dl><a NAME="StructIO._get_frm" ID="StructIO._get_frm"></a>
|
||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
|||||||
@@ -125,12 +125,18 @@ Methods</h3>
|
|||||||
<td><a style="color:#0000FF" href="#RevPiModIO.exit">exit</a></td>
|
<td><a style="color:#0000FF" href="#RevPiModIO.exit">exit</a></td>
|
||||||
<td>Beendet mainloop() und optional autorefresh.</td>
|
<td>Beendet mainloop() und optional autorefresh.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#RevPiModIO.export_replaced_ios">export_replaced_ios</a></td>
|
||||||
|
<td>Exportiert ersetzte IOs dieser Instanz.</td>
|
||||||
|
</tr><tr>
|
||||||
<td><a style="color:#0000FF" href="#RevPiModIO.get_jconfigrsc">get_jconfigrsc</a></td>
|
<td><a style="color:#0000FF" href="#RevPiModIO.get_jconfigrsc">get_jconfigrsc</a></td>
|
||||||
<td>Laedt die piCtory Konfiguration und erstellt ein <class 'dict'>.</td>
|
<td>Laedt die piCtory Konfiguration und erstellt ein <class 'dict'>.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<td><a style="color:#0000FF" href="#RevPiModIO.handlesignalend">handlesignalend</a></td>
|
<td><a style="color:#0000FF" href="#RevPiModIO.handlesignalend">handlesignalend</a></td>
|
||||||
<td>Signalhandler fuer Programmende verwalten.</td>
|
<td>Signalhandler fuer Programmende verwalten.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#RevPiModIO.import_replaced_ios">import_replaced_ios</a></td>
|
||||||
|
<td>Importiert ersetzte IOs in diese Instanz.</td>
|
||||||
|
</tr><tr>
|
||||||
<td><a style="color:#0000FF" href="#RevPiModIO.mainloop">mainloop</a></td>
|
<td><a style="color:#0000FF" href="#RevPiModIO.mainloop">mainloop</a></td>
|
||||||
<td>Startet den Mainloop mit Eventueberwachung.</td>
|
<td>Startet den Mainloop mit Eventueberwachung.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
@@ -411,6 +417,22 @@ Beendet mainloop() und optional autorefresh.
|
|||||||
<dd>
|
<dd>
|
||||||
Entfernt auch alle Devices aus autorefresh
|
Entfernt auch alle Devices aus autorefresh
|
||||||
</dd>
|
</dd>
|
||||||
|
</dl><a NAME="RevPiModIO.export_replaced_ios" ID="RevPiModIO.export_replaced_ios"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
RevPiModIO.export_replaced_ios</h3>
|
||||||
|
<b>export_replaced_ios</b>(<i>filename</i>)
|
||||||
|
<p>
|
||||||
|
Exportiert ersetzte IOs dieser Instanz.
|
||||||
|
</p><p>
|
||||||
|
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.
|
||||||
|
</p><dl>
|
||||||
|
<dt><i>filename</i></dt>
|
||||||
|
<dd>
|
||||||
|
Dateiname fuer Exportdatei
|
||||||
|
</dd>
|
||||||
</dl><a NAME="RevPiModIO.get_jconfigrsc" ID="RevPiModIO.get_jconfigrsc"></a>
|
</dl><a NAME="RevPiModIO.get_jconfigrsc" ID="RevPiModIO.get_jconfigrsc"></a>
|
||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
RevPiModIO.get_jconfigrsc</h3>
|
RevPiModIO.get_jconfigrsc</h3>
|
||||||
@@ -449,6 +471,21 @@ Signalhandler fuer Programmende verwalten.
|
|||||||
Funktion wird nach dem letzten Lesen der Inputs
|
Funktion wird nach dem letzten Lesen der Inputs
|
||||||
ausgefuehrt, gefolgt vom letzten Schreiben der Outputs
|
ausgefuehrt, gefolgt vom letzten Schreiben der Outputs
|
||||||
</dd>
|
</dd>
|
||||||
|
</dl><a NAME="RevPiModIO.import_replaced_ios" ID="RevPiModIO.import_replaced_ios"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
RevPiModIO.import_replaced_ios</h3>
|
||||||
|
<b>import_replaced_ios</b>(<i>filename</i>)
|
||||||
|
<p>
|
||||||
|
Importiert ersetzte IOs in diese Instanz.
|
||||||
|
</p><p>
|
||||||
|
Importiert ersetzte IOs, welche vorher mit .export_replaced_ios(...)
|
||||||
|
in eine Datei exportiert worden sind. Diese IOs werden in dieser
|
||||||
|
Instanz wieder hergestellt.
|
||||||
|
</p><dl>
|
||||||
|
<dt><i>filename</i></dt>
|
||||||
|
<dd>
|
||||||
|
Dateiname der Exportdatei
|
||||||
|
</dd>
|
||||||
</dl><a NAME="RevPiModIO.mainloop" ID="RevPiModIO.mainloop"></a>
|
</dl><a NAME="RevPiModIO.mainloop" ID="RevPiModIO.mainloop"></a>
|
||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
RevPiModIO.mainloop</h3>
|
RevPiModIO.mainloop</h3>
|
||||||
|
|||||||
@@ -159,8 +159,10 @@ revpimodio2.modio.RevPiModIO.configrsc?7
|
|||||||
revpimodio2.modio.RevPiModIO.cycleloop?4(func, cycletime=50)
|
revpimodio2.modio.RevPiModIO.cycleloop?4(func, cycletime=50)
|
||||||
revpimodio2.modio.RevPiModIO.cycletime?7
|
revpimodio2.modio.RevPiModIO.cycletime?7
|
||||||
revpimodio2.modio.RevPiModIO.exit?4(full=True)
|
revpimodio2.modio.RevPiModIO.exit?4(full=True)
|
||||||
|
revpimodio2.modio.RevPiModIO.export_replaced_ios?4(filename)
|
||||||
revpimodio2.modio.RevPiModIO.get_jconfigrsc?4()
|
revpimodio2.modio.RevPiModIO.get_jconfigrsc?4()
|
||||||
revpimodio2.modio.RevPiModIO.handlesignalend?4(cleanupfunc=None)
|
revpimodio2.modio.RevPiModIO.handlesignalend?4(cleanupfunc=None)
|
||||||
|
revpimodio2.modio.RevPiModIO.import_replaced_ios?4(filename)
|
||||||
revpimodio2.modio.RevPiModIO.ioerrors?7
|
revpimodio2.modio.RevPiModIO.ioerrors?7
|
||||||
revpimodio2.modio.RevPiModIO.length?7
|
revpimodio2.modio.RevPiModIO.length?7
|
||||||
revpimodio2.modio.RevPiModIO.mainloop?4(blocking=True, no_warn=False)
|
revpimodio2.modio.RevPiModIO.mainloop?4(blocking=True, no_warn=False)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
|
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
|
||||||
<!-- eric project file for project revpimodio2 -->
|
<!-- eric project file for project revpimodio2 -->
|
||||||
<!-- Saved: 2019-05-01, 08:11:34 -->
|
<!-- Saved: 2019-06-11, 09:25:45 -->
|
||||||
<!-- Copyright (C) 2019 Sven Sager, akira@narux.de -->
|
<!-- Copyright (C) 2019 Sven Sager, akira@narux.de -->
|
||||||
<Project version="5.1">
|
<Project version="5.1">
|
||||||
<Language>en_US</Language>
|
<Language>en_US</Language>
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
<ProgLanguage mixed="0">Python3</ProgLanguage>
|
<ProgLanguage mixed="0">Python3</ProgLanguage>
|
||||||
<ProjectType>Console</ProjectType>
|
<ProjectType>Console</ProjectType>
|
||||||
<Description>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.</Description>
|
<Description>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.</Description>
|
||||||
<Version>2.3.2</Version>
|
<Version>2.3.3</Version>
|
||||||
<Author>Sven Sager</Author>
|
<Author>Sven Sager</Author>
|
||||||
<Email>akira@narux.de</Email>
|
<Email>akira@narux.de</Email>
|
||||||
<Eol index="1"/>
|
<Eol index="1"/>
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ __author__ = "Sven Sager <akira@revpimodio.org>"
|
|||||||
__copyright__ = "Copyright (C) 2018 Sven Sager"
|
__copyright__ = "Copyright (C) 2018 Sven Sager"
|
||||||
__license__ = "LGPLv3"
|
__license__ = "LGPLv3"
|
||||||
__name__ = "revpimodio2"
|
__name__ = "revpimodio2"
|
||||||
__version__ = "2.3.2"
|
__version__ = "2.3.3"
|
||||||
|
|
||||||
# Global package values
|
# Global package values
|
||||||
OFF = 0
|
OFF = 0
|
||||||
|
|||||||
@@ -961,8 +961,8 @@ class StructIO(IOBase):
|
|||||||
@param kwargs Weitere Parameter:
|
@param kwargs Weitere Parameter:
|
||||||
- bmk: Bezeichnung fuer IO
|
- bmk: Bezeichnung fuer IO
|
||||||
- bit: Registriert IO als <class 'bool'> am angegebenen Bit im Byte
|
- bit: Registriert IO als <class 'bool'> am angegebenen Bit im Byte
|
||||||
- byteorder: Byteorder fuer IO, Standardwert vom ersetzter IO
|
- byteorder: Byteorder fuer IO, Standardwert vom ersetzten IO
|
||||||
- defaultvalue: Standardwert fuer IO, Standard vom ersetzter IO
|
- defaultvalue: Standardwert fuer IO, Standard vom ersetzten IO
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# Structformatierung prüfen
|
# Structformatierung prüfen
|
||||||
@@ -1005,6 +1005,7 @@ class StructIO(IOBase):
|
|||||||
# [name,default,anzbits,adressbyte,export,adressid,bmk,bitaddress]
|
# [name,default,anzbits,adressbyte,export,adressid,bmk,bitaddress]
|
||||||
valuelist = [
|
valuelist = [
|
||||||
name,
|
name,
|
||||||
|
# Darf nur bei StructIO None sein, wird nur dann berechnet
|
||||||
kwargs.get("defaultvalue", None),
|
kwargs.get("defaultvalue", None),
|
||||||
bitlength,
|
bitlength,
|
||||||
parentio._slc_address.start,
|
parentio._slc_address.start,
|
||||||
|
|||||||
@@ -534,13 +534,20 @@ class RevPiModIO(object):
|
|||||||
cp = ConfigParser()
|
cp = ConfigParser()
|
||||||
for io in self.io:
|
for io in self.io:
|
||||||
if isinstance(io, StructIO):
|
if isinstance(io, StructIO):
|
||||||
|
|
||||||
|
# Required values
|
||||||
cp.add_section(io.name)
|
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]["frm"] = io.frm
|
||||||
cp[io.name]["bmk"] = io.bmk
|
|
||||||
|
# Optional values
|
||||||
|
if io._bitaddress >= 0:
|
||||||
cp[io.name]["bitaddress"] = str(io._bitaddress)
|
cp[io.name]["bitaddress"] = str(io._bitaddress)
|
||||||
cp[io.name]["byteorder"] = io._byteorder
|
cp[io.name]["byteorder"] = io._byteorder
|
||||||
cp[io.name]["defaultvalue"] = str(io.defaultvalue)
|
cp[io.name]["defaultvalue"] = str(io.defaultvalue)
|
||||||
|
if io.bmk != "":
|
||||||
|
cp[io.name]["bmk"] = io.bmk
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with open(filename, "w") as fh:
|
with open(filename, "w") as fh:
|
||||||
cp.write(fh)
|
cp.write(fh)
|
||||||
@@ -625,6 +632,7 @@ class RevPiModIO(object):
|
|||||||
@param filename Dateiname der Exportdatei"""
|
@param filename Dateiname der Exportdatei"""
|
||||||
acheck(str, filename=filename)
|
acheck(str, filename=filename)
|
||||||
|
|
||||||
|
# Load config file
|
||||||
cp = ConfigParser()
|
cp = ConfigParser()
|
||||||
try:
|
try:
|
||||||
with open(filename, "r") as fh:
|
with open(filename, "r") as fh:
|
||||||
@@ -635,17 +643,38 @@ class RevPiModIO(object):
|
|||||||
"".format(filename, e)
|
"".format(filename, e)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Pre-check
|
||||||
for io in cp:
|
for io in cp:
|
||||||
if io == "DEFAULT":
|
if io == "DEFAULT":
|
||||||
continue
|
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,
|
io,
|
||||||
frm=cp[io].get("frm"),
|
frm=replace_frm,
|
||||||
bmk=cp[io].get("bmk"),
|
bmk=cp[io].get("bmk", ""),
|
||||||
bit=cp[io].getint("bitaddress"),
|
bit=cp[io].getint("bitaddress", 0),
|
||||||
byteorder=cp[io].get("byteorder", "little"),
|
byteorder=cp[io].get("byteorder", "little"),
|
||||||
defaultvalue=cp[io].getint("defaultvalue")
|
defaultvalue=replace_defaultvalue
|
||||||
)
|
)
|
||||||
|
|
||||||
def mainloop(self, blocking=True, no_warn=False):
|
def mainloop(self, blocking=True, no_warn=False):
|
||||||
|
|||||||
Reference in New Issue
Block a user