watchdogtrigger in Connect-Klasse integriert (Wechselt alle 10 Sekunden)

Adressen der core/connect IOs verbessert
This commit is contained in:
2018-08-01 15:49:02 +02:00
parent 5cb806bbc5
commit e7c1f522dc
5 changed files with 99 additions and 15 deletions

View File

@@ -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 />

View File

@@ -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

View File

@@ -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()

View File

@@ -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):

View File

@@ -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