Riesenrad

ftComputing : Programme für die fischertechnik-Interfaces und -konstruktionskästen
  
ftComputing.de
Home
Back
Riesenrad LLWin
Sitemap
Index
Links
Impressum
Mail

 

Programmgesteuertes Riesenrad

Schrittweise Entwicklung eines Betriebsprogrammes für das Riesenrad aus Fun Park 57 484
(Anleitung allein 62 959)

Das mit Motorantrieb ausgerüstete Riesenrad wurde dazu nur wenig umgerüstet :

  • Antriebsmotor an M1
  • Im Fußbereich wurden das Intelligent Interface und der Taster E1 untergebracht. 
  • Am hinteren Scheibenrad wurden Schaltnocken (siehe Bild) und der Taster E2 montiert.

Das ist alles.

Für diejenigen, die rein zufällig gerade kein Riesenrad haben oder denen ein Riesenrad auf dem Schreibtisch zu sperrig ist, aber trotzdem die gezeigten Programme ausprobieren wollen : 

Ein Simulationsmodell.

Es kann die gleichen Steuerfunktionen ausführen wie das Original. Das Zeitverhalten entspricht nicht ganz dem großen Modell. Besonders beim Anfahren und Anhalten macht sich das bemerkbar. Die verwendeten Zeitkonstanten sind anzupassen (zu verkleinern).

Der gelbe Zeiger markiert die Position der unteren Gondel.

Und nun geht's los :

Schritt 1 : Aus- und Einsteigen der Fahrgäste

Sub Main
  Dim i%
  For i = 1 To 6
    SetMotor ftiM1, ftiLinks
    WaitForHigh ftiE2
    Pause 1500
    SetMotor ftiM1, ftiAus
    Pause 4000
  Next i
End Sub
 
Alle Gondeln werden nacheinander zu Einsteigeposition gefahren. Zum Aus- und Einsteigen wird gehalten.

Kernpunkt der Positionserkennung ist der Befehl WaitForHigh (Warten auf einen False/True-Durchgang). Ein schlichtes Warten auf E2 = True reicht nicht, da noch auf True stehen kann. 
Da mit E2 = True die exakte Einsteigeposition nicht gewährleistet ist (Lage des Taster, Masse des Riesenrades), wird nach E2 = True noch ein paar (1,5) Sekunden weitergefahren und dann erst abgeschaltet. Danach folgt die Pause für das Aus- und Einsteigen. Das ganze immer schön in einer 6er-Schleife.

ACHTUNG : Die Länge der Pause (hier Pause 1500) hängt beim Original Riesenrad von der Beladung und der Befestigung der Hauptachse ab. Sie lag bei mir zwischen 1500 (12 Männeken) und 3200 (leer).

Schritt 2 : Die Fun-Runden :

Sub Main
  Dim i%
  Do
    PrintStatus "--- Ein- und Aussteigen ---"
' --- weiter wie oben ...

    PrintStatus "--- Tour linksrum ---"
    SetMotor ftiM1, ftiLinks
    Pause 15000 * EA
    SetMotor ftiM1, ftiAus
    Pause 1000
    PrintStatus "--- Tour rechtsrum ---"
    SetMotor ftiM1, ftiRechts
    Pause 15000 * EA
    SetMotor ftiM1, ftiAus
    Pause 1000
  Loop Until Finish(ftiE1)
End Sub
 
Das ganze Programm wird in eine Do ... Loop-Schleife gepackt, so erhält man ein schönes Demo-Programm, das durch E1 = True, die ESC-Taste oder den HALT-Button der Entwicklungsumgebung abgebrochen werden kann. Zusätzlich wird mit PrintStatus in der Statuszeile der IDE die aktuelle Funktion angezeigt.

Nach dem Ein-/Aussteigen (wie bisher) wird 15 Sek. links und dann 15 Sek rechts gedreht. Da es bei sofortiger Richtungsumschaltung richtig knirschen kann, wird dazwischen 1 Sek. Pause eingelegt. 

Wenn man die Runden gerne länger hätte, kann man im EA-Feld der IDE einen Faktor eingeben, der die Rundenzeit entsprechend multipliziert.

Schritt 3a : Echt-Betrieb

Sub Main
  Dim i%
  For i = 1 To 6
    SetMotor ftiM1, ftiLinks
    WaitForHigh ftiE2
    Pause 1500
    SetMotor ftiM1, ftiAus
    WaitForLow ftiE1
  Next i
  PrintStatus "Starten des Fahrbetriebs : E1"
  Pause 3000
  If Not GetInput(ftiE1) Then Exit Sub
' --- weiter wie gehabt ...
End Sub
 
Bei einem Echt-Betrieb sind die Zeiten für Aus- und Einsteigen nicht vorhersehbar, die Pause 4000 wird deswegen durch ein WaitForLow ftiE1 ersetzt. Das Programm wartet bis E1 gedrückt und wieder freigegeben wird.

Nach dem Aus-/Einsteigen muß der Betrieb durch erneutes Drücken der E1-Taste innerhalb von 3 Sek. freigegeben werden, sonst wird das Programm beendet : Feierabend.

Man kann sich zum Betrieb natürlich noch mehr einfallen lassen.

Schritt 3b : Symbolische Namen

Sub Main
Const mRadMotor = ftiM1, eRadPos = ftiE2, _ 
                         eQuittung = ftiE1
....
    WaitForHigh eRadPos
....
End Sub
 
Anstelle der allgemeinen Bezeichnungen für die Ein- und Ausgänge des Interface sollte man, wenn's was größeres wird, besser spezielle symbolische Namen setzen. Hier mRadMotor, eRadPos, eQuittung.
Sie können dann überall verwendet werden, wo jetzt die fti-Namen stehen.

Schritt 4a : Zählen statt Warten

Sub Main
....
SetMotor mRadMotor, ftiLinks
PrintStatus "--- Tour linksrum "
WaitForChange eRadPos,12 * EA
SetMotor mRadMotor, ftiAus
....
End Sub
 
Die Pause 15000 * EA wurde durch ein WaitForChange ersetzt. Da WaitForChange den Wechsel von True auf False und umgekehrt separat zählt, muß für eine Runde 12 angegeben werden. Die Anzahl Runden kommt aus dem Feld EA.

Schritt 4b : Runden-Anzeige

Sub Main
....
SetMotor mRadMotor, ftiLinks
For i = 1 To EA
  PrintStatus "--- Runde : " & i & " linksrum"
  WaitForChange eRadPos, 12
Next i

SetMotor mRadMotor, ftiAus
....
End Sub
 
Wenn man im Statusfeld die Nummer der aktuellen Runde anzeigen will, kann man das über eine For .. Next-Schleife über jeweils eine Runde tun. Die Rundenzahl kommt wieder von EA

Schritt 5 : Überkreuz Beladen

Sub Main
Dim i%
Do
  PrintStatus "--- Ein- und Aussteigen ---"
  For i=1 To 3
    Beladen 1, i*2-1
    Beladen 3, i*2
  Next i
  PrintStatus "Starten des Fahrbetriebs : E2"
......
End Sub
 

Sub Beladen(Position%, Runde%)
Dim n%
  SetMotor mRadMotor,ftiLinks
  For n = 1 To Position
    WaitForHigh eRadPos
  Next n
  Pause 1500 ' --- 3200 bei Original
             ' 1500 bei Simulation
  SetMotor mRadMotor,ftiAus
  PrintStatus "Gondel : " & Runde
  WaitForLow eQuittung
End Sub
In Praxis werden bei einem Riesenrad die Gondeln selten in ihrer direkten Reihenfolge "beladen". Das Beladen übernimmt hier das gleichnamige Unterprogramm. Das Unterprogramm selber entspricht weitgehend dem bisherigen Belade-Code, lediglich die Ansteuerung der Position findet jetzt in einer Schleife statt.

Anstelle des Belade-Codes in Sub Main findet man dort eine For .. Next Schleife, die Beladen aufruft. Der erste Parameter gibt die relative Nummer der nächsten Beladeposition an (Anzahl Gondeln, die zu überspringen sind, + 1). Der zweite Parameter gibt die wievielte  Gondel zu beladen ist, sie wird aus der äußeren For .. Next Schleife abgeleitet.

Beladen wird in der Reihenfolge 1 - 4 - 5 - 2 - 3 - 6. Also die gegenüberliegende Gondel oder die nächste.
Denkbar sind natürlich auch noch andere Beladepläne.

Schritt 6 ff : Weiterer Aus- und Umbau

  • Anbringen eines zusätzlichen Tasters, der die Gondel Nr. 1 identifiziert.
  • Anbringen eines Impulsrades (siehe Industry Robots) anstelle des Taster eRadPos und der 6 Nocken.

Lösung unter Einsatz von vbaFish30. Die Source der vorgestellten Lösung ist in RiesenTut.ZIP enthalten. Zusätzlich wird vbaFish30 benötigt.

Stand : 29.05.2004