While Schleife in CoDeSys

Pitsch52
2006-01-17
2006-01-24
  • Pitsch52 - 2006-01-17

    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

     
  • 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.

     
  • 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

     
  • RolandWagner

    RolandWagner - 2006-01-24

    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.

     

Log in to post a comment.