Bei der ersten Version unseres Revolutionsumbaus war der Aufbau vom Prüfungsobjekt fest vorgegeben. Positionen von Sensoren und Zylinder, aber auch der Ablauf musste strickt eingehalten werden.
Das ist jetzt VORBEI! Wir können alles anpassen wie es uns gefällt!
Also gibt es einen komplett neuen Schaltschrank, mit viel Platz für Neuerungen! Die Bedienflaschen fallen komplett weg. Start, Stop, Betriebswahl, Notaus usw. werden direkt in die Tür eingebaut. Die Taster für den Handbetrieb entfallen GANZ (seid gespannt, das kommt in einem weiteren Beitrag)!
Die nächste und tollste Neuerung ist ein Frequenzumrichter (FU)! Diesen steuern wir, bis die analogen Module für den Revolution Pi verfügbar sind, digital an. Die alten Schütze fallen komplett weg!
Nun können wir unsere piCtory Konfiguration anpassen. Der FU benötigt in unserem Fall 6 digitale Ausgänge. Diese konfigurieren wir auf unserem „do01“:
fu_rechts / fu_links
fu_schnell / fu_lahm
fu_freigabe
Ein weiterer „fu_reset“ auf dem „do02“.
Außerdem stellen wir für den FU zwei digitale Eingänge auf unserem „di01“ zur Verfügung. Über diese erhalten wir ein 1 Signal, wenn der FU fehlerfrei arbeitet und ein weiteres 1 Signal wenn der Motor läuft.
fu_ok / fu_motoran
Der FU wurde mit Start- Stoppflanken a 500 ms konfiguriert. Der Eingang „fu_motoran“ wird erst auf 0 gesetzt, wenn der FU den Motor „angehalten“ hat, sprich nach der 500 ms Flanke.
In unserem alten Steuerungsprogramm für den Revolutionsumbau, haben wir für die Bandsteuerung eine eigene Klasse geschrieben class Band(Thread):
. Diese stellt allen anderen Teilen des Programms Funktionen zur Verfügung um das Band zu starten und stoppen.
Diese Klasse ist nun der einzige Punkt, den wir auf unseren FU anpassen müssen. Die neue Klasse sieht dann so aus:
class Band(Thread): """Thread fuer die Steuerung des Bandmotors. Ueber die hier zur Verfuegung gestellten Funktionen steuert das Programm die Eigenschaften des Bandmotors. Die Funktionen kontrollieren selbststaendig ob die gewuenschte Betriebsart erlaubt ist und geben jeweils True oder False zurueck. Damit kann in dem aufrufenden Teiles des Programms kontrolliert werden, ob die Aktion durchgefuert werden konnte. """ def __init__(self, rpi): """Instanziiert den Bandthread.""" super().__init__() self.evt_ende = Event() self.daemon = True self.rpi = rpi def grundstellung(self, wait=False): """Setzt die Motorensteuerung in die Grundstellung. @return True, wenn erfolgreich durchgefuert""" self.rpi.io.fu_rechts.value = False self.rpi.io.fu_links.value = False self.rpi.io.fu_schnell.value = False self.rpi.io.fu_lahm.value = False if wait: return self.rpi.io.fu_motoran.wait( exitevent=self.evt_ende, okvalue=False, timeout=2000 ) <= 0 else: return True def set_lahm_rechts(self): """Band langsam nach rechts laufen lassen. @return True, wenn Aktion ausgefuehrt werden konnte""" return self.switch("fu_rechts", "fu_lahm") def set_lahm_links(self): """Band langsam nach links laufen lassen. @return True, wenn Aktion ausgefuehrt werden konnte""" return self.switch("fu_links", "fu_lahm") def set_schnell_rechts(self): """Band schnell nach rechts laufen lassen. @return True, wenn Aktion ausgefuehrt werden konnte""" return self.switch("fu_rechts", "fu_schnell") def set_schnell_links(self): """Band schnell nach links laufen lassen. @return True, wenn Aktion ausgefuehrt werden konnte""" return self.switch("fu_links", "fu_schnell") def switch(self, richtung, speed): if self.rpi.io.notaus_ok.value and self.rpi.io.fu_frei.value: # Wenn bereits läuft if self.rpi.io[richtung].value and self.rpi.io[speed].value: return True # Grundstellung einnehmen und bei Erfolg schalten if self.grundstellung(self.rpi.io.fu_motoran.value): self.rpi.io[richtung].value = True self.rpi.io[speed].value = True return True else: self.grundstellung() return False def run(self): """Wird durchgehend ausgefuehrt, wenn Bandthread laeuft. In dieser Funktion werden die Lampen gesteuert, die je nach Betriebsart dauerhaft leuchten (Automatikbetrieb) oder blinken (Handbetrieb) wenn der Motor lauft. """ while not self.evt_ende.is_set(): # FU-Freigabe auswerten self.rpi.io.fu_frei.value = \ self.rpi.io.notaus_ok.value and \ self.rpi.io.motorschutz_ok.value myflash.wait() def stop(self): """Beendet den Bandthread.""" self.evt_ende.set()