SicherheitsschlossEin Sicherheitsschloss darf nur dann geöffnet werden, wenn fünf Tasten eines
8-Tasten-Eingabefeldes in der richtigen Reihenfolge betätigt werden. Die richtige Tastenfolge
ist: Taste2-Taste4-Taste1-Taste3-Taste7. Sobald die richtige Folge eingegeben wurde, soll die
Tür-Verriegelung für 5 Sek. gelöst werden und somit den Eintritt ermöglichen. Bei jeder
Fehleingabe muss der gesamte Code erneut eingegeben werden. Darüber hinaus sollen alle Versuche
gezählt werden. Erfolgt nach 10 Versuchen keine richtige Eingabe, soll das Schloss für eine
bestimmte Zeit gesperrt werden. Nach Ablauf dieser Zeit sind weitere Eingaben wieder möglich.
Für Betätigung einer Taste hat der Anwender 3 Sek. Zeit. Läuft die Zeit ab, muss der Code
ebenfalls erneut eingegeben werden.
Lösung:
Die Tasten, die an die Eingänge E0.0 bis E0.7 angeschlossen sind, werden mit
der Variable "Eingabe_Feld" erfasst. Wenn diese Variable länger als 3 Sek. den Wert 0 aufweist
(keine Taste betätigt) wird der interne Schrittzähler zurückgesetzt. Somit müssen die Eingaben
wiederholt werden.
PLC - Variablen
Variablen (Funktionsbaustein FB)
Mit "Versuch_Nr" wird jede Betätigung einer Taste mitgezählt. Erreicht die
Variable "Versuch_Nr" den Wert 10 wird die Auswertung der Eingaben für eine eingestellte Zeit komplett
gesperrt. Nach Ablauf der Sperrzeit wird "Versuch_Nr" genullt.
Die Abfrage der Tasten erfolgt mit einer Case OF – Anweisung. Bei jeder richtigen Eingabe
wird der Interner Zähler "Schritt" erhöht, bis der richtige Code erreicht ist. In dem Fall wird
die Tür-Verriegelung für eine bestimmte Zeit gelöst und die Tür kann aufgemacht werden.
Programm:
// Keine Eingaben innerhalb vorgegebener Zeit = Zähler (Schritt) zurücksetzen
"IEC_Timer_0_DB_5".TON(IN:="Eingabe_Feld" = 0,
PT:=t#3s,
Q=>#Rücksetzen,
ET=>#t_ist);
IF #Rücksetzen THEN
#Schritt := 0;
END_IF;
// Zu viele falsche Versuche = Sperrung
"IEC_Timer_0_DB_6".TP(IN:=#Versuch_Nr = 10,
PT:=t#5s,
Q=>#Sperrung,
ET=>#t_ist);
// Die Variable "Versuch_Nr" wird dabei genullt
"R_TRIG_DB"(CLK:=#Sperrung, Q=>#Flanke_Versuche_Löschen);
IF #Flanke_Versuche_Löschen THEN
#Versuch_Nr := 0;
END_IF;
// Hauptprogramm.
// Sobald eine Taste gedrückt wird, beginnt die Untersuchung der Eingaben.
// Bei jeder richtigen Eingabe wird "Schritt" erhöht.
// Bei jeder falschen Eingabe wird "Versuch_Nr" erhöht.
"R_TRIG_DB_2"(CLK := "Eingabe_Feld" > 0, Q => #Flanke_Eingabe);
IF #Flanke_Eingabe AND NOT #Sperrung THEN
CASE #Schritt OF
0:
IF "Taste_2" THEN
#Schritt := 1;
ELSE
#Schritt := 0;
#Versuch_Nr += 1;
END_IF;
1:
IF "Taste_4" THEN
#Schritt := 2;
ELSE
#Schritt := 0;
#Versuch_Nr += 1;
END_IF;
2:
IF "Taste_1" THEN
#Schritt := 3;
ELSE
#Schritt := 0;
#Versuch_Nr += 1;
END_IF;
3:
IF "Taste_3" THEN
#Schritt := 4;
ELSE
#Schritt := 0;
#Versuch_Nr += 1;
END_IF;
4:
IF "Taste_7" THEN
#Schritt := 5;
#Code_OK := TRUE;
ELSE
#Schritt := 0;
#Versuch_Nr += 1;
END_IF;
END_CASE;
END_IF;
// Die richtige Reihenfolge wurde eingetippt. Verriegelung wird gelöst,
die Tür geht auf.
"IEC_Timer_0_DB_3".TP(IN:=#Code_OK,
PT:=t#5s,
Q=>"Tür_Auf",
ET=>#t_ist);
// Währenddessen werden Variablen zurückgesetzt.
IF "Tür_Auf" THEN
#Code_OK := FALSE;
#Schritt := 0;
#Versuch_Nr := 0;
END_IF;
S7-Programmierung TIA-Portal (Übersicht):
Google-Suche auf MEINE-SCHALTUNG.de :
|
|