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

Ergebnis 1 bis 8 von 8

Thema: Verlängerter Impuls als IEC1131-Timer???

  1. #1
    Registriert seit
    09.03.2006
    Beiträge
    137
    Danke
    19
    Erhielt 4 Danke für 4 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    gibt es einen IEC-Timer für verlängerten Impuls -> Vergleichbar mit S_VIMP???

    Wenn nein, wie kann ich mir aus IEC-Timern einen verlängerten Impuls "basteln"???

    Gruß HarryH
    Zitieren Zitieren Verlängerter Impuls als IEC1131-Timer???  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    ... du setzt flankengesteuert z.B. einen Merker.
    Mit diesem Merker startest du den TON (SFB4).
    Ist der TON abgelaufen löscht du den Merker wieder.
    Die Dauer, die der Merker da ist wird bestimmt durch die Zeit am TON und ist somit dein verlängerter Impuls ...

    Gruß
    LL

  3. #3
    Avatar von HarryH
    HarryH ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.03.2006
    Beiträge
    137
    Danke
    19
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Hallo LL,

    danke für die schnelle Antwort. Wenn ich mich nicht irre ist das was du beschrieben hast der TP (SFB3, IEC-Timer Impuls).

    Das was ich brauche ist die Funktionalität eines S_VIMP (nur halt mit IEC-Timern), wo ich die Zeit bevor sie abgelaufen ist immer wieder mit einer steigenden Flanke neu antriggern kann. D.h. die Zeit startet immer wieder neu, auch bevor die Zeit einmal abgelaufen ist. Bedeutet, ich kann den Impuls beliebig lange verlängern, solange die Zeitdauer zwischen den Startflanken kleiner ist als der Zeitwert des Timers.

    Wie kann man das am besten lösen?

    Gruß HarryH

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    ... im Prinzip genauso ...
    Mit der steigenden Flanke des Eingangs setzt du einen Merker.
    Mit der fallenden Flanke des Eingangs triggerst du einen TOF (SFB5). Dieser liefert einen 2. Merker. Dieser löscht den 1. Merker.
    Der 1. oder der 2.Merker ergeben deinen Impuls ...

  5. #5
    Registriert seit
    11.10.2006
    Ort
    Verden (Aller)
    Beiträge
    532
    Danke
    31
    Erhielt 58 Danke für 49 Beiträge

    Standard

    Wie wär's mit dem hier, aus der Oscat-Bibliothek.
    Ich habe T_PLC_MS und stime in einer Funktion zusammengefasst und hier mit reinkopiert, weiß noch nicht ob das geht, muß ich nachher mal testen.

    Code:
    (* @PATH := '\/Logic\/generators' *)
    FUNCTION_BLOCK FB189
    TITLE = 'TP_R'
    //
    // version 1.1  17 sep 2007
    // programmer   hugo
    // tested by    Albinus
    //
    // retriggerable edge triggered pulse similar to TP but with a retrigger function
    // if the pt input is 0 then output is always low.
    //
    // uses: oscat/engineering/measurements/T_PLC_MS
    //       oscat/engineering/measurements/stime
    //
    VERSION : '1.1';
    AUTHOR  : hugo
    NAME    : TP_R
    FAMILY  : GENERAT
    VAR_INPUT
      in : BOOL;
      PT : TIME;
    END_VAR
    VAR_OUTPUT
      Q : BOOL := 0;
      ET : TIME := t#0ms;
    END_VAR
    VAR
      last_time : TIME := t#0ms;
      edge : BOOL := FALSE;
      start : TIME := t#0ms;
      tx: TIME;
        at_tx AT tx : ARRAY[0..31] OF BOOL;
    END_VAR
    BEGIN
    (* read the system timer *)
      tx := TIME_TCK();
      
    (* check for overrun *)
      IF TIME_TO_DINT(tx) < TIME_TO_DINT(last_time) THEN
        (* an overrun has occured, change the value of the highest bit *)
        at_tx[7] := NOT at_tx[7];
      END_IF;
      (* remember the last system time for the next overrun check *)
      last_time := tx;
      
      (* rising edge trigger *)
      IF in AND NOT edge THEN
        start := Tx;
        IF pt > t#0ms THEN Q := TRUE; END_IF;
      END_IF;
      edge := in;
      IF q THEN
        et := Tx - start;
        IF et >= PT THEN
          Q := FALSE;
          et := t#0ms;
        END_IF;
      END_IF;
    
    (* revision history
    hm  4. aug 2006    rev 1.0
      original version
    hm  17. sep 2007  rev 1.1
      replaced time() with T_PLC_MS() for compatibility reasons
      
    *)
    END_FUNCTION_BLOCK
    "Ein lahmer Drecksplanet ist das, ich habe nicht das geringste Mitleid" (Prostetnik Vogon Jeltz)

  6. #6
    Registriert seit
    11.10.2006
    Ort
    Verden (Aller)
    Beiträge
    532
    Danke
    31
    Erhielt 58 Danke für 49 Beiträge

    Standard

    Oder so:

    Code:
    FUNCTION_BLOCK FB 189
    TITLE =
    VERSION : 0.1
    
    VAR_INPUT
      IN : BOOL ; 
      PT : TIME ; 
    END_VAR
    VAR_OUTPUT
      Q : BOOL ; 
      ET : TIME ; 
    END_VAR
    VAR
      RT : TIME ; 
      ST : TIME ; 
      Flanke : BOOL ; 
    END_VAR
    VAR_TEMP
      TT : TIME ; 
    END_VAR
    BEGIN
    NETWORK
    TITLE =
          UN    #IN; 
          UN    #Q; 
          BEB   ; 
          CALL "TIME_TCK" (
               RET_VAL                  := #TT);
          L     #TT; 
          L     #RT; 
          <D    ; 
          SAVE  ; 
          U     L      0.7; 
          R     L      0.7; 
          U     BIE; 
          UN    L      0.7; 
          S     L      0.7; 
          L     #TT; 
          T     #RT; 
          U     #IN; 
          FP    #Flanke; 
          SPBN  init; 
          S     #Q; 
          L     #TT; 
          T     #ST; 
    init: L     #RT; 
          L     #ST; 
          -D    ; 
          T     #ET; 
          L     #ET; 
          L     #PT; 
          >=D   ; 
          R     #Q; 
          SPBN  ende; 
          L     T#0MS; 
          T     #ET; 
    ende: NOP   0; 
    END_FUNCTION_BLOCK
    "Ein lahmer Drecksplanet ist das, ich habe nicht das geringste Mitleid" (Prostetnik Vogon Jeltz)

  7. #7
    Registriert seit
    11.10.2006
    Ort
    Verden (Aller)
    Beiträge
    532
    Danke
    31
    Erhielt 58 Danke für 49 Beiträge

    Standard

    Ob das mit dem Bitdrehen so klappt.....weiß ja nicht.

    Hier hab' ich noch einen:

    Code:
    FUNCTION_BLOCK FB 189
    TITLE =
    VERSION : 0.1
    
    VAR_INPUT
      IN : BOOL ; 
      PT : TIME ; 
    END_VAR
    VAR_OUTPUT
      Q : BOOL ; 
      ET : TIME ; 
    END_VAR
    VAR
      ST : TIME ; 
      Flanke : BOOL ; 
      dummy : DWORD ; 
    END_VAR
    VAR_TEMP
      TT : TIME ; 
    END_VAR
    BEGIN
    NETWORK
    TITLE =
          UN    #IN; 
          UN    #Q; 
          BEB   ; 
          CALL "TIME_TCK" (
               RET_VAL                  := #TT);
          U     #IN; 
          FP    #Flanke; 
          SPBN  init; 
          S     #Q; 
          L     #PT; 
          L     #TT; 
          +D    ; 
          SPO   uebl; 
          SPA   init; 
    uebl: L     #TT; 
          L     L#2147483647; 
          -D    ; 
    init: T     #ST; 
          L     #TT; 
          L     #ST; 
          >=D   ; 
          R     #Q; 
    END_FUNCTION_BLOCK
    Da muß ich mir bloß noch was für die Zwischenzeit ET überlegen.
    Ich geh' nachher mal an den Simulatöör.....
    "Ein lahmer Drecksplanet ist das, ich habe nicht das geringste Mitleid" (Prostetnik Vogon Jeltz)

  8. #8
    Registriert seit
    11.10.2006
    Ort
    Verden (Aller)
    Beiträge
    532
    Danke
    31
    Erhielt 58 Danke für 49 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ...amtliche Endergebnis:

    Code:
    FUNCTION_BLOCK FB 189
    TITLE =
    VERSION : 0.1
    
    
    VAR_INPUT
      IN : BOOL ;    
      PT : TIME ;    
    END_VAR
    VAR_OUTPUT
      Q : BOOL ;    
      ET : TIME ;    
    END_VAR
    VAR
      ST : TIME ;    
      Flanke : BOOL ;    
      dummy : DWORD ;    
    END_VAR
    VAR_TEMP
      TT : TIME ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    
          UN    #IN; 
          UN    #Q; 
          SPB   ende; 
    
          CALL "TIME_TCK" (
               RET_VAL                  := #TT);
    
          U     #IN; 
          UN    #Flanke; 
          SPBN  init; 
          SET   ; 
          S     #Q; 
          L     #PT; 
          L     #TT; 
          +D    ; 
          SPO   uebl; 
          SPA   nubl; 
    uebl: L     L#2147483647; 
          -D    ; 
    nubl: T     #ST; 
    
    init: L     #TT; 
          L     #ST; 
          >=D   ; 
          R     #Q; 
    
    ende: U     #IN; 
          =     #Flanke; 
    END_FUNCTION_BLOCK
    "Ein lahmer Drecksplanet ist das, ich habe nicht das geringste Mitleid" (Prostetnik Vogon Jeltz)
    Zitieren Zitieren Das vorläufige...  

Ähnliche Themen

  1. Verlängerter Impuls und Einschaltverzögerung
    Von Chry007 im Forum Simatic
    Antworten: 22
    Letzter Beitrag: 11.01.2011, 00:33
  2. Zeitfunktion SV - verlängerter Impuls in SCL
    Von s_alpen im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 26.11.2010, 09:55
  3. Bei S7-200 "Zeit als verlängerter Impuls"
    Von dape im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 10.07.2009, 15:10
  4. IEC1131-3-Timer
    Von pinolino im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 17.09.2008, 14:48
  5. Allen Bradley Verlängerter Impuls
    Von plc_tippser im Forum Sonstige Steuerungen
    Antworten: 6
    Letzter Beitrag: 11.05.2006, 10:03

Lesezeichen

Berechtigungen

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