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
mTuer = 1; mLampe = 2;
eTuerZu = 1; eTuerAuf = 2; etuerOeffnen = 3; ePhototransistor = 4;
Beschriftung der Textfelder
clblTitel = 'Schiebetür 1';
clblE: array[1..8] of string = ('TürZu', 'TürAuf', 'Türöffnen',
'Lichtschranke', 'E5', 'E6', 'E7', 'E8');
clblM: array[1..4] of string = ('Tür', 'Lichtschranke', 'M3', 'M4');
fishMain
begin
repeat
// --- Endlosschleife, Ende : HALT-Button
ftiSetMotor(mTuer, ftiLinks);
ftiWaitForInput(eTuerZu, false);
ftiSetMotor(mTuer, ftiAus);
ftiWaitForInput(eTuerOeffnen, true);
ftiSetMotor(mTuer, ftiRechts);
ftiWaitForInput(eTuerAuf, true);
ftiSetMotor(mTuer, ftiAus);
ftiWaitForTime(5000);
Until ftiFinish(0);
end;
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
begin
ftiSetMotor(mLampe, ftiEin);
ftiWaitForTime(1000);
ftiWaitForInput(ePhotoTransistor, true);
repeat
// --- Endlosschleife, Ende : HALT-Button
while ftiGetInput(eTuerZu) do begin
ftiSetMotor(mTuer, ftiLinks);
if not ftiGetInput(ePhotoTransistor) then TuerOeffnen();
end;
ftiSetMotor(mTuer, ftiAus);
ftiWaitForInput(eTuerOeffnen, true);
TuerOeffnen();
until ftiFinish(0);
end;
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 :
procedure TuerOeffnen();
begin
ftiSetMotor(mTuer, ftiRechts);
ftiWaitForInput(eTuerAuf, true);
ftiSetMotor(mTuer, ftiAus);
ftiWaitForTime(5000);
end;
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?
|