LabVIEWForum.de
Timer in [s] - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Timer in [s] (/Thread-Timer-in-s)



Timer in [s] - grba123 - 18.08.2015 09:53

Hallo,

ich hab versucht ein Timer zu programmieren,der die Zeit des Programmablauf zählt.In diesem Fall das Programm ist eine While-Schleife,die 1s dauert und die Zähler sollte das genau messen. Wieso ist es bei mir nicht immer ganz genau 1s ?

danke


RE: Timer in [s] - NoWay - 18.08.2015 10:29

Du wartest genau 1Sekunde plus die Zeit, die deine Schleife für die Abarbeitung des hinterlegten Codes benötigt.

*EDIT*
Das hier ist eventuell das, was du suchst?
http://zone.ni.com/reference/en-XX/help/371361H-01/glang/wait_till_next_ms_multiple/

Wie "genau" willst du denn messen?


RE: Timer in [s] - grba123 - 18.08.2015 10:52

ich hab eine while-schleife definiert und in jeder Zyklus misst man Widerstand. Während des Programmablauf möchte ich gern Anzahl der Zyklen und die vergangene Zeit messen. Außerdem hab ich definiert dass jeder Durchgang in der Schliefe 1000ms dauert.


RE: Timer in [s] - NoWay - 18.08.2015 11:09

Wie gesagt, du hast definiert, dass deine Schleife 1 Sekunde plus Abarbeitungszeit läuft.
Für die Anzahl der Zyklen kannst du den Iterationsanschluss abfragen. Das ist das blaue i unten links in der Ecke der While Schleife.
Zitat:Während des Programmablauf möchte ich gern Anzahl der Zyklen und die vergangene Zeit messen. Außerdem hab ich definiert dass jeder Durchgang in der Schliefe 1000ms dauert.
Du willst eine Genauigkeit von 1 Sekunde erreichen, lese ich daraus. Dann benutze doch einfach "Wait until next MS mutiple".
[attachment=53853]


RE: Timer in [s] - grba123 - 18.08.2015 12:13

mein Programm sieht wie am Bild. Also ich möchte jetzt dass die Wiederholungsanzahl mit der in Zyklus definierte Zeit übereinstimmt und dass Timer richtige Zeit zeigt. Z.b Zyklusdauer 2000ms und Anzahl der Widederholungen 10. Timer solte jede sekunde eine Wiederholung zählen so dass am Ende steht 10 Wiederholungen und Teimer 20s


RE: Timer in [s] - Lucki - 18.08.2015 12:27

(18.08.2015 10:29 )NoWay schrieb:  Du wartest genau 1Sekunde plus die Zeit, die deine Schleife für die Abarbeitung des hinterlegten Codes benötigt.
Der Code und die Wait-Funktion werden aber parallel ausgeführt, und das heißt bei einem Wait von 1000ms: Solange der Code weniger als 1s zur Ausführung braucht, dauert ein Schleifendurchlauf 1000ms. Wenn der Code länger braucht, bestimmt dieser die Scheifen-Durchlaufszeit, d.h es ist dann so als ob die Wait-Funktion gar nicht existieren würde.


RE: Timer in [s] - NoWay - 18.08.2015 12:36

(18.08.2015 12:13 )grba123 schrieb:  mein Programm sieht wie am Bild. Also ich möchte jetzt dass die Wiederholungsanzahl mit der in Zyklus definierte Zeit übereinstimmt und dass Timer richtige Zeit zeigt. Z.b Zyklusdauer 2000ms und Anzahl der Widederholungen 10. Timer solte jede sekunde eine Wiederholung zählen so dass am Ende steht 10 Wiederholungen und Teimer 20s

Dann lies dir doch einfach mal durch, was ich geschrieben habe und denk da mal 5 Minuten drüber nach...
Das i in der Whileschleife gibt dir genau das, was du haben willst.

In der Schleife führst du dann deine Messung durch und wartest dann bis zum nächsten Vielfachen dessen, was du angegeben hast.
Beispiel: deine Schleife beinhaltet Programmcode, dessen Ausführung allein 1 Millisekunde Zeit benötigt. Du willst nach 2 Sekunden die nächste Messung starten. "Wait next MS multiple" bekommt als Wert die 2 Sekunden und muss jetzt noch 2000ms-1ms=1999ms warten. Würde dein Code z.B. 100 Millisekunden benötigen, dann wartet die Schleife noch 1900ms. Das bedingt natürlich das du dein Wait MS durch besagte Funktion ersetzt. Andernfalls hättest du den Fall 100ms+2000ms=2100ms

Dein "i" in der Whileschleife ist dein Zyklenzähler. Abhängig davon, wie groß deine definierte Wartezeit ist, musst du nun nur noch deinen Iterationszähler mit einem Faktor versehen und schon hast du deine Wartezeit in Sekunden als Ausgabewert.

(18.08.2015 12:27 )Lucki schrieb:  
(18.08.2015 10:29 )NoWay schrieb:  Du wartest genau 1Sekunde plus die Zeit, die deine Schleife für die Abarbeitung des hinterlegten Codes benötigt.
Der Code und die Wait-Funktion werden aber parallel ausgeführt, und das heißt bei einem Wait von 1000ms: Solange der Code weniger als 1s zur Ausführung braucht, dauert ein Schleifendurchlauf 1000ms. Wenn der Code länger braucht, bestimmt dieser die Scheifen-Durchlaufszeit, d.h es ist dann so als ob die Wait-Funktion gar nicht existieren würde.
Wenn man das aber mal im Vergleich laufen lässt, also zwei parallele Whileschleifen, die eine mit wait MS und die andere mit wait next MS mutiple sieht man sehr deutlich einen Versatz, der sich durchzieht.


RE: Timer in [s] - grba123 - 18.08.2015 13:05

Zitat:Dein "i" in der Whileschleife ist dein Zyklenzähler. Abhängig davon, wie groß deine definierte Wartezeit ist, musst du nun nur noch deinen Iterationszähler mit einem Faktor versehen und schon hast du deine Wartezeit in Sekunden als Ausgabewert.

wie kann ich ein Iterationszähler mit einem Faktor definieren ? Ich verstehe das nicht ganz.


RE: Timer in [s] - Trinitatis - 18.08.2015 13:30

(18.08.2015 13:05 )grba123 schrieb:  
Zitat:Dein "i" in der Whileschleife ist dein Zyklenzähler. Abhängig davon, wie groß deine definierte Wartezeit ist, musst du nun nur noch deinen Iterationszähler mit einem Faktor versehen und schon hast du deine Wartezeit in Sekunden als Ausgabewert.

wie kann ich ein Iterationszähler mit einem Faktor definieren ? Ich verstehe das nicht ganz.

Wenn eine Schleife 10 mal Durchläuft und jede Iteration 500ms dauert, dann dauert das ganze 10 mal 500ms = 5s.
D.h., du multiplizierst deinen I count mit der Wartezeit und hast nach Beenden der Schleife die Gesamtzeit in ms.

Das hat nun aber schon fast nix mehr mit LabView zu tunBig Grin


Gruß, Marko


RE: Timer in [s] - Lucki - 18.08.2015 15:14

(18.08.2015 12:36 )NoWay schrieb:  Wenn man das aber mal im Vergleich laufen lässt, also zwei parallele Whileschleifen, die eine mit wait MS und die andere mit wait next MS mutiple sieht man sehr deutlich einen Versatz, der sich durchzieht.
Das ist richtig, hat aber nichts mit dem in der Schleife vorhandenen Code zu tun. Es liegt daran, dass die Wait-Funktion nur auf plus minus eine Milisekunde genau ist, und bei vielfachen Schleifendurchlauf wird sich dieser Fehler irgendwie akkumulieren. Bei Wait multiple ms kann das nicht passieren, da die ms immer mit der Uhrzeit synchronisiert werden. Dafür hat man - wenn man im Programm nichts dagegen tut - beim ersten Schleifenduchlauf (oder überhaupt bei nur einmaliger Anwendung) einen groben Fehler. Bei z.B. 1000ms Warten und zufälligem Start ist es bis zur nächsten vollen Uhr-Sekunde nicht 1000 ms, sondern irgendeine zufällige Zeitdauer zwischen 0 und 1000ms. Ab zweitem Schleifendurchlauf passiert das dann nicht mehr.