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)):
|
for key in sorted(dict_io, key=lambda x: int(x)):
|
||||||
|
|
||||||
# Neuen IO anlegen
|
# 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
|
# Bei Bitwerten oder Base IOBase verwenden
|
||||||
io_new = IOBase(
|
io_new = IOBase(
|
||||||
self, dict_io[key], iotype, "little", False
|
self, dict_io[key], iotype, "little", False
|
||||||
@@ -317,7 +325,7 @@ class Device(object):
|
|||||||
"little",
|
"little",
|
||||||
False
|
False
|
||||||
)
|
)
|
||||||
elif isinstance(self, Gateway) and iotype != MEM:
|
elif isinstance(self, Gateway):
|
||||||
# Ersetzbare IOs erzeugen
|
# Ersetzbare IOs erzeugen
|
||||||
io_new = IntIOReplaceable(
|
io_new = IntIOReplaceable(
|
||||||
self, dict_io[key],
|
self, dict_io[key],
|
||||||
@@ -1127,5 +1135,5 @@ class Virtual(Gateway):
|
|||||||
|
|
||||||
|
|
||||||
# Nachträglicher Import
|
# Nachträglicher Import
|
||||||
from .io import IOBase, IntIO, IntIOCounter, IntIOReplaceable
|
from .io import IOBase, IntIO, IntIOCounter, IntIOReplaceable, MemIO
|
||||||
from revpimodio2 import INP, OUT, MEM
|
from revpimodio2 import INP, OUT, MEM
|
||||||
|
|||||||
@@ -1244,3 +1244,31 @@ class StructIO(IOBase):
|
|||||||
frm = property(_get_frm)
|
frm = property(_get_frm)
|
||||||
signed = property(_get_signed)
|
signed = property(_get_signed)
|
||||||
value = property(get_structvalue, set_structvalue)
|
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
|
# Inputs vom Bus einlesen
|
||||||
dev._ba_devdata[dev._slc_inp] = bytesbuff[dev._slc_inpoff]
|
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()
|
dev._filelock.release()
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|||||||
Reference in New Issue
Block a user