Hallo,
ich habe ein Problem mit einem Timer innerhalb einer While-Schleife.
Der Code-Teil ist folgender:
...
Schleife1 := 0;
...
...
WHILE Schleife1 <20 DO
ich habe ein Problem mit einem Timer innerhalb einer While-Schleife.
Der Code-Teil ist folgender:
...
Schleife1 := 0;
...
...
WHILE Schleife1 <20 DO
Schleife1:= Schleife1 + 1;
... //= Code innerhalb der Schleife, der funktioniert
// Die Schleife wird 20x durchlaufen. Dabei werden aus einem DB verschiedene Datensaetze (Bloecke) ausgelesen und in einen anderen DB geschrieben
// Der Schleifenzaehler laesst die Datensatzadressen entsprechend mehrerer Formeln hochzaehlen. Das funktioniert alles.
// Am Ende eines jeden Auslesens und Schreibens soll in der Visualisierung ein Bit (DB500.DBX4.5) fuer 1 Sekunde gesetzt und danach wieder zurueckgesetzt werden.
// Dieses Bit MUSS bei jedem Zyklusdurchlauf fuer eine Sekunde an und danach wieder aus sein.
// Dann beginnt die Schleife wieder, die naechsten Datensaetze einzulesen und in den anderen DB zu schreiben.
// Und wieder soll am Ende dieses Lesens und Schreibens dieses Bit fuer 1 Sekunde gesetzt und danach wieder zurueckgesetzt werden.
// Nach 20 Durchlaeufen wird die While-Schleife verlassen.
// Ich hatte mir gedacht, dieses zeitverzoegerte Setzen und Ruecksetzen des Bits mit einem Timer zu realisieren und habe innerhalb der While Schleife1 (siehe oben)
// Einen Timer wie folgt gesetzt:
DB500.DBX4.5:= true;
CurrTime_2:= S_PEXT (T_NO:=10, S:=DB500.DBX4.5, TV:=T#1s, BI:=BinVal_2, Q:=ActFlag_2);
M18.2:= ActFlag_2;
IF NOT M18.2 THEN
... //= Code innerhalb der Schleife, der funktioniert
// Die Schleife wird 20x durchlaufen. Dabei werden aus einem DB verschiedene Datensaetze (Bloecke) ausgelesen und in einen anderen DB geschrieben
// Der Schleifenzaehler laesst die Datensatzadressen entsprechend mehrerer Formeln hochzaehlen. Das funktioniert alles.
// Am Ende eines jeden Auslesens und Schreibens soll in der Visualisierung ein Bit (DB500.DBX4.5) fuer 1 Sekunde gesetzt und danach wieder zurueckgesetzt werden.
// Dieses Bit MUSS bei jedem Zyklusdurchlauf fuer eine Sekunde an und danach wieder aus sein.
// Dann beginnt die Schleife wieder, die naechsten Datensaetze einzulesen und in den anderen DB zu schreiben.
// Und wieder soll am Ende dieses Lesens und Schreibens dieses Bit fuer 1 Sekunde gesetzt und danach wieder zurueckgesetzt werden.
// Nach 20 Durchlaeufen wird die While-Schleife verlassen.
// Ich hatte mir gedacht, dieses zeitverzoegerte Setzen und Ruecksetzen des Bits mit einem Timer zu realisieren und habe innerhalb der While Schleife1 (siehe oben)
// Einen Timer wie folgt gesetzt:
DB500.DBX4.5:= true;
CurrTime_2:= S_PEXT (T_NO:=10, S:=DB500.DBX4.5, TV:=T#1s, BI:=BinVal_2, Q:=ActFlag_2);
M18.2:= ActFlag_2;
IF NOT M18.2 THEN
DB500.DBX4.5:= false;
END_IF;
...
...
END_WHILE;
...
...
// Der Timer macht nicht das, was ich gerne haette, er zaehlt nur einmal, in der Zeit ist natuerlich meine Schleife schon laengst 20x durchgelaufen. Es sollte jedoch so sein, dass
// die Schleife auf den Timer wartet und erst nach 1 Sekunde an der pausierten Stelle fortsetzt.
// Da ich SCL-Neuling bin, kenne ich keine Methode, die Schleife auf diese Art pausieren zu lassen. Koennt Ihr mir da Hinweise geben?
Vielen Dank vorweg!
Ralf
...
...
END_WHILE;
...
...
// Der Timer macht nicht das, was ich gerne haette, er zaehlt nur einmal, in der Zeit ist natuerlich meine Schleife schon laengst 20x durchgelaufen. Es sollte jedoch so sein, dass
// die Schleife auf den Timer wartet und erst nach 1 Sekunde an der pausierten Stelle fortsetzt.
// Da ich SCL-Neuling bin, kenne ich keine Methode, die Schleife auf diese Art pausieren zu lassen. Koennt Ihr mir da Hinweise geben?
Vielen Dank vorweg!
Ralf