diff --git a/doc/revpimodio2.io.html b/doc/revpimodio2.io.html index 73586cf..b3ac153 100644 --- a/doc/revpimodio2.io.html +++ b/doc/revpimodio2.io.html @@ -202,6 +202,7 @@ Parentdevice auf dem der IO liegt
valuelist
Datenliste fuer Instantiierung + ["name","defval","bitlen","startaddr",exp,"idx","bmk","bitaddr"]
iotype
Wert diff --git a/revpimodio2.e4p b/revpimodio2.e4p index 90c90b3..cf35d15 100644 --- a/revpimodio2.e4p +++ b/revpimodio2.e4p @@ -1,7 +1,7 @@ - + en_US @@ -9,7 +9,7 @@ Python3 Console 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. - 2.1.4 + 2.1.5 Sven Sager akira@narux.de diff --git a/revpimodio2/__init__.py b/revpimodio2/__init__.py index d71ef09..8644efa 100644 --- a/revpimodio2/__init__.py +++ b/revpimodio2/__init__.py @@ -25,7 +25,7 @@ __all__ = [ __author__ = "Sven Sager " __name__ = "revpimodio2" __package__ = "revpimodio2" -__version__ = "2.1.4" +__version__ = "2.1.5" # Global package values OFF = 0 diff --git a/revpimodio2/io.py b/revpimodio2/io.py index ae239d3..abdbbbf 100644 --- a/revpimodio2/io.py +++ b/revpimodio2/io.py @@ -180,6 +180,7 @@ class IOList(object): delattr(self, oldio._name) if io._defaultvalue is None: + # Nur bei StructIO und keiner gegebenen defaultvalue übernehmen if io._bitaddress < 0: io._defaultvalue = calc_defaultvalue else: @@ -254,11 +255,14 @@ class IOBase(object): @param parentdevice Parentdevice auf dem der IO liegt @param valuelist Datenliste fuer Instantiierung + ["name","defval","bitlen","startaddr",exp,"idx","bmk","bitaddr"] @param iotype Wert @param byteorder Byteorder 'little'/'big' fuer Berechnung @param sigend Intberechnung mit Vorzeichen durchfuehren """ + # ["name","defval","bitlen","startaddr",exp,"idx","bmk","bitaddr"] + # [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ] self._parentdevice = parentdevice # Bitadressen auf Bytes aufbrechen und umrechnen @@ -279,12 +283,13 @@ class IOBase(object): self._slc_address = slice( int_startaddress, int_startaddress + self._length ) - # Defaultvalue aus Zahl in Bytes umrechnen if str(valuelist[1]).isdigit(): + # Defaultvalue aus Zahl in Bytes umrechnen self._defaultvalue = int(valuelist[1]).to_bytes( self._length, byteorder=self._byteorder ) elif valuelist[1] is None and type(self) == StructIO: + # Auf None setzen um später berechnete Werte zu übernehmen self._defaultvalue = None elif type(valuelist[1]) == bytes: # Defaultvalue direkt von bytes übernehmen @@ -297,16 +302,34 @@ class IOBase(object): "".format(self._length, len(valuelist[1])) ) else: + # Defaultvalue mit leeren Bytes füllen self._defaultvalue = bytes(self._length) + # Versuchen String in ASCII Bytes zu wandeln + if type(valuelist[1]) == str: + try: + buff = valuelist[1].encode("ASCII") + if len(buff) <= self._length: + self._defaultvalue = \ + buff + bytes(self._length - len(buff)) + except: + pass + else: # Höhere Bits als 7 auf nächste Bytes umbrechen int_startaddress += int((int(valuelist[7]) % 16) / 8) self._slc_address = slice( int_startaddress, int_startaddress + 1 ) - self._defaultvalue = None if valuelist[1] is None \ - else bool(int(valuelist[1])) + + # Defaultvalue ermitteln, sonst False + if valuelist[1] is None and type(self) == StructIO: + self._defaultvalue = None + else: + try: + self._defaultvalue = bool(int(valuelist[1])) + except: + self._defaultvalue = False def __bool__(self): """-Wert der Klasse. diff --git a/setup.py b/setup.py index d91d097..f0a5ca8 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ setup( license="LGPLv3", name="revpimodio2", - version="2.1.4", + version="2.1.5", packages=["revpimodio2"], python_requires="~=3.2",