LabVIEWForum.de
Datenerfassung hängt teilweise auf einem Wert fest - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ)
+---- Thema: Datenerfassung hängt teilweise auf einem Wert fest (/Thread-Datenerfassung-haengt-teilweise-auf-einem-Wert-fest)

Seiten: 1 2 3


Datenerfassung hängt teilweise auf einem Wert fest - nick - 08.07.2010 19:59

Hallo liebes Labvieforum,

Ich habe eine Erneute Frage zu einem Vi, welches schon vorher in einem anderen thread behandelt wurde. Da es sich aber um eine komplett andere Frage handelt hab ich gedacht, da passt ein neues Thema. Link zum anderen Thema: http://www.LabVIEWforum.de/index.php?showt...mp;#entry100580


Meine aktuelle Problem ist jehner Art, dass die eingelesenen Werte sich auf einen Wert einfrieren. in seltenen Fällen funktioniert es. Meist beim ersten öffnen, aber es sieht fast so aus, als ob sich ein Buffer vollschreibt und ab dann nur noch den letzten Wert ausgibt. Teilweise hat es auch fuktioniert, wenn ich einen anderen Eingang gewählt habe. Aber auch nciht immer. (ich verwende eine Bnc-2111 Box und eine Pci -6... karte)
Mir ist nur schleierhaft welcher Buffer das sein sollte ?? Warscheinlich ist es ein anderes Problem. Ich hab das ganze auch schon in eine Sequenzstruktur gepackt. Ich dachte kurz, dass vorne keine neuen Werte mehr eingelesen wurden. Aber in seltenen Fällen funktioniert es ja ???
Es sieht so aus, als ob die Werte direkt hinter Daqmx-lesen hängen. Ud selbst ohne Anfüttern von Werten ist immer ein gewisses Potenzial auf den Bnc buchsen, so dass die Werte um 0 schwanken müssten.

Ich Danke euch schon im Vorraus. Ich wüsste nicht wohin ohne das LV-Forum
Beste Grüße Nick

Lv09_img2[attachment=27715]


Datenerfassung hängt teilweise auf einem Wert fest - Y-P - 08.07.2010 20:15

Schau' mal Deine CPU-Auslastung an, wenn Du das Programm laufen lässt. Wink
Was siehst Du da?

Gruß Markus


Datenerfassung hängt teilweise auf einem Wert fest - GerdW - 08.07.2010 21:51

Hallo Nick,

ich hab mal ein paar unsinnige Konstrukte entfernt... (Nicht das das etwas mit deinem Problem zu tun hätte.)

