LabVIEWForum.de
Lesen aller .tdms-Datenkanäle - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenbank & File IO (/Forum-Datenbank-File-IO)
+---- Thema: Lesen aller .tdms-Datenkanäle (/Thread-Lesen-aller-tdms-Datenkanaele)



Lesen aller .tdms-Datenkanäle - bregas - 25.10.2013 11:06

Hallo zusammen,

vorab: ich bin ein absoluter Neuling auf dem LabVIEW-Gebiet, seid also nicht so streng zu mir! Smile

Jetzt zu meiner Frage: Ich habe eine .tdms Datei, die Messwerte aus einem Fahrzeug enthält. Sie besitzt folgende Struktur:
[attachment=46945]

Jeder Kanal (x,y,z,Tempsensor1,..) besitzt 3600 Messwerte. Mein Ziel ist es jetzt, diese .tdms-Datei einzulesen und die Messwerte
der einzelnen Kanäle in Arrays abzulegen (um damit Rechnungen durchzuführen).

Ich hab jetzt also angefangen ein VI zu basteln und erreiche damit, dass ich mir zwar die Gruppen und Kanalnamen anzeigen lassen kann, aber wenn es um die konkreten Messdaten geht, bekomm ich nur den Bereich "Datum" aus meiner .tdms Datei.

Hier das .vi:
[attachment=46944]

Wie komme ich denn am besten an die Messdaten der einzelnen Kanäle?

Beste Dank und viele Grüße
bregas


RE: Lesen aller .tdms-Datenkanäle - Kasi - 25.10.2013 13:23

Hallo Bregas,

auch wenn ich nicht zu streng sein soll, kann ich mir ein Rtmfx nicht verkneifen. Denn in der Hilfe steht alles, was du schon immer über TDMS Read wissen wolltest, aber bisher nie zu fragen gewagt hast.
Ich zitiere aus dem Buch Labview Help, Vers TDMS Read Function:

"group name in [...] If you do not wire this input, LabVIEW reads data from the first group when you run this function for the first time."

Was will uns der Autor damit sagen? Und welche Schlüsse ergeben sich hier heraus?
Diese Fragen bitte ich in Heimarbeit bis zum nächsten Post zu bearbeiten.

Grüße & viel Erfolg,
Kasi

Achja, und willkommen im Forum Smile


RE: Lesen aller .tdms-Datenkanäle - bregas - 26.10.2013 16:34

Hallo Kasi,

vorab schon einmal vielen vielen Dank für deine Antwort und Hilfe. Und tatsächlich hat das wachrütteln mit der LabVIEW Hilfe etwas gebracht.

Ich komme jetzt nämlich an meine einzelnen Datenkanäle und kann mir diese sowohl graphisch ausgeben, als auch in ein Array schreiben!

Soweit so gut, allerdings wirft mir LabVIEW beim kompilieren des Block Diagrams einen Fehler, den ich nicht deuten kann und wo ich auch mit der Hilfe nicht weiterkomm.
[attachment=46962]
s1.directupload.net/images/131026/p99omhix.png

Der Fehler wird beim Ausführen der Funktion "TDMS: Schließen" erzeugt.
Das für mich unverständliche ist, dass wenn ich nur einen Kanal auslese, das Schließen der .tdms-Datei kein Problem darstellt, aber jetzt, wo ich quasi
vier Kanäle parallel auslese schon.

Wenn ich jetzt den Programmaublauf highlighte, sieht man ganz deutlich, dass die Funktionsblöcke "TDMS: Schließen" erst dann ausgeführt werden, wenn alle Daten-Kanalabfragen durchgeführt werden. Warum bringt er also diese Fehlermeldung?

Wo ist mein Denkfehler?

Gruß
bregas


RE: Lesen aller .tdms-Datenkanäle - jg - 26.10.2013 17:27

Offtopic2
Anhänge bitte hier im Forum hochladen, nicht bei externen Hostern (vgl. LVF-Regeln).

Danke, Jens
(26.10.2013 16:34 )bregas schrieb:  Der Fehler wird beim Ausführen der Funktion "TDMS: Schließen" erzeugt.
Das für mich unverständliche ist, dass wenn ich nur einen Kanal auslese, das Schließen der .tdms-Datei kein Problem darstellt, aber jetzt, wo ich quasi
vier Kanäle parallel auslese schon.
Genau hier liegt dein Denkfehler. Sobald du etwas "parallel" im Blockdiagramm programmierst, dann zerstörst du das Datenflusskonzept von LabVIEW. Was dann wann ausgeführt wird, weißt du vorab nicht. Und du darfst dich NICHT darauf verlassen, dass die Abarbeitungsreihenfolge im Highlight-Modus identisch zu der im Normalmodus ist.

Lösung: Häng die 4 Reads hintereinander und schließe die Datei nur 1x NACH allen Reads.

Gruß, Jens


RE: Lesen aller .tdms-Datenkanäle - bregas - 27.10.2013 11:07

Ich nochmal:

In meinem Blockprogramm sagt mir LabVIEW, dass der Datentyp der aus meinem TDMS: Lesen kommt ein Signalverlauf (DBL) ist. Desweitern hab ich in der Hilfe gelesen, dass ich der Funktion TDMS:Lesen einen Datentyp mit auf den Weg geben kann. Die Daten die dann mein TDMS:Lesen verlassen, haben dann den Datentyp der vorher festgelegt wurde.

Aber wie sage ich der TDMS:Lesen, wie der Datentyp aussieht? Muss ich einen String übergeben? Dazu hab ich nirgend eine Information gefunden.
Es steht immer nur da, dass man den Datentyp übergibt und fertig..


RE: Lesen aller .tdms-Datenkanäle - Kasi - 27.10.2013 12:17

Hallo bregas,

das VI TDMS Read hat einen Eingang "Data Type" - hier kannst du einfach eine leere Labview Konstante mit dem Datentyp anschließen, den du gerne als Ausgangstyp hättest. Nach Hilfe sind folgende Datentypen erlaubt:
Digital waveform
Digital table
Dynamic data
1D or 2D array of:
-Signed or unsigned integers
-Floating-point numbers
-Timestamps
-Booleans
-Alphanumeric strings that do not contain null characters

Wenn du jetzt also beispielsweise als Datentyp lieber ein Boolsches Array haben willst, erstellst du dir eine leere Array-Konstante auf dem Blockdiagram, füllst die mit einer Boolean Konstante und schließt diese an den Datentyp-Eingang an - dann wird auch der Datenausgang auf boolsches Array geschaltet (ob das dann Sinn macht, hängt natürlich davon ab, was überhaupt im jeweiligen TDMS Kanal gespeichert wurde).


RE: Lesen aller .tdms-Datenkanäle - bregas - 27.10.2013 12:56

Hallo Kasi,

perfekt, hat super geklappt. In 4 Wochen werde ich über meine Fragen wahrscheinlich lachen Smile

Schönen Sonntag,
bregas


RE: Lesen aller .tdms-Datenkanäle - Kasi - 27.10.2013 14:45

In vier Wochen schaust du dir dein Programm an und sagst dir - Gott ist das hässlich....besser, ich fange nochmal von vorne an Wink
Spaß beiseite, da du relativ am Anfang steht, würde ich dir auf jeden Fall empfehlen, alles direkt am Anfang gut zu dokumentieren (am einfachsten mit einem Doppelklick ins Blockdiagramm, das ein Textfeld einfügt), damit du in ein paar Wochen noch weißt, was genau du bezwecken willst. Außerdem hilft es auch, eine Ahnung davon zu haben, was klassische Anfängerfehler bei der Programmierung sind und was eine gute Nutzerschnittstelle ausmacht.

Viel Erfolg bei deinen Projekten!