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!

27.10.2011, 15:13
Beitrag #1

dheyner Offline
LVF-Neueinsteiger


Beiträge: 2
Registriert seit: Oct 2011

2010
-
DE_EN



C-Struct über TCP an Labview senden
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!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
27.10.2011, 17:41
Beitrag #2

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: C-Struct über TCP an Labview senden
Schon mal die Rohdaten angeschaut, indem du dir den empfangenen String im HEX-Format anzeigen lässt?
Oder die Kommunikation mit einem Tool wie z.B. Wireshark abgefangen und protokolliert?
Mglw. passt auch die Anordung der Bytes innerhalb einen I32 nicht? LV verwendent MSB als erstes.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.10.2011, 12:48
Beitrag #3

BNT Offline
LVF-Freak
****


Beiträge: 744
Registriert seit: Aug 2008

5.0 - 22Q3
1999
EN

64291
Deutschland
RE: C-Struct über TCP an Labview senden
Hi
Unflatten froam String hilft hier nicht. Du musst einen Type-Cast benutzen, s.h. LV-Hilfe.
Dabei must noch möglicherweise Bytes und oder Words swappen je nach herkunft der Daten. Stichwort: Little/Big-Endian.

Gruß Holger

NI Alliance Partner & LabVIEW Champion
GnuPG Key: 6C077E71, refer to http://www.gnupg.org for details.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
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
31.10.2011, 15:50
Beitrag #5

dheyner Offline
LVF-Neueinsteiger


Beiträge: 2
Registriert seit: Oct 2011

2010
-
DE_EN



RE: C-Struct über TCP an Labview senden
Danke für die Antworten. Nachdem ich rausbekommen habe, wie groß die
C-Struktur im Speicher war, habe ich das Bytearray zerpflückt und
über "unflatten from string" benutzt. Das hat das Problem dann gelöst.
Nicht elegant aber läuft...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


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

Gehe zu: