-> Hier kostenlos registrieren
Hallo Miteinander,
Angenommen man hat bspw. in SCL unabsichtlich eine Schleife programmiert, die sich in einem Zyklus zu einer Endlosschleife entwickelt.
Nun kann man ja in so einem Fall mit dem OB80 bei Überschreitung der maximalen Zykluszeit reagieren. Leider lässt es sich damit ja nun nicht verhindern, dass die CPU in den STOP Zustand geht....
Ich hätte gerne eine Lösung um während des Schleifendurchlaufs zu erkennen, ob sich eine Schleife evtl. zu einer Endlosschleife entwickelt um damit die Schleife rechtzeitig zu verlassen und dadurch verhindern, dass die CPU in STOP geht. Das könnte man z.B in etwa so lösen:
tempLReal3 := 0.0;
Start Schleife
Schleife Code
tempLReal2 := RUNTIME(tempLReal1);
tempLReal3 := tempLReal3 + tempLReal2;
IF (tempLReal3 >= "MAX_TIME") THEN
EXIT;
END_IF;
Ende Schleife;
Die Konstante "MAX_TIME" müsste dann irgendwo zwischen aktueller Zykluszeit und parametrierter maximaler Zykluszeit liegen.
Mir ist klar, dass man im Prinzip darauf achten sollte/muss Endlosschleifen auszuschließen. Allerdings suche ich nach einer "Defaultlößung", die standardmäßig jeder Programmierer zur Sicherheit in seine Schleifen einbaut.
Hat da zufällig jmd. eine Idee, ob man das Ganze etwas komfortabler lösen könnte? Bsp. Watchdog oder so...
Gruß
Angenommen man hat bspw. in SCL unabsichtlich eine Schleife programmiert, die sich in einem Zyklus zu einer Endlosschleife entwickelt.
Nun kann man ja in so einem Fall mit dem OB80 bei Überschreitung der maximalen Zykluszeit reagieren. Leider lässt es sich damit ja nun nicht verhindern, dass die CPU in den STOP Zustand geht....
Ich hätte gerne eine Lösung um während des Schleifendurchlaufs zu erkennen, ob sich eine Schleife evtl. zu einer Endlosschleife entwickelt um damit die Schleife rechtzeitig zu verlassen und dadurch verhindern, dass die CPU in STOP geht. Das könnte man z.B in etwa so lösen:
tempLReal3 := 0.0;
Start Schleife
Schleife Code
tempLReal2 := RUNTIME(tempLReal1);
tempLReal3 := tempLReal3 + tempLReal2;
IF (tempLReal3 >= "MAX_TIME") THEN
EXIT;
END_IF;
Ende Schleife;
Die Konstante "MAX_TIME" müsste dann irgendwo zwischen aktueller Zykluszeit und parametrierter maximaler Zykluszeit liegen.
Mir ist klar, dass man im Prinzip darauf achten sollte/muss Endlosschleifen auszuschließen. Allerdings suche ich nach einer "Defaultlößung", die standardmäßig jeder Programmierer zur Sicherheit in seine Schleifen einbaut.
Hat da zufällig jmd. eine Idee, ob man das Ganze etwas komfortabler lösen könnte? Bsp. Watchdog oder so...
Gruß
Zuletzt bearbeitet: