Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Befehl "when" in codesys

rtist
2017-04-25
2019-03-25
  • rtist - 2017-04-25

    Hallo.

    Ich habe vorher mit Jetter gearbeitet. Dort gab es den Befehl "when", der auf ein Ereignis gewartet hat.

    When A=true then b:=2 then...

    Ich brauche so was oft bei meinen Maschinen, bei denen ich auf ein Eingangssignal warten muss bevor das Programm weiterlaufen soll.

    Wie mache ich das am besten in Codesys?

    So?
    S1: IF g.BMedS3 = FALSE THEN JMP S1;
    END_IF

    Oder so? wobei dann a:=a irgendeine völlig sinnlose Aktion wäre.
    While g.BMedS3 = FALSE do a:=a; END_WHILE

    Danke.

     
  • Anonymous - 2017-04-26

    Originally created by: jl

    So geht's:

    IF A THEN
    b := 2;
    END_IF

    oder

    IF NOT A THEN
    b := 2;
    END_IF

    Must aber beachten dass b auf 2 bleibt wenn A = FALSE.

    Oder so:

    IF A THEN
    b := 2;
    ELSE
    B := ?;
    END_IF

     
  • rtist - 2017-04-27

    Na ja, aber damit wartet der an der Stelle ja nicht darauf, dass A true wird, sondern läuft im Programm einfach weiter, wenn das nicht der Fall ist.
    Was ich suche ist eine Möglichkeit im strukturierten Text, die so funktioniert wie eine Transition bei der AS Sprache.

    Also,der soll an der Stelle "If A=true" so lange warten, bis das eintritt.

     
  • alwoso - 2017-05-02

    Hallo rtist!

    Du kannst ja nicht einfach das "Programm anhalten". Die willst nur in einem bestimmten Zustand bleiben, oder? So wie ich das sehe, würde dir eine state-machine helfen. Die einzelnen Zustände werden in einer CASE-Abfrage abgebildet, die "Transitionen" sind dann die Zuweisungen des jeweiligen Zustands. Z.B. so:

    CASE Zustand OF

    0: // Initialisierung
    IF a THEN // "Transition" erfüllt
    Zustand:= 10;
    END_IF

    10: // das soll passieren, wenn a high war
    b:= TRUE;
    ( weitere Anweisungen )
    IF NOT a THEN
    Zustand:= 20;
    END_IF

    20: // nächster Zustand

    Viel Erfolg!

     
  • rtist - 2017-05-18

    na ja, in der AS Sprache "hält" das Programm ja auch an den Transitions an, bis die Bedingung erfüllt ist.
    Genau das ließe sich doch eigentlich auch in einen ST Befehl packen.

    Wie gesagt, bei der Jetter Sps heißt der Befehl "When" und macht genau das, was die Transition macht.

    state machine gefällt mir irgendwie nicht so.

    Aber danke für die Mühe!

     
  • schaepper - 2017-08-29

    Ich verstehe nicht genau was du willst.

    Es gibt normale Ifs, Elses, Else_Ifs etc.

    Dann gibts noch for,while,repeat loops

    Das hier ist ganz gut:
    http://www.plcacademy.com/structured-text-tutorial/ m

     
  • rtist - 2019-03-25

    Nachtrag.

    Ich habe inzwischen ein komplexeres Programm in der Ablaufsprache AS programmiert, muss aber sagen, dass die Fehlersuche zu einem elenden Geklicke ausarten kann und sehr unübersichtlich wird.

    Daher stelle ich das jetzt alles auf ST um und benutze nun doch den CASE Befehl, mit dem ich mich inzwischen gut angefreundet habe.

    Trotzdem trauere ich dem WHEN Befehl meiner alten Jetter Steuerung noch etwas hinterher.

     

Log in to post a comment.