| 
 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 :
 
 
 | 
 |