Timer TOF Stoppen - Rücksetzen

mcxpert

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

kann mir jmd sagen wie ich einen Timer (TOF) wenn er mal gestartet ist wieder stoppen kann?
Habe ein ein FB_Klick mit dem ich bei doppel den Timer starte und ihn gerne bei einmal drücken wieder stoppen würde.

Kann man da eine Krücke bauen, so dass bei einmal Klick vielleicht PT einmalig mit 1ms gesetzt wird und dann wieder die 5 Minuten hat?

Grüße
 
Dann würde der Timer (TOF) aber auslösen (timer.Q = false), ist das so gewollt? Ich dachte er soll nur zurück gesetzt werden. TOF und TON sind nicht speichernd, d.h. mit jeder Startflanke beginnen sie wieder bei 0.
 
Wenn in = true würden die 5 min wieder beginnen. Das will ich nicht.
Es soll die Restzeit abgebrochen werden können OHNE diese erneut zu starten.

Daher der Gedanke mit der 1ms.

Wenn das die Lösung wäre, wie schreibenden über den Einzel Klick die Zeit einmalig neu?

Der timer erhält über die visu in pt die Angabe mittels Variable.
 
Hi MasterOhh,

ich versehe was du mir im Code sagen willst aber nicht wie ich den einbinde.
Kann man den TOF mit einem Eingang ergänzen (Bool) welcher angesprochen wird und dann deinen code ausführt oder sind die Bausteine nicht "offen".
 
Hoffe das ist nach 6 Wochen noch nicht zu spät. Versuch mal sowas:

Code:
rtrigKlick: R_TRIG;

rtrigKlick(CLK:= Klick);
IF rtrigKlick.Q and tofTimer.Q then[INDENT]tofTimer.PT:=t#0ms;
[/INDENT]
elsIF rtrigKlick.Q and not tofTimer.Q then[INDENT]tofTimer.PT:=t#5m;
[/INDENT]
end_if
tofTimer(IN:=rtrigKlick.Q);
 
Zuviel Werbung?
-> Hier kostenlos registrieren
es ist nie zu spät für eine weiter Möglichkeit. Besten Dank, mir ist leider auch viel dazwischen gekommen und konnte daher nur bedingt testen.
Werde deinen Baustein gerne prüfen.
 
so nach langem habe ich die ansätze (welche sich ja meiner meinung nach ähneln) versucht nachzuführen. leider kam da nicht der erfolg raus den ich gerne hätte.
ich habe auch gelesen, dass sich die timer art geändert hat in dem moment wo hardwaretimer zu softwaretimer wurde, was die heutigen drei bekannten ja sind.

ist es möglich mir einen funktionsbaustein zu machen welcher die ansätze drin hat und den ich dann einbinden könnte? falls ja gebe ich gleich mein wunschkonzert preis

var input:
xTasterEinzel - bool
xTasterDoppel - bool
PT - Time (für den Timer 5minuten)

var Output
Q - bool
QStatus - bool (entspricht Q --> Rückmeldung für die visu)

Funktion
xTasterEinzel soll Q dauerhaft anschalten UND Timer Rücksetzen / bei erneuten xTasterEinzel soll Q wieder abfallen (FB_Stromstoss)
xTasterDoppel soll Timer mit PT starten UND bei nochmaligem xTasterDoppel erneut starten UND bei xTasterEinzel abschalten oder wenn PT abgelaufen ist abschalten

ich wäre sehr dankbar wenn ich hier unterstützung bekomme, da ich das thema nicht losgebkomme allein :D

(libs habe ich die standard, gebaude und oscat drin)
 
Aloha,

ich habe wohl den gleichen Fehler gemacht, denn auch die Anderen gemacht haben und deine Anforderung nicht richtig gelesen. Versuch das hier mal:

Code:
    ftrigKlick: F_TRIG;
    tofTimer: TOF;
    tofHilfstimer: TOF;
    rtrigKlick: R_TRIG;
    bAusgang: BOOL;
    bHmAusgang: BOOL;

tofHilfstimer(in:=ftrigKlick.Q, pt:=t#500ms);
ftrigKlick(CLK:= Klick);
rtrigKlick(CLK:= Klick);

IF    rtrigKlick.Q AND bAusgang THEN
    bHmAusgang := FALSE;
ELSIF rtrigKlick.Q AND NOT bAusgang AND NOT tofHilfstimer.Q    THEN
    bHmAusgang := TRUE;
END_IF
IF ftrigKlick.Q AND tofHilfstimer.Q THEN
tofTimer.PT:=t#5m;
ELSIF ftrigKlick.Q THEN
    tofTimer.PT:=t#0m;
END_IF


tofTimer(in:=Klick);

bAusgang := tofTimer.Q    OR bHmAusgang;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

so nach langer Zeit bin ich endlich dazugekommen. Es funktioniert aber nur mit überschreiben der Zeit.
Danke allen zur Lösungsfindung.

Im Anhang auch der FB exportiert (benötigt nur die standard.lib)

Code:
FUNCTION_BLOCK TOF_Reset
VAR_INPUT
    Zeit:TIME;
    Reset:BOOL;
    Trigger:BOOL;
END_VAR
VAR_OUTPUT
    out:BOOL;
    Restzeit: TIME;
END_VAR
VAR
    tof_fb: TOF;
END_VAR

Code:
tof_fb();
out:=tof_fb.Q;
Restzeit:=tof_fb.ET;
IF reset=FALSE THEN
    tof_fb.PT:=zeit;
    tof_fb.IN:=trigger;
 ELSE
    tof_fb.PT:=t#0s;
    tof_fb.IN:=FALSE;
    tof_fb.IN:=TRUE;
    tof_FB.IN:=FALSE;
END_IF
 

Anhänge

Zurück
Oben