mirror of
https://github.com/naruxde/revpimodio2.git
synced 2025-11-08 22:03:53 +01:00
Value of memory setting in .value property
The type of returned value could be int or str. So we can get the settings including IP or device_path of Modbus devices. resolve #2
This commit is contained in:
@@ -302,7 +302,15 @@ class Device(object):
|
||||
for key in sorted(dict_io, key=lambda x: int(x)):
|
||||
|
||||
# Neuen IO anlegen
|
||||
if bool(dict_io[key][7]) or isinstance(self, Base):
|
||||
if iotype == MEM:
|
||||
# Memory setting
|
||||
io_new = MemIO(
|
||||
self, dict_io[key],
|
||||
iotype,
|
||||
"little",
|
||||
False
|
||||
)
|
||||
elif bool(dict_io[key][7]) or isinstance(self, Base):
|
||||
# Bei Bitwerten oder Base IOBase verwenden
|
||||
io_new = IOBase(
|
||||
self, dict_io[key], iotype, "little", False
|
||||
@@ -317,7 +325,7 @@ class Device(object):
|
||||
"little",
|
||||
False
|
||||
)
|
||||
elif isinstance(self, Gateway) and iotype != MEM:
|
||||
elif isinstance(self, Gateway):
|
||||
# Ersetzbare IOs erzeugen
|
||||
io_new = IntIOReplaceable(
|
||||
self, dict_io[key],
|
||||
@@ -1127,5 +1135,5 @@ class Virtual(Gateway):
|
||||
|
||||
|
||||
# Nachträglicher Import
|
||||
from .io import IOBase, IntIO, IntIOCounter, IntIOReplaceable
|
||||
from .io import IOBase, IntIO, IntIOCounter, IntIOReplaceable, MemIO
|
||||
from revpimodio2 import INP, OUT, MEM
|
||||
|
||||
@@ -1244,3 +1244,31 @@ class StructIO(IOBase):
|
||||
frm = property(_get_frm)
|
||||
signed = property(_get_signed)
|
||||
value = property(get_structvalue, set_structvalue)
|
||||
|
||||
|
||||
class MemIO(IOBase):
|
||||
"""
|
||||
Erstellt einen IO für die Memory Werte in piCtory.
|
||||
|
||||
Dieser Typ ist nur für lesenden Zugriff vorgesehen und kann verschiedene
|
||||
Datentypen über .value zurückgeben. Damit hat man nun auch Zugriff
|
||||
auf Strings, welche in piCtory vergeben werden.
|
||||
"""
|
||||
|
||||
def get_variantvalue(self):
|
||||
val = bytes(self._defaultvalue)
|
||||
|
||||
if self._bitlength == 256:
|
||||
# STRING
|
||||
try:
|
||||
val = val.strip(b'\x00').decode("ASCII")
|
||||
except Exception:
|
||||
pass
|
||||
return val
|
||||
|
||||
else:
|
||||
# INT
|
||||
return int.from_bytes(val, self._byteorder, signed=self._signed)
|
||||
|
||||
defaultvalue = property(get_variantvalue)
|
||||
value = property(get_variantvalue)
|
||||
|
||||
@@ -1040,9 +1040,6 @@ class RevPiModIO(object):
|
||||
# Inputs vom Bus einlesen
|
||||
dev._ba_devdata[dev._slc_inp] = bytesbuff[dev._slc_inpoff]
|
||||
|
||||
# Mems vom Bus lesen
|
||||
dev._ba_devdata[dev._slc_mem] = bytesbuff[dev._slc_memoff]
|
||||
|
||||
dev._filelock.release()
|
||||
|
||||
return True
|
||||
|
||||
Reference in New Issue
Block a user