LabVIEWForum.de - Zeitstempel für Messung bestimmen

LabVIEWForum.de

Normale Version: Zeitstempel für Messung bestimmen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen, ich hab mal wieder ein kleines Problem.

Ich möchte ein paar Werte messen und dabei zusätzlich die vergangene Zeit seit Programmstart mit aufzeichnen.
Mein erster Ansatz war, ich bestimme zum Start des Programms den aktuellen Zeitstempel des Systems.
Bei jeder Messung wird dann parallel zur Messung ebenfalls ein Zeitstempel bestimmt und aus diesem und dem ersten die Differenz gebildet.

An sich funktioniert das auch, aber irgendwann nach 1000-1070 Messungen ist hier öfter ein Problem aufgetreten.

Das ganze kann ich interessanterweise sogar reproduzieren. Dazu hab ich mal ein vereinfachtes VI angehängt.

Lasse ich das VI mit der "disable structure" laufen, dann bleibt die Zeitdifferenz nach 1000-2000 Sekunden stehen.
Nehme ich aber das delay von 1 ms mit hinzu, dann funktioniert es scheinbar richtig. Zumindest ist mir nach langer Laufzeit kein Problem aufgefallen.

Ich hab auch überlegt das ganze dann mit dem "Tick count" Baustein zu machen. Der liefert mir ja irgendwie einen "millisecond timer value". Jedoch weiß ich nicht genau was dieser Wert angeben soll und die Hilfe ist da auch sehr vorsichtig.

Da das VI später aber auch mehrere Monate am Stück laufen soll wäre mir das mit dem Timestamp lieber.

Hat jemand schonmal so ein ähnliches Phänomen gehabt? Und weiß vielleicht sogar woher das kommt?
Hallo flattervieh,

Zitat:Lasse ich das VI mit der "disable structure" laufen, dann bleibt die Zeitdifferenz nach 1000-2000 Sekunden stehen.
Nehme ich aber das delay von 1 ms mit hinzu, dann funktioniert es scheinbar richtig.
Dein VI hat weder eine disable-Struktur noch einen Delay...
Dafür hat es ein ständig wachsendes Array, welches ungebremst in einer Schleife aufgebaut wird - was ruckzuck in einem OutOfMemory endet... (Ok, dein VI wird durch das ständige Anzeigen von Werten auf dem FP gebremst Smile )

Zitat:"millisecond timer value". Jedoch weiß ich nicht genau was dieser Wert angeben soll
Du bekommst den Wert "Millisekunden seit Rechnerstart". Damit kann man relative Zeiten berechnen, aber keine absoluten Zeitangaben...
(08.08.2012 10:28 )flattervieh schrieb: [ -> ]Hallo zusammen, ich hab mal wieder ein kleines Problem.

Ich möchte ein paar Werte messen und dabei zusätzlich die vergangene Zeit seit Programmstart mit aufzeichnen.
Mein erster Ansatz war, ich bestimme zum Start des Programms den aktuellen Zeitstempel des Systems.
Bei jeder Messung wird dann parallel zur Messung ebenfalls ein Zeitstempel bestimmt und aus diesem und dem ersten die Differenz gebildet.

Das Problem liegt sicher im Fehler den Gerd bereits angesprochen hat. Wie funktioniert bei dir denn die Messung bzw die Abspeicherung deiner Werte? Eventuell gibt es eine einfachere Lösung für dein ProblemWink

Gruss Marc
Oh ich seh grad in dem VI war das noch nicht gespeichert. In der Diagram disable Structure war nur ein "wait ms" mit 1 ms Dauer eingebaut.

Ich hab mal das Sub-Vi angehängt, das mir die Messung durchführt. Hier wird auch das mit der zeitlichen Differenz gemacht.
Vom aufrufenden VI wird der Zeitstempel vom Programmstart übergeben und das Sub-VI liefert ein Array mit dem Messzeitpunkt und den Messwerten zurück.
Daher kommt auch das Array in meinem ersten angehängten VI.
Hallo flattervieh,

vielleicht solltest du eine weitere Grundregel beim Programmieren beachten: Jede Referenz, die man öffnet, sollte man auch wieder schließen. Die gilt für Dateien, Queues, Notifier - und eben auch für DAQmx-Referenzen. Du öffnest bei jedem Aufruf deiner Messroutine eine neue Referenz, aber du schließt die nie! Das hat ähnliche Effekte wie das ständige Anwachsenlassen eines Arrays: irgendwann reicht der Speicher nicht mehr aus (bzw. ist mit lauter Müll gefüllt)...

Nächste Grundregel: man muss nicht dauernd neue Referenzen öffnen, man kann mit der alten weiterarbeiten. Deshalb den Task nur einmal anlegen und immer damit weiterarbeiten! Und das Schließen der Referenz am Programmende nicht vergessen! Hast du dir mal die Beispiele angeschaut, die mit DAQmx/LabVIEW mitgeliefert werden?
(08.08.2012 10:28 )flattervieh schrieb: [ -> ]...Da das VI später aber auch mehrere Monate am Stück laufen...

In welchem Intervall speicherst du deine Daten & leerst dein Array?
Gerade bei längeren Aufzeichnungszeiten kommt da ordentlich was an Daten zusammenWink

Ansonsten hat Gerd bereits alles über die Referenzen gesagt.

Gruss Marc
Ich seh' schon, ich muss an meinem jetzigen Programm einiges umbauen.
Das vom Sub-VI ans Haupt-VI übergebene Array wird dort direkt im Anschluss in ein Spreadsheet-File geschrieben. Daher besitzt das Array immer nur die Größe 1x17 (der Messzeitpunkt und 16 Messwerte).

Das Programm misst in 2 Minuten 360 mal die 16 Signale und wartet anschließend 12 Stunden. Nach der Pause beginnt es wieder von vorne.

Aber ich denke ich werde am Programm einiges umbauen müssen. Das ist in letzter Zeit ständig um Funktionen ergänzt worden, die aber meist nur reingefrickelt wurden. So langsam bleibt mir nichts anderes übrig als das Programm komplett zu überarbeiten.
Referenz-URLs