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 

C-Struct über TCP an Labview senden



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!

29.10.2011, 14:17
Beitrag #4

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: C-Struct über TCP an Labview senden
(27.10.2011 15:13 )dheyner schrieb:  Hallo!

Ich habe ein Instrument, dass ständig über einen LAN-Anschluss Daten sendet.
Die Daten sind in einer C-Struktur zusammengefasst:

struct data_str
{
long DataType;
long l_arr[3];
float f_arr[14];
};

Ich habe versucht, aus dem Output vom "TCP-Read"-VI mit dem "Unflatten From String"-VI mit einem
Labview-Cluster am "type"-Input die Daten zur weiteren Verwendung umzuwandeln.
Dabei kommt leider aber nur Müll raus und die Fehlermeldung:

Unflatten or byte stream read operation failed due to corrupt, unexpected, or truncated data.

Kann mir jemand dabei helfen?

Mir ist auch nicht ganz klar, wieviele Bytes ich beim TCP-read auslesen soll. 72 (nur die reinen Daten) oder
80 (Daten + Array-sizes)?

Danke schonmal!

Waahrscheinlich versuchst Du einen Cluster zu bauen mit einem int32, einem array mit int32 und einem array mit float. Aber das ist eben nicht dasselbe wie eine C Struktur mit FIXED Size arrays. Fixed Size arrays werden von einem C Compiler inlined, d.h. sie sind identisch zu einem LabVIEW Cluster der entsprechend viele Elemente enthält. Du solltests also einen LabVIEW Cluster bauen, der eine int32, ein Cluster mit 3 * int32 und ein weiterer Cluster mit 14 single precision Floats enthält. Und nun kannst Du auch Typecast verwenden, was bei Clutern mit Arrays eben nicht geht. Flatten funktioniert aber auch und hat den Vorteil dass Du direkt die Endianess der Daten angeben kannst. LabVIEW verwendet Big Endian Format, aber wenn Dein C Programm auf einem anderen System dann einem PPC MAc läuft, kommen die Daten mit grosser Wahrscheinlichkeit im Little Endian Format. Bei Verwendung der Typecast Funktion musst Du das Swappen der Bytes allenfalls selber machen, indem der reultierende Cluster noch durch Swap Bytes und Swap Words Funktionen geführt wird.

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
30
Antwort schreiben 


Nachrichten in diesem Thema
RE: C-Struct über TCP an Labview senden - rolfk - 29.10.2011 14:17

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  CancaseXL mit Labview senden/empfangen 8 byte Botschaft luna 7 6.254 05.07.2021 16:47
Letzter Beitrag: luna
  Arduino -> LabVIEW Kommunikation über TCP/IP Herrx 2 4.120 08.07.2019 06:35
Letzter Beitrag: Herrx
  Über CAN hex-File mit Doppelpunkt senden Slev1n 4 4.768 08.11.2014 16:24
Letzter Beitrag: Slev1n
  NI OPC Server Configuration über LabView steuern ygao 0 4.187 08.07.2014 15:04
Letzter Beitrag: ygao
  Über Bluetooth einen Befehl zum SMS versenden ans Smartphone senden Heinz 1 5.164 07.07.2014 14:21
Letzter Beitrag: Heinz
  16 Bit Messdaten per Bluetooth / 8Bit uP an LabView senden roflbob 1 4.440 21.05.2014 21:29
Letzter Beitrag: GerdW

Gehe zu: