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

Schrittschalter

lolo68
2008-11-12
2013-12-27
  • lolo68 - 2008-11-12

    Hallo

    Ich bin neu hier, Anfänger mit codesys, aber fasziniert vom programmieren.

    Könnte mir jemand klären wie ich ein Schrittschalter in ST programmieren kann.

    Im Voraus besten dank.

     
  • Erik Böhm - 2008-11-12

    Moin

    Was ist denn ein Schrittschalter ?

    Gruss Erik

     
  • Pitsch52 - 2008-11-12

    Hallo

    Mit einen FB, kannst DU mal das hier versuchen:

    (Deklarationsteil:)

    FUNCTION_BLOCK Schrittschalter

    VAR_INPUT

    ENABLE:BOOL;
    
    CLOCK:BOOL;
    

    END_VAR

    VAR_OUTPUT

    OUT_1:BOOL;
    
    OUT_2:BOOL;
    
    OUT_3:BOOL;
    
    OUT_4:BOOL;
    
       (*etc.*)
    

    END_VAR

    VAR

    FLANKE:BOOL;
    
    COUNT:INT := 0;
    

    END_VAR

    (Codeteil:)

    (Schrittschalter Eingang Clock ist Flankengetriggert)

    (Zähler)

    IF (CLOCK = TRUE AND FLANKE = FALSE) THEN (Steigende Flanke an Clock erkennen)

    COUNT := COUNT + 1;

    IF COUNT > 4 THEN (Wenn Zählerstand grösser als höchster Ausgang)

    COUNT := 0; (*Zähler auf null setzen*)
    

    END_IF

    END_IF

    FLANKE := CLOCK; (Flankenmerker zurücksetzen)

    (Alle Ausgänge zurücksetzen)

    OUT_1 := FALSE;

    OUT_2 := FALSE;

    OUT_3 := FALSE;

    OUT_4 := FALSE;

    (etc.)

    (Je nach Zählerstand, den entsprechenden Ausgang auf TRUE setzen)

    CASE COUNT

    OF

    1: OUT_1 := TRUE;
    
    2: OUT_2 := TRUE;
    
    3: OUT_3 := TRUE;
    
    4: OUT_4 := TRUE;
    
    (*etc.*)
    

    ELSE

    (Bei nicht Irrelevanten Werten von COUNT (z.B. COUNT := 0), alle Ausgänge zurücksetzen)

    OUT_1 := FALSE;
    
    OUT_2 := FALSE;
    
    OUT_3 := FALSE;
    
    OUT_4 := FALSE;
    
    (*etc.*)
    

    END_CASE;

    Habs nicht getestet! Sollte aber so funktionieren.

    Viel Spass beim Ausprobieren!

    Mit freundlichen Grüssen! Pitsch

     
  • lolo68 - 2008-11-12

    vielen dank für ihre hilfe, ich werde das morgen ausprobieren

     
  • lolo68 - 2008-11-13

    Hallo Pitsch,

    vielen Dank für ihre Antwort. Jetzt habe ich noch eine Frage?

    Ich habe mehrere tasten die ein Motor oder licht ein und ausschalten können, sollte diese Funktion über Schrittschaltung programmiert werden, oder gibt es eine andere Lösung.

    Mit freundlichen grüße.

    Lolo68

     
  • Pitsch52 - 2008-11-13

    Hallo

    Also wenn Du einen Ausgang (der z.B. Eine Lampe über einen Impulsschalter ein- und ausschaltet) alternierend steuern willst, könntest Du es mal so, mit einem FB probieren.

    (Deklarationsteil)

    FUNCTION_BLOCK Alternate

    VAR_INPUT

    CLOCK:BOOL;
    

    END_VAR

    VAR_OUTPUT

    OUT:BOOL;
    

    END_VAR

    VAR

    FLANKE:BOOL;
    

    END_VAR

    (Codeteil)

    (Baustein schaltet den Ausgang bei einer steigenden Flanke an CLOCK, alternierend Ein oder Aus)

    IF (CLOCK = TRUE AND FLANKE = FALSE) THEN (Steigende Flanke an CLOCK erkennen)

    OUT := NOT OUT; (Ausgang invertieren)

    END_IF

    FLANKE := CLOCK; (Flankenmerker zurücksetzen)

    Ungetestet! Sollte aber funktionieren.

    Mit freundlichen Grüssen! Pitsch

     
  • kaspar - 2013-12-27

    Hallo Gemeinde

    Habe zu Schrittschaltung eine geniale Lösung gefunden.

    U E 1.0
    UN M 1.0
    S A 1.0

    U E 1.0
    U M 1.0
    R A 1.0

    UN E 1.0
    U A 1.0
    S M 1.0

    UN E 1.0
    UN A 1.0
    R M 1.0

    Diese Lösung braucht keine Flankenauswertung und kein Entpellen.
    Sie ist sehr gut nachvollziehbar und auch in FUP oder KOP gut zu realisieren.
    Sie stammt aus dem SPS Forum und ursprünglich aus dem Buch Automatisieren mit S5-115U.
    Diese Funktion nennt sich auch Binärutersetzer oder auch Frequenzteiler.
    Wenn mehrere Schalter dazugeschaltet werden einfach ein Oder vor E 0.1 gesetzt.

    Gruss und viel Erfolg
    Kaspar

     

Log in to post a comment.