Aufgabe
Wenn Taster E3 gedrückt wird, soll
sich die Tür öffnen und nach 5 Sekunden wieder schließen. Türmotor an M1,
Taster TürZu an E1, Taster TürAuf an E2 und Taster TürÖffnen an E3
Anwendungskonstanten
Const mTuer = 1, mLampe = 2
Const eTuerZu = 1, eTuerAuf = 2, eTuerOeffnen = 3, ePhotoTransistor=4
Beschriftung der Textfelder
.lblTitel = "Schiebetür 1"
.lblEText(1).Caption = "TürZu"
.lblEText(2).Caption = "TürAuf"
.lblEText(3).Caption = "TürÖffnen"
.lblEText(4).Caption = "Lichtschranke"
.lblMText(1).Caption = "Tür"
.lblMText(2).Caption = "Lichtschranke"
fishMain
Do
' --- Schleife bis HALT
ftiSetMotor mTuer, ftiLinks
' --- Tür schließen
ftiWaitForInput eTuerZu, False
ftiSetMotor mTuer, ftiAus
ftiWaitForInput eTuerOeffnen
' --- Warten auf Anforderung
ftiSetMotor mTuer, ftiRechts
' --- Tür öffnen
ftiWaitForInput eTuerAuf
ftiSetMotor mTuer, ftiAus
ftiWaitForTime 5000
' 5 Sekunden offen
Loop Until ftiFinish(0) ' --- Abbruchwunsch
Was passiert da?
Es gibt da zunächst wieder eine Endlosschleife, die über den HALT-Button
beendet werden kann. In der Schleife wird znächst die Tür geschlossen, dann
wird auf eine Anforderung zum Öffnen der Tür gewartet und bei Anforderung
geöffnet.
Erweiterungen
Anzeige des Betriebszustandes in der Statuszeile durch printStatus
wie gehabt.
Variable Zeiten : Anlegen eines Steuerwertes OffenZeit wie gehabt.
Aufgabe 2
Modell wie bisher. Es soll jetzt aber durch eine Lichtschranke verhindert
werden, daß die Tür schließt, wenn Gegenstände oder Menschen in der
Türöffnung sind (Lichtschranke ist unterbrochen).
modifiziertes fishMain
ftiSetMotor mLampe, ftiEin
ftiWaitForTime 1000
ftiWaitForInput ePhotoTransistor, True
Do ' --- Schleife bis HALT
Do
ftiSetMotor mTuer, ftiLinks
If Not ftiGetInput(ePhotoTransistor) Then TuerOeffnen
Loop While ftiGetInput(eTuerZu)
ftiSetMotor mTuer, ftiAus
ftiWaitForInput eTuerOeffnen
TuerOeffnen
Loop Until ftiFinish(0) ' --- Abbruchwunsch
Vor der Schleife wird wieder die Lichtschranke gestartet. Das Türschließen
wird jetzt nicht mehr durch ein einzelnes fitWaitForInput festgestellt, sondern
in einer zusätzlichen (geschachtelten) Schleife in der die Lichtschranke
geprüft wird. Ist sie unterbrochen wird die Tüer geöffnet. Die Schleife wird
beendet, wenn die Tür geschlossen ist. Anschließend wird auf eine
ÖffnenAnforderung gewartet. Das TürÖffnen wird hier zweimal benötigt und
wird deswegen in ein Unterprogramm gelegt :
Private Sub TuerOeffnen()
ftiSetMotor mTuer, ftiRechts
ftiWaitForInput eTuerAuf
ftiSetMotor mTuer, ftiAus
ftiWaitForTime 5000
End Sub
Man sollte wieder die printStatus und den Faktor einfügen.
Wodurch unterscheidet sich eigentlich die vorgestellte Lösung durch die im
"Computing Starter" Begleitheft gestellte Aufgabe 2?
|