mirror of
https://github.com/naruxde/revpimodio2.git
synced 2025-11-08 13:53:53 +01:00
_defaultvalue kann String aufnehmen muss aber über _defaultvalue erfragt werden
_defaultvalue kann niemals None sein, außer bei StructIO zur Berechnung
Fehlerabfang komischer piCtory JSON Datei für _defaultvalue ('null' statt null)
This commit is contained in:
@@ -202,6 +202,7 @@ Parentdevice auf dem der IO liegt
|
||||
</dd><dt><i>valuelist</i></dt>
|
||||
<dd>
|
||||
Datenliste fuer Instantiierung
|
||||
["name","defval","bitlen","startaddr",exp,"idx","bmk","bitaddr"]
|
||||
</dd><dt><i>iotype</i></dt>
|
||||
<dd>
|
||||
<class 'int'> Wert
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
|
||||
<!-- eric project file for project revpimodio2 -->
|
||||
<!-- Saved: 2018-04-05, 16:01:15 -->
|
||||
<!-- Saved: 2018-04-17, 08:56:16 -->
|
||||
<!-- Copyright (C) 2018 Sven Sager, akira@narux.de -->
|
||||
<Project version="5.1">
|
||||
<Language>en_US</Language>
|
||||
@@ -9,7 +9,7 @@
|
||||
<ProgLanguage mixed="0">Python3</ProgLanguage>
|
||||
<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>
|
||||
<Version>2.1.4</Version>
|
||||
<Version>2.1.5</Version>
|
||||
<Author>Sven Sager</Author>
|
||||
<Email>akira@narux.de</Email>
|
||||
<Eol index="1"/>
|
||||
|
||||
@@ -25,7 +25,7 @@ __all__ = [
|
||||
__author__ = "Sven Sager <akira@revpimodio.org>"
|
||||
__name__ = "revpimodio2"
|
||||
__package__ = "revpimodio2"
|
||||
__version__ = "2.1.4"
|
||||
__version__ = "2.1.5"
|
||||
|
||||
# Global package values
|
||||
OFF = 0
|
||||
|
||||
@@ -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 <class 'int'> Wert
|
||||
@param byteorder Byteorder 'little'/'big' fuer <class 'int'> 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):
|
||||
"""<class 'bool'>-Wert der Klasse.
|
||||
|
||||
Reference in New Issue
Block a user