![]() |
Kontinuierliche Daten erfassen und jeden Wert sofot verarbeiten - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ) +---- Thema: Kontinuierliche Daten erfassen und jeden Wert sofot verarbeiten (/Thread-Kontinuierliche-Daten-erfassen-und-jeden-Wert-sofot-verarbeiten) |
Kontinuierliche Daten erfassen und jeden Wert sofot verarbeiten - JackBlack - 25.11.2010 22:41 Hallo zusammen Wir sind in unserem Projekt auf ein Problem gestoßen. Ich möchte es kurz schildern. Wir wollen mit dem DAQ-Assistenten Analogwerte mit einer Sample-Rate von 25kS pro Kanal einlesen (16 Analogkanäle). Dazu verwenden wir das USB-6212 von Ni. Unser Vi ist so erarbeitet das zu jedem Zeitpunkt ein Analogsignal (Spannung) vorhanden sein muss. Diese Spannung dient dazu einen Bewertung des Prüflinges (Taster->Übergangswiderstand) zu treffen. Die Bewertungskriterien sind von Eingestellten Sollwert und einer einstellbaren Zeit abhänging (Messzeit). Nun bekommen wir vom Ausgang "Daten" des DAQ-Assistenten unsere Werte geliefert. Da Problem ist nun, das bei der Wandlung der Werte (1D Array??) in einen für uns benötigten Skalar nicht so funktioniert wie wir uns vorgestellt haben. Es wird nur der letzte Wert weitergegeben der in das Sample geschieben wurde. Die restlichen Werte werden verworfen und können von uns nicht mehr bewertet werden. Meine Frage ist nun: Können wir alle Analogwerte sichern (nicht in Form einer Datei, sondern nur so lange bis der erfasste Wert bewertet wurde, und danach verfällt dieser wieder) und einem nach den andern Abarbeiten lassen?? Hierzu sind auch gundsätzliche Fragen zum Thema Samples aufgekommen. Welchen Sinn macht es Werte in ein Sample zu schreiben, aber nur der letzte geschrieben verwendet werden kann?? Wir sind über jede Hilfe dankbar die Licht ins Dunkle bringt. MfG JackBlack Kontinuierliche Daten erfassen und jeden Wert sofot verarbeiten - jg - 25.11.2010 23:58 Ohne VI-Upload eurerseits fällt eine konkrete Antwort schwer. Hauptproblem dürfte der DAQ-Assi mit seinem unnötig komplizierten DDT-Datenformat sein. Gruß, Jens Kontinuierliche Daten erfassen und jeden Wert sofot verarbeiten - Y-P - 26.11.2010 09:10 Ladet mal Euer VI hoch und beschreibt bitte nochmal etwas genauer, was für einen Datentyp ihr habt und was für einen Datentyp ihr möchtet. ![]() ![]() Gruß Markus Kontinuierliche Daten erfassen und jeden Wert sofot verarbeiten - JackBlack - 26.11.2010 17:04 Hier is das Vi mit allen dazugehörigen SubVis Mfg JackBlack [attachment=30885] ![]() Kontinuierliche Daten erfassen und jeden Wert sofot verarbeiten - Y-P - 26.11.2010 18:21 Ihr wandelt Eure Daten ja auch in einen Doublewert, bzw. habt am SubVI-Eingang ein Double-Control. Da solltet ihr schon ein Array verwenden. Und was soll das: [attachment=30888] ![]() Gruß Markus Kontinuierliche Daten erfassen und jeden Wert sofot verarbeiten - JackBlack - 29.11.2010 18:34 Hallo Erstmal Danke für die schnelle Antwort. Unsere Hauptfrage ist, wenn wir alle unsere Analogwert als Array verarbeiten würden, müssten wir unser ganze Schaltung dan umschreiben? Da unsere komplette Schaltung auf die verarbeitung einzelner Werte ausgelegt sein sollte. Können wir jeden Wert der im Array steht mit einem Sollwert vergleichen?? (Bsp kann man eine >= Operation mit einem Array durchführen so das jeder Wert berücksichtigt wird). Oder liegen wir mit unseren Denkansatz zur Datenverarbeitung über den Daq-Assistenten grundsätzlich daneben?? Aus diesem Grund auch die wandlung das Analogwertes in einen Skalar, um diesen zu verarbeiten. Eine weiter Frage wie läuft die Aufzeichnung der Analogwerte ab?? Wird immer ein Sample erzeugt und verarbeitet, Und beim nächsten Sample das alte Überschrieben?? (Ein Sample nach dem andern verarbeitet) MfG JackBlack Kontinuierliche Daten erfassen und jeden Wert sofot verarbeiten - Lucki - 29.11.2010 22:59 ' schrieb:Meine Frage ist nun: Können wir alle Analogwerte sichern (nicht in Form einer Datei, sondern nur so langeGenau das leistet doch die normale gepufferte Datenerfassung völlig kostenlos ohne jegliche. Programmierarbeit. Man sampled kontinuierlich mit einer konstanten Datenrate, also z.B. 25kHz. Die Daten kommen dann erst mal in einen FIFO-Buffer - das ist Standard. Ob Du diese Daten dann mit DAQmx Read in einer Schleife als Datensätze (Arrays) von je 10 oder 100 Stück oder aber als Einzelwerte ausliest (und jeden sofort verarbeitest), ist Deine Sache. Der Werte "verfallen" durch Auslesen aus dem Buiffer - dann sind sie nämlich nicht mehr drin. Ich bin aber nicht auf Express-VIs geeicht. Ob Deine Express-Vis in dieser Hinsicht korrigierbar sind, kann ich nicht sagen Kontinuierliche Daten erfassen und jeden Wert sofot verarbeiten - JackBlack - 01.12.2010 16:25 Hallo zusammen Zitat:Genau das leistet doch die normale gepufferte Datenerfassung völlig kostenlos ohne jegliche. Erst mal danke für die schnelle Antwort. Wir haben das schon mit dem DAQ Assistenten versucht. Mit einer kontinuierlichen Aufzeichenung und 1 Sample, nur bei einer Abtastrate von 25khz bekommen wir immer diesen fehler: Fehlercode 200279 Wenn wir die Rate runtersetzten läuft wie es soll, da wir keinen Überlauf des Puffers bekommen. Dies können wir aber nicht machen da die Tastrate für unsere Anwendung zu gering ist. Das Express-Vi das wir verwenden ist unter anderm aus dem DAQmx Read aufgebaut. Daher denken wir nicht das sich das Problem damit beheben lässt wenn wir das Express vi "nachbauen" DAQ Assisten im Anhang mit Einzel Vis aufgebaut Ich versuche an dieser Stelle das Problem nochmal an Hand einiger Beispielwerte zu erklären: Unser problem ist das wir am Eingang unsers Vis zum vergleich einen einzelenen Wert brauchen. Da mit der kontinuierlichen Aufzeichnung nicht jeder Wert des Samples sonder nur der zu letzte aufgezeichete Wert ausgewertet wird. Samplegröße: 10 Gesampelte Analogwerte: 3.2,3.19,2.7,1.87,0.94,0.36,0.334,1.3,2.7,3.2 Nun wollen wir alle Werte die im Sample stehen am Eingang prüfen, in unserm Fall wir aber nur der letzte wert also 3.2 ausgewertet und unser Programm erkennt nicht das der Taster betätigt wurde. Erst wenn wir jeden Wert einzelt vergleichen haben, kann das Programm verstellen ob der Taster betätigt (wenn der anstehende Wert kleiner ist als der eingestellte Wert von 2,7) worden ist und die dementsprächende Auswertung (nach einem weitern Vergleich ob dieser Wert zu dieser Zeit in der Toleranz liegt) beginnen. Daher ist unser Frage wie können wir das machen?? MfG JackBlack Kontinuierliche Daten erfassen und jeden Wert sofot verarbeiten - Matze - 01.12.2010 22:28 ' schrieb:Mit einer kontinuierlichen Aufzeichenung und 1 Sample, nur bei einer Abtastrate von 25khz bekommen wir immer diesen fehler:Windows ist kein Echtzeitbetriebssystem. Das macht so viel nebenher, das glaubst du gar nicht. Eine Einzelwerterfassung mit 25 kHz würde bedeuten, dass das Betriebssystem zuverlässig alle 0,04 ms die Auswertung vornimmt. Das kannst du vergessen. Der DAQmx-Treiber ist genau aus dem Grund so ausgelegt, dass du dir mehrere Messwerte auf einmal abholen kannst. Lies also nicht einen einzelnen Wert aus, sondern z.B. immer 5000 auf einmal. Diese 5000 Werte erhältst du z.B. als Double-Array. Verbindest du das mit einer For-Schleife (Auto-Indizierung aktiv lassen), dann kannst du die 5000 Werte in der For-Schleife durchlaufen und auswerten. Im Endeffekt betrachtest du dann auch die Einzelwerte. Die For-Schleife hat für die 5000 Werte somit 200 ms Zeit und das funktioniert unter Windows. Es wird dann nicht zu einem Pufferüberlauf kommen. Viel schneller als 200 ms kannst du vermutlich eh nicht auf Änderungen reagieren, da du - wie gesagt - hier kein Echtzeitbetriebssystem, hast. Dort würde das anders aussehen. Also: Lies die Werte blockweise aus und verarbeite diese in einer Schleife, in der du auf jeden einzelnen Wert zugreifen kannst. Das ist auch kontinuierlich, aber im genannten Beispiel im 200- und nicht im 0,04-Millisekunden-Takt. Diese Einstellung funktioniert meines Wissens auch mit dem DAQ-Assistemt. Dort kannst du unten irgendwo einstellen, wie viele Werte auf einmal ausgelesen werden sollen. Kontinuierliche Daten erfassen und jeden Wert sofot verarbeiten - JackBlack - 02.12.2010 21:38 Hallo zusammen Erstmal fettes Danke für die sehr schnelle Antwort Bei der Einzelwertverabreitung von Arrays wird er Wert innerhalb der Schleife richtig angezeigt, außerhalb der Schleife wird nur nach jedem Durchlauf von einem Schleifenzyklus ein Wert angezeigt und nicht alle. Wie bekommen wir die ausgelesenen Einzelwert die innerhalb der Schleife sind nach außen? Wenn wir einen Tunnel verwenden müssen wir die zu zählenden Schleifen auf den Wert Samples stellen (in unserem Beispiel 5000) wenn wir eine Auto-Indizierung verwenden bekommen wir eine Datentyp Unverträglichkeit siehe Bild im Anhang Woran liegt das? MfG JackBlack |