TIA SCL for Schleife

Philipp1986

Level-1
Beiträge
11
Reaktionspunkte
0
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
 
Hallo Philipp

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

Gruß Andreas
 
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
 
Zuletzt bearbeitet:
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
 
Zurück
Oben