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

Results 1 to 7 of 7

Thread: Anfängerfrage - SCL Timer

  1. #1
    Join Date
    27.07.2011
    Posts
    41
    Danke
    17
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo alle zusammen!

    Ich fange gerade an, mir für meine Bachelorarbeit SPS Programmieren beizubringen. Ich verstehe allerdings die Timer nicht richtig.

    Dazu soll ein einfache SPS Programm schreiben, welches ein Förderband einschaltet, 3 Sekunden fahren lässt und anschließend wieder ausschaltet.

    Mein Code sieht folgendermaßen aus:

    Code:
    VAR
       task_finished : BOOL := FALSE;
    END_VAR
    
    (* Foerderband anschalten *)
    A 8.3 := 1;
    
    (* 3 Sekunden warten *)
    ???
    
    (* Foerderband ausschalten *)
    A 8.3 := 0;
    task_finished := TRUE;
    An der Stelle "???" möchte ich jetzt 3 Sekunden warten. Dafür hätte ich den S_PULSE Timer verwendet. Allerdings verstehe ich nicht, was die ganzen Übergabeparameter machen. Aus der Hilfe vom Simatic Manager werd ich leider auch nicht schlau.

    Code:
    BCD_time_value := S_PULSE (
    T_NO := Timer,
    S := Start_input,
    TV := Duration,
    R := Reset_input,
    Q := Timer_status,
    BI := Binary_time_value);
    Also wenn ich einen Timer will, der 3 Sekunden geht, dann übergeb ich als "TV := t#3s" und "S := TRUE" damit der sofort losläuft? Den Parameter Q kann ich dann abfragen, und der liefert "1" solange der Timer läuft, und "0" wenn der Timer ausgelaufen ist. Ändert sich der Parameter "R" von "0" auf "1", dann wird der Timer vorzeitig beendet. Verstehe ich das soweit richtig?
    Was machen die anderen Übergabeparameter?

    Danke schonmal für die Antworten,

    mfg,
    Frank
    Reply With Quote Reply With Quote Anfängerfrage - SCL Timer  

  2. #2
    Join Date
    22.11.2006
    Location
    CH
    Posts
    4,326
    Danke
    983
    Erhielt 855 Danke für 635 Beiträge

    Default

    Die Parameter die du nicht brauchst musst du im Aufruf garnicht aufführen.
    OUT Parameter benutzt du im Aufruf garnicht, die werdem im Programm abgefragt. Im Beispiel eines Systemfunktionblocks

    Code:
    VAR
    Timer1  : SFB4; // Zeitverzögerung für Alarmausgang
    Timer1_Start :  BOOL;
    END_VAR
     Timer1(IN := Timer1_Start,PT := T#3s); // Verzögerungstimer IST/Sollabweichung initialisieren
    
    IF Timer1.Q THEN
        TIMERakt := 1;
    ELSE
        TIMERakt := 0;
    END_IF;
    Ich hoffe das ist verständlich.

  3. #3
    Join Date
    27.07.2011
    Posts
    41
    Danke
    17
    Erhielt 0 Danke für 0 Beiträge

    Default

    Ah, okay! Langsam wird mir das ganze etwas klarer.

    Würde denn folgender Code funktionieren?

    Code:
    VAR
        task_finished : BOOL := FALSE;
        meinTimer : TIMER;
    END_VAR
    
    IF NOT task_finished THEN
        (* 3 Sek Timer starten und Motor anschalten *)
        meinTimer := S_PULSE (S:=TRUE, TV := t#3s)
        A 8.3 := 1;
    
        (* wenn Timer abgelaufen, Motor stoppen *)
        IF NOT meinTimer.Q THEN
            A 8.3 := 0;
            task_finished := TRUE;
        END_IF
    
    END_IF

  4. #4
    Join Date
    22.11.2006
    Location
    CH
    Posts
    4,326
    Danke
    983
    Erhielt 855 Danke für 635 Beiträge

    Default

    Nein. Timer dürfen nicht bedingt bearbeitet werden.

    Du darfst mit einer Bedingung (IF, ELSE_IF etc) nur die EingangsVariable bearbeiten welche den Timer startet.

    T_NO kannst du natürlich nicht weglassen damit definierst du den hardwaretimer (warum nimmst du kein IEC Timer?

    An S darfst du dann natürlich keine Konstante anhängen. da gehört die Variable hin die du mit der Startabfrage setzt.

    Den Rückgabewert "meinTimer" musst du nicht als Rückgabewert nutzen. du kannst den Timer auch direkt als TIMER() aufrufen (ohne := und das davor). Stattdessen nutzt du "meinTimer" am an der S= Zuweisung.

    mfG René

  5. #5
    Join Date
    27.07.2011
    Posts
    41
    Danke
    17
    Erhielt 0 Danke für 0 Beiträge

    Default

    Nächster Versuch:

    Code:
    VAR
        task_finished : BOOL := FALSE;
        StarteMeinTimer : BOOL := FALSE;
        meinTimer := TIMER;
    END_VAR
    
    meinTimer := S_PULSE(T_NO := ???, S := StarteMeinTimer, TV := t#3s)
    IF NOT task_finished THEN
        (* Motor und Timer starten *)
        A 8.3 := 1;
        StarteMeinTimer := 1;
    
        (* wenn Timer abgelaufen, Motor stoppen *)
        IF NOT meinTimer.Q THEN
            A 8.3 := 0;
            task_finished := TRUE;
        END_IF
    
    END_IF
    Ich weiß leider auch nicht, was ein IEC Timer ist und wie ich dem Programm sage, dass es ihn verwenden soll.
    Was muss ich bei "T_NO" angeben?

    Sorry wenn ich ein wenig länger brauche. Aber ohne Ausbildung, Lehrgang o.ä. fühlt sich der "Einstieg" in SPS Programmieren eher an wie ein Sprung in eiskaltes Wasser.

  6. #6
    Join Date
    22.11.2006
    Location
    CH
    Posts
    4,326
    Danke
    983
    Erhielt 855 Danke für 635 Beiträge

    Default

    Quote Originally Posted by FrankTheTank View Post
    Ich weiß leider auch nicht, was ein IEC Timer ist und wie ich dem Programm sage, dass es ihn verwenden soll.
    Was muss ich bei "T_NO" angeben?
    SFB4 und SFB5 sind als IEC Timer schon auf den CPUs drauf
    SFB3 ist ein IEC Pulstimer ebenfalls schon auf der CPU drauf.

    In der Bibliothek unter "System Function Blocks" zu finden.

    Mit dem SFB3 würde das z.B. im Programm so aussehen Jetzt mal ohne deine Ausgaben auf die Ausgänge.

    Code:
    FUNCTION_BLOCK FB2000
    VAR
    Timer1  : SFB3; // Impulstimer definieren. SFB3 wird als Struktur in der FB Schnittstelle abgelegt
    Timer1_Start :  BOOL; // Variable um Pulstimer zu starten (kann z.B. in dem IN Bereich des aktuellen FBs abgelegt werden.
    END_VAR
    BEGIN
     Timer1(IN := Timer1_Start,
            PT := T#3s); // Impulstimer wird mit den eingangsvariablen beschaltet
    
    IF Timer1.Q THEN // abfrage ob Timerpuls aktiv
        TIMERakt := 1; // wenn ja dann TIMERakt auf True setzen
    ELSE
        TIMERakt := 0; // Vice versa
    END_IF;
    
    END_FUNCTION_BLOCK
    Da es ein SFB ist braucht er einen instanzdatenbaustein um seinen Status abzulegen. Wenn du ihn eh in einem FB ablegst spielt das keine rolle da der übergeordnete FB ja schon einen Instanzdatenbaustein besitzt (IDB)

    Der S7 Timer braucht das nicht, dafür muss am T_NO eine einmalige Timernummer vergeben werden (einen freien noch nicht benutzten Timer).
    In der Operationsliste der s7 steht wieviele Timer deine CPU zur verfügung stellt.

    mfG René

  7. Folgender Benutzer sagt Danke zu vollmi für den nützlichen Beitrag:

    FrankTheTank (28.07.2011)

  8. #7
    Join Date
    21.05.2011
    Location
    neben Ostsee
    Posts
    38
    Danke
    15
    Erhielt 2 Danke für 1 Beitrag

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Quote Originally Posted by vollmi View Post
    Nein. Timer dürfen nicht bedingt bearbeitet werden.

    Du darfst mit einer Bedingung (IF, ELSE_IF etc) nur die EingangsVariable bearbeiten welche den Timer startet.
    und CASE? Auch dürfen nicht.

    Wo und wie kann ich Timer_Q abfragen?
    Gibt es die Möglichkeit den Status des Timers zu ermitteln,- aktiv oder nein? Bit,Byte, Register ablesen?

    Wir groß Unterschied zwischen legacy S7 Timer und IEC-Timer?
    Last edited by Oll_Bell; 01.09.2018 at 21:29. Reason: Timer zu Timer
    Ich habe keine Probleme, ich habe nur Lösungen.

Similar Threads

  1. Anfängerfrage zu FB
    By Nafura in forum Simatic
    Replies: 11
    Last Post: 17.05.2010, 09:28
  2. anfängerfrage zu timer und op7
    By linuxluder in forum Simatic
    Replies: 51
    Last Post: 04.04.2008, 17:52
  3. Anfängerfrage
    By Brunoooo in forum Simatic
    Replies: 12
    Last Post: 13.03.2008, 14:01
  4. 1 aus 3 - Anfängerfrage
    By Hucky in forum Simatic
    Replies: 9
    Last Post: 22.01.2008, 21:22
  5. Suche Ersatz für IFM TIMER LG ( Logik Timer)
    By GrafLaugenkotz in forum Sonstige Steuerungen
    Replies: 1
    Last Post: 16.01.2007, 17:02

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •