Timerfunktion Beckhoff ST

Striqer

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

ich möchte mit meinem Programm eine Rechteckkurve ausgeben.

Folgendes Programm habe ich geschrieben, funktioniert aber nicht:

PauseTimer : TON;
SprungTimer : TON;
_____________________________


PauseTimer(IN := TRUE, PT := t#10s);

IF NOT PauseTimer.Q & NOT SprungTimer.Q THEN
ausgaenge.AO_1 := 0;
END_IF

IF PauseTimer.Q & NOT SprungTimer.Q THEN
ausgaenge.AO_1 := 15504;
SprungTimer(IN := TRUE, PT := t#12s);
END_IF


IF SprungTimer.Q THEN
PauseTimer(IN := False);
SprungTimer(IN := False);
END_IF

Das Problem ist das die Timer nicht richtig starten und sich nicht richtig verhalten.
Ist es ein Problem das die Timer mehrmals initialisiert werden? Starten diese dann immer neu?

MFG
 
Auf den ersten Blick wird der sprungtimer nur bearbeitet, wenn ...
also bedingt. Das fhr dazu, das der Timer garnicht aufgerufen wird, wenn die Bedingung nicht erfüllt ist.
Der Mehrfachaufruf der Timer ist IMHO nicht für die Übersichtlichkeit der Abarbeitung förderlich. Belege die Timerin-Eingänge einfach mit einer Variable und lege den Programmaufruf des Timers an den Anfang des Bausteins. Im weiteren manipulierst Du nur die verknüpften Variablen (eine Variante). Wie ich die Aufgabe lösen würde (so wie ich es verstanden habe) siehe unten.

Code:
PauseTimer(in:=not SprungTimer.Q ,pt:=t#10s,q:= );
SprungTimer(in:=PauseTimer.q,pt:=t#12s, q:= );

If Pausetimer.q then
    ausgaenge.AO_1:= 15504;
else
    ausgaenge.AO_1:= 0;
end_if;

Beide Timer als TON deklarieren.
 
Zuletzt bearbeitet:
Zurück
Oben