Delay Zeit in ST möglich?

daniel1987

Level-1
Beiträge
37
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ist für die meisten von euch wahrscheinlich ne kindergartenfrage , aber ich bin eher so aus de C# schiene heraus und habe eine kleine frage, wenn ich eine Schleife schreiben will in ST und innerhalb der schleife eine kurze Wartezeit benötige muss ich das dann mit einem TOF Baustein realisieren oder gibts da auch alternativen?

Ich dachte an so etwas (Beispiel):

For ( i:=1 , i<100 , i++)

jetzt einfach eine Pausenzeit ablaufen lassen z.b. 1000ms

und damit soll diese schleife einfach langsam 99 mal durchlaufen werden.
Bitte jetzt keine Antworten a la bist du doof? schäme mich ja schon...MFG
 
Zuletzt bearbeitet:
Ja du bist Doof :p Nein nicht wirklich.

Wenn du aus der C# - Ecke kommst ist das ein normales vorgehen! Dort läuft das Programm ja "Linear" ab.
Leider ist das bei der SPS auch so, aber sie lebt von ihrem Cycle. Wenn du nun diesen Anhälst mit deiner "Pause" wird nichts anderes mehr gemacht.
C# kann ja sicher Threading und Callbacks, aber das ist bei einer SPS alles nicht in der Form umgesetzt.

Du könntest es jetzt so lösen:

Code:

IF i > 100 THEN

// Weiter gehts
i = 0;
ELSE
i = i + 1;

END_IF;

Die "Schleife" ist dein Programmzyklus, und deine Funktion wird in dem Beispiel 100 mal übersprungen und dann einmal ausgeführt.

Grüße

Marcel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für superschnelle antwort, also meinst du ich soll einfach sagen wir mal 100 mal durchlaufen lassen um 1sek. wartezeit zu simulieren?
darauf wäre ich jetzt so nicht gekommen. :rolleyes:
 
naja es gibt noch ein paar faktoren die da stören!

z.B. schwankt die Zykluszeit, weil durch solche Aktionen wie deine mal mehr mal weniger Code ausgeführt wird!
Ich würde wenn du eine definierte Zeit brauchst beim Timer bleiben!

Grüße

Marcel
 
Code:
DelayTimer :TON

DelayTimer(IN:= NOT DelayTimer.Q, PT := t#1s);
IF DelayTimer.Q THEN
  i:=i+1;
END_IF

Der Timer ist eine normale Einschaltverzögerung. Nach 1s (PT:=t#1s) wird Q auf true gesetzt und damit i um 1 erhöht.
Durch IN:= NOT DelayTimer.Q setzt sich der Timer jedesmal selbst zurück wenn er ausgelöst hat und fängt wieder von vorne an....

Wenn du aus der Hochsprachenprogrammierung kommst, mache dich mit der zyklischen Programmabarbeitung von SPSen vertraut. Einige Probleme muss man in der SPS Welt anders angehen als man es sonst gewohnt ist.
 
Zurück
Oben