Problem mit kontinuierlicher Datenerfassung usw. - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ) +---- Thema: Problem mit kontinuierlicher Datenerfassung usw. (/Thread-Problem-mit-kontinuierlicher-Datenerfassung-usw) |
Problem mit kontinuierlicher Datenerfassung usw. - impromptu - 24.05.2007 21:50 Hallo zusammen, bin LabVIEW-anfänger, und hab bei meiner projektarbeit ein problem mit der kontinuierlichen Datenerfassung, was ähnlich aussieht, wie in diesem posting geschildert wurde: http://www.LabVIEWforum.de/index.php?showtopic=5477 ich verwende eine baugleiche Interfacekarte vom Hersteller Meilhaus/Measurement Computing mit USB-Anschluss, also die vom Hersteller zur Verfügung gestellten VIs zur Datenerfassung sind haargenau dieselben wie im obigen Posting. Es sind mehrer VIs zur analogen Datenerfassung zur Auswahl, und bei meiner Projektarbeit habe ich einfachheitshalber das ausgewählt, was die erfassten Daten als einzelwerte ausgibt, anschließend habe ich die Einzelwerte mit einer Rückkopplung an einem Array-Erstellen VI in ein 1D-Array zur Weiterverarbeitung mit Filtern usw. gepackt. Den Screenshot hierzu vom Teil meines Programms habe ich angehängt. Ich habe auch am Anfang probiert, wie im obengenannten Posting das VI zur Datenerassung einzusetzen, das die erfassten Daten in Form eines Arrays ausgibt, bin dann leider derselben Problematik begegnet, und hab deshalb diese andere Alternative genommen, um erstmal weiterkommen zu können. Es hat bis jetzt eigentlich wunderbar funktioniert, nur das Array, in das ich die ganzen Daten einpacke, vergrößert sich halt die ganze Zeit, (hab auch deswegen eine Anzeige eingebaut, um die Größe des Arrays zu überwachen), und bei meiner Projektarbeit gehts darum, EKG-Signal kontinuierlich zu erfassen, d.h. wenns sein muss, wirds 24std lang aufgenommen, und das Array kann ja nicht beliebig groß werden. Ich habe schon seit längerem vergeblich nach einer Lösung gesucht, und hatte mir zwar auch so ne art Ringpuffer einzubauen überlegt, wusste aber nicht, wie ich das programmtechnisch auf LabVIEW realisieren soll. Ausserdem wollte ich gerne wissen, wie es bei den VIs von NI zur Datenerfassung aussieht, die die erfassten Daten direkt als Array ausgeben, vergrößert sich das Array auch ins unendliche oder hat es eine vordefinierte feste Größe? Eine andere Frage, die bei meiner Arbeit heute aufgetaucht ist: ich habe in einem Zeitschriftsbeitrag erfahren, dass es ein Library VI namens Array Window Max & Min bei einer früheren Version von LabVIEW gab, mit dem es ab einer bestimmten Position in einem Array innerhalb einer definierbaren Breite nach dem Maximum/Mininum gesucht werden kann (ähnlich wie die Max/Min Funktion auf Matlab), und ich habe lange danach gesucht, und nicht gefunden sowohl auf meiner 7.0 als auch 8.0 Version. hat NI dieses VI abgeschafft, oder habe ich mich geirrt? Ich wäre sehr dankbar, wenn ihr mir irgendwie helfen könnt. Grüße Fred [attachment=6838] Problem mit kontinuierlicher Datenerfassung usw. - Achim - 25.05.2007 05:17 Hi, das von dir gesuchte VI "Array Window Max & Min" kenn ich nicht, aber du kannst ja ganz einfach einen Teil deines Array ausschneiden und dann mit der "normalen" Array-Min/Max-Funktion arbeiten. Zum Thema Ringpuffer gibts mehrere Möglichkeiten: 1. Zu kannst dir die Daten in ein Schieberegister packen (bzw. in nen FeedbackNode) und die jeweilige Länge überprüfen...Wenn mehr als X Werte drin sind, schneidest du was hinten ab. 2. Du schiebst deine Daten in eine Queue und und machst dann das gleiche wie bei (1.). Für die Queue aber keine feste Größe definieren, sonst bleibt deine Datenerfassung einfach stehen, wenn du mit dem "Dequeue" ("leeren") nicht nachkommst. 3. Du schiebst deine erfassten Daten in ein WaveformChart. Bei dem legst du mit nem rechtsklick auf dessen Oberfläche die "History Size" fest, abhängig von deiner zu erwartenden Messdauer + Abtastrate entsprechend viele Punkte. Wird diese Zahl während deiner Messung überschritten, werden die zuerst erfassten Werte verworfen...das ist ein automatischer Ringpuffer! Wenn du die Anzeige aller Daten im Chart bzw. das ganze Chart nicht benötigst, machst du's einfach "invisible". Wenn du programmatisch auf die Daten zugreifen willst (z.B. um Ausschnitte zu sehen oder zu speichern), kannst du das mit nem PropertyNode des Charts und dem Parameter "HistoryData". Ich persönlich hab alle drei Varianten schon verwendet, die letztere ist für mich die eleganteste...da wird LV zwar ein bisschen missbraucht, aber wer weiß ob sich das die Entwickler nicht tatsächlich so gedacht haben... Gruss Achim Problem mit kontinuierlicher Datenerfassung usw. - impromptu - 25.05.2007 18:17 Vielen Dank für diesen genialen eleganten Tip, hab gleich ausprobiert, und er hat super funktioniert! |