Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 3 von 3

Thema: TIMER in ST

  1. #1
    Anonymous Gast

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich brauche eure Hilfe. Bin ein Neuling in CoDeSys und ST.

    Ich habe einen FB erstellt, der folgendes machen soll:
    Wenn an einem Eingang eine pos. Flanke auftritt, dann starte einen Timer von x Sekunden, unabhängig was in der Zwischenzeit an diesem Eingang passiert.

    Der Code ist noch nicht optimiert!

    FRAGE: Der Timer läuft nur ein einziges mal ab, warum?

    Ich habe es mit einer eigenen Version, mit einem Flag das gestzt wird, wenn der Eingang 0 ist probiert, doch dort läuft die Funktion auch nur einmal durch?

    FRAGE: Mach ich vielleicht etwas mit dem Simulator falsch?

    Code:
    FUNCTION_BLOCK Flanke_Impuls_Zeit 
    
    VAR_INPUT 
       blImpuls_Start: BOOL; 
    END_VAR 
    
    VAR_OUTPUT 
       blZeitimpuls_Gesetzt: BOOL; 
    END_VAR 
    
    VAR 
       blFlag_Merker_Impuls_Start:BOOL; 
       blFlanken_Impuls: BOOL:=FALSE; 
       blTemp_Zeitimpuls_Gesetzt: BOOL:= FALSE; 
    END_VAR 
    
    VAR PERSISTENT 
       blFlanke_Positiv: R_TRIG; 
       timeZeit_Impuls: TP; 
       timeZeitdauer_Impuls: TIME:=T#5s; 
       timeAnzeige: TIME; 
    END_VAR 
    
    blFlanke_Positiv(CLK:= blImpuls_Start);                                    (* Aufruf von R_TRIG *) 
    blFlag_Merker_Impuls_Start:= blFlanke_Positiv.Q; 
    
    IF blFlag_Merker_Impuls_Start=TRUE THEN 
       blFlanken_Impuls:= TRUE;                                          (* Kopieren *) 
    END_IF; 
    
    
    IF blFlanken_Impuls=TRUE THEN                                       (* Abfragen ob Positive Flanke *) 
       timeZeit_Impuls (IN  :=  blFlanken_Impuls, PT:= timeZeitdauer_Impuls );      (* Timer TP aufrufen *) 
       blTemp_Zeitimpuls_Gesetzt:= timeZeit_Impuls.Q; 
       timeAnzeige:=timeZeit_Impuls.ET;                                    (* ablaufende Zeit abfragen *) 
    
       IF timeAnzeige >= timeZeit_Impuls.PT THEN                           (* Wenn abgelaufene Zeit der gesetzten entspricht, blFlanken_Impuls zurücksetzen *) 
          blFlanken_Impuls:= FALSE; 
       END_IF; 
    
    END_IF;
    Freu mich, wenn mir jemand weiterhelfen kann. DANKE

    lieven
    Zitieren Zitieren Gelöst: TIMER in ST  

  2. "Hallo lieven,

    ich würde es so machen:

    Code:
    FUNCTION_BLOCK Flanke_Impuls 
    
    (* Eingang *) 
    VAR_INPUT 
       Eingangs_Impuls: BOOL; 
       Zeitdauer: TIME;                  (* Zeitdauer einstellbar *)
    END_VAR 
    
    (* Ausgang *) 
    VAR_OUTPUT 
       Ausgangs_Impuls: BOOL;
       Zeit: TIME;                        (* dient der Kontrolle *)  
    END_VAR 
    
    (* Lokal *) 
    VAR 
       Timer: TOF;                        (* Timer vom Typ TOF*) 
       Flanke: R_TRIG; 
    END_VAR 
    
    
    (* Flanken-Erkennung  *) 
    Flanke(CLK:= Eingangs_Impuls);
    
    (* Aufruf der Timerfunktion TOF aus der Standard LIB *) 
    Timer(IN:= Flanke.Q, PT:= Zeitdauer); 
    Ausgangs_Impuls:=Timer.Q; 
    Zeit:= Timer.ET;
    Mfg"


  3. #2
    Anonymous Gast

    Standard

    Hab die Antwort selbst gefunden. Weis nicht warum ich die Sache so kompliziert gemacht habe, hier ne Lösung die Funktioniert:

    Code:
    FUNCTION_BLOCK Flanke_Impuls
    
    (* Eingang *)
    VAR_INPUT
    	Eingangs_Impuls: BOOL;
    END_VAR
    
    (* Ausgang *)
    VAR_OUTPUT
    	Ausgangs_Impuls: BOOL;
    END_VAR
    
    (* Lokal *)
    VAR
    	Timer: TP;								(* Timer vom Typ TP, Impuls *)
    	Flanken_Merker: BOOL:= FALSE;
    	Zeitdauer: TIME;						(* Zeitdauer einstellbar *)
    	Zeit: TIME;								(* dient der Kontrolle *)
    END_VAR
    
    
    (* Flanken-Erkennung  *)
    IF Eingangs_Impuls=TRUE THEN
    	Flanken_Merker:= TRUE;
    END_IF;
    
    (* Aufruf der Timerfunktion TP aus der Standard LIB *)
    Timer(IN:= Flanken_Merker, PT:= Zeitdauer);
    Ausgangs_Impuls:=Timer.Q;
    Zeit:= Timer.ET;
    IF Timer.ET >= Timer.PT THEN
    	Flanken_Merker:= FALSE;
    END_IF;
    Danke fürs lesen

    gruß
    lieven

  4. #3
    Anonymous Gast

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo lieven,

    ich würde es so machen:

    Code:
    FUNCTION_BLOCK Flanke_Impuls 
    
    (* Eingang *) 
    VAR_INPUT 
       Eingangs_Impuls: BOOL; 
       Zeitdauer: TIME;                  (* Zeitdauer einstellbar *)
    END_VAR 
    
    (* Ausgang *) 
    VAR_OUTPUT 
       Ausgangs_Impuls: BOOL;
       Zeit: TIME;                        (* dient der Kontrolle *)  
    END_VAR 
    
    (* Lokal *) 
    VAR 
       Timer: TOF;                        (* Timer vom Typ TOF*) 
       Flanke: R_TRIG; 
    END_VAR 
    
    
    (* Flanken-Erkennung  *) 
    Flanke(CLK:= Eingangs_Impuls);
    
    (* Aufruf der Timerfunktion TOF aus der Standard LIB *) 
    Timer(IN:= Flanke.Q, PT:= Zeitdauer); 
    Ausgangs_Impuls:=Timer.Q; 
    Zeit:= Timer.ET;
    Mfg
    Zitieren Zitieren Timer in ST  

Ähnliche Themen

  1. Timer im FB
    Von Golden Egg im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 26.07.2007, 08:52
  2. Suche Ersatz für IFM TIMER LG ( Logik Timer)
    Von GrafLaugenkotz im Forum Sonstige Steuerungen
    Antworten: 1
    Letzter Beitrag: 16.01.2007, 17:02
  3. S7 Timer
    Von Elektro im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 06.11.2006, 11:30
  4. IEC timer 2
    Von Anonymous im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 07.04.2005, 10:12
  5. IEC Timer
    Von Anonymous im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 07.04.2005, 08:17

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •