From 7da1906c96db3f16ad4372a1d09a37814cb138a0 Mon Sep 17 00:00:00 2001 From: NaruX Date: Mon, 6 Nov 2017 12:56:04 +0100 Subject: [PATCH] RevPiNetIO.net_cleardefaultvalues() funktionierte nicht mit Server Bugfix: Bei Instantiierungsfehler traten weitere Fehler auf --- revpimodio2.e4p | 6 +++++- revpimodio2/netio.py | 34 ++++++++++++++++++++++------------ setup.py | 2 +- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/revpimodio2.e4p b/revpimodio2.e4p index 1bfe61b..2067fda 100644 --- a/revpimodio2.e4p +++ b/revpimodio2.e4p @@ -1,7 +1,7 @@ - + en_US @@ -31,6 +31,8 @@ test/web_virtdevdriver.py test/web_benniesrun.py test/web_benniesrunxxl.py + revpimodio2/netio.py + test_unitnet.py test_unit.py @@ -183,6 +185,7 @@ setup.py test_unit.py + test_unitnet.py @@ -230,6 +233,7 @@ setup.py test_unit.py + test_unitnet.py diff --git a/revpimodio2/netio.py b/revpimodio2/netio.py index 947ee18..3e84e57 100644 --- a/revpimodio2/netio.py +++ b/revpimodio2/netio.py @@ -102,12 +102,14 @@ class NetFH(Thread): with self.__socklock: if position is None: + # Alle Dirtybytes löschen self._slavesock.sendall(_sysdeldirty) else: + # Nur bestimmte Dirtybytes löschen self._slavesock.sendall( b'\x01EY' + position.to_bytes(length=2, byteorder="little") + - b'\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x17' + b'\x00\x00\xFE\x00\x00\x00\x00\x00\x00\x00\x17' ) check = self._slavesock.recv(1) @@ -115,13 +117,13 @@ class NetFH(Thread): self.__sockerr.set() raise IOError("clear dirtybytes error on network") - # Daten bei Erfolg übernehmen - if position is None: - self.__dictdirty = {} - else: - del self.__dictdirty[position] + # Daten bei Erfolg übernehmen + if position is None: + self.__dictdirty = {} + elif position in self.__dictdirty: + del self.__dictdirty[position] - self.__trigger = True + self.__trigger = True def close(self): """Verbindung trennen.""" @@ -224,6 +226,7 @@ class NetFH(Thread): byte_buff += data if data.find(b'\x04') >= 0: + # NOTE: Nur suchen oder Ende prüfen? return byte_buff[:-1] self.__sockerr.set() @@ -320,7 +323,7 @@ class NetFH(Thread): self.__trigger = True else: - raise ValueError("value must between 0 and 65535 milliseconds") + raise ValueError("value must between 1 and 65535 milliseconds") def tell(self): """Gibt aktuelle Position zurueck. @@ -384,6 +387,13 @@ class RevPiNetIO(_RevPiModIO): """ + # Objekte die auch schon bei Fehler benötigt werden + self._exit = Event() + self._imgwriter = None + self._lst_refresh = [] + self._myfh = None + self._waitexit = Event() + # Adresse verarbeiten if type(address) == str: # TODO: IP-Adresse prüfen @@ -396,7 +406,7 @@ class RevPiNetIO(_RevPiModIO): # Werte prüfen # TODO: IP-Adresse prüfen - if 0 < address[1] <= 65535: + if not 0 < address[1] <= 65535: raise ValueError("port number out of range 1 - 65535") self._address = address @@ -448,14 +458,14 @@ class RevPiNetIO(_RevPiModIO): ) if device is None: - mylist = self.device + self._myfh.clear_dirtybytes() else: dev = device if issubclass(type(device), Device) \ else self.device.__getitem__(device) mylist = [dev] - for dev in mylist: - self._myfh.clear_dirtybytes(dev._offset + dev._slc_out.start) + for dev in mylist: + self._myfh.clear_dirtybytes(dev._offset + dev._slc_out.start) def net_setdefaultvalues(self, device=None): """Konfiguriert den PLC Slave mit den piCtory Defaultwerten. diff --git a/setup.py b/setup.py index 9b0f497..8a23776 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ setup( license="LGPLv3", name="revpimodio2", - version="2.1.1b2", + version="2.1.1b3", packages=["revpimodio2"], python_requires="~=3.2",