mirror of
https://github.com/naruxde/revpimodio2.git
synced 2025-12-29 02:08:03 +01:00
RevPiNetIO nur ._configure wenn nicht vererbt
Bugfix: prüfen auf self._myfh is not None statt hasattr Socket in .close() beenden - nicht am Ende von .run() da als daemon=True
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
|
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
|
||||||
<!-- eric project file for project revpimodio2 -->
|
<!-- eric project file for project revpimodio2 -->
|
||||||
<!-- Saved: 2017-09-11, 13:27:05 -->
|
<!-- Saved: 2017-09-17, 13:08:01 -->
|
||||||
<!-- Copyright (C) 2017 Sven Sager, akira@narux.de -->
|
<!-- Copyright (C) 2017 Sven Sager, akira@narux.de -->
|
||||||
<Project version="5.1">
|
<Project version="5.1">
|
||||||
<Language>en_US</Language>
|
<Language>en_US</Language>
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
<ProgLanguage mixed="0">Python3</ProgLanguage>
|
<ProgLanguage mixed="0">Python3</ProgLanguage>
|
||||||
<ProjectType>Console</ProjectType>
|
<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>
|
<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.0</Version>
|
<Version>2.1.1</Version>
|
||||||
<Author>Sven Sager</Author>
|
<Author>Sven Sager</Author>
|
||||||
<Email>akira@narux.de</Email>
|
<Email>akira@narux.de</Email>
|
||||||
<Eol index="1"/>
|
<Eol index="1"/>
|
||||||
@@ -32,6 +32,7 @@
|
|||||||
<Source>test/web_benniesrun.py</Source>
|
<Source>test/web_benniesrun.py</Source>
|
||||||
<Source>test/web_benniesrunxxl.py</Source>
|
<Source>test/web_benniesrunxxl.py</Source>
|
||||||
<Source>revpimodio2/netio.py</Source>
|
<Source>revpimodio2/netio.py</Source>
|
||||||
|
<Source>test_trace.py</Source>
|
||||||
</Sources>
|
</Sources>
|
||||||
<Forms/>
|
<Forms/>
|
||||||
<Translations/>
|
<Translations/>
|
||||||
@@ -181,6 +182,7 @@
|
|||||||
<value>
|
<value>
|
||||||
<list>
|
<list>
|
||||||
<string>setup.py</string>
|
<string>setup.py</string>
|
||||||
|
<string>test_trace.py</string>
|
||||||
</list>
|
</list>
|
||||||
</value>
|
</value>
|
||||||
<key>
|
<key>
|
||||||
@@ -227,6 +229,7 @@
|
|||||||
<value>
|
<value>
|
||||||
<list>
|
<list>
|
||||||
<string>setup.py</string>
|
<string>setup.py</string>
|
||||||
|
<string>test_trace.py</string>
|
||||||
</list>
|
</list>
|
||||||
</value>
|
</value>
|
||||||
<key>
|
<key>
|
||||||
@@ -278,7 +281,7 @@
|
|||||||
<string>ExcludeFiles</string>
|
<string>ExcludeFiles</string>
|
||||||
</key>
|
</key>
|
||||||
<value>
|
<value>
|
||||||
<string></string>
|
<string>*/test_trace.py</string>
|
||||||
</value>
|
</value>
|
||||||
<key>
|
<key>
|
||||||
<string>ExcludeMessages</string>
|
<string>ExcludeMessages</string>
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ __all__ = [
|
|||||||
__author__ = "Sven Sager <akira@revpimodio.org>"
|
__author__ = "Sven Sager <akira@revpimodio.org>"
|
||||||
__name__ = "revpimodio2"
|
__name__ = "revpimodio2"
|
||||||
__package__ = "revpimodio2"
|
__package__ = "revpimodio2"
|
||||||
__version__ = "2.1.0"
|
__version__ = "2.1.1"
|
||||||
|
|
||||||
# Global package values
|
# Global package values
|
||||||
OFF = 0
|
OFF = 0
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ class RevPiModIO(object):
|
|||||||
def __del__(self):
|
def __del__(self):
|
||||||
"""Zerstoert alle Klassen um aufzuraeumen."""
|
"""Zerstoert alle Klassen um aufzuraeumen."""
|
||||||
self.exit(full=True)
|
self.exit(full=True)
|
||||||
if hasattr(self, "_myfh"):
|
if self._myfh is not None:
|
||||||
self._myfh.close()
|
self._myfh.close()
|
||||||
|
|
||||||
def __evt_exit(self, signum, sigframe):
|
def __evt_exit(self, signum, sigframe):
|
||||||
@@ -116,7 +116,8 @@ class RevPiModIO(object):
|
|||||||
if len(self._lst_devselect) > 0:
|
if len(self._lst_devselect) > 0:
|
||||||
lst_found = []
|
lst_found = []
|
||||||
|
|
||||||
if type(self) == RevPiModIODriver:
|
if type(self) == RevPiModIODriver \
|
||||||
|
or type(self) == RevPiNetIODriver:
|
||||||
_searchtype = "VIRTUAL"
|
_searchtype = "VIRTUAL"
|
||||||
else:
|
else:
|
||||||
_searchtype = None
|
_searchtype = None
|
||||||
@@ -907,3 +908,7 @@ class RevPiModIODriver(RevPiModIOSelected):
|
|||||||
super().__init__(
|
super().__init__(
|
||||||
virtdev, autorefresh, False, syncoutputs, procimg, configrsc, True
|
virtdev, autorefresh, False, syncoutputs, procimg, configrsc, True
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# Nachträglicher Import
|
||||||
|
from .netio import RevPiNetIODriver
|
||||||
|
|||||||
@@ -128,6 +128,17 @@ class NetFH(Thread):
|
|||||||
self.__sockend = True
|
self.__sockend = True
|
||||||
self.__sockerr.set()
|
self.__sockerr.set()
|
||||||
|
|
||||||
|
# Vom Socket sauber trennen
|
||||||
|
with self.__socklock:
|
||||||
|
try:
|
||||||
|
if self.__sockend:
|
||||||
|
self._slavesock.send(_sysexit)
|
||||||
|
else:
|
||||||
|
self._slavesock.shutdown(socket.SHUT_RDWR)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
self._slavesock.close()
|
||||||
|
|
||||||
def flush(self):
|
def flush(self):
|
||||||
"""Schreibpuffer senden."""
|
"""Schreibpuffer senden."""
|
||||||
if self.__sockend:
|
if self.__sockend:
|
||||||
@@ -247,17 +258,6 @@ class NetFH(Thread):
|
|||||||
|
|
||||||
self.__trigger = False
|
self.__trigger = False
|
||||||
|
|
||||||
# Vom Socket trennen
|
|
||||||
with self.__socklock:
|
|
||||||
try:
|
|
||||||
if self.__sockend:
|
|
||||||
self._slavesock.send(_sysexit)
|
|
||||||
else:
|
|
||||||
self._slavesock.shutdown(socket.SHUT_RDWR)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
self._slavesock.close()
|
|
||||||
|
|
||||||
def seek(self, position):
|
def seek(self, position):
|
||||||
"""Springt an angegebene Position.
|
"""Springt an angegebene Position.
|
||||||
@param position An diese Position springen"""
|
@param position An diese Position springen"""
|
||||||
@@ -418,8 +418,9 @@ class RevPiNetIO(_RevPiModIO):
|
|||||||
# Netzwerkfilehandler anlegen
|
# Netzwerkfilehandler anlegen
|
||||||
self._myfh = self._create_myfh()
|
self._myfh = self._create_myfh()
|
||||||
|
|
||||||
# Modul konfigurieren
|
# Nur Konfigurieren, wenn nicht vererbt
|
||||||
self._configure(self.get_jconfigrsc())
|
if type(self) == RevPiNetIO:
|
||||||
|
self._configure(self.get_jconfigrsc())
|
||||||
|
|
||||||
def _create_myfh(self):
|
def _create_myfh(self):
|
||||||
"""Erstellt NetworkFileObject.
|
"""Erstellt NetworkFileObject.
|
||||||
|
|||||||
Reference in New Issue
Block a user