Variable der CASE-Anweisung

Lylith
2008-12-05
2008-12-16
  • Lylith - 2008-12-05

    Hallo zusammen.

    Ich benutze das easySoft CoDeSys Ver 2.3.5.8 und habe ein Verhalten festgestellt, welches mich reichlich verwirrt und für das ich keine Erklärung finden kann.

    Die Variable, deren Wert in der CASE-Anweisung überprüft wird (im Code "step") kann nur innerhalb der CASE-Schritte selbst gesetzt werden. Versuche ich ihren Wert außerhalb der CASE-Anweisung zu verändern, tut sich gar nichts. Wie kommt das, bzw. was mache ich falsch?

    Hier der Code:

    VAR

    step: INT;

    ...

    END_VAR

    step:=1; (wenn die step Variable hier gesetzt werden soll, passiert nix)

    CASE step OF

    0: step:=1; (wenn die step Variable hier gesetzt wird, geht es)

    ...
    

    1: step:=0;

       ...
    

    END_CASE;

    Ich verwende diesen Code innerhalb eines Programms, welches zyklisch aufgerufen wird.

    Es würde mich freuen, wenn mir jemand erklären könnte, was da vor sich geht, ich verzweifel nämlich langsam daran.

    Liebe Grüße,

    Lylith

     
  • Rolf-Geisler - 2008-12-05

    Hallo Lylith,

    von der Theorie her muss es funktionieren, step ausserhalb der CASE-Bedingung zu beschreiben und mit CASE auszuwerten, und tut es auch klaglos auf IndraLogic, Beckhoff und Moeller XSoft.

    Dein Codebeispiel sieht korrekt aus, aber was passiert im realen Programm zwischen der Zuweisung auf step und der Auswertung mit CASE? Hat step beim Erreichen der CASE-Anweisung noch seinen zugewiesenen Wert (am besten im Einzelschrittbetrieb in der Simulation testen)? Das Problem kann eigentlich nur dort liegen ...

    Möglicherweise schreibst Du auf ein Array, welches irgendwo vor step im Speicher liegt, und gehst dabei über die Arraygrenzen hinaus. Wir hatten schon mal den Fall, dabei ist uns sogar die Steuerung abgeschmiert. Wir haben tagelang gesucht ...

    Gruss Rolf

     
  • hugo - 2008-12-12

    hi

    wir schreiben die open source library oscat ( w www.oscat.de w ) und nutzen häufig case anweisungen wo natürlich die case variable extern gesetzt wird.

    dies funktioniert auch wunderbar

    beispiele findest du genügend im source unserer library

     
  • r2d2 - 2008-12-16

    Hi,

    ich hoffe, ich habe Dein Problem richtig verstanden.

    Ich glaube, man muß hier die zyklische Arbeitsweise der PLC berücksichtigen.

    step := 1 gilt nur von der Zuweisung vor case bis zur Abfrage auf =1 im case. Dort wird step wieder zu 0, und zwar solange, bis beim nächsten Zyklus erneut step := 1 gesetzt wird.

    Gruss r2

     

Log in to post a comment.