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">
|
||||
Class Attributes</h3>
|
||||
<table>
|
||||
<tr><td>A3</td></tr>
|
||||
<tr><td>A3</td></tr><tr><td>watchdogtrigger</td></tr>
|
||||
</table>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Class Methods</h3>
|
||||
@@ -69,14 +69,23 @@ Class Methods</h3>
|
||||
Methods</h3>
|
||||
<table>
|
||||
<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>Connect-Klasse vorbereiten.</td>
|
||||
</tr><tr>
|
||||
<td><a style="color:#0000FF" href="#Connect._get_leda3">_get_leda3</a></td>
|
||||
<td>Gibt den Zustand der LED A3 vom Connect zurueck.</td>
|
||||
</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>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>
|
||||
</table>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
@@ -84,7 +93,13 @@ Static Methods</h3>
|
||||
<table>
|
||||
<tr><td>None</td></tr>
|
||||
</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">
|
||||
Connect._devconfigure</h3>
|
||||
<b>_devconfigure</b>(<i></i>)
|
||||
@@ -101,6 +116,17 @@ Gibt den Zustand der LED A3 vom Connect zurueck.
|
||||
<dd>
|
||||
0=aus, 1=gruen, 2=rot
|
||||
</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>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Connect._set_leda3</h3>
|
||||
@@ -112,6 +138,26 @@ Setzt den Zustand der LED A3 vom Connect.
|
||||
<dd>
|
||||
0=aus, 1=gruen, 2=rot
|
||||
</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>
|
||||
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
||||
<hr /><hr />
|
||||
|
||||
@@ -202,7 +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"]
|
||||
["name","defval","bitlen","startaddrdev",exp,"idx","bmk","bitaddr"]
|
||||
</dd><dt><i>iotype</i></dt>
|
||||
<dd>
|
||||
<class 'int'> Wert
|
||||
|
||||
@@ -12,7 +12,10 @@ revpimodio2.consttostr?4(value)
|
||||
revpimodio2.device.Connect.A3?7
|
||||
revpimodio2.device.Connect._devconfigure?5()
|
||||
revpimodio2.device.Connect._get_leda3?5()
|
||||
revpimodio2.device.Connect._get_wdtrigger?5()
|
||||
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.A2?7
|
||||
revpimodio2.device.Core._devconfigure?5()
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
# (c) Sven Sager, License: LGPLv3
|
||||
#
|
||||
"""Modul fuer die Verwaltung der Devices."""
|
||||
from threading import Lock
|
||||
from threading import Thread, Event, Lock
|
||||
from .helper import ProcimgWriter
|
||||
|
||||
|
||||
@@ -434,19 +434,19 @@ class Core(Device):
|
||||
|
||||
# Echte IOs erzeugen
|
||||
self.a1green = IOBase(self, [
|
||||
"a1green", 0, 1, self._ioled.address,
|
||||
"a1green", 0, 1, self._ioled._slc_address.start,
|
||||
False, None, "LED_A1_GREEN", "0"
|
||||
], OUT, "little", False)
|
||||
self.a1red = IOBase(self, [
|
||||
"a1red", 0, 1, self._ioled.address,
|
||||
"a1red", 0, 1, self._ioled._slc_address.start,
|
||||
False, None, "LED_A1_RED", "1"
|
||||
], OUT, "little", False)
|
||||
self.a2green = IOBase(self, [
|
||||
"a2green", 0, 1, self._ioled.address,
|
||||
"a2green", 0, 1, self._ioled._slc_address.start,
|
||||
False, None, "LED_A2_GREEN", "2"
|
||||
], OUT, "little", False)
|
||||
self.a2red = IOBase(self, [
|
||||
"a2red", 0, 1, self._ioled.address,
|
||||
"a2red", 0, 1, self._ioled._slc_address.start,
|
||||
False, None, "LED_A2_RED", "3"
|
||||
], 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):
|
||||
"""Connect-Klasse vorbereiten."""
|
||||
super()._devconfigure()
|
||||
self.__evt_wdtrigger = Event()
|
||||
self.__th_wdtrigger = None
|
||||
|
||||
# Echte IOs erzeugen
|
||||
self.a3green = IOBase(self, [
|
||||
"a3green", 0, 1, self._ioled.address,
|
||||
"a3green", 0, 1, self._ioled._slc_address.start,
|
||||
False, None, "LED_A3_GREEN", "4"
|
||||
], OUT, "little", False)
|
||||
self.a3red = IOBase(self, [
|
||||
"a3red", 0, 1, self._ioled.address,
|
||||
"a3red", 0, 1, self._ioled._slc_address.start,
|
||||
False, None, "LED_A3_RED", "5"
|
||||
], OUT, "little", False)
|
||||
|
||||
# IO Objekte für WD und X2 in/out erzeugen
|
||||
self.wd = IOBase(self, [
|
||||
"wd", 0, 1, self._ioled.address,
|
||||
"wd", 0, 1, self._ioled._slc_address.start,
|
||||
False, None, "Connect_WatchDog", "7"
|
||||
], OUT, "little", False)
|
||||
self.x2in = IOBase(self, [
|
||||
"x2in", 0, 1, self._iostatusbyte.address,
|
||||
"x2in", 0, 1, self._iostatusbyte._slc_address.start,
|
||||
False, None, "Connect_X2_IN", "6"
|
||||
], INP, "little", False)
|
||||
self.x2out = IOBase(self, [
|
||||
"x2out", 0, 1, self._ioled.address,
|
||||
"x2out", 0, 1, self._ioled._slc_address.start,
|
||||
False, None, "Connect_X2_OUT", "6"
|
||||
], OUT, "little", False)
|
||||
|
||||
@@ -687,6 +694,12 @@ class Connect(Core):
|
||||
led += int_led & 2
|
||||
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):
|
||||
"""Setzt den Zustand der LED A3 vom Connect.
|
||||
@param value 0=aus, 1=gruen, 2=rot"""
|
||||
@@ -695,7 +708,29 @@ class Connect(Core):
|
||||
else:
|
||||
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)
|
||||
watchdogtrigger = property(_get_wdtrigger, _set_wdtrigger)
|
||||
|
||||
|
||||
class Gateway(Device):
|
||||
|
||||
@@ -255,13 +255,13 @@ class IOBase(object):
|
||||
|
||||
@param parentdevice Parentdevice auf dem der IO liegt
|
||||
@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 byteorder Byteorder 'little'/'big' fuer <class 'int'> Berechnung
|
||||
@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 ]
|
||||
self._parentdevice = parentdevice
|
||||
|
||||
|
||||
Reference in New Issue
Block a user