mit FUP kann ich leider nicht dienen, schreibe nur in ST. Aber wenn Du das das nachfolgende Codebeispiel als ST-Baustein speicherst und dann von CoDeSys nach FUP konvertieren läßt, kommst Du auch dahin.
Nun zu Deiner Frage: Der Aufruf von TIME() liefert die aktuelle CPU-Zeit zurück. Beim Einschalten des Ausgangs (z.B. mit einem R_TRIG erfasst) liest Du also die CPU-Zeit und speicherst sie als Zeitpunkt des Einschaltens. Das Ausschalten erfasst Du mit einem F_TRIG, liest wieder die CPU-Zeit und bildest die Differenz zum Einschaltzeitpunkt - fertig.
FUNCTION_BLOCKSchaltzeitVAR_INPUT
 ixAusgang : BOOL;END_VARVAR_OUTPUT
 qtEinschaltzeit : TIME;END_VARVAR
 lhAusgang : R_TRIG;
 hlAusgang : R_TRIG;
 ZeitpunktEinschalten : TIME;END_VAR
 (*Signalflankenerfassen*)
 lhAusgang(CLK :=ixAusgang);
 hlAusgang(CLK :=ixAusgang);
 (*CPU-Zeitabfragen*)
 IFlhAusgang.Q (*Einschaltflanke*)
 THENZeitpunktEinschalten :=TIME();
 END_IF;
 IFhlAusgang.Q (*Ausschaltflanke*)
 THENqtEinschaltzeit :=TIME()-ZeitpunktEinschalten;
 END_IF;
Gruss Rolf
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Vielen Dank für deinen Typ. Das mit dem baustein hat sehr gut geklappt.
Bei dem Code hat sich ein kleiner Fehler eingeschliechen. Die zweite Flanke ist ebenfalls eine positive. Nachdem ich diese durch eine negative ersetzt haben, funktionierte es einwandfrei.
Nochmals vielen Dank
Gruss
Christian
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo zusammen
Ich möchte die Zeit eines Ausganges messen welcher eingeschaltet ist. Das heiss: Die Zeit von der Einschaltung bis zur Ausschaltung.
Kann mir jemand ein Beispiel zeigen das im FUB ist?
Ich muss die Differenz von einer Vorgabezeit zu der eingeschalteten Zeit ausrechnen.
Vielen Dank für eure Hilfe
Gruss Christian
Hallo Christian,
mit FUP kann ich leider nicht dienen, schreibe nur in ST. Aber wenn Du das das nachfolgende Codebeispiel als ST-Baustein speicherst und dann von CoDeSys nach FUP konvertieren läßt, kommst Du auch dahin.
Nun zu Deiner Frage: Der Aufruf von TIME() liefert die aktuelle CPU-Zeit zurück. Beim Einschalten des Ausgangs (z.B. mit einem R_TRIG erfasst) liest Du also die CPU-Zeit und speicherst sie als Zeitpunkt des Einschaltens. Das Ausschalten erfasst Du mit einem F_TRIG, liest wieder die CPU-Zeit und bildest die Differenz zum Einschaltzeitpunkt - fertig.
Gruss Rolf
Hallo Rolf
Vielen Dank für deinen Typ. Das mit dem baustein hat sehr gut geklappt.
Bei dem Code hat sich ein kleiner Fehler eingeschliechen. Die zweite Flanke ist ebenfalls eine positive. Nachdem ich diese durch eine negative ersetzt haben, funktionierte es einwandfrei.
Nochmals vielen Dank
Gruss
Christian