feat: Add counter reset function to the MIO module

Due to the new firmware 1.1 on the MIO module, the GPIOs that were
configured as counters can now also be reset to 0. With this change,
the .reset() function in RevPiModIO is added to the respective counter
IOs.
This commit is contained in:
2024-04-17 07:15:05 +02:00
parent 21d8c523ae
commit 631ea6e8a8
2 changed files with 25 additions and 2 deletions

View File

@@ -345,8 +345,10 @@ class Device(object):
elif bool(dict_io[key][7]): elif bool(dict_io[key][7]):
# Bei Bitwerten IOBase verwenden # Bei Bitwerten IOBase verwenden
io_new = IOBase(self, dict_io[key], iotype, "little", False) io_new = IOBase(self, dict_io[key], iotype, "little", False)
elif isinstance(self, DioModule) and dict_io[key][3] in self._lst_counter: elif (isinstance(self, DioModule) or isinstance(self, MioModule)) and dict_io[key][
# Counter IO auf einem DI oder DIO 3
] in self._lst_counter:
# Counter IO on a DI, DIO or MIO module
io_new = IntIOCounter( io_new = IntIOCounter(
self._lst_counter.index(dict_io[key][3]), self._lst_counter.index(dict_io[key][3]),
self, self,
@@ -1978,6 +1980,24 @@ class DioModule(Device):
super().__init__(parentmodio, dict_device, simulator=simulator) super().__init__(parentmodio, dict_device, simulator=simulator)
class MioModule(Device):
"""Represents a MIO module."""
__slots__ = "_lst_counter"
def __init__(self, parentmodio, dict_device, simulator=False):
"""
Extended device class to recognize IntIOCounter.
:rev: :func:`Device.__init__()`
"""
# String list of byte addresses that are a counter.
self._lst_counter = list(map(str, range(9, 17, 2)))
# Basisklasse laden
super().__init__(parentmodio, dict_device, simulator=simulator)
class RoModule(Device): class RoModule(Device):
"""Relais output (RO) module with""" """Relais output (RO) module with"""

View File

@@ -392,6 +392,9 @@ class RevPiModIO(object):
elif pt == ProductType.RO: elif pt == ProductType.RO:
# RO # RO
dev_new = devicemodule.RoModule(self, device, simulator=self._simulator) dev_new = devicemodule.RoModule(self, device, simulator=self._simulator)
elif pt == ProductType.MIO:
# MIO
dev_new = devicemodule.MioModule(self, device, simulator=self._simulator)
else: else:
# Alle anderen IO-Devices # Alle anderen IO-Devices
dev_new = devicemodule.Device(self, device, simulator=self._simulator) dev_new = devicemodule.Device(self, device, simulator=self._simulator)