mirror of
https://github.com/naruxde/revpimodio2.git
synced 2025-11-08 22:03:53 +01:00
watchdogtrigger in Connect-Klasse integriert (Wechselt alle 10 Sekunden)
Adressen der core/connect IOs verbessert
This commit is contained in:
@@ -58,7 +58,7 @@ Core
|
|||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
Class Attributes</h3>
|
Class Attributes</h3>
|
||||||
<table>
|
<table>
|
||||||
<tr><td>A3</td></tr>
|
<tr><td>A3</td></tr><tr><td>watchdogtrigger</td></tr>
|
||||||
</table>
|
</table>
|
||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
Class Methods</h3>
|
Class Methods</h3>
|
||||||
@@ -69,14 +69,23 @@ Class Methods</h3>
|
|||||||
Methods</h3>
|
Methods</h3>
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td><a style="color:#0000FF" href="#Connect.__wdtrigger">__wdtrigger</a></td>
|
||||||
|
<td>WD Ausgang alle 10 Sekunden automatisch toggeln.</td>
|
||||||
|
</tr><tr>
|
||||||
<td><a style="color:#0000FF" href="#Connect._devconfigure">_devconfigure</a></td>
|
<td><a style="color:#0000FF" href="#Connect._devconfigure">_devconfigure</a></td>
|
||||||
<td>Connect-Klasse vorbereiten.</td>
|
<td>Connect-Klasse vorbereiten.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<td><a style="color:#0000FF" href="#Connect._get_leda3">_get_leda3</a></td>
|
<td><a style="color:#0000FF" href="#Connect._get_leda3">_get_leda3</a></td>
|
||||||
<td>Gibt den Zustand der LED A3 vom Connect zurueck.</td>
|
<td>Gibt den Zustand der LED A3 vom Connect zurueck.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#Connect._get_wdtrigger">_get_wdtrigger</a></td>
|
||||||
|
<td>Ruft den Wert fuer Autowatchdog ab.</td>
|
||||||
|
</tr><tr>
|
||||||
<td><a style="color:#0000FF" href="#Connect._set_leda3">_set_leda3</a></td>
|
<td><a style="color:#0000FF" href="#Connect._set_leda3">_set_leda3</a></td>
|
||||||
<td>Setzt den Zustand der LED A3 vom Connect.</td>
|
<td>Setzt den Zustand der LED A3 vom Connect.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#Connect._set_wdtrigger">_set_wdtrigger</a></td>
|
||||||
|
<td>Setzt den Wert fuer Autowatchdog.</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
@@ -84,7 +93,13 @@ Static Methods</h3>
|
|||||||
<table>
|
<table>
|
||||||
<tr><td>None</td></tr>
|
<tr><td>None</td></tr>
|
||||||
</table>
|
</table>
|
||||||
<a NAME="Connect._devconfigure" ID="Connect._devconfigure"></a>
|
<a NAME="Connect.__wdtrigger" ID="Connect.__wdtrigger"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Connect.__wdtrigger</h3>
|
||||||
|
<b>__wdtrigger</b>(<i></i>)
|
||||||
|
<p>
|
||||||
|
WD Ausgang alle 10 Sekunden automatisch toggeln.
|
||||||
|
</p><a NAME="Connect._devconfigure" ID="Connect._devconfigure"></a>
|
||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
Connect._devconfigure</h3>
|
Connect._devconfigure</h3>
|
||||||
<b>_devconfigure</b>(<i></i>)
|
<b>_devconfigure</b>(<i></i>)
|
||||||
@@ -101,6 +116,17 @@ Gibt den Zustand der LED A3 vom Connect zurueck.
|
|||||||
<dd>
|
<dd>
|
||||||
0=aus, 1=gruen, 2=rot
|
0=aus, 1=gruen, 2=rot
|
||||||
</dd>
|
</dd>
|
||||||
|
</dl><a NAME="Connect._get_wdtrigger" ID="Connect._get_wdtrigger"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Connect._get_wdtrigger</h3>
|
||||||
|
<b>_get_wdtrigger</b>(<i></i>)
|
||||||
|
<p>
|
||||||
|
Ruft den Wert fuer Autowatchdog ab.
|
||||||
|
</p><dl>
|
||||||
|
<dt>Returns:</dt>
|
||||||
|
<dd>
|
||||||
|
True, wenn Autowatchdog aktiv ist
|
||||||
|
</dd>
|
||||||
</dl><a NAME="Connect._set_leda3" ID="Connect._set_leda3"></a>
|
</dl><a NAME="Connect._set_leda3" ID="Connect._set_leda3"></a>
|
||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
Connect._set_leda3</h3>
|
Connect._set_leda3</h3>
|
||||||
@@ -112,6 +138,26 @@ Setzt den Zustand der LED A3 vom Connect.
|
|||||||
<dd>
|
<dd>
|
||||||
0=aus, 1=gruen, 2=rot
|
0=aus, 1=gruen, 2=rot
|
||||||
</dd>
|
</dd>
|
||||||
|
</dl><a NAME="Connect._set_wdtrigger" ID="Connect._set_wdtrigger"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Connect._set_wdtrigger</h3>
|
||||||
|
<b>_set_wdtrigger</b>(<i>value</i>)
|
||||||
|
<p>
|
||||||
|
Setzt den Wert fuer Autowatchdog.
|
||||||
|
</p><p>
|
||||||
|
Wird dieser Wert auf True gesetzt, wechselt im Hintergrund das noetige
|
||||||
|
Bit zum toggeln des Watchdogs alle 10 Sekunden zwichen True und False.
|
||||||
|
Dieses Bit wird bei autorefresh=True natuerlich automatisch in das
|
||||||
|
Prozessabbild geschrieben.
|
||||||
|
</p><p>
|
||||||
|
WICHTIG: Sollte autorefresh=False sein, muss zyklisch
|
||||||
|
.writeprocimg() aufgerufen werden, um den Wert in das
|
||||||
|
Prozessabbild zu schreiben!!!
|
||||||
|
</p><dl>
|
||||||
|
<dt><i>value</i></dt>
|
||||||
|
<dd>
|
||||||
|
True zum aktivieren, Fals zum beenden
|
||||||
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
||||||
<hr /><hr />
|
<hr /><hr />
|
||||||
|
|||||||
@@ -202,7 +202,7 @@ Parentdevice auf dem der IO liegt
|
|||||||
</dd><dt><i>valuelist</i></dt>
|
</dd><dt><i>valuelist</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
Datenliste fuer Instantiierung
|
Datenliste fuer Instantiierung
|
||||||
["name","defval","bitlen","startaddr",exp,"idx","bmk","bitaddr"]
|
["name","defval","bitlen","startaddrdev",exp,"idx","bmk","bitaddr"]
|
||||||
</dd><dt><i>iotype</i></dt>
|
</dd><dt><i>iotype</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<class 'int'> Wert
|
<class 'int'> Wert
|
||||||
|
|||||||
@@ -12,7 +12,10 @@ revpimodio2.consttostr?4(value)
|
|||||||
revpimodio2.device.Connect.A3?7
|
revpimodio2.device.Connect.A3?7
|
||||||
revpimodio2.device.Connect._devconfigure?5()
|
revpimodio2.device.Connect._devconfigure?5()
|
||||||
revpimodio2.device.Connect._get_leda3?5()
|
revpimodio2.device.Connect._get_leda3?5()
|
||||||
|
revpimodio2.device.Connect._get_wdtrigger?5()
|
||||||
revpimodio2.device.Connect._set_leda3?5(value)
|
revpimodio2.device.Connect._set_leda3?5(value)
|
||||||
|
revpimodio2.device.Connect._set_wdtrigger?5(value)
|
||||||
|
revpimodio2.device.Connect.watchdogtrigger?7
|
||||||
revpimodio2.device.Core.A1?7
|
revpimodio2.device.Core.A1?7
|
||||||
revpimodio2.device.Core.A2?7
|
revpimodio2.device.Core.A2?7
|
||||||
revpimodio2.device.Core._devconfigure?5()
|
revpimodio2.device.Core._devconfigure?5()
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
# (c) Sven Sager, License: LGPLv3
|
# (c) Sven Sager, License: LGPLv3
|
||||||
#
|
#
|
||||||
"""Modul fuer die Verwaltung der Devices."""
|
"""Modul fuer die Verwaltung der Devices."""
|
||||||
from threading import Lock
|
from threading import Thread, Event, Lock
|
||||||
from .helper import ProcimgWriter
|
from .helper import ProcimgWriter
|
||||||
|
|
||||||
|
|
||||||
@@ -434,19 +434,19 @@ class Core(Device):
|
|||||||
|
|
||||||
# Echte IOs erzeugen
|
# Echte IOs erzeugen
|
||||||
self.a1green = IOBase(self, [
|
self.a1green = IOBase(self, [
|
||||||
"a1green", 0, 1, self._ioled.address,
|
"a1green", 0, 1, self._ioled._slc_address.start,
|
||||||
False, None, "LED_A1_GREEN", "0"
|
False, None, "LED_A1_GREEN", "0"
|
||||||
], OUT, "little", False)
|
], OUT, "little", False)
|
||||||
self.a1red = IOBase(self, [
|
self.a1red = IOBase(self, [
|
||||||
"a1red", 0, 1, self._ioled.address,
|
"a1red", 0, 1, self._ioled._slc_address.start,
|
||||||
False, None, "LED_A1_RED", "1"
|
False, None, "LED_A1_RED", "1"
|
||||||
], OUT, "little", False)
|
], OUT, "little", False)
|
||||||
self.a2green = IOBase(self, [
|
self.a2green = IOBase(self, [
|
||||||
"a2green", 0, 1, self._ioled.address,
|
"a2green", 0, 1, self._ioled._slc_address.start,
|
||||||
False, None, "LED_A2_GREEN", "2"
|
False, None, "LED_A2_GREEN", "2"
|
||||||
], OUT, "little", False)
|
], OUT, "little", False)
|
||||||
self.a2red = IOBase(self, [
|
self.a2red = IOBase(self, [
|
||||||
"a2red", 0, 1, self._ioled.address,
|
"a2red", 0, 1, self._ioled._slc_address.start,
|
||||||
False, None, "LED_A2_RED", "3"
|
False, None, "LED_A2_RED", "3"
|
||||||
], OUT, "little", False)
|
], OUT, "little", False)
|
||||||
|
|
||||||
@@ -649,31 +649,38 @@ class Connect(Core):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def __wdtrigger(self):
|
||||||
|
"""WD Ausgang alle 10 Sekunden automatisch toggeln."""
|
||||||
|
while not self.__evt_wdtrigger.wait(10):
|
||||||
|
self.wd.value = not self.wd.value
|
||||||
|
|
||||||
def _devconfigure(self):
|
def _devconfigure(self):
|
||||||
"""Connect-Klasse vorbereiten."""
|
"""Connect-Klasse vorbereiten."""
|
||||||
super()._devconfigure()
|
super()._devconfigure()
|
||||||
|
self.__evt_wdtrigger = Event()
|
||||||
|
self.__th_wdtrigger = None
|
||||||
|
|
||||||
# Echte IOs erzeugen
|
# Echte IOs erzeugen
|
||||||
self.a3green = IOBase(self, [
|
self.a3green = IOBase(self, [
|
||||||
"a3green", 0, 1, self._ioled.address,
|
"a3green", 0, 1, self._ioled._slc_address.start,
|
||||||
False, None, "LED_A3_GREEN", "4"
|
False, None, "LED_A3_GREEN", "4"
|
||||||
], OUT, "little", False)
|
], OUT, "little", False)
|
||||||
self.a3red = IOBase(self, [
|
self.a3red = IOBase(self, [
|
||||||
"a3red", 0, 1, self._ioled.address,
|
"a3red", 0, 1, self._ioled._slc_address.start,
|
||||||
False, None, "LED_A3_RED", "5"
|
False, None, "LED_A3_RED", "5"
|
||||||
], OUT, "little", False)
|
], OUT, "little", False)
|
||||||
|
|
||||||
# IO Objekte für WD und X2 in/out erzeugen
|
# IO Objekte für WD und X2 in/out erzeugen
|
||||||
self.wd = IOBase(self, [
|
self.wd = IOBase(self, [
|
||||||
"wd", 0, 1, self._ioled.address,
|
"wd", 0, 1, self._ioled._slc_address.start,
|
||||||
False, None, "Connect_WatchDog", "7"
|
False, None, "Connect_WatchDog", "7"
|
||||||
], OUT, "little", False)
|
], OUT, "little", False)
|
||||||
self.x2in = IOBase(self, [
|
self.x2in = IOBase(self, [
|
||||||
"x2in", 0, 1, self._iostatusbyte.address,
|
"x2in", 0, 1, self._iostatusbyte._slc_address.start,
|
||||||
False, None, "Connect_X2_IN", "6"
|
False, None, "Connect_X2_IN", "6"
|
||||||
], INP, "little", False)
|
], INP, "little", False)
|
||||||
self.x2out = IOBase(self, [
|
self.x2out = IOBase(self, [
|
||||||
"x2out", 0, 1, self._ioled.address,
|
"x2out", 0, 1, self._ioled._slc_address.start,
|
||||||
False, None, "Connect_X2_OUT", "6"
|
False, None, "Connect_X2_OUT", "6"
|
||||||
], OUT, "little", False)
|
], OUT, "little", False)
|
||||||
|
|
||||||
@@ -687,6 +694,12 @@ class Connect(Core):
|
|||||||
led += int_led & 2
|
led += int_led & 2
|
||||||
return led
|
return led
|
||||||
|
|
||||||
|
def _get_wdtrigger(self):
|
||||||
|
"""Ruft den Wert fuer Autowatchdog ab.
|
||||||
|
@return True, wenn Autowatchdog aktiv ist"""
|
||||||
|
return self.__th_wdtrigger is not None \
|
||||||
|
and self.__th_wdtrigger.is_alive()
|
||||||
|
|
||||||
def _set_leda3(self, value):
|
def _set_leda3(self, value):
|
||||||
"""Setzt den Zustand der LED A3 vom Connect.
|
"""Setzt den Zustand der LED A3 vom Connect.
|
||||||
@param value 0=aus, 1=gruen, 2=rot"""
|
@param value 0=aus, 1=gruen, 2=rot"""
|
||||||
@@ -695,7 +708,29 @@ class Connect(Core):
|
|||||||
else:
|
else:
|
||||||
raise ValueError("led status must be between 0 and 3")
|
raise ValueError("led status must be between 0 and 3")
|
||||||
|
|
||||||
|
def _set_wdtrigger(self, value):
|
||||||
|
"""Setzt den Wert fuer Autowatchdog.
|
||||||
|
|
||||||
|
Wird dieser Wert auf True gesetzt, wechselt im Hintergrund das noetige
|
||||||
|
Bit zum toggeln des Watchdogs alle 10 Sekunden zwichen True und False.
|
||||||
|
Dieses Bit wird bei autorefresh=True natuerlich automatisch in das
|
||||||
|
Prozessabbild geschrieben.
|
||||||
|
|
||||||
|
WICHTIG: Sollte autorefresh=False sein, muss zyklisch
|
||||||
|
.writeprocimg() aufgerufen werden, um den Wert in das
|
||||||
|
Prozessabbild zu schreiben!!!
|
||||||
|
|
||||||
|
@param value True zum aktivieren, Fals zum beenden"""
|
||||||
|
if not value:
|
||||||
|
self.__evt_wdtrigger.set()
|
||||||
|
|
||||||
|
elif not self._get_wdtrigger():
|
||||||
|
self.__evt_wdtrigger.clear()
|
||||||
|
self.__th_wdtrigger = Thread(target=self.__wdtrigger, daemon=True)
|
||||||
|
self.__th_wdtrigger.start()
|
||||||
|
|
||||||
A3 = property(_get_leda3, _set_leda3)
|
A3 = property(_get_leda3, _set_leda3)
|
||||||
|
watchdogtrigger = property(_get_wdtrigger, _set_wdtrigger)
|
||||||
|
|
||||||
|
|
||||||
class Gateway(Device):
|
class Gateway(Device):
|
||||||
|
|||||||
@@ -255,13 +255,13 @@ class IOBase(object):
|
|||||||
|
|
||||||
@param parentdevice Parentdevice auf dem der IO liegt
|
@param parentdevice Parentdevice auf dem der IO liegt
|
||||||
@param valuelist Datenliste fuer Instantiierung
|
@param valuelist Datenliste fuer Instantiierung
|
||||||
["name","defval","bitlen","startaddr",exp,"idx","bmk","bitaddr"]
|
["name","defval","bitlen","startaddrdev",exp,"idx","bmk","bitaddr"]
|
||||||
@param iotype <class 'int'> Wert
|
@param iotype <class 'int'> Wert
|
||||||
@param byteorder Byteorder 'little'/'big' fuer <class 'int'> Berechnung
|
@param byteorder Byteorder 'little'/'big' fuer <class 'int'> Berechnung
|
||||||
@param sigend Intberechnung mit Vorzeichen durchfuehren
|
@param sigend Intberechnung mit Vorzeichen durchfuehren
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# ["name","defval","bitlen","startaddr",exp,"idx","bmk","bitaddr"]
|
# ["name","defval","bitlen","startaddrdev",exp,"idx","bmk","bitaddr"]
|
||||||
# [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ]
|
# [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ]
|
||||||
self._parentdevice = parentdevice
|
self._parentdevice = parentdevice
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user