LabVIEWForum.de - DAQ: Digitales und analoges Signal in einer Datei abspeichern

LabVIEWForum.de

Normale Version: DAQ: Digitales und analoges Signal in einer Datei abspeichern
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Liebes Labviewforum,

ich beschäftige mich derzeit mit der Messtechnisches Erfassung eines Drucksignals. Um das Drucksignal analysieren zu können, müssen ebenfalls Drehwinkel und Position aufgezeichnet werden.
Für die Messungen verwende ich die Messkarte NI USB-6211.

Ich habe bisher nicht viel Erfahrung mit der Labview-Programmierung und hoffe, dass ihr mir bei meinen Fragen weiterhelfen könnt! Wink

Ich möchte über einen analogen Eingang ein Spannungssignal aufnehmen und über zwei digitale Eingänge TTL-Signale aufzeichnen (Winkel und Position).

Die Signalerfassung über die Messkarte funktioniert, sprich, es werden die entsprechenden Werte numerisch korrekt ausgegeben.

Der nächste Schritt wäre nun, die Messdaten (3 Signale: 1x analog (Spannung), 2x digital (Winkel u. Position)) in einer TDMS-Datei abzuspeichern. Die Messdaten müssen hierbei natürlich synchronisiert sein, damit die Zuordnung von Spannung zu Winkel und Position korrekt ist.

Meine Fragen sind:

1) Kann ich meine VI für diese Aufgabe so benutzen, oder habe ich da etwas grob falsch gemacht?
[attachment=45381]
1.1) Macht es Sinn die DAQ-Assistenten derart zu benutzen, oder sollte ich vielmehr die "normalen" DAQ-VI's benutzen?

2) Passiert die Synchronisation automatisch (im Hintergrund) oder muss ich diese separat programmieren?

3) Wie kann ich die Signale am besten / eleganstenten in eine Datei abspeichern?
3.1) Indem ich die DAQ-Assistenten wie in meinem VI zusammenfüge?
3.2) Oder soll / kann ich die Signale über ein Task laufen lassen und diese Task in einer TDMS-Datei abspeichern (OBWOHL die Channels andere Formate haben)
In ähnlicher Weise wie in diesem Beispiel:
[attachment=45382]

Ich bin euch sehr dankbar für eure Hilfe und bedanke mich im Voraus hierfür!

Gruss,
Hydraulab
Die VIs kann ich mir mangels LabVIEW 2012 nicht anschauen. Die Synchronisation der Signale erfolgt nicht automatisch im Hintergrund. Am sinnvollsten ist es für die Erfassung des analogen Kanals eine Erfassungsrate zu definieren und für die Erfassung der digitalen Signale einfach die AI/SampleClock zu verwenden. Damit ist es dann direkt synchron.
Hallo,

@ Holy: Vielen Dank für deine Antwor!
Ich habe mich nach deinem Tip auf die Suche nach einem bestehenden Labview Beispiel ( https://decibel.ni.com/content/docs/DOC-10785 ) gemacht, welches ich dann entsprechend anpassen kann. Meintest du das in etwa so?

Im diesem Beispiel wird ein Counter Input mit einem Analog Input synchronisiert (entsprechend meiner Aufgabe).
Die Daten werden im Beispiel allerdings nicht abgespeichert sondern lediglich in einem Waveform Graph ausgegeben.
Um die Daten in einer .tdms-Datei abzuspeichern, habe ich das Beispiel entsprechend abgeändert (s. angehängtes Bild und VI).

Zudem wird in dem Beispiel lediglich mit einer "rate" von 1kHz abgetastet. Bei meiner Anwendung wird eine Abtastung von 60kHz gefordert, da das Drucksignal hochdynamisch ist.
Wenn ich die Sample Rate einfach auf 60kHz hochsetzte, bekomme ich die Fehlermeldung:

Possible reason(s):

Attempted to read samples that are no longer available. The requested sample was previously available, but has since been overwritten.

Increasing the buffer size, reading the data more frequently, or specifying a fixed number of samples to read instead of reading all available samples might correct the problem.

Property: RelativeTo
Corresponding Value: Current Read Position
Property: Offset
Corresponding Value: 0

Task Name: _unnamedTask<AE>


Ich habe hierzu gelesen, dass dies einfach hierdurch zu lösen wäre, indem man die 'number of samples per channel' bei DAQmx Read hochsetzt (auf bspzw. 10-25% der Abtastrate).
Bei mir gibt es diesen Parameter allerdings nicht, da ich aus denDAQmx Read VI nur DBL's ausgebe.

Wenn ich die "samples per channel" bei den sample clocks hochsetzte, kommt der Fehler zwar nicht mehr, das Programm zeichnet allerdings nicht mehr bis zum Ende der Messung auf.

Ich denke es hat immer noch etwas mit der Buffergrösse oder der Schreibgeschwindigkeit in die .tmds Datei zu tun.

Hat jemand einen Rat?


Meine Fragen:

1) Muss ich zwingend mit einem Buffer arbeiten ?
2) Fehlt eventuell eine Einstellung ?


