Der Thread für den Handbetrieb ist relativ simpel durch die Event-Steuerung von RevPiModIO.
Der Thread wird durch die Evenfunktion def evt_start(self):
aus unserem vorherigen Beitrag gestartet.
In dem Thread werden alle Taster für den Handbetrieb als Events registriert und an Funktionen gebunden, die die dazugehörige Aktion ausführen. Die Schleife, die der Thread bei def run(self):
ausführt lässt lediglich die „h_automatik“ Lampe blinken. Wenn der Thread durch Aufruf von .stop()
beendet wird, werden die Eventfunktionen wieder entfernt und die Taster haben keine Funktion mehr.
class Hand(Thread): """Thread fuer den Handbetrieb.""" def __init__(self, rpi): """Instanziiert Thread.""" super().__init__() self.evt_ende = Event() self.daemon = True self.rpi = rpi self.m1 = False self.m2 = False self.m3 = False def run(self): """Wird ausgefuehrt wenn der Thread gestartet wird. Hier werden fuer alle Taster des Handbetriebs die noetigen Events registriert. Die einzige Aufgabe, die diese Funktion sonst noch ausfuehrt, ist das Blinken der Lampe h_automatik. Alles weitere wird durch Events gesteuert. """ # Lampe h_start Einschalten self.rpi.devices["do02"]["h_start"] = True self.rpi.devices["di01"].reg_event("t_m1", self.evt_zylinder, edge=revpimodio.RISING) self.rpi.devices["di01"].reg_event("t_m2", self.evt_zylinder, edge=revpimodio.RISING) self.rpi.devices["di01"].reg_event("t_m3", self.evt_zylinder, edge=revpimodio.RISING) self.rpi.devices["di01"].reg_event("t_lahm_rechts", self.evt_bandlauf) self.rpi.devices["di01"].reg_event("t_lahm_links", self.evt_bandlauf) self.rpi.devices["di01"].reg_event("t_schnell_rechts", self.evt_bandlauf) # Warten bis Ende while not self.evt_ende.is_set(): self.rpi.devices["do02"]["h_automatik"] = funccatalog.myflash.status1 funccatalog.myflash.wait() self.rpi.devices["do02"]["h_automatik"] = False # Lampe h_start Ausschalten self.rpi.devices["do02"]["h_start"] = False def evt_bandlauf(self, ioname, iovalue): """Eventfunktion fuer das Ein-/Auschalten des Bandmotors.""" aktion = False if ioname == "t_lahm_links" and iovalue: aktion = funccatalog.band.set_lahm_links(True) elif ioname == "t_lahm_rechts" and iovalue: aktion = funccatalog.band.set_lahm_rechts(True) elif ioname == "t_schnell_rechts" and iovalue: aktion = funccatalog.band.set_schnell_rechts(True) funccatalog.anlage.stoerung = False if not aktion: funccatalog.band.set_lahm_links(False) funccatalog.band.set_lahm_rechts(False) funccatalog.band.set_schnell_rechts(False) def evt_zylinder(self, ioname, iovalue): """Eventfunktion fuer Ein-/Ausfahren von Zylinder.""" if ioname == "t_m1": self.m1 = not self.m1 funccatalog.zylinder.set_m1(not self.m1) elif ioname == "t_m2": self.m2 = not self.m2 funccatalog.zylinder.set_m2(self.m2) funccatalog.anlage.stoerung = False elif ioname == "t_m3": self.m3 = not self.m3 funccatalog.zylinder.set_m3(self.m3) funccatalog.anlage.stoerung = False def stop(self): """Beendet den Thread und entfernt alle registrierten Events. Durch das Entfernen der Events sind die Taster fuer den Handbetrieb ohne Funktion. """ self.evt_ende.set() self.rpi.devices["di01"].unreg_event("t_m1") self.rpi.devices["di01"].unreg_event("t_m2") self.rpi.devices["di01"].unreg_event("t_m3") self.rpi.devices["di01"].unreg_event("t_lahm_rechts") self.rpi.devices["di01"].unreg_event("t_lahm_links") self.rpi.devices["di01"].unreg_event("t_schnell_rechts")