LabVIEWForum.de
Binärdatei schreiben: Zu viele Samples? - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ)
+---- Thema: Binärdatei schreiben: Zu viele Samples? (/Thread-Binaerdatei-schreiben-Zu-viele-Samples)

Seiten: 1 2 3 4


Binärdatei schreiben: Zu viele Samples? - herrhannes - 04.07.2012 13:37

Moin,

ich habe folgendes, etwas dämliches Problem:

Ich lese per DAQmx Signale ein, was auch prima funktioniert, und dann versuche ich sie, in eine Binärdatei zu schreiben, was auch irgendwie funktioniert.

Das Problem daran ist aber, dass eine Aufnahme von 10s Signal mit 80kS/s Samplerate .... tadaaa ..... über 1mio Samples enthält.
Normalerweise bekomme ich ja gerne etwas geschenkt, aber wo kommen die her und wie bekomme ich sie weg?

Ich will das ganze nämlich in Matlab einlesen und da tut es der genauigkeit der Zeitberechnung gar nicht gut, wenn ich ca. 25% mehr Samples erhalte als erwünscht.

Gruß
herrhannes


RE: Binärdatei schreiben: Zu viele Samples? - GerdW - 04.07.2012 13:44

Hallo Hannes,

1) Wer hat dir bloss beigebracht, dass man Arrays indiziert, indem man sie erstmal in einen Cluster umwandelt? WARUM NICHT EINFACH INDEXARRAY BENUTZEN?
2) Lass dir doch einfach mal anzeigen, wieviele Samples du wirklich vom DAQ geliefert bekommst und in die Datei schreibst. Dazu einfach die Arraysize der 16bit-INTs anzeigen/aufaddieren lassen. (Das wäre etwas in der Art von "Debugging"/"Fehlersuche"...)


RE: Binärdatei schreiben: Zu viele Samples? - herrhannes - 04.07.2012 13:46

Das ist witzig.
Das mit den Clustern ließ sich der Betreuer leider nicht ausreden.

10123 Elemente enhält jedes Array.
Wieso das, wenn ich die Puffergröße über die Samplezahl auf 800 bzw. 1000 stelle?


RE: Binärdatei schreiben: Zu viele Samples? - GerdW - 04.07.2012 14:01

Hallo Hannes,

Zitat:Das ist witzig. Das mit den Clustern ließ sich der Betreuer leider nicht ausreden.
Vielleicht sollte dein Betreuer mal einen Grundkurs in LabVIEW belegen? Der Link meiner Signatur ist ein guter Anfang. Ansonsten gibt es auch welche bei NI... Zeig ihm diese Diskussion hier ruhig!

Zitat:10123 Elemente enhält jedes Array. Wieso das, wenn ich die Puffergröße über die Samplezahl auf 800 bzw. 1000 stelle?
Die Puffergröße ist mehr als Empfehlung an den Treiber zu sehen. Genaueres steht in der Kontexthilfe, die man als Anfänger immer offen haben sollte...
Hast du dir mal die mitgelieferten Beispiele zu DAQmx angeschaut? Wie man dort eine bestimmte Anzahl Samples aufnimmt?
- Zuerst stellt man die Samplerate ein.
- Dann liest man Blöcke der gewünschten Anzahl Samples.
- Wenn man genug Samples hat, stoppt man den Task.
Du stellst also 10kS/s ein, und liest (z.B.) 100 mal 1000 Samples. Einfach und simpel. Probier es mal aus!


RE: Binärdatei schreiben: Zu viele Samples? - herrhannes - 04.07.2012 14:05

Zitat:10123 Elemente enhält jedes Array. Wieso das, wenn ich die Puffergröße über die Samplezahl auf 800 bzw. 1000 stelle?
Die Puffergröße ist mehr als Empfehlung an den Treiber zu sehen. Genaueres steht in der Kontexthilfe, die man als Anfänger immer offen haben sollte...
Hast du dir mal die mitgelieferten Beispiele zu DAQmx angeschaut? Wie man dort eine bestimmte Anzahl Samples aufnimmt?
- Zuerst stellt man die Samplerate ein.
- Dann liest man Blöcke der gewünschten Anzahl Samples.
- Wenn man genug Samples hat, stoppt man den Task.
Du stellst also 10kS/s ein, und liest (z.B.) 100 mal 1000 Samples. Einfach und simpel. Probier es mal aus!

[/quote]

