TIA WHILE Schleife mit Zeitverzögerung

snow-man-01

Level-1
Beiträge
39
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich möchte die folgende WHILE Schleife realisieren:

Code:
WHILE #i < 100 DO

M0.0 := 1;
#IEC_Timer_1(IN := M0.0, PT := 10);

M0.0 := 0;
#IEC_Timer_2(IN := NOT M0.0, PT := 5);

#i = #i + 1;

END_WHILE

M0.0 soll für 10 Sekunden auf HIGH gehalten werden und dann für 5 Sekunden auf LOW.. das solange bis i = 100.

Ich habe diese Schleife mal simuliert, aber bekomme folgendes/nicht erwartetes Ergebnis raus:

Sobald ich einmal die Schleife starte, dann erhalte ich SOFORT #i = 100. Die Schleife ist also komischerweise sofort fertig. Habe auch mal mit anderen Zahlen probiert, zB 1000 oder 500, weil ich dachte, dass man in dem Timer vielleicht Millisekunden einträgt.

Weiß vielleicht jemand, wo mein Denkfehler ist?


Danke im Voraus.
 
Naja grundsätzlich muss der timer ausserhalb der Schleife aufgerufen werden. Timer sollten überhaupt immer unbedingt aufgerufen werden.
Desweiteren an PT kannst du konstanten direkt angeben also t#5s z.B. dann ist die direkte zeit ersichtlich. Ansonsten ist der ganzzahlige Wert einfach in MS

Und was erwartest du was er jetzt macht. Der füht die zeile i = i +1; einfach in jedem Schleifendurchlauf aus. Die Timer und die ganzen Anweisungen zuvor spielen keine Rolle.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... der ganze Ansatz an sich ist der Denkfehler schlechthin - sorry ... 8)

Ich denke, wir sprechen hier von einer SPS und nicht von einem Thread unter .Net ...
- in einer SPS hast du eine zyklische Programmbearbeitung - also deine Schleife ist schon drin - deine Schleife würde diesen Zyklus nicht mehr ermöglichen.
- Timer und hier vor Allem IEC-Timer wollen NICHT bedingt bearbeitet werden.

Vielleicht überdenkst du deinen Ansatz noch einmal.
Mach doch erstmal das eine : 10s An und danach 5 s Aus ... und dann überleg dir, wie du das hinbekommst, dass sich das 100 mal wiederholt ...

Gruß
Larry
 
Zurück
Oben