- Beiträge
- 9.189
- Reaktionspunkte
- 2.936
-> Hier kostenlos registrieren
Aber noch eins @Thomas: kannst Du mir vielleicht noch ein wenig genauer erklären was da genau passiert?
Grundsätzlich sollte dir erstmal klar sein dass die TON-Funktionen Einschaltverzögerungen sind.
Also ist IN = true, dann wird nach Ablauf von PT der Ausgang Q gesetzt.
In der FOR-Schleife wird geprüft ob ein Fehler aktiv ist.
Die Prüfung erfolgt nur wenn der Timer für die Pausenzeit zwischen den Impulsen abgelaufen ist.
Das ist der Fall wenn kein Blink-Job mehr aktiv ist und die Zeit abgelaufen ist.
In der For-Schleife wird nun geprüft ob ein Fehlereingang true ist. Ist das der Fall, wird in die Variable BLINK_JOB die
Anzahl der Blinkvorgänge eintragen. Da das Array bei 0 beginnt, muss zum Schleifenindex i noch die 1 hinzuaddiert werden, denn wenn Fehler_1 aktiv ist soll ja auch einmal geblinkt werden.
Jetzt könnte man im einfachsten Fall wenn immer nur der erste Fehler angezeigt werden soll, die Schleife abbrechen werden und zum Blinken
übergehen. Da aber auch die folgenden Fehler angezeigt werden sollen, muss man sich merken welcher Blink-Job schon bearbeitet wurde.
Dieser Zustand wird in der Variable LAST_JOB gespeichert. Beim nächsten Schleifendurchlauf dient dieser Variablenwert
als Startwert für den Schleifenindex i. Mit EXIT wird die Schleife abgebrochen, es wird also direkt hinter der Zeile mit
dem END_FOR; mit der Bearbeitung fortgesetzt (quasi wie ein Sprung). Die Prüfungen von LAST_JOB und das Setzen auf Null dient dazu bei einem Überlauf wieder mit Index 0 zu beginnen.
Du kannst dir einfach mal die Variablenwerte während das Programm läuft im Instanz-DB ansehen, dann siehst du wie das funktioniert.
Der Rest des Programmes sind die Aufrufe der Timer-Bausteine, eine Flankenauswertung die zählt wie oft geblinkt wurde und den BLINK_JOB entsprechend herunterzählt.