ich möchte die zeit messen die vergeht zwischen zwei digitalen eingangssignalen. dies hab ich mit einem RS- und einem TON-Glied versucht. das TON-Glied gibt die zeit auch am ausgang aus solang das RS gesetzt ist, bloß wenn der Rücksetzt befehl kommt geht die zeit wieder auf Null. wie könnte ich diese zeit speichern und später auf einer visualisierung angezeigt bekommen?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Die IEC kennt eine Funktion TIME(), die die CPU-Zeit millisekundengenau zurückgibt. Den Zeitabstand zwischen zwei Digitalsignalen kann man also messen, indem man an der Einschaltflanke des ersten Signals TIME() aufruft und das Ergebnis speichert, dann an der Einschaltflanke des zweiten Signals TIME() noch einmal aufruft und die Differenz zum ersten Aufruf bildet:
VAR_INPUT
 ixIn1 : BOOL;
 ixIn2 : BOOL;END_VARVAR
 lhIn1 : R_TRIG;
 lhIn2 : R_TRIG;
 ZeitIn1 : TIME;
 ZeitIn2 : TIME;
 ZeitAbstand : TIME;END_VAR(*Signalflankensuchen*)lhIn1(CLK :=ixIn1);lhIn2(CLK :=ixIn2);(*Signalflankenauswerten*)IFlhIn1.QTHEN(*erstesSignalkommt==>CPU-Zeitauslesenundmerken*)
   ZeitIn1 :=TIME();END_IF;IFlhIn2.QTHEN(*zweitesSignalkommt==>CPU-Zeitauslesenundmerken*)
   ZeitIn2 :=TIME();END_IF;(*undjetztdenZeitabstandberechnen*)ZeitAbstand :=ZeitIn2-ZeitIn1;
Wenn Du direkt die Millisekunden brauchst, kannst Du mit TIME_TO_DINT eine Wandlung durchführen.
Gruss Rolf
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
hallo
ich möchte die zeit messen die vergeht zwischen zwei digitalen eingangssignalen. dies hab ich mit einem RS- und einem TON-Glied versucht. das TON-Glied gibt die zeit auch am ausgang aus solang das RS gesetzt ist, bloß wenn der Rücksetzt befehl kommt geht die zeit wieder auf Null. wie könnte ich diese zeit speichern und später auf einer visualisierung angezeigt bekommen?
Such bitte erst im Forum, fuer viele Fragen gibts auch schon passende oder aehnliche Antworten, so auch fuer Deine:
http://forum.3s-software.com/viewtopic.php?t=2300
Lykke til!
Hi,
Die IEC kennt eine Funktion TIME(), die die CPU-Zeit millisekundengenau zurückgibt. Den Zeitabstand zwischen zwei Digitalsignalen kann man also messen, indem man an der Einschaltflanke des ersten Signals TIME() aufruft und das Ergebnis speichert, dann an der Einschaltflanke des zweiten Signals TIME() noch einmal aufruft und die Differenz zum ersten Aufruf bildet:
Wenn Du direkt die Millisekunden brauchst, kannst Du mit TIME_TO_DINT eine Wandlung durchführen.
Gruss Rolf
danke!!! werds ausprobieren
klasse es funktioniert!!!!
was ist eigentlich der unterschied wenn ich linksklick auf Bausteine mach. zwischen Programm, Funktionsblock und Funktion????
als ich den code als Funktion so wie oben geschrieben hab gings nicht obwohl ich meine beiden eingänge ixIn1 und ixIn2 genannt hab.
habs dann als programm versucht ohne die beiden VAR_INPUT
ixIn1 : BOOL; und
ixIn2 : BOOL und es hat funktioniert, aber wieso gings vorher net???
naja egal es geht ja jetzt. Rolf_Geisler sei DANK!!!
wenn ich jetzt noch von meinen analogen ausgänge was rausbekomme bin ich glücklich!!!!
Moin
In Kürze:
PRG: - Kann aus der Taskkonfiguration aufgerufen werden.
Funktion: - Hat nur EINEN Rückgabewert.
FunktionsBlock: - Ist Instanzierbar
Gruss
Erik
Hi
Es gibt bereits eine fertige Zeitmessung.
Diese kann das was du suchst und mehr.
Schau mal unter w www.oscat.de w nach.