INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Unflatten from String in C



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

12.06.2008, 16:15
Beitrag #1

dalb Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: Jun 2008

7.1
-
de

74731
Deutschland
Unflatten from String in C
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!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
12.06.2008, 16:20 (Dieser Beitrag wurde zuletzt bearbeitet: 12.06.2008 16:20 von eg.)
Beitrag #2

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Unflatten from String in C
Ganz einfach: das heisst Type Cast in C. Also Daten casten.

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.06.2008, 17:13
Beitrag #3

dalb Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: Jun 2008

7.1
-
de

74731
Deutschland
Unflatten from String in C
' 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?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.06.2008, 17:30 (Dieser Beitrag wurde zuletzt bearbeitet: 12.06.2008 17:31 von eg.)
Beitrag #4

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Unflatten from String in C
' 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

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.06.2008, 19:12
Beitrag #5

dalb Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: Jun 2008

7.1
-
de

74731
Deutschland
Unflatten from String in C
Dankeschön!!

ich melde mich am Wochenende nochmal, ob ich es hinbekomme oder noch Hilfe brauche
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.06.2008, 23:21 (Dieser Beitrag wurde zuletzt bearbeitet: 12.06.2008 23:22 von rolfk.)
Beitrag #6

rolfk Offline
LVF-Guru
*****


Beiträge: 2.306
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Unflatten from String in C
' 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

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.06.2008, 23:27
Beitrag #7

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Unflatten from String in C
' 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.

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.06.2008, 07:52
Beitrag #8

rolfk Offline
LVF-Guru
*****


Beiträge: 2.306
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Unflatten from String in C
' 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

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.06.2008, 17:51
Beitrag #9

dalb Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: Jun 2008

7.1
-
de

74731
Deutschland
Unflatten from String in C
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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.06.2008, 18:21
Beitrag #10

dc6xs Offline
registered alien
****


Beiträge: 762
Registriert seit: Aug 2006

6.1,7.00
2006
kA

79106
Sonstige
Unflatten from String in C
' 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

Bitte Beachten:
Die obenstehenden Texteile können unter Umständen Sarkasmus und Ironie enthalten, für nicht erkannten Sarkasmus oder nicht erkannte Ironie wird keine Haftung übernommen.

N.B.:
"Multiple exclamation marks, " he went on, shaking his head, "are a sure sign of a deseased mind." - Terry Pratchett
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Gehe zu: