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

Zeitlicher Ablauf in ST

Anonymous
2006-01-13
2006-01-16
  • Anonymous - 2006-01-13

    Originally created by: Gast

    Hallo zusammen

    Ich versuchte in ST eine Schleife zu programmieren, die 3 mal einen Ausgang (Ventil) für 5sec. ansteuern soll, dann eine Pause von 1s machen soll.

    Das Ganze sollte doch mit einer FOR-Schleife gehen, oder?

    Ich habe das Problem, dass ich keine Möglichkeit gefunden habe, dass die Schleifenabarbeitung auf einen Timer wartet. Die Schleife wude immer sofort innerhalb von 3 Zyklen abgearbeitet ohne den Timer zu berücksichtigen.

    Hat jemand Erfahrung (ich möchte dies unbedingt in ST ausprogrammieren)?

    Danke für die Hilfe.

    Gruss Roger

     
  • Erik Böhm - 2006-01-16

    Hallo

    Das in einer FOR Schleife zu machen, halte ich für ziemlich ungeschickt.

    Mach doch einfach einen Zähler, den du mit Umschalten des Ausgangs Hoch (oder auch Runter) zählst, bis die gewünschte Anzahl an Blinkern erreicht ist.

    In der Bibliothek Util.lib gibts einen Funktionsblock "BLINK". Dem kannst du eine TIMEHIGH und eine TIMELOW mitgeben.

    Damit sollte das eigentlich kein Problem mehr sein.

    Ich könnt jetzt natürlich ein Besipiel anhängen, aber dann ists ja einfach...

    Gruss Erik

     
  • Anonymous - 2006-01-16

    Originally created by: joohrte

    Bei Programmierung von Schleifen sollte man vorsichtig sein.

    Denn solange eine Schleife aktiv ist kann nicht anderes bearbeitet werden.

    Mein Vorschlag eine kleine Schrittkette zu Programmieren.

    CASE iState OF

    0 : IF xStart THEN

        iState := 1 ;
    
        tonTimer ( IN:= FALSE  );
    
        xOut := TRUE ;
    
      END_IF
    

    1 : tonTimer ( IN:= TRUE , PT:= T#5s );

      IF tonTimer.Q THEN
    
         xOut := FALSE ;
    
         iState := 2 ;
    
         tonTimer ( IN:= FALSE  );
    
      END_IF
    

    2 : tonTimer ( IN:= TRUE , PT:= T#2s );

      IF tonTimer.Q THEN
    
         iState := 3 ;
    
         tonTimer ( IN:= FALSE  );
    
      END_IF
    

    ( und so weiter )

    END_CASE

     
  • Erik Böhm - 2006-01-16

    Hi

    Ich hab mir da nen FB geschrieben.

    Beschreibung ist im Deklarationsteil enthalten.

    Gruss Erik

    OSZILLATOR_WITH_PRESET.zip [787 Bytes]

     

Log in to post a comment.