Step 7 Impuls nach Schleifenaufruf erzeugen

SPSNeuling2

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag,

ich hänge im Moment an einen Problem.

Ich möchte jedes mal, wenn ich eine IF-Schleife öffne einen Impuls erzeugen.
Dazu habe ich den Baustein Timer.TP verwendet.
Allerdings wird dieser Impuls nur beim 1. mal ausgeführt. Beim 2. Öffnen der Schleife ist ja die Startbedingung für den Impuls noch 1 und kann damit nicht erneut gestartet werden.
Deshalb muss ich es irgendwie hinbekommen, dass ich die Start-Variable nach ausführen des Impuls wieder deaktiviere und der Impuls erst wieder aktiviert wird, wenn die Schleife erneut geöffnet wird.

Hier mein bisheriges Programm:

IF (#counterGeneral MOD 2 = 0)THEN
#startFirst := TRUE;
ELSE
#startFirst := FALSE;
END_IF;
"IEC_Timer_0_DB_6".TP(IN := #startFirst, //impuls für 5 sek
PT := #time5sec,
Q => #startForward);
"IEC_Timer_0_DB_10".TON(IN := #startForward4, //nach 2 sek starten
PT := #time2sec,
Q => #startForward2);

Das ganze befindet sich in einer weiteren IF-Schleife.


Habt ihr Vorschläge, wie das klappen könnte?
 
Hallo, soweit ich das verstehe möchtest du jedes Mal wenn CounterGeneral einen geraden Wert hat, einen Impuls von 5 Sekunden erzeugen?

Was soll passieren wenn innerhalb der 5 Sekunden der Wert gerade bleibt bzw. wieder gerade wird?

Was soll da zum Schluss rauskommen?

Nur mal Generelle Tipps:

Timer nie in bedingt aufrufen

Statt IF/ELSE Konstrukt kann man einfache Zuweisung verwenden
Code:
#startFirst := #counterGeneral MOD 2 = 0;
 
Zuletzt bearbeitet:
Timer brauchen zum Starten eine steigende Flanke, d.h. sie müssen auch mal mit IN = FALSE aufgerufen werden, damit der nächste Aufruf mit IN = TRUE als steigende Flanke erkannt wird und den Timer wieder startet. Man muß dafür sorgen, daß das Signal an IN für mindestens einen Timer-Aufruf FALSE ist. Das passiert nicht, wenn man den Timer nur dann aufruft (bedingt), wenn das IN-Signal TRUE ist. Daher: den Timer-Aufruf unbedingt/immer ausführen. Wenn das nicht geht, daß das Signal an IN bei einem Timer-Aufruf auch mal FALSE ist, dann kann man den Timer notfalls ein zusätzliches/zweites Mal mit IN = FALSE aufrufen:
Code:
IF #timerSollNeustarten THEN
  "IEC_Timer_0_DB_6".TP(IN := FALSE);
END_IF;
...
"IEC_Timer_0_DB_6".TP(IN := #startFirst,
                      PT := #time5sec,
                      Q => #startForward);

Harald
 
Zurück
Oben