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

Transition in ST programmieren: Vergleicher

plagemann
2009-10-01
2009-10-19
  • plagemann - 2009-10-01

    Guten Tag,

    kann mir jemand die Syntax sagen, wenn ich in ST einen Vergleich als Transition benutzen will?

    Also

    "WENN %MD10 > 12000"

    DANKE!

    Bernhard Plagemann

     
  • Matze001 - 2009-10-01

    IF %MD10 > 12000 THEN

    xyz

    END_IF

    MfG

    Marcel

     
  • plagemann - 2009-10-01

    Danke für die schnelle Antwort. Aber in eine Transition gehört doch kein THEN.

    Eine Transition hat doch lediglich ein binäres Ergebnis.

    ODER?

    Viele Grüße

    Bernhard Plagemann

     
  • D.Hauer - 2009-10-02

    Der Vergleich mit dem binären Ergebnis steht ja auch zwischen IF und THEN

    Ist einfach so, ST Syntax.

    Kann man bei mehreren Vergleichen auch mit

    CASE x OF

    x<y :
    
    
    
    x<z :
    

    END_CASE

    machen, ist aber bei einer einzigen Bedingung nicht sonderlich sinnvoll

    cheers

     
  • foenig - 2009-10-02

    Kann es sein das Du von einer Transition in AS (Ablaufsprache) ausgehst?

    Dann würde man an der Stelle einfach %MD20 > 1200 in die Transition schreiben (wobei es Unfug ist Merker und dann auch noch absolut Adressiert einzusetzen!).

     
  • SPSstudent - 2009-10-14

    plagemann hat geschrieben:
    Guten Tag,
    kann mir jemand die Syntax sagen, wenn ich in ST einen Vergleich als Transition benutzen will?
    Also
    "WENN %MD10 > 12000"
    DANKE!
    Bernhard Plagemann

    Wenn du die Transition in einer Schrittkette (Ablaufssprache) meinst, dann müsste die in deinem Fall einfach

    "%MD10 > 12000"

    heißen.

    Ich gebe als Transition immer eine Boolsche Variable an und setze einfach im Schritt davor die Boolsche Variable entsprechend der Bedingung, also in ST z.B.

    IF %MD10 > 12000 THEN

    bTrans := TRUE;

    ELSE

    bTrans := FALSE;

    END_IF

    (oder in FUP / KP entsprechend)

     
  • Rolf-Geisler - 2009-10-15

    Hallo allesamt,

    kann zu dem Thema, glaube ich, auch noch etwas beitragen.

    Wie man das CPU-Last-optimal ausprogrammiert, hängt von verschiedenen Bedingungen ab. Habe das auf meiner Website stehen, siehe den Link auf http://www.geisler-controls.de/Downloads/downloads.html. Vielleicht hilft das ein wenig.

    Gruss

    Rolf

     
  • cmoeller - 2009-10-19

    Hallo zusammen,

    mir hilft bei diesen Aufgaben häufig eine simple case Anweisung.

    CASE wState OF
    0: (* IDLE - Wait for something to *)
        IF xDoIt THEN
             xSend := TRUE;
             wState := 10;
        END_IF
    10: (* Wait until something done *)
        IF xSend = FALSE THEN
            IF diError = 0 THEN
                 wState := 0;
            ELSE    
                 wState := 999;
            END_IF
        END_IF
    ELSE (* Error state *) 
        ;
    END_CASE
    

    Dabei kreiselt das SPS Programm immer nur in einem "Schritt/State" und die Übergänge von einem Schritt in den anderen lassen sich gut beschreiben.

    Gruss cmoeller

     

Log in to post a comment.