LabVIEWForum.de - Messwert der Messzeit zuordnen

LabVIEWForum.de

Normale Version: Messwert der Messzeit zuordnen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hi,
ich habe noch ein Problem für meine Studienarbeit (vor 2 Tagen wurde mir hier bei meinem ersten Problem schonmal geholfen).
Ich habe jetzt für einen Fahrversuch an einem VW Polo einen optischen Sensor, der die Geschwindigkeit aufnimmt. Wenn ein Schalter betätigt wird, soll von da an das Programm die aktuelle Geschwindigkeit in eine Textdatei schreiben. Zusätzlich soll die dazugehörige Zeit, die seit Betätigen des Schalters verstrichen ist in die gleiche Datei geschrieben werden. So dass ich einen Geschwindigkeits-Zeit-Verlauf in einem bestimmten Zeitintervall erhalte.

Also so:

Zeit [s] Geschwindigkeit [km/h]
0,1 XX
0,2 XX
usw.

Ich habe das in dem angehängten Vi versucht so zu lösen, dass ich in einer case-Struktur schreibe, und immer eine bestimmte Zeit warte, bis sie wieder ausgeführt wird. Als Beispiel habe ich als Wert für Messwerte pro Sekunde 10 eingegeben, so dass alle 0,1 Sekunden ein Wert geschrieben werden soll.

Ich hoffe ihr versteht einigermaßen, wie ich das gemeint habe.

Auf jeden Fall klappt es so wie ich das gemacht habe nicht. wenn ich eine Minute schreibe, zeigt er mir in der Datei am Ende nur um die 30 Sekunden an. Ich hoffe mir kann wieder einer von euch helfen. Ich weiß nicht, wo der Fehler liegt und habe nicht mehr soviel zeit bis zur Abgabe

achja, ich benutze LabView 2009

Vielen Dank schonmal
Hallo ostfalia,

anbei eine geänderte Version, die zeigt, wie man (m.M.n.) vernünftig Zeitabstände misst... (Lv09_img2) (Stupides Addieren irgendwelcher berechneten Werte hat nichts mit echter Zeitmessung zu tun!)

Was aber noch gründlich schief geht:
Durch die Wartefunktion im FileSave-Case verzögerst du auch deine Messwerterfassung. Das ist wahrscheinlich nicht gewollt. Lösung: getrennte Schleifen für beide Prozesse! Womit wir beim Thema Producer-Consumer-Schema wären - da gibt es auch was <strike>von Ratiopharm</strike> in der LV-Beispiel-Sammlung... Oder guckst du hier: Über File-Menü: Neu...-> im Dialog: Von Vorlage->Frameworks->Entwurfsmuster->Erzeuger-Verbraucher (Daten)!Smile

Wieso befindet sich das DAQ-TaskInit jetzt wieder in der Schleife? Das muss vor die Schleife! (Guckst du hier: Beitrag #2!)
Hallo ostfalia,

Wir sind uns ja schon bekannt :-). Evtl. kann ich nochmal helfen.

1. Du initialisierst schonwieder deinen DAQ-Kanal bei jedem Schleifendurchlauf. -> nicht gut
2. Du schließt den Kanal wieder nicht nach der Messung. -> auch nicht gut
3. Deine Schleife läuft bei nicht aktivierter Messung auf voller Geschwindigkeit d.h. cpu auf 100% -> hatten wir auch schonmal...

Gruß,

Christoph
Hi,
erstmal danke für eure schnellen Antworten. Ich war gestern nicht mehr in der FH und konnte es deshalb erst jetzt probieren.

Erstmal zu den Anmerkungen von cris_deus: Ich weiß, dass das alles noch nicht richtig war. Ich wollte das auch noch ändern, bin da aber irgendwie noch nicht zu gekommen. (Mittlerweile ist es geschehen). Ich hatte das Programm ausgewählt, weil es mir um die Zeitmessung ging und das Programm am wenigsten "drumherum" hatte.

Jetzt zu GerdW: Vielen Dank. Er misst jetzt schonmal die richtige Gesamtzeit. Das hat er ja letztes mal nicht getan. Ich werde jetzt erstmal schaun, dass ich jeden Prozess in eine Schleife packe.
Ich wollte meinen Beitrag editieren, hab aber den Button nicht gefunden...Nichtmal das krieg ich hinWink

Also ich hab der mit dem Producer-Consumer Schama versucht, klappt glaub ich so weit auch ganz gut, nur fängt er jetzt bei der Zeitaufzeichnung in der Datei nicht bei Null, sondern bei einem ziemlich hohen Wert an. Wäre nett, wenn ihr nochmal drauf schauen könntet und mir sagen könntet, wo der Fehler liegt. habe ja an der Zeitazfnahme selber nichts verändert

Danke schön

Lv09_img2
Hallo ostfalia,

anbei eine kleine Änderung: der Befehl zum Speichern wird auch in der Speicherschleife verarbeitet... (Lv09_img2)

Manöverkritik:
- Du arbeitest mit einer Queue. Die bekommt alle 5ms einen neuen Wert. Die Speicherschleife holt aber nur alle 100 oder 1000ms einen Wert ab. D.h. die Queue wird immer größer und du speicherst alte Messwerte, die nichts mit der dazu gespeicherten Zeit zu tun haben. Mögliche Lösung: einen Melder benutzen oder die Queue auf ein Element begrenzen ("LossyEnqueue").
- Die Speicherschleife bei einem Fehler des Dequeue zu beenden ist etwas "gefährlich". Ich würde da einen eindeutigen Stop-Befehl vorsehen.
Wenn ich den Queue auf einen begrenze, funktioniert mein Programm nicht mehr. Oder ich mache da irgendwas falsch. Habe jetzt einfach an den Baustein Queue anfordern an der Eingang "Maxiemale Queue Größe" eine 1 gesetzt.
Wie diese Melder funktionieren sollen, versteh ich nicht so ganz. Wie muss ich die denn einsetzen? Anstelle der Queues oder zusätzlich.

Tut mir leid, dass ich so viele Fragen hab, aber ich bin einfach nicht sooo der gute ProgrammiererWink
Hallo ostfalia,

Melder funktionieren (im Grunde) wie eine Queue mit nur einem Element. Du könntest sie alternativ zur Queue einsetzen...
Aber einfach die Queue-Elemente durch die entsprechenden Melder-Elemente ersetzen funktioniert nicht, oder?
Zumindest bei mir nicht. Er startet dann die Messwertaufnahme gar nicht erst. Also das gleuiche Problem, wie wenn ich den Queue auf 1 begrenze...
Ich glaub jetzt hab ich das Problem gefunden. Ich habe in der unteren Schleife einen Extra-Schalter zum Abbrechen der Schleife gepackt. Jetzt ruft er die Schleife auch auf.
Könntest du vielleicht noch einmal kurz über das Programm schauen, ob das mit den Meldern jetzt richtig ist? Wäre super nett...
Hab das Vi mal wieder angehängt (Lv09_img2)
Seiten: 1 2
Referenz-URLs