Du liest jeweils einen einzelnen Messwert vom DAQ. Daraus machst du dann mittels "convert from dynamic data" (!, als wenn's kein BuildArray gäbe) ein Array mit einem einzigen Element. Von diesem Array wiederum berechnest du den Mittelwert???

Außerdem solltest du mal dein Profil ergänzen, wenn du jetzt mit LV2009 arbeitest...

Lv09_img2


Datenerfassung hängt teilweise auf einem Wert fest - Y-P - 09.07.2010 06:23

... und das 2D-String-Array im Bsp. von Gerd solltest Du noch initialisieren (links beim Schieberegister eine leere 2D-String-Array Konstante anschließen).
Außerdem würde ich eine Zeitverzögerung in meine Schleife einbauen (z.B. 1 ms, 10 ms,...).
Das Speichern würde ich auch nicht bei jedem Schleifendurchlauf machen.

Gruß Markus


Datenerfassung hängt teilweise auf einem Wert fest - nick - 10.07.2010 16:10

Vielen Dank für eure Anregungen,
ich habe versucht sie umzusetzten. Klar, das mit der Mittelwertbildung aus einem Wert war absoluter Schwachsinn. Ich habe das jetzt mit einer queue gelöst.Aber wie kann ich denn er queue sagen ,dass sie, wenn sie voll ist die Werte ausgibt und sich danach wieder zB. 10 neue holt?? bislang hört die Schleife nicht mehr auf sich Werte zu holen, obwohl die queue voll ist ????

Hypotetisch ( noch bin ich ja nicht soweit) : Aber wenn Sie voll ist und die Werte weitergereicht sind, kann sich die queue dann neue Werte holen? die äußere Schleife liefert ja weiterhin Werte. -> Ziel ist ja Mittelwert der z.B. letzten 10 Werte zu berechnen bei laufend Nachschub.


Das mit dem feststehende Wert ist leider weiterhin das Problem. Am Cpu liegt es leider nicht (oder besser: zum Glück nicht) die ist max 70% ausgelastet (einer von 4 Kernen)
Wenn noch jemand eine Idee hat wäre ich überglücklich.

Gruß und besten Dank euer Nick

Lv09_img2[attachment=27750]


Datenerfassung hängt teilweise auf einem Wert fest - GerdW - 11.07.2010 13:34

Hallo Nick,

wie wäre es denn mit einem richtigen Ringpuffer - statt in jedem Schleifendurchlauf eine neue Queue anzulegen, immer den gleichen Wert reinzuschreiben, von den immer gleichen Werten einen Mittelwert zu berechnen (!?), und die Queue dann wieder zu zerstören???

Nimm einfach ein Shiftregister mit einem Array fester Größe...

"Ich habe das jetzt mit einer queue gelöst."
"Gelöst" würde ich das nicht nennen...Smile

"Aber wie kann ich denn er queue sagen ,dass sie, wenn sie voll ist die Werte ausgibt und sich danach wieder zB. 10 neue holt?? bislang hört die Schleife nicht mehr auf sich Werte zu holen, obwohl die queue voll ist ????"

Du hast nicht so recht verstanden, wie eine Queue funktioniert. Eine Queue "holt" sich keine neuen Werte, man schreibt welche hinein. Um eine Queue zu leeren, muss man aus ihr Werte herausholen - und d.h. nicht per QueueStatus hineinzugucken, sondern per DequeueElement! Eine Queue ist wie ein Wasserschlauch: ein einem Ende kommt Wasser von einer Pumpe rein, man kann den Druck kontrollieren (=Queue Status) und am anderen Ende kommt das Wasser raus (=Dequeue)...

Lv09_img2


Datenerfassung hängt teilweise auf einem Wert fest - nick - 12.07.2010 15:08

ja, dass mit dem queue war nicht ganz richtig*hust*Rolleyes, Danke für deine Queue Erläuterung.
ich hab das erstellen und auflösen der queue jetzt außerhalb des loobs verband und das auslesen über die queue löschen gemacht. ich hoffe das passt so besser. Aber das größte Problem ist, dass der innere Loop die queue immer mit dem selben Wert vollschreibt. entferne ich die innere Loop (die queue loop) dann wird der Wert direkt weitergereicht, und ich bilde ebenfalls den Mittelwert von nur einem Wert....Wall ich hab schon einiges versucht, leider hat sich immer das gleiche Problem ergeben.

Bei dem Ringpuffer den du netterweise erstellt hast meine ich, dass das Problem genauso auftritt. Der erste Wert wird direkt weitergegeben. (Ziel ist es bei einer Einstellung der Spannung eine "live" Veränderung über die letzten 10 gemittelten Ergebnisse zu sehen)

(edit) Moment, nach wenigen sekunden zeigt der queue Inhalt Null an, obwohl im highlight-modus deutlich zu ssehen ist, dass immer neue Werte in den queue-Loop aufgenommen werden ??? ich bin am verzweifeln.

Aber das Hauptproblem ist immer noch dieser feststehende Wert. ist das gelöst, kann ich auch besser sehen welche Werte in der queue/ringpuffer... gespeichert werden. Denn im moment ist es eh immer der gleiche. Da ist es schwierig zu sagen ob was funktioniert oder nicht.

Hier im Bild kann man sehen, dass der Wert nach dem Einlesen auf 5,21 hängenbleibt. Labview selbst sieht das aber nicht als fehler. Hab ich beim Einlesen vielleicht mist gebaut?? ich hab auf Anhieb keinen Fehler sehen können. (die eigenen Fehler übersieht man ja eh sehr gerneAngel_not)
[attachment=27784]

Vielen Dank nochmal, dass ihr euch soviel Zeit für mein Problem nehmt.
beste Grüße nick

Lv09_img2[attachment=27780]


Datenerfassung hängt teilweise auf einem Wert fest - GerdW - 12.07.2010 15:16

Hallo Nick,

sehe ich das richtig:
Du gibst 1000 Samples pro Kanal und ein eine Samplerate von 1000S/s vor - und dann liest du immer einen einzelnen Wert nach dem anderen?
Ich könnte mir vorstellen, dass du dich ganz langsam durch einen riesigen DAQ-Buffer durcharbeitest...

Jetzt noch zu deinem VI:
Du scheinst unbedingt eine Queue als Ringbuffer benutzen zu wollen - dann aber auch richtig!
Du definierst eine Queue mit begrenzter Länge. Dann schreibst du Werte hinein - aber lossy! Dann brauchst du nur den aktuellen Inhalt lesen, die Queue übernimmt das Rauswerfen alter Werte von allein (dank lossy!).

Außerdem hast du das mit dem Dataflow noch nicht so richtig realisiert. Du hattest dein Enqueue in eine Schleife gepackt - und mit dem zuletzt gelieferten Wert vom DAQRead verbunden. Innerhalb der Schleife ändert sich dieser Wert aber nicht mehr - und du wunderst dich, warum immer der gleiche Wert in der Queue landetSmile

Lv09_img2


Datenerfassung hängt teilweise auf einem Wert fest - nick - 12.07.2010 15:20

hoppla, das war noch falsch eingestellt. Ändert aber leider nichts am Werteproblem. Ich hab das schon mit 10 Samples und weniger versucht.


Datenerfassung hängt teilweise auf einem Wert fest - nick - 12.07.2010 16:05

neinBlush , ich bin gar nicht so fixiert auf das queue, ich hatte nur schon ne ecke Zeit da reingesteckt und wollte das endlich "besiegen":fight:.
Aber ich meine ich hab s immer noch nicht so richtig verstanden. Es sieht so aus als ob in die queue nur ein Wert reingeschrieben wird, der dann direkt ausgelesen wird.
Ich möchte aber doch so gerne eine beliebeige Anzahl vorspeichern, um sie dann gemeinsam zu bearbeiten. Kann man nicht einem Array/queue/loop/ringpuffer ... sagen warte erstmal soundsoviele Werte ab und gib sie dann weiter. Oder wird das durch die Größe bestimmt?
Deswegen hab ich auch immer diese loop benutzt ich hab gehofft dem loop sagen zu können hol dir erstmal 5 Werte und schreib die in die queue in der Loop. hat aber wie du weißt nicht funktioniert.

Danke für deine hilfe Gerd, ich hätt ohne dich schon min 10 Herzinfakte