Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
ich habe eine while-Schleife, in der ich permanent den Zustand einer Maschine auslese. Nun möchte ich, wenn ein bestimmtes Bit von 0 auf 1 springt, eine Zeitmessung beginnen lassen und beenden wenn dieses Bit wieder von 1 auf 0 springt. Ich habe versucht, die Funktion "Timerwert auslesen" in eine Case-Struktur einzufügen und mit einem Schiebregister den ersten ausgelesen Timerwert in den zweiten Case (wenn das Bit von 1 auf 0 springt) weiterzuleiten und von dem neu ausgelesenen Timerwert zu subtrahieren. <Leider werden im Verlauf des Programmes alles Zeitdifferenzen so aufaddiert. Wie muss ich das Programm gestalten, wenn nach dem Erfassen einer Zeitdifferenz die ausgelesenen Timerwerte wieder auf null gestellt werden sollen? Vielen Dank für eure Ideen!
Sorry, das Problem lässt sich vereinfachen. Und zwar möchte ich in Abhängigkeit vom Wert dieses Bits eine Zeitmessung starten (Wert 1) oder den Wert einfach nur halten wenn das Bit auf null springt. Es ist vermutlich super einfach, ich komme jedoch einfach nicht drauf. Vielen DanK!
(26.10.2015 18:28 )LabViewPete schrieb: Und zwar möchte ich in Abhängigkeit vom Wert dieses Bits eine Zeitmessung starten (Wert 1) oder den Wert einfach nur halten wenn das Bit auf null springt.
Der Möglichkeiten gibt es bestimmt viele. Und jede einzelne ist von der Umgebung, in der sie eingesetzt wird, abhängig.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
26.10.2015, 23:08 (Dieser Beitrag wurde zuletzt bearbeitet: 26.10.2015 23:09 von Lucki.)
Man kann dafür auch die Funktion "verstrichene Zeit" verwenden.Und in den Eigenschaften einer normalen numerischen Anzeige kann man u.a. auch das Format hh:mm: ss.s einstellen:
Ich habe mich für die Alternativ mit der verstrichenen Zeit entschieden. Ich habe das VI so gestaltet, dass wenn das Bit auf 1 steht, die Case-Struktur aufrufen wird, in der die verstrichene Zeit ausgelesen wird und über ein numerisches Ausggabefeld in jeder Iteration der While-Schleife angezeigt wird. Für den Fall, dass das Bit auf 0 steht, wird der zuletzt angezeigte Wert der verstrichenen Zeit über ein Schieberegister von Iteration zu Iteration einfach nur durchgeleitet ohne in der Case-Struktur das Element "Verstrichene Zeit" erneut aufzurufen. Nun habe ich das Problem, dass selbst wenn das Bit auf 0 steht die Zeit anscheinend weiterläuft. Wie kann ich dieses Verhalten unterbinden? Vielen Dank!
(27.10.2015 15:03 )LabViewPete schrieb: dass selbst wenn das Bit auf 0 steht die Zeit anscheinend weiterläuft.
Einmal gestartet läuft bei diesem VI die Zeit eben weiter ...
Zitat:Wie kann ich dieses Verhalten unterbinden?
Indem du auf den Eingang "Zurücksetzen" in dem Moment, und nur in dem Moment, einen True-Wert gibst, in dem die Bit-Änderung von 0 auf 1 anliegt. Beachte aber, dass dann die Zeit wieder bei Null beginnt.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
ich fand den Beitrag bis jetzt sehr hilfreich und habe diese Lösung bei mir eingebaut (siehe Bild). Allerdings tritt nun folgendes Problem auf: Werden Zeiten kleiner 1 ms ermittelt zeigt mir der Baustein am Ausgang eine 0 an.
Kann mir jmd sagen wie ich Zeiten im µs-Bereich bestimmen kann?
Vielen Dank im Voraus.
03.11.2015, 14:56 (Dieser Beitrag wurde zuletzt bearbeitet: 03.11.2015 15:02 von GerdW.)
formale Antwort: nimm eine Funktion, die nicht im ms-Raster arbeitet. Es gibt da einen HighResolutionTimer…
Bessere Antworten:
- Arbeite mit einem OS, das solche Zeitdifferenzen genauer unterstützt als Windows.
- Arbeite mit Hardware, die genaue Sampleraten und damit Zeitmessungen erlaubt…