LabVIEWForum.de
Unflatten from String in C - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: DLL & externer Code (/Forum-DLL-externer-Code)
+---- Thema: Unflatten from String in C (/Thread-Unflatten-from-String-in-C)

Seiten: 1 2


Unflatten from String in C - dalb - 12.06.2008 16:15

Ich möchte Daten, die von LabVIEW erzeugt werden außerhalb von LAbview nutzen. Die Daten wurden in LabVIEW flattened to String. Um die Daten interpretieren zu können müsste ich sie nun aber wieder unflatten und das am Liebsten außerhalb von LabVIEW zB durch ein C Programm. Hat jemand sowas schon mal gemacht? Was passiert genau beim flatten?

Vielen Dank!


Unflatten from String in C - eg - 12.06.2008 16:20

Ganz einfach: das heisst Type Cast in C. Also Daten casten.


Unflatten from String in C - dalb - 12.06.2008 17:13

' schrieb:Ganz einfach: das heisst Type Cast in C. Also Daten casten.

Bei meinem speziellen Problem wird ein Cluster geflattet. Das heißt ich habe verschiedene Datentypen. Werden diese irgendwie getrennt, so dass ich herausfinden kann wann ich wie casten muss?


Unflatten from String in C - eg - 12.06.2008 17:30

' schrieb:Bei meinem speziellen Problem wird ein Cluster geflattet. Das heißt ich habe verschiedene Datentypen. Werden diese irgendwie getrennt, so dass ich herausfinden kann wann ich wie casten muss?


Also du machst dir eine Struktur in C und castest deinen LV-Cluster auf diese Struktur.

struct LV
{
float Wert1;
float Wert2;
}

LV(*Clusterdaten);

dann kannst du mit

Puffer.Wert1

und

Puffer.Wert2


auf die Daten zugreifen.

Also nicht auf meine Syntax achten, die muss nicht unbedingt stimmen Big Grin


Unflatten from String in C - dalb - 12.06.2008 19:12

Dankeschön!!

ich melde mich am Wochenende nochmal, ob ich es hinbekomme oder noch Hilfe brauche


Unflatten from String in C - rolfk - 12.06.2008 23:21

' schrieb:Dankeschön!!

ich melde mich am Wochenende nochmal, ob ich es hinbekomme oder noch Hilfe brauche

Wenn es wirklich nur ein festes Fromat ist dann funktioniert das was eg angegeben hat. Aber wenn die Flattened Data auch variable sized Elemente enthält (strings und arrays) wirds etwas komplizierter. Dann befindet sich vor diesen Elementen für jede Dimension noch ein int32 der die Anzahl der Elemente im Array oder String angibt.

Zudem normalisiert LabVIEW alle Daten beim Flatten/Unflatten/Casten zu/nach Big Endian (MSB first) Format. Da Du Dein C Programm wohl auf einer x86 Plattform schreiben willst wird die die Daten aber gerne im Little Endian (LSB first) Format sehen wollen. Also bei allen 16 bit integers noch die Bytes switchen und bei 32 bit integers zusätzlich auch noch die Words.

Und wenn die Daten noch in verschiedenen Formaten kommen können dann wirds echt kompliziert. Da gehe ich jetzt nicht weiter drauf ein. Ein guter Algorithmus sollte dann den Typedescriptor von der Flatten Funktion als Eingang bekommen und diesen parsen und die Daten dann schön gemäss dieser Formatbeschreibung auspacken. Das gibt einen schön komplizierten rekursiven Algorithmus.

Rolf Kalbermatter


Unflatten from String in C - eg - 12.06.2008 23:27

' schrieb:Wenn es wirklich nur ein festes Fromat ist dann funktioniert das was eg angegeben hat. Aber wenn die Flattened Data auch variable sized Elemente enthält (strings und arrays) wirds etwas komplizierter. Dann befindet sich vor diesen Elementen für jede Dimension noch ein int32 der die Anzahl der Elemente im Array oder String angibt.

Zudem normalisiert LabVIEW alle Daten beim Flatten/Unflatten/Casten zu/nach Big Endian (MSB first) Format. Da Du Dein C Programm wohl auf einer x86 Plattform schreiben willst wird die die Daten aber gerne im Little Endian (LSB first) Format sehen wollen. Also bei allen 16 bit integers noch die Bytes switchen und bei 32 bit integers zusätzlich auch noch die Words.

Und wenn die Daten noch in verschiedenen Formaten kommen können dann wirds echt kompliziert. Da gehe ich jetzt nicht weiter drauf ein. Ein guter Algorithmus sollte dann den Typedescriptor von der Flatten Funktion als Eingang bekommen und diesen parsen und die Daten dann schön gemäss dieser Formatbeschreibung auspacken. Das gibt einen schön komplizierten rekursiven Algorithmus.

Rolf Kalbermatter


Stimmt alles, aber lass zuerst das erste machen. Dann kommen bestimmt noch weitere Fragen.
Man kann Size abschalten und Little Endian einschalten. Wenn es wirklich nicht mehr weiter geht dann, kann man Clusterelemente getrennt flatten und mit Append String zusammenfügen. Es sind also schon Tricks. Aber vielleicht seht es beim dalb nicht so schwer aus und er brauch solche Kleinigkeiten nicht zu wissen.


Unflatten from String in C - rolfk - 13.06.2008 07:52

' schrieb:Stimmt alles, aber lass zuerst das erste machen. Dann kommen bestimmt noch weitere Fragen.
Man kann Size abschalten und Little Endian einschalten. Wenn es wirklich nicht mehr weiter geht dann, kann man Clusterelemente getrennt flatten und mit Append String zusammenfügen. Es sind also schon Tricks. Aber vielleicht seht es beim dalb nicht so schwer aus und er brauch solche Kleinigkeiten nicht zu wissen.

Hängt immer davon ab welche LabVIEW Version verwendet wird. Vor 8.0 war die Wahl der Endianess keine Option. Zudem sind nur vorangestellte Size Integers optional. Aber der ursprüngliche Poster hatte es ausdrücklich über einen Cluster und ein String innerhalb eines Clusters beispielsweise wird immer einen vorangestellten Size haben.

Rolf Kalbermatter


Unflatten from String in C - dalb - 14.06.2008 17:51

Ich habe leider immer noch keine Ahnung wie ich vorgehen soll.

Die Daten bestehen immer aus einem String gefolgt von einem Value. Aber da die Strings und auch die Values wohl kaum die gleiche Länge haben und auch kein Trennzeichen eingefügt ist, weiß ich nicht wie ich entscheiden soll, wann ich was als String und wann als Value interpretieren soll. Den DAtentyp Value verstehe ich sowieso noch nicht so ganz. ISt da noch irgendwo versteckt welcher Datentyp das wirklcih ist?

So sehen meine Daten aus, die ich zu interpretieren habe: Start Position (µm)*@P36@A1x6@A1y6@A1z11End Position (µm)4@P36@A1x6@A1y6@A1z1B

LEtztendlich benötige ich die Daten in Matlab. ICh glaube der Umweg über C ist gar nicht nötig.


Unflatten from String in C - dc6xs - 14.06.2008 18:21

' schrieb:LEtztendlich benötige ich die Daten in Matlab. ICh glaube der Umweg über C ist gar nicht nötig.

Wenn LV und Matlab auf dem selben Rechner installiert sind, nimm doch den Matlab-Knoten, übergebe mit dem die Daten an Matlab und führe dein Matlab-Script dort aus.

Oder lass LV und Matlab per Socket oder ähnlichem kommunizieren.

Gruß,
Robert