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

