Praktikum „Fahrstuhl“

Das Studentenpraktikum war mal für eine Mini-Drehmaschine vorgesehen, stattdessen wurde ein Aufzug-Modell mit 2 Motoren (Hebezug und Tür) und vier Tasten realisiert.

Ziel ist das Kennenlernen von Frequenzumrichtern, erst mal im Kleinformat. Trotzdem hat der ARS2302 bereits eine Drehstrom-Speisung ohne Sternpunkt.

Derzeitiger Stand: Steuerung in LabVIEW funktionstüchtig und vorführbar. Vollständige automatische Funktion der Etagenrufknöpfe, revidierbar in der GUI. LabVIEW-Programm ist übersichtlich, dokumentiert und archivierbar. Keine Dokumentation für die Versuchsdurchführung. (Nach meinen Vorstellungen geht diese auf das Programm ServoCommander ein, dann die Schnittstellen-Betrachtung mit Beispiel-Übertragungen im LabVIEW-Programm, schließlich auf die Realisierung eines Automaten in LabVIEW.)

Versuchsaufbau. Der Umrichter ist das türkisfarbene Ding rechts. Der Motor für den Vertikalantrieb ist oben aus dem Bild herausgefallen. Der Türmotor samt Ansteuerung befindet sich am Fahrkorb

Verwendete Hardware

Ursprünglich sollte zur Kommunikation RS-485 verwendet werden. Ich halte das im Zeitalter von Industrie 4.0 für total rückschrittlich! Wenn sich schon Sensoren und Aktoren gegenseitig erkennen sollen, dann schon mit einem PnP-fähigen Anschluss. Daher ist jetzt alles lückenlos auf USB getrimmt. Am schwierigsten war das für den ARS2003 umzusetzen. Viel zu teuer gekaufte USB-zu-RS-485-Konverter (von NI) gammeln nun im Schrank herum und warten auf den Sankt-Nimmerleinstag. Ausgerechnet der ARS2003 ließ damit überhaupt nicht zur Kommunikation bewegen, also völlig sinnlos.

Die Referenztaster können sowohl mit dem NI USB-6008 als auch mit den jeweiligen Steuerungen abgefragt werden. Die Doppelbelegung rührt daher, weil das nicht von vornherein klar war. Werden weitere USB-6008-Anschlüsse gebraucht, sollte man sich hier bedienen.

Dateien

Frontpaneel des ARS2000-Terminalprogramms

Hier können die einzelnen LabVIEW-Unterprogramme (für das Terminalprogramm) an Bildern studiert werden. Sämtliche GUI-Elemente sind aus der Bibliothek „System“, damit das laufende LabVIEW-Programm (ein Dialog) nicht allzu sehr wie ein Fremdkörper in der Windows-Umgebung aussieht. Abgesehen vom Fehler-Cluster kann man's nur noch am Fenster-Symbol (oben links) erkennen, dass es LabVIEW ist. ENTER drückt den Knopf „Abfragen“ und ESC sowie Alt+F4 beendet das Programm.

Umrichter

Für den PC-Zugriff (vorzugsweise LabVIEW) zum Umrichter ARS2302 standen einige Möglichkeiten offen:

Bugs

Der Umrichter „vergisst“ die Einstellung zur „Reglerfreigabe über DIn5 und Parametrierschnittstelle“ nach dem Ausschalten trotz SAVE!-Kommando. Per USB-Paketschnüffler wurde das zugehörige undokumentierte Kommando-Objekt 0314x herausgefunden, was während DIn5 = LOW auf 00000001 gesetzt werden muss.

Der Umrichter verlangt undokumentierte Vorhaltezeiten für Din5 und Din4, bevor pegelabhängige Kommandos erwartungsgemäß funktionieren, hier das Quittieren von Fehlern (DIn5 = LOW) und die Reglerfreigabe (DIn5 = HIGH). 50 ms scheinen zu genügen.

Das Lesen des Lagesollwertes OR:01AA liefert nicht die Zielposition, sondern annähernd den Istwert. Istposition OR:01AB funktioniert.

Zustandsdiagramm

