Berechnung von Bit-IOs über mehr als 2 Bytes angepasst

wd und x2out Ansteuerung verbessert
Connect Funkscheiben werden als Devices ignoriert
Alle Cores werden bei syncoutputs nicht mehr mit \x00 vorbelegt
issubclass gegen isinstance getauscht
.exitsignal-Event für den Benutzer hinzugefügt
Bei Core-Klasse a*green / a*red als echte IOs hinzugefügt
This commit is contained in:
2018-08-01 12:43:49 +02:00
parent c10f36001f
commit 5cb806bbc5
5 changed files with 74 additions and 28 deletions

View File

@@ -79,6 +79,9 @@ class RevPiModIO(object):
self.io = None
self.summary = None
# Event für Benutzeraktionen
self.exitsignal = Event()
# Nur Konfigurieren, wenn nicht vererbt
if type(self) == RevPiModIO:
self._configure(self.get_jconfigrsc())
@@ -177,6 +180,9 @@ class RevPiModIO(object):
dev_new = devicemodule.Gateway(
self, device, simulator=self._simulator
)
elif device["type"] == "RIGHT":
# Connectdevice
dev_new = None
else:
# Device-Type nicht gefunden
warnings.warn(
@@ -216,6 +222,20 @@ class RevPiModIO(object):
if self._syncoutputs:
self.syncoutputs()
# Für RS485 errors am core defaults laden sollte procimg NULL sein
if not (self.core is None or self._monitoring or self._simulator):
if self.core._ioerrorlimit1 is not None:
self.core._ioerrorlimit1.set_value(
self.core._ioerrorlimit1._defaultvalue
)
if self.core._ioerrorlimit2 is not None:
self.core._ioerrorlimit2.set_value(
self.core._ioerrorlimit2._defaultvalue
)
# RS485 errors schreiben
self.writeprocimg(self.core)
# Optional ins autorefresh aufnehmen
if self._autorefresh:
self.autorefresh_all()
@@ -374,6 +394,9 @@ class RevPiModIO(object):
# Zeitänderung in _imgwriter neuladen
self._imgwriter.newdata.clear()
# Benutzerevent
self.exitsignal.clear()
# Cycleloop starten
self._exit.clear()
self._looprunning = True
@@ -423,6 +446,10 @@ class RevPiModIO(object):
wird dann gestoppt und das Programm kann sauber beendet werden.
@param full Entfernt auch alle Devices aus autorefresh"""
# Benutzerevent
self.exitsignal.set()
self._exit.set()
self._waitexit.set()
@@ -544,6 +571,9 @@ class RevPiModIO(object):
self._th_mainloop.start()
return
# Benutzerevent
self.exitsignal.clear()
# Event säubern vor Eintritt in Mainloop
self._exit.clear()
self._looprunning = True
@@ -592,7 +622,7 @@ class RevPiModIO(object):
if device is None:
mylist = self.device
else:
dev = device if issubclass(type(device), devicemodule.Device) \
dev = device if isinstance(device, devicemodule.Device) \
else self.device.__getitem__(device)
if dev._selfupdate:
@@ -647,7 +677,7 @@ class RevPiModIO(object):
if device is None:
mylist = self.device
else:
dev = device if issubclass(type(device), devicemodule.Device) \
dev = device if isinstance(device, devicemodule.Device) \
else self.device.__getitem__(device)
mylist = [dev]
@@ -667,12 +697,12 @@ class RevPiModIO(object):
if device is None:
mylist = self.device
else:
dev = device if issubclass(type(device), devicemodule.Device) \
dev = device if isinstance(device, devicemodule.Device) \
else self.device.__getitem__(device)
if dev._selfupdate:
raise RuntimeError(
"can not sync process image, while device '{}|{}'"
"can not sync outputs, while device '{}|{}'"
"is in autorefresh mode".format(dev._position, dev._name)
)
mylist = [dev]
@@ -710,7 +740,7 @@ class RevPiModIO(object):
if device is None:
mylist = self.device
else:
dev = device if issubclass(type(device), devicemodule.Device) \
dev = device if isinstance(device, devicemodule.Device) \
else self.device.__getitem__(device)
if dev._selfupdate: