Hat jemand von Euch Erfahrung mit While - Schleifen in CoDeSys.
Mir gelingt es nicht eine Schleife zu programmieren, wo die Ausstiegsbedingung ein Signal an einem Eingang Darstellt.
Das Programm übersetzen funktioniert! Doch wenn ich Einloggen und starten will, kommt sofort ein Dialog <watch dog=""> der eine Endlosschleife reklamiert. Doch ich möchte die steuerung ja in einer Schleife fangen, und mit einem Taster wieder aktivieren.</watch>
Doch das scheint nicht möglich zu sein.
Hat die While Schleife überhaupt einen Sinn in CoDeSys?
Mit freundlichen Grüssen! Pitsch
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2006-01-18
Originally created by: joohrte
Grundregel der Programmierung
Man sollte vorsichtig mit Schleifen bei einer SPS sein.
Denn wenn eine Schleife bearbeitet wird kann nichts anderes bearbeitet werden. Dieses darf nicht sein und darum wird dieses mit WatchDog überwacht.
Wenn Du genauer beschreibst wie deine Aufgabe ist könnte ich dir auch sagen wie dieses gelöst werden könnte.
Die While Schleife macht nur sinn wenn sichergestellt ist das die bearbeitung der schleife innerhalt der eingestellten Taskzeit beendet wird.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2006-01-19
Originally created by: Andy :-)
Hallo,
einfachste Lösung:
IF meinEingang ( wenn Eingang "high" )
THEN RETURN; ( Baustein verlassen )
END_IF
viele Grüsse
Andy
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
ich mache ab und zu CoDeSys-Schulungen, und genau dieser Anwendungsfall ist in der Tat eine beliebte Übung bzw. ein Beispiel, warum man mit einer WHILE-Schleife, die auf einen Eingang wartet, eine Endlos-Schleife erzeugt:
Das Problem ist, dass das Prozessabbild jeweils am Anfang und am Ende des SPS-Zyklus upgedatet wird. D.h. das sich Prozessvariablen, die mit physikalischen Ein- und Ausgängen verbunden sind, erst dann ändern, wenn der SPS-Zyklus beendet wird und wieder neu startet. Die Eingänge können sich also während der Applikationsausführung ändern, aber das Prozessabbild und damit die Prozessvariablen werden erst upgedatet, wenn der Zyklus beendet ist und neu gestartet wird.
Deswegen sind WHILE-Schleifen dafür nicht geeignet. Wenn Du eine vergleichbare Abarbeitung aber z.B. in einem AS-Schritt machst und den logischen Eingang als Transitionsbedingung verwendest (der auf den ersten Blick genauso aussieht wie eine WHILE-Schleife) dann funktioniert das, so wie Du Dir das vorstellst. Der Grund ist, dass nach der Abarbeitung eines Schritts wieder zum aufrufenden Bauspein zurückgesprungen wird und damit der SPS-Zyklus beendet werden kann.
WHILE-Schleifen haben natürlich genauso wie REPEAT UNTIL ihre Berechtigung (sonst hätten die sich in Hochsprachen nicht durchgesetzt, wie z.B. PASCAL das als Vorbild für ST dient), aber generell muss man damit vorsichtig sein. Und in der SPS kann man damit nicht auf eine Eingangsänderung warten.
Ich hoffe, das hilft ein wenig zum Verständnis.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi Leute
Hat jemand von Euch Erfahrung mit While - Schleifen in CoDeSys.
Mir gelingt es nicht eine Schleife zu programmieren, wo die Ausstiegsbedingung ein Signal an einem Eingang Darstellt.
Das Programm übersetzen funktioniert! Doch wenn ich Einloggen und starten will, kommt sofort ein Dialog <watch dog=""> der eine Endlosschleife reklamiert. Doch ich möchte die steuerung ja in einer Schleife fangen, und mit einem Taster wieder aktivieren.</watch>
Doch das scheint nicht möglich zu sein.
Hat die While Schleife überhaupt einen Sinn in CoDeSys?
Mit freundlichen Grüssen! Pitsch
Originally created by: joohrte
Grundregel der Programmierung
Man sollte vorsichtig mit Schleifen bei einer SPS sein.
Denn wenn eine Schleife bearbeitet wird kann nichts anderes bearbeitet werden. Dieses darf nicht sein und darum wird dieses mit WatchDog überwacht.
Wenn Du genauer beschreibst wie deine Aufgabe ist könnte ich dir auch sagen wie dieses gelöst werden könnte.
Die While Schleife macht nur sinn wenn sichergestellt ist das die bearbeitung der schleife innerhalt der eingestellten Taskzeit beendet wird.
Originally created by: Andy :-)
Hallo,
einfachste Lösung:
IF meinEingang ( wenn Eingang "high" )
THEN RETURN; ( Baustein verlassen )
END_IF
viele Grüsse
Andy
Hi,
ich mache ab und zu CoDeSys-Schulungen, und genau dieser Anwendungsfall ist in der Tat eine beliebte Übung bzw. ein Beispiel, warum man mit einer WHILE-Schleife, die auf einen Eingang wartet, eine Endlos-Schleife erzeugt:
Das Problem ist, dass das Prozessabbild jeweils am Anfang und am Ende des SPS-Zyklus upgedatet wird. D.h. das sich Prozessvariablen, die mit physikalischen Ein- und Ausgängen verbunden sind, erst dann ändern, wenn der SPS-Zyklus beendet wird und wieder neu startet. Die Eingänge können sich also während der Applikationsausführung ändern, aber das Prozessabbild und damit die Prozessvariablen werden erst upgedatet, wenn der Zyklus beendet ist und neu gestartet wird.
Deswegen sind WHILE-Schleifen dafür nicht geeignet. Wenn Du eine vergleichbare Abarbeitung aber z.B. in einem AS-Schritt machst und den logischen Eingang als Transitionsbedingung verwendest (der auf den ersten Blick genauso aussieht wie eine WHILE-Schleife) dann funktioniert das, so wie Du Dir das vorstellst. Der Grund ist, dass nach der Abarbeitung eines Schritts wieder zum aufrufenden Bauspein zurückgesprungen wird und damit der SPS-Zyklus beendet werden kann.
WHILE-Schleifen haben natürlich genauso wie REPEAT UNTIL ihre Berechtigung (sonst hätten die sich in Hochsprachen nicht durchgesetzt, wie z.B. PASCAL das als Vorbild für ST dient), aber generell muss man damit vorsichtig sein. Und in der SPS kann man damit nicht auf eine Eingangsänderung warten.
Ich hoffe, das hilft ein wenig zum Verständnis.