Zustandsdiagramm, tabellarisch
NummerZustandEreignisAktionÜbergang zu
0Einschaltzustand
Automatische Lageerkennung → je nach Lage
1Tür geöffnet Zielanforderung = IstpositionTimeout zurücksetzen
Zielanforderung := NaN
Tasten-LED ausschalten
→ 1
TimeoutTür schließen → 2
Zielanforderung ≠ NaN
2Tür schließt X-Endschalter 1 erreichtTür Halt → 3
Zielanforderung = Istposition → 5
Kollision (Lichtschranke o.ä.)
Timeout → 255
3Tür geschlossen, Fahrkorb steht Zielanforderung = IstpositionTür öffnen → 5
Zielanforderung ≠ NaNFahrkorb Zielfahrt → 4
4Fahrkorb in Bewegung Zielanforderung = IstpositionTür öffnen → 5
TimeoutFahrkorb Halt → 255
Z-Endschalter betätigt
5Tür öffnet X-Endschalter 2 erreichtTür Halt → 1
Timeout → 255
255Fehler Benutzereingriff → je nach Benutzer
Die Zielanforderung kann sich während der Fahrt ändern, wenn eine Anforderungliegt.
Die Festlegung der nächsten Zielanforderung erfolgt nach folgenden Kriterien:
Festlegung der nächsten Zielposition
NummerFahrtrichtungSetze Zielanforderung aufNeue Fahrtrichtung
0keineNächstgelegenes Ziel von IstpositionKeine Ziele → 0
Ziel = Istposition → Ziel setzen, 0 (öffnet Tür)
Ziel > Istposition → Ziel setzen, 1
Ziel < Istposition → Ziel setzen, 2
1aufwärtsKleinstes Ziel ≥ Istposition + BremswegKeine Ziele → 0
Kein geeignetes Ziel → 2
→ Ziel setzen, 1
2abwärtsGrößtes Ziel ≤ Istposition - BremswegKeine Ziele → 0
Kein geeignetes Ziel → 1
→ Ziel setzen, 2
Der Bremsweg ist Null wenn der Fahrkorb steht. Dadurch decken Tastendrücke der aktuellen Etage bei Stillstand das sofortige Öffnen der Tür ab. Ansonsten kann ein „ungeeignetes“ Ziel erst bei Umkehr der Fahrrichtung erreicht werden. Dadurch sortieren sich die Anforderungen derart, dass — wie bei einem richtigen Aufzug — die Fahrtrichtung möglichst lange beibehalten wird. Andererseits werden „eingeschobene“ Anhalte-Anforderungen vor der Vorbeifahrt des Fahrkorbs akzeptiert („Anhalter-Prinzip“).
Die Ziele sind ein Array aus den Positionsangaben der (konstanten) Etagenpositionen, für die eine Anforderung (= vorhergehender Knopfdruck) besteht. Für die Implementierung ist ein Ziel etwa ein Cluster aus 3 Elementen: oder nur die Knopf-Nummer (= Etagennummer), dann ohne Timeout.

Bugs

Die LabVIEW-Funktion „Maximum + Minimum suchen“ bei Double-Vektor als Eingang liefert beim Vektor komplett aus NaN den Wert 0. (Als Minimum, sicherlich auch als Maximum.)

LabVIEW 2010 unterstützt nicht das asynchrone Starten von typisierten VIs. Sondern nur (immerhin) untypisiert. Hätte ich mal wissen müssen, aber der Umstieg zu LabVIEW 2017 ist eh' fällig.

Das war für das Unterprogramm Liftboy.vi vorgesehen, welches parallel instantiiert werden sollte. Zur gegenseitigen Synchronisierung der beiden Threads beim Hardware-Zugriff spielt die in LabVIEW normalerweise aktivierte Funktion „Synchroner VI-Aufruf“ eine wichtige Rolle! Mit „Reentrantes VI“ müssten alle Hardware-Zugriffe mühevoll per Semaphore serialisiert werden, damit das Hauptprogramm weiterhin Statuswerte auslesen kann.

Da (Kommando-)Schreiben zu und (Status-)Lesen von einer Schnittstelle logisch zusammengehören (Transaktions-Prinzip), sind genau jene VIs nicht-reentrant. Die verschiedenen Schnittstellen könnten jeweils parallel arbeiten (1 Thread pro Schnittstelle), programmatisch ergibt sich hier allerdings kein Vorteil.

Das Unterprogramm Liftboy.vi arbeitet via zyklischem Aufruf im Timeout-Ereignis des Hauptprogramms.

Im Gegensatz zu echten Aufzügen verlischt die Tasten-Lampe erst nach dem vollständigen Öffnen der Tür. Das ist derzeit so im Programmkode eingebaut und eine Verhaltensänderung ist mit einigen Konsequenzen bei der Ereignisverarbeitung verbunden.

Erweiterungen

Die Etagenruftasten kann man sich im Fahrkorb mit denen an den Türen (außen) parallelgeschaltet vorstellen. Dies wird so bei einfachen Aufzügen praktiziert, häufig in Wohngebäuden.

Bei Aufzügen im gewerblichen Umfeld, wie etwa hier in der Universität, befinden sich an jeder Tür (außer im Keller und in der obersten Etage) zwei Tasten, mit dem die gewünschte Fahrtrichtung angegeben werden kann bzw. muss. Dann hält der Fahrkorb nur dann, wenn es in der gewünschten Fahrtrichtung weitergeht, sonst fährt er durch. Eine Parallelschaltung ist dann nicht mehr möglich.

Noch komplexer sind kombinierte Aufzugssteuerungen, also mehrere Fahrkörbe mit gemeinsamer Ruffunktion. Siehe Zwillings-Aufzüge im Weinhold-Bau sowie in den Studentenwohnheimen.

Einfach realisierbar

Richtungsgebundene Anforderungen lassen sich in das LabVIEW-Programm noch recht einfach einbauen, indem pro Etage zwei Rufknöpfe vorgesehen werden (2D-Array statt Vektor). Mit etwas Logik lassen sich die Zielknöpfe im Fahrkorb mit den Außentasten verknüpfen. Klar, im Keller und im Penthouse gibt's nur einen Knopf.

Beispielhafte Übergangsfunktionen
RichtungZ-LageEreignisReaktion
keineAuf gleicher EtageKnopf aufwärtsTür öffnen, Knopflicht aus (beide)
keineAuf tieferer EtageKnopf aufwärtsAufwärtsfahrt aktivieren, Fahrkorb holen, Tür öffnen, Knopflicht aus (beide) wenn inzwischen keine weitere Anforderung
aufwärtsAuf höherer EtageKnopf aufwärtsNichts passiert! Nur das Knopflicht geht an
abwärtsAuf höherer EtageKnopf aufwärtsNichts passiert! Nur das Knopflicht geht an
aufwärtsAuf tieferer EtageKnopf aufwärtsZwischenhalt einschieben oder weiter fahren als bisher
aufwärtsAuf tieferer EtageKnopf im FahrkorbZwischenhalt einschieben oder weiter fahren als bisher
aufwärtsAuf höherer EtageKnopf im FahrkorbNichts passiert! Nur das Knopflicht geht an

Analogievorstellung (als Gedankenstütze zur Programmierung): Ein Bus fährt eine Straße rauf und runter. Ich als Fahrgast kann mich nur auf eine Seite der Straße an eine Bushaltestelle stellen. Sieht mich der Busfahrer früh genug (Analogie: Bremsweg), kann er anhalten und mich mitnehmen. Auf diese Weise würde der Bus unzählige Leerfahrten machen, immer bis ans Streckenende (wie im richtigen Linienverkehr und beim Paternoster). Um diese Leerfahrten zu vermeiden, „sieht“ der Busfahrer zusätzlich „aus der Ferne“, ob überhaupt Fahrgäste voraus sind. Er muss nur dann weiter vorwärts fahren, wenn noch jemand da ist oder jemand im Bus sitzt mit einem Ziel voraus. Ansonsten wendet er und „sieht“ in der anderen Richtung. Ist auch dort niemand, bleibt er stehen und sieht in beide Richtungen. Erst wenn jemand auftaucht, setzt er sich in Bewegung. In diesem Fall nach dem Prinzip „Wer zuerst kommt wird zuerst bedient“ auch wenn die Strecke weiter ist. Bei zweien in verschiedenen Richtungen gleichzeitig orientiert sich die derzeitige Implementierung nach der kürzesten Entfernung. Viele Aufzüge und auch Busfahrer fahren nach langem Nichtstun zu ihrem Heimathafen. Beim Aufzug ist das meist das Erdgeschoss.

Busfahrer, jedoch (IMHO) nicht Aufzüge fahren an Haltestellen mit Wartenden durch, wenn der Bus voll ist und niemand aussteigen will (also Platz machen kann).

Widerruf von Anforderungen

Bisher nicht gesehen aber sinnvoll ist es, Anforderungen aufzukündigen.

Umbau der Vertikalachse

Da die sehr lange Vertikalspindel zum unangenehmen Schlackern neigt, wurde diese durch einen Zahnriemen ersetzt, der von einem zweistufigen Untersetzungsgetriebe angetrieben wird. Es hat immer noch genügend Selbsthemmung, um den Absturz des Fahrkorbs zu verhindern. Auch die Führung wurde ersetzt; diese erfolgt nun mithilfe der Nuten des Boschprofils.

Verantwortlich: Nikolaus Trnka