Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (********************************************************************
- * COPYRIGHT --
- ********************************************************************
- * Programm: Liftsteuerung
- * Datei: LiftsteuerungCyclic.st
- * Autor: Adin
- * Erstellt: 5. November 2015
- ********************************************************************
- * Implementierung des Programms Liftsteuerung
- ********************************************************************)
- PROGRAM _CYCLIC
- (*GRUNDSÄTZLICHE ANLEITUNG ZUM CASE:
- Wenn Taster_rauf oder Taster_runter betätigt wird und sich kein Objekt
- in der Lichtschranke befindet, dann wird der Verriegelungsmechanismus
- der Tür aktiviert und die Endschalter jeweils betätigt, wenn die
- Tür im jeweiligen Stockwerk geschlossen ist.
- Wenn der für das Stockwerk passende Endschalter betätigt ist,
- dann wird der Motor aktiviert, welcher im Rechtslauf den Lift
- nach oben befördert und im Linkslauf nach unten.*)
- (*Sorgt dafür, dass Steuerung des Fahrstuhls nur bei keinen vorhandenen
- Fehlern möglich ist*)
- IF Fehler = 'Kein Fehler' THEN
- (*CASE-Funktion für Zustände des Lifts, je nach Tasterbetätigung
- und Aktivität, wird in die jeweiligen Zustände gesprungen*)
- CASE Zustandsvariable OF
- (*Erdgeschoss, Lifttür ist offen*)
- Stockwerk_0_offen :
- Endschalter_Tuer_offen0 := TRUE;
- Endschalter_Tuer_zu0 := FALSE;
- Endschalter_unten := TRUE;
- Motor_Bremse := TRUE;
- Motor_links := FALSE;
- IF Endschalter_unten = TRUE AND Endschalter_Tuer_offen0 = TRUE THEN
- Motor_Bremse := FALSE;
- END_IF;
- IF Taster_rauf = TRUE AND Tuer_Lichtschranke = FALSE THEN
- Tuer_verriegelt := TRUE;
- Endschalter_Tuer_zu0 := TRUE;
- Motor_Bremse := FALSE;
- Endschalter_Tuer_offen0 := FALSE;
- Zustandsvariable := 2;
- END_IF;
- (*Ergeschoss, Lifftür ist geschlossen*)
- Stockwerk_0_zu :
- IF Endschalter_Tuer_zu0 = TRUE THEN
- Motor_rechts := TRUE;
- Endschalter_unten := FALSE;
- Taster_rauf := FALSE;
- Taster_runter := FALSE;
- Zustandsvariable := 3;
- END_IF;
- (*Erster Stock, Lifftür ist offen*)
- Stockwerk_1_offen :
- Endschalter_Tuer_zu1 := FALSE;
- Endschalter_mitte := TRUE;
- Motor_Bremse := TRUE;
- Motor_links := FALSE;
- Motor_rechts := FALSE;
- IF Endschalter_mitte = TRUE THEN
- Motor_Bremse := FALSE;
- Tuer_oeffnet := TRUE;
- Tuer_verriegelt := FALSE;
- Endschalter_Tuer_offen1 := TRUE;
- END_IF;
- IF Taster_rauf = TRUE OR Taster_runter = TRUE AND
- Tuer_Lichtschranke = FALSE THEN
- Tuer_verriegelt := TRUE;
- Tuer_oeffnet := FALSE;
- Endschalter_Tuer_zu1 := TRUE;
- Endschalter_Tuer_offen1 := FALSE;
- Zustandsvariable := 4;
- END_IF;
- (*Erster Stock, Lifftür ist geschlossen*)
- Stockwerk_1_zu :
- IF Endschalter_Tuer_zu1 = TRUE AND Taster_rauf = TRUE THEN
- Endschalter_mitte := FALSE;
- Motor_rechts := TRUE;
- Taster_rauf := FALSE;
- Taster_runter := FALSE;
- Zustandsvariable := 5;
- ELSIF Endschalter_Tuer_zu1 = TRUE AND Taster_runter = TRUE THEN
- Endschalter_mitte := FALSE;
- Taster_rauf := FALSE;
- Taster_runter := FALSE;
- Motor_links := TRUE;
- Zustandsvariable := 1;
- END_IF;
- (*Zweiter Stock, Tür ist offen*)
- Stockwerk_2_offen :
- Endschalter_Tuer_zu2 := FALSE;
- Tuer_verriegelt := FALSE;
- Endschalter_oben := TRUE;
- Motor_Bremse := TRUE;
- Motor_rechts := FALSE;
- IF Endschalter_oben = TRUE THEN
- Motor_Bremse := FALSE;
- Tuer_oeffnet := TRUE;
- Tuer_verriegelt := FALSE;
- Endschalter_Tuer_offen2 := TRUE;
- END_IF;
- IF Taster_runter = TRUE THEN
- Tuer_verriegelt := TRUE;
- Tuer_oeffnet := FALSE;
- Zustandsvariable := 6;
- END_IF;
- (*Zweiter Stock, Tür ist geschlossen*)
- Stockwerk_2_zu :
- Endschalter_Tuer_zu2 := TRUE;
- Endschalter_Tuer_offen2 := FALSE;
- IF Endschalter_Tuer_zu2 = TRUE THEN
- Endschalter_oben := FALSE;
- Motor_links := TRUE;
- Taster_rauf := FALSE;
- Taster_runter := FALSE;
- Zustandsvariable := 3;
- END_IF;
- END_CASE;
- (*********************************FEHLERMELDUNGEN******************************)
- END_IF;
- (*Gegenseitige Verriegelung, um das aktiv sein beider Taster zu verhindern*)
- IF Taster_rauf = TRUE THEN
- Taster_runter := FALSE;
- ELSIF Taster_runter = TRUE THEN
- Taster_rauf := FALSE;
- END_IF;
- (*Fehlermeldung, falls Endschalter der anzeigen soll, dass Tür offen ist
- in falschem Stockwerk aktiv ist*)
- IF (Endschalter_Tuer_offen0 = TRUE AND (Endschalter_Tuer_offen1 = TRUE
- OR Endschalter_Tuer_offen2 = TRUE)) OR
- (Endschalter_Tuer_offen1 = TRUE AND (Endschalter_Tuer_offen0 = TRUE
- OR Endschalter_Tuer_offen2 = TRUE)) OR
- (Endschalter_Tuer_offen2 = TRUE AND (Endschalter_Tuer_offen1 = TRUE
- OR Endschalter_Tuer_offen0 = TRUE)) = TRUE THEN
- Fehler := 'Endschalter, die offene Türen anzeigen sollen sind defekt';
- END_IF;
- (*Fehlermeldung, falls Motoren und Bremse gleichzeitig aktiv sind*)
- IF Motor_Bremse = TRUE AND (Motor_links = TRUE OR Motor_rechts = TRUE) THEN
- Fehler := 'Motor und Bremse laufen gleichzeitig';
- END_IF;
- (*Fehlermeldung, falls ein Objekt(Mensch) in der Lichtschranke der Tür ist*)
- IF Tuer_Lichtschranke = TRUE THEN
- Fehler := 'Objekt in Lichtschranke';
- END_IF;
- (*Fehlermeldung, falls Endschalter für 2 Stockwerke aktiv sind*)
- IF (Endschalter_unten = TRUE AND (Endschalter_mitte = TRUE
- OR Endschalter_oben = TRUE)) OR
- (Endschalter_mitte = TRUE AND (Endschalter_unten = TRUE
- OR Endschalter_oben = TRUE)) OR
- (Endschalter_oben = TRUE AND (Endschalter_mitte = TRUE
- OR Endschalter_unten = TRUE)) = TRUE THEN
- Fehler := 'Endschalter, die Stockwerk anzeigen sollen sind defekt';
- END_IF;
- END_PROGRAM
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement