Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched.
Close
Hi!
Könnt ihr mir verraten wie ich eine Stoppuhr programmieren kann.
Die Zeit soll starten wenn eine bool variable auf true ist stoppen wenn sie auf false ist.
ist bestimmt nicht so schwer. Aber ich weiß es trotzdem nicht.
Danke.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo erstmal,
es gibt die Funktion TIME(), die den CPU-Zeitstempel liefert. An der steigenden Flanke Deiner BOOL-Variablen holst Du Dir also die Zeit von der CPU ab und speicherst sie in eine TIME-Variable, und an der fallenden Flanke holst Du die Zeit noch mal von der CPU ab und bildest die Differenz zum gespeicherten Zeitstempel:
VAR
 Trigger : BOOL;
 StartVonTrigger : TIME;
 LaengeVonTrigger : TIME;
 lhTrigger : R_TRIG;
 hlTrigger : F_TRIG;END_VAR(*ErstmalnachdenSignalflankensuchen*)lhTrigger(CLK :=Trigger);hlTrigger(CLK :=Trigger);(*undjetztdieSignalflankenauswerten*)(* ... StartflankevonTrigger*)IFlhTrigger.QTHENStartVonTrigger :=TIME();END_IF;(* ... StopflankevonTrigger*)IFhlTrigger.QTHENLaengeVonTrigger :=TIME()-StartVonTrigger;END_IF;
Gruss Rolf
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2010-10-04
Originally created by: jl
Hallo!
Viele Wege führen zum Ziel.
Man kann z.B. auch mit jedem Durchlauf des Taks eine Variable mit der Zykluszeit hochzählen lassen:
IF starteStoppuhr THEN
zeit := zeit + t#10ms;
END_IF
Ein Reset wird allerdings auch noch benötigt:
IF reset THEN
zeit := 0;
END_IF
Oder mit einem sich selbst rückstellendem Timer auch eine Variable hochzählen lassen. PT vom Timer bestimmt dann die Genauigkeit der Stoppuhr (hier z.B. 100ms)
TON_takt(IN:= NOT TON_takt.Q AND starteStoppUhr, PT:= t#100ms , Q=> , ET=> );
IF TON_takt.Q THEN
zeit := zeit + TON_takt.PT;
END_IF
Oder einen Timer mit genügend langer PT laufen lassen und ET des Timer als gestoppte Zeit verwenden. Beachte allerdings bei dieser Variante, daß die Zeit beim erneuten starten wieder von 0 beginnt:
Hi!
Könnt ihr mir verraten wie ich eine Stoppuhr programmieren kann.
Die Zeit soll starten wenn eine bool variable auf true ist stoppen wenn sie auf false ist.
ist bestimmt nicht so schwer. Aber ich weiß es trotzdem nicht.
Danke.
Ist wirklich nicht so schwer.
Hallo erstmal,
es gibt die Funktion TIME(), die den CPU-Zeitstempel liefert. An der steigenden Flanke Deiner BOOL-Variablen holst Du Dir also die Zeit von der CPU ab und speicherst sie in eine TIME-Variable, und an der fallenden Flanke holst Du die Zeit noch mal von der CPU ab und bildest die Differenz zum gespeicherten Zeitstempel:
Gruss Rolf
Vielen Dank!
Originally created by: jl
Hallo!
Viele Wege führen zum Ziel.
Man kann z.B. auch mit jedem Durchlauf des Taks eine Variable mit der Zykluszeit hochzählen lassen:
IF starteStoppuhr THEN
zeit := zeit + t#10ms;
END_IF
Ein Reset wird allerdings auch noch benötigt:
IF reset THEN
zeit := 0;
END_IF
Oder mit einem sich selbst rückstellendem Timer auch eine Variable hochzählen lassen. PT vom Timer bestimmt dann die Genauigkeit der Stoppuhr (hier z.B. 100ms)
TON_takt(IN:= NOT TON_takt.Q AND starteStoppUhr, PT:= t#100ms , Q=> , ET=> );
IF TON_takt.Q THEN
zeit := zeit + TON_takt.PT;
END_IF
Oder einen Timer mit genügend langer PT laufen lassen und ET des Timer als gestoppte Zeit verwenden. Beachte allerdings bei dieser Variante, daß die Zeit beim erneuten starten wieder von 0 beginnt:
TON_stoppuhr(IN:= starteStoppUhr, PT:= t#24h , Q=> , ET=> );
IF starteStoppUhr THEN
zeit := TON_stoppuhr.ET;
END_IF
Originally created by: jl
Hallo nochmal!
Die Variante mit der Systemzeit hätte ich so gemacht:
IF starteStoppUhr THEN
IF NOT getStartzeit THEN
getStartzeit := TRUE;
startzeit := TIME();
END_IF
zeit := TIME() - t1;
END_IF
IF reset THEN
reset := FALSE;
getStartzeit := FALSE
zeit := t#0ms;
END_IF