So hatte ich das am Anfang gemacht, dann aber auf kontinuierliche Samples umgestellt.
Die Anzahl an Samples stellt da ja dann den Puffer dar. Im Grunde ist dann das doch das selbe, wenn ich den auf 1000 Samples stelle?

Außerdem erklärt das immer noch nicht, wieso es mit dem tdms-VI funktioniert hatte.


RE: Binärdatei schreiben: Zu viele Samples? - GerdW - 04.07.2012 14:10

Hallo Hannes,

Zitat:Könnte das eventuell an der Umwandlung von Waveform in int usw. liegen?
Nein.

Zitat:Den Cluster-Kram habe ich schon rausgenommen.
Gut so... Smile

Zitat:Mit der Express-VI für tdms-Daten hatte ich das Problem übrigens nicht.
Gut möglich.

Zitat:Wie konvertiere ich das denn am besten für die Datei? Matlab erwartet eine Binärdatei, mit ints gefüllt.
Die Umwandlung ist ok so.
Aber: Je nach Datenrate kann das Schreiben der Dateien zum Bottleneck werden. TDMS ist speziell dafür gemacht, große Datenblöcke schnell wegzuspeichern, die Binärfile-Funktionen sind eher für das große ganze gemacht.
Genereller Tipp bei jedweder Messwerterfassung, insbesondere bei höheren Sampleraten:
Verwende ein einfache Producer-Consumer-Schema. Schicke die Messdaten per Queue von der DAQ-Schleife in eine parallel laufende FileWrite-Schleife. Guck dich im Forum um, wurde schon oft vorgemacht...

Und lese meinen vorigen Beitrag!


RE: Binärdatei schreiben: Zu viele Samples? - herrhannes - 04.07.2012 14:12

Aber gerade, wenn das Schreiben der Daten zu langsam ginge, dürfte ich ja nicht "zu viele" haben. oO

Und was mir auch noch eingefallen ist: Das Problem habe ich auch, wenn ich die maximale Samplerate einstelle.
Das dürfte ja dann nicht an der Hardware liegen. Mehr als Maximum geht ja nicht.


RE: Binärdatei schreiben: Zu viele Samples? - GerdW - 04.07.2012 14:17

Hallo Hannes,

du fragst beim DAQmxRead immer den aktuellen Puffer ab. Der Puffer füllt sich mit deiner Samplerate. Wenn du zu lange zum Schreiben brauchst (länger als du eigentlich pro Schleifeniteration vorgesehen hast), sammeln sich mehr Daten im Puffer als gedacht. Deine Schleife braucht insgesamt länger als geplant und damit bekommst du auch mehr Messwerte geliefert. Und höhere Sampleraten verschlimmern das Ganze noch...

Hast du meinen vorletzten Beitrag gelesen?

Samplerate = Anzahl Messwerte pro Sekunden. Du scheinst etwas anderes darunter zu verstehen...


RE: Binärdatei schreiben: Zu viele Samples? - herrhannes - 04.07.2012 14:31

Das mit der Samplerate ist mir klar, meinte nur, dass das Gerät nicht mehr als 125kS/s packt, daher also von dort schon einmal nicht mehr kommen können.

Ich stelle mal auf finite Samples um.

Schreibe ich nämlich anstatt auf das Netzlaufwerk direkt auf die Festplatte, erhalte ich noch viel mehr Samples.

Da scheint tatsächlich das Speichermedium zu limitieren, aber woher kommen die Daten her?
Die will ich ja gar nicht speichern.

Oder stimmt was mit meiner Schleife nicht?


RE: Binärdatei schreiben: Zu viele Samples? - GerdW - 04.07.2012 15:07

Hallo Hannes,

noch mal die Frage: Hast du Beitrag #4 gelesen? Und auch schon ausprobiert?

Bisher hast du nämlich beim DAQmxRead nicht vorgegeben, wieviele Samples du auslesen willst. Wenn du das machen würdest, bekämest du auch genau die gewünschte Anzahl geliefert. Aber du liest ja anscheinend meine Ausführungen nicht...
Die Puffergröße ist nur eine Empfehlung. Lies dir die Kontexthilfe dazu durch!

Zitat:Die Anzahl an Samples stellt da ja dann den Puffer dar. Im Grunde ist dann das doch das selbe, wenn ich den auf 1000 Samples stelle?
Nein, es ist nicht das gleiche! Einmal fragst du eine explizite Anzahl Messwerte ab, beim anderen alle Messwerte, die zwischenzeitlich aufgenommen wurden. Und "zwischenzeitlich" ist hier das undefinierte Element!!!