Vielen Dank im Voraus und schöne Grüsse!
Hyraulab
Dein VI ist, wie du auch schon selbst mitbekommen hast, an einigen Punkten anders wie das verlinkte Beispiel. Genau diese Punkte sind auch das Problem. Deine Schleife kommt einfach nicht hinterher mit auslesen und daher genau diese Fehlermeldung. Lösung ist dien VI entsprechend dem Beispiel anpassen. Den Counter auch mehrere Samples auslesen bzw. die Samplingrate entsprechend anpassen. Bei dem analogen Task macht es nicht zwingend Sinn N Kanäle auszulesen wenn du nur einem im Task hast. Die auszulesenden Samples würde ich immer exakt vorgeben, insbesondere um die Speicherung einfacher zu machen.
Falls du nur einen Einzelwert aus dem Counter lesen willst musst du dann natürlich das Verhältnis der Samplingraten entsprechend anpassen. Z.B. 1 zu 100 für Counter zu Analog. Das bedeutet dann in jeder Iteration 1 Wert vom Counter auslesen und 100 vom Analogen.
Hallo Holy,

Vielen Dank noch einmal für deine Antwort!

Ich habe das Beispiel lediglich an meine Eingänge (CI und AI) angepasst und eine sehr einfach Speicherung der Daten in einer TDMS-Datei zugefügt, anstatt diese wie im Beispiel in einer Waveform wiederzugeben.

Bevor ich die Anpassungen, wie du sie empfohlen hast, umsetzte, habe ich noch eine allgemeine Frage zum Struktur des Programmes.

Wäre es vielleicht sinnvoller die AI- und CI-Signale einzeln in TDMS-Dateien zu speichern (bspw. mit DAQmx Configure Logging VI) und erst hinterher in eine Datei zu schreiben?
Meine erste Ueberlegung war es eben diese DAQmx Configure Logging VI zu nutzen (aufgrund der guten Performance), was aber wegen den unterschiedlichen Tasks (AI und CI) nicht möglich war. Dementsprechend habe ich mir das Beispiel zur Synchronisation von CI und AI herausgesucht und angepasst.

Welches allgemeine Vorgehen / Layout des Programms wäre deiner Meinung nach sinnvoll, um die Daten zu synchronisieren und hiernach in einer TDMS-Datei zu speichern, unter der Bedingung mit höheren Abtastraten zu arbeiten (60kHz)? Etwas in Anlehnung an meine VI oder eher eine andere Struktur?

Ich tappe im Moment leider noch etwas im Dunkeln.
Ich habe aber in einem anderem Foum gelesen, dass schon vor mir Leute Probleme mit genau diesem Thema hatten, hierzu bisher aber keine Lösung gefunden wurde.
http://forums.ni.com/t5/Multifunction-DA...-p/1550490
http://forums.ni.com/t5/LabVIEW/DAQmx-co...-p/1507150


Vielen Dank im Voraus für deine Mühe!

Gruss,
Hydraulab
Das DAQmx-TDMS-Logging zielt auf Erfassungsraten im MHz-Bereich ab. Geht dort eher darum SSD-Raid-Systeme auch mit 400MB/s an Messdaten befüllen zu können.
Eine getrennte Speicherung macht hier eigentlich keinen Sinn da der Programmieraufwand nur steigt und dir aber keine relevanten Vorteile bringt. Ich würde an deiner Stelle einfach 2 TDMS Write machen. Einen für die Counterdaten und einen für die analogen Daten. Es ist auch noch sinnvoll zumindest Kanalnamen und am besten auch noch Gruppennamen zu vergeben.
Referenz-URLs