LabVIEWForum.de - Prinzipielles zur Datenerfassung

LabVIEWForum.de

Normale Version: Prinzipielles zur Datenerfassung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi,


demnächst muss ich meine erste Datenerfassung mittels DAQmx programmieren.

Ich muss kontinuierlich Daten einlesen und alle Daten in einem Graphen (XY) darstellen. Kann ich innerhalb einer Whileschleife ein Schieberegister verwenden, in dem ich ein expandierendes Array weitergebe?

Gibt es Nachteile in Bezug auf Zeitbedarf der Whileschleife?

Welche anderen Möglichkeiten gibt es? (Ich benötige ALLE erfassten Daten - zum Schluss muss ich z.B. alle Daten in eine Messdatei schreiben)

Gruß,
Alex
Ich würde nicht zum Schluss alle Daten auf einmal schreiben und solange in nem Array sammeln...stattdessen würde ich entweder bei jedem Durchlauf schreiben ("append to file"), oder zumindest nur ne Weile sammeln (soundso viele Schleifeniterationen, je nach Datenmenge) und dann nen ganzen Block an die Datei anhängen.

Das sammeln in nem Array über ein Schieberegister ist quasi ein "Muss", alternativ könntest du die Messdaten auch in nem (evtl. unsichtbaren) Waveform-Chart (mit entsprechend großer History Size) sammeln.

Wenn du ewig in nem Array sammelst, muss mit jedem Schleifendurchlauf eine komplette Reorganisation des Speichers (durch "BuildArray") stattfinden, und das kostet Zeit...je größer das Array, desto mehr. Außerdem sind bei nem Absturz etc. dann alle Daten weg, wohingegen sie bei kontinuierlichem Schreiben schon mal im File gesichert sind! Evtl. musst du beim Schreiben einer Text-Datei nach jedem Schreibvorgang ein "Flush File" durchführen, nur so werden die Daten nämlich wirklich physikalisch geschrieben. Ansonsten werden Sie nämlich bis zur Beendigung der Schreib-Schleife auch nur im RAM "geschrieben" und erst am Ende auf die HD!

Gruss
Achim
Ich bin leider gezwungen alle Werte erst am Schluss zu schreiben, da das Messfile eine gewisse Struktur aufweisen muss.

z.B.:
Anzahl der Werte (x)
Skalenfaktor
Äquidistanz
Startwert
Messwert 1
.
.
Anzahl der Werte (y)
Skalenfaktor
Äquidistanz
Startwert
Messwert 1
.
.
' schrieb:Hi,
demnächst muss ich meine erste Datenerfassung mittels DAQmx programmieren.

Ich muss kontinuierlich Daten einlesen und alle Daten in einem Graphen (XY) darstellen. Kann ich innerhalb einer Whileschleife ein Schieberegister verwenden, in dem ich ein expandierendes Array weitergebe?

Gibt es Nachteile in Bezug auf Zeitbedarf der Whileschleife?

Welche anderen Möglichkeiten gibt es? (Ich benötige ALLE erfassten Daten - zum Schluss muss ich z.B. alle Daten in eine Messdatei schreiben)

Gruß,
Alex
Ein paar weitere Fragen/Tips zusätzlich zu dem, was Achim schon gesagt hat.[list]
[*]Um wieviele Daten geht es denn so größenordungsmäßig? Oder weist du genau die Menge, dann bietet sich ein "Replace Array Subset" statt "Build Array"/expandierendes Array an.<>
[*]Wielange dauert die Messung?<>
[*]Welche Messhardware/Messkarte hast du?<>
[*]Wie planst du die Datenerfassung? Hardware-getaktet (sehr zu empfehlen)? Dann ist der Software-Zeitbedarf deiner Whileschleife "relativ" egal, da du dich auf den FIFO-Puffer der Karte "verlassen" kannst.<>
[st]MfG, Jens
' schrieb:Um wieviele Daten geht es denn so größenordungsmäßig? Oder weist du genau die Menge, dann bietet sich ein "Replace Array Subset" statt "Build Array"/expandierendes Array an.

