mirror of
https://github.com/naruxde/revpimodio2.git
synced 2025-11-08 22:03:53 +01:00
.replace_io mit regex für parameter frm versehen - Danke an Nicolai Buchwitz!
.reset Funktion warf Fehler bei Counter IOs 8-16
This commit is contained in:
@@ -931,7 +931,11 @@ Ersetzt bestehenden IO mit Neuem.
|
|||||||
</p><p>
|
</p><p>
|
||||||
Es darf nur ein einzelnes Formatzeichen 'frm' uebergeben werden. Daraus
|
Es darf nur ein einzelnes Formatzeichen 'frm' uebergeben werden. Daraus
|
||||||
wird dann die benoetigte Laenge an Bytes berechnet und der Datentyp
|
wird dann die benoetigte Laenge an Bytes berechnet und der Datentyp
|
||||||
festgelegt.
|
festgelegt. Moeglich sind:
|
||||||
|
Bits / Bytes: ?, c, s
|
||||||
|
Integer : bB, hH, iI, lL, qQ
|
||||||
|
Float : e, f, d
|
||||||
|
</p><p>
|
||||||
Eine Ausnahme ist die Formatierung 's'. Hier koennen mehrere Bytes
|
Eine Ausnahme ist die Formatierung 's'. Hier koennen mehrere Bytes
|
||||||
zu einem langen IO zusammengefasst werden. Die Formatierung muss
|
zu einem langen IO zusammengefasst werden. Die Formatierung muss
|
||||||
'8s' fuer z.B. 8 Bytes sein - NICHT 'ssssssss'!
|
'8s' fuer z.B. 8 Bytes sein - NICHT 'ssssssss'!
|
||||||
|
|||||||
@@ -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-01-25, 13:04:10 -->
|
<!-- Saved: 2019-05-01, 08:11:34 -->
|
||||||
<!-- 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.1</Version>
|
<Version>2.3.2</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.1"
|
__version__ = "2.3.2"
|
||||||
|
|
||||||
# Global package values
|
# Global package values
|
||||||
OFF = 0
|
OFF = 0
|
||||||
|
|||||||
@@ -779,7 +779,7 @@ class Connect(Core):
|
|||||||
exp_x2out = exp_a3green
|
exp_x2out = exp_a3green
|
||||||
exp_wd = exp_a3green
|
exp_wd = exp_a3green
|
||||||
lst_status = lst_myios[self._slc_statusbyte.start]
|
lst_status = lst_myios[self._slc_statusbyte.start]
|
||||||
if len(lst_led) == 8:
|
if len(lst_status) == 8:
|
||||||
exp_x2in = lst_status[6].export
|
exp_x2in = lst_status[6].export
|
||||||
else:
|
else:
|
||||||
exp_x2in = lst_status[0].export
|
exp_x2in = lst_status[0].export
|
||||||
|
|||||||
@@ -807,13 +807,28 @@ class IntIOCounter(IntIO):
|
|||||||
@see #IOBase.__init__ IOBase.__init__(...)
|
@see #IOBase.__init__ IOBase.__init__(...)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if not (isinstance(counter_id, int) and 0 <= counter_id <= 15):
|
if not isinstance(counter_id, int):
|
||||||
raise ValueError("counter_id must be <class 'int'> and 0 - 15")
|
raise TypeError("counter_id must be <class 'int'>")
|
||||||
|
if not 0 <= counter_id <= 15:
|
||||||
|
raise ValueError("counter_id must be 0 - 15")
|
||||||
|
|
||||||
# Deviceposition + Counter_ID
|
# Deviceposition + leer + Counter_ID
|
||||||
|
# ID-Bits: 7|6|5|4|3|2|1|0|15|14|13|12|11|10|9|8
|
||||||
self.__ioctl_arg = \
|
self.__ioctl_arg = \
|
||||||
parentdevice._position.to_bytes(1, "little") + \
|
parentdevice._position.to_bytes(1, "little") + b'\x00' + \
|
||||||
(1 << counter_id).to_bytes(2, "big")
|
(1 << counter_id).to_bytes(2, "little")
|
||||||
|
|
||||||
|
"""
|
||||||
|
IOCTL fuellt dieses struct, welches durch padding im Speicher nach
|
||||||
|
uint8_t ein byte frei hat. Es muessen also 4 Byte uebergeben werden
|
||||||
|
wobei das Bitfield die Byteorder little hat!!!
|
||||||
|
|
||||||
|
typedef struct SDIOResetCounterStr
|
||||||
|
{
|
||||||
|
uint8_t i8uAddress; // Address of module
|
||||||
|
uint16_t i16uBitfield; // bitfield, if bit n is 1, reset
|
||||||
|
} SDIOResetCounter;
|
||||||
|
"""
|
||||||
|
|
||||||
# Basisklasse laden
|
# Basisklasse laden
|
||||||
super().__init__(parentdevice, valuelist, iotype, byteorder, signed)
|
super().__init__(parentdevice, valuelist, iotype, byteorder, signed)
|
||||||
@@ -873,7 +888,11 @@ class IntIOReplaceable(IntIO):
|
|||||||
|
|
||||||
Es darf nur ein einzelnes Formatzeichen 'frm' uebergeben werden. Daraus
|
Es darf nur ein einzelnes Formatzeichen 'frm' uebergeben werden. Daraus
|
||||||
wird dann die benoetigte Laenge an Bytes berechnet und der Datentyp
|
wird dann die benoetigte Laenge an Bytes berechnet und der Datentyp
|
||||||
festgelegt.
|
festgelegt. Moeglich sind:
|
||||||
|
Bits / Bytes: ?, c, s
|
||||||
|
Integer : bB, hH, iI, lL, qQ
|
||||||
|
Float : e, f, d
|
||||||
|
|
||||||
Eine Ausnahme ist die Formatierung 's'. Hier koennen mehrere Bytes
|
Eine Ausnahme ist die Formatierung 's'. Hier koennen mehrere Bytes
|
||||||
zu einem langen IO zusammengefasst werden. Die Formatierung muss
|
zu einem langen IO zusammengefasst werden. Die Formatierung muss
|
||||||
'8s' fuer z.B. 8 Bytes sein - NICHT 'ssssssss'!
|
'8s' fuer z.B. 8 Bytes sein - NICHT 'ssssssss'!
|
||||||
@@ -946,10 +965,10 @@ class StructIO(IOBase):
|
|||||||
- defaultvalue: Standardwert fuer IO, Standard vom ersetzter IO
|
- defaultvalue: Standardwert fuer IO, Standard vom ersetzter IO
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# Mehrfach s prüfen 8s
|
# Structformatierung prüfen
|
||||||
regex = rematch("[0-9]*s", frm)
|
regex = rematch("^([0-9]*s|[cbB?hHiIlLqQefd])$", frm)
|
||||||
|
|
||||||
if len(frm) == 1 or regex is not None and regex.end() == len(frm):
|
if regex is not None:
|
||||||
# Byteorder prüfen und übernehmen
|
# Byteorder prüfen und übernehmen
|
||||||
byteorder = kwargs.get("byteorder", parentio._byteorder)
|
byteorder = kwargs.get("byteorder", parentio._byteorder)
|
||||||
if not (byteorder == "little" or byteorder == "big"):
|
if not (byteorder == "little" or byteorder == "big"):
|
||||||
@@ -990,7 +1009,8 @@ class StructIO(IOBase):
|
|||||||
]
|
]
|
||||||
else:
|
else:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
"parameter frm has to be a single sign or 'COUNTs' e.g. '8s'"
|
"parameter frm has to be a single sign from [cbB?hHiIlLqQefd] "
|
||||||
|
"or 'COUNTs' e.g. '8s'"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Basisklasse instantiieren
|
# Basisklasse instantiieren
|
||||||
|
|||||||
Reference in New Issue
Block a user