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

Ergebnis 1 bis 9 von 9

Thema: SCL for Schleife

  1. #1
    Registriert seit
    20.08.2015
    Beiträge
    11
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich experimentiere derzeit mit SCL. Ich bin auf der Suche nach einem Befehl, welcher dafür sorgt das meine forschleife nach eine bestimmten Zeit durchläuft. Ein Wert soll inkrementiert werden aber nur alle 2 Sekunden. In C kenne ich den "_delay_ms();" Befehl aber in SCL kann ich nichts finden wie ich das realisieren könnte.

    Danke im Vorraus
    Zitieren Zitieren SCL for Schleife  

  2. #2
    Registriert seit
    20.02.2014
    Beiträge
    75
    Danke
    13
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Hallo Philipp

    Hab ich das richtig verstanden? Du möchtest, dass nach jedem Schleifendurchlauf eine Pause stattfindet?

    Gruß Andreas

  3. #3
    Philipp1986 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    20.08.2015
    Beiträge
    11
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ganz genau

  4. #4
    Registriert seit
    20.02.2014
    Beiträge
    75
    Danke
    13
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Das was du suchst gibt es zwar, es ist aber nicht sinnvoll deine SPS so zu bremsen. In S7 Classic weiß ich das es den SFC 47 WAIT gibt. Der macht genau das was du möchtest aber es macht meiner Meinung keinen Sinn.

    Besser wäre es die Schleife per Hand zu programmieren. Du kannst die Zykluszeit aus dem OB1 auslesen und diese aufsummieren. Wenn die verstrichene Zeit(Summe) größer ist als deine Wartezeit, dann mit einer IF-Bedingung den Schleifeninhalt aktivieren und in einer statischen Variable den Index aufsummieren.


    Ca. so:
    Code:
    #Zeitspeicher:= #Zeitspeicher+#PREV_CYCLE; //Summe der Zykluszeiten
    
    IF (#INDEX > #Max_INDEX) THEN //Index auf 0 setzen
        #INDEX := 0;
    END_IF;
    
    IF (#Zeitspeicher >= #Schaltzeit) THEN
        //Anweisung
        //...
        //...
        #INDEX:=#INDEX+1;
        #Zeitspeicher := 0;
    END_IF;
    Gruß Andreas
    Geändert von Andi_ (11.04.2016 um 19:53 Uhr) Grund: Code eingefügt

  5. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.288 Danke für 2.657 Beiträge

    Standard

    Delay() gibt es nicht, weil ein SPS-Programm darf nicht "auf der Stelle treten" oder "einschlafen". Es muß innerhalb der Zyklusüberwachungszeit dem Betriebssystem mitteilen, daß es komplett abgearbeitet wurde - sprich: es muß am Ende des OB1 angekommen sein und ins Betriebssystem zurückspringen.
    Also: Du startest einen Timer TON. Dein Programm schaut nur nach ob der Timer abgelaufen ist. Wenn ja, dann inkrementiere was Du willst und starte den Timer neu.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #6
    Philipp1986 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    20.08.2015
    Beiträge
    11
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ok Danke. Ich werde mal rumprobieren. Ich möchte einen 0-10V Ausgang langsam hochfahren lassen.

    Gruß Philipp

  7. #7
    Registriert seit
    12.04.2005
    Ort
    Black Forest
    Beiträge
    1.335
    Danke
    27
    Erhielt 129 Danke für 116 Beiträge

    Standard

    Da würde ich mal nach einer Rampen-Funktion schauen

    „Eine Frage raubt mir den Verstand bin ich verrückt oder sind es die Anderen ?“

    Albert Einstein

  8. #8
    Registriert seit
    16.03.2014
    Beiträge
    359
    Danke
    74
    Erhielt 45 Danke für 38 Beiträge

    Standard

    OSCAT !

    Beste Grüße
    Shrimps

  9. #9
    Registriert seit
    06.04.2016
    Ort
    Schweiz
    Beiträge
    69
    Danke
    12
    Erhielt 13 Danke für 9 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Dazu brauchst du keine Schleife, sondern eine ganz einfach lineare Funktion.
    Vereinfacht gesagt:

    Ausgang = "verstrichene zeit" / "zeit bis Ausgang von 0 auf 10v sein soll" * 27648

Ähnliche Themen

  1. Hilfe For-Schleife SCL
    Von Oile1989 im Forum Programmierstrategien
    Antworten: 6
    Letzter Beitrag: 25.08.2015, 19:25
  2. Step 7 Schleife in SCL
    Von spirit im Forum Simatic
    Antworten: 18
    Letzter Beitrag: 16.10.2014, 18:20
  3. DBs in Schleife SCL
    Von WinniePooh im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 31.10.2012, 14:00
  4. For Schleife SCL
    Von Gucky_av im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 19.09.2012, 18:58
  5. Bool Schleife in DB schreiben SCL
    Von Limette im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 02.02.2012, 22:15

Stichworte

Lesezeichen

Berechtigungen

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