immer wieder gern genommen: --> RINGSPEICHERWink
' schrieb:Ich bin leider gezwungen alle Werte erst am Schluss zu schreiben, da das Messfile eine gewisse Struktur aufweisen muss.

z.B.:
Anzahl der Werte (x)
Skalenfaktor
Äquidistanz
Startwert
Messwert 1
.
.
Anzahl der Werte (y)
Skalenfaktor
Äquidistanz
Startwert
Messwert 1
.
.


Spezielles Format hin oder her,
da die Daten ja typischerweise im (Cluster)-Arrray vorliegen, warum nicht erst das Array in einer Datei zwischenspeichern und dann nach Beendung der Messung in das gewünschte Ausgabe-Format umkonvertieren?
Oder sind es soviele Daten das die Umkonvertieung zuviel Zeit benötigen würde ( mehrere Min.)?
Dann würd ich doch irgendwann das Speichern nach dem speziellen Fomat über Bord werfen und das ganze per TCP/IP an ne SQL-Datenbank pumpen.

Aber da Du (noch) nicht erzählt hast genau was Du messen willst und welche Datenmengen da entstehen, können wir viel mit Kanonen auf Spatzen schiessenWink

Gruß, Rob
' schrieb:Ein paar weitere Fragen/Tips zusätzlich zu dem, was Achim schon gesagt hat.[list]
[*]Um wieviele Daten geht es denn so größenordungsmäßig? Oder weist du genau die Menge, dann bietet sich ein "Replace Array Subset" statt "Build Array"/expandierendes Array an.<>
[*]Wielange dauert die Messung?<>
[*]Welche Messhardware/Messkarte hast du?<>
[*]Wie planst du die Datenerfassung? Hardware-getaktet (sehr zu empfehlen)? Dann ist der Software-Zeitbedarf deiner Whileschleife "relativ" egal, da du dich auf den FIFO-Puffer der Karte "verlassen" kannst.<>
[st]MfG, Jens

Hi Jens,

die genauen Daten habe ich noch nicht. Ich bin gelernter Dipl. Informatiker und habe mit Messkarten, ... wenig Erfahrung. Alle Spezifikationen erhalte ich von einem "Spezialisten" *g*

Es handelt sich um 1000 - 10000 Daten/s.

Die Messung wird durch den Bediener gestartet und beendet - d.h. die Messung kann wenige Sekunden aber auch mal mehrere Minuten (Stunden) dauern. Der Bediener betätigt eine Lenkung und in Abhängigkeit von der Auslenkung soll das Spiel der Lenkung erfasst werden.

Als Hardware soll die Zählerkarte PCI-6601 verwendet werden.

Die Datenerfassung soll hardware-getriggert werden. Hierzu habe ich mir bereits einige Beispiele im Example Finder angeschaut und hoffe sie verstanden zu haben ;-)


Gibt es eine einfache Möglichkeit nur bei einer Änderung der Daten diese zu speichern? Beispiel: Lenkung wird nicht betätigt -> Daten ändern sich nicht. Anstatt 1000 gleiche Werte zu schreiben soll nur ein Punkt geschrieben werden.

Falls die Datensätze von Hand bereinigt werden müssen:
Ist diese Auswertung besser beim Schreiben der Messdatei aufgehoben oder gleich bei der Datenerfassung?

Die Daten sollen ggf. geglättet werden. Gibt es hier schon eine Möglichkeit dies von der Hardware machen zu lassen oder muss ich bei der Datenerfassung z.B. immer den "neuen" gleitenden Mittelwert berechnen (Zeitbedarf der Whileschleife würde sich dann natürlich immer erhöhen)?


Liebe Grüße,
Alex
Referenz-URLs