LabVIEWForum.de - verschiedene Datentypen über TCP/IP / UDP

LabVIEWForum.de

Normale Version: verschiedene Datentypen über TCP/IP / UDP
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Erstmal hallo an alle,
ich bin neu in der Labview szene und hätte gleich eine Frage:

Ich möchte einige Messergebnisse über UDP oder TCP/Ip verschicken.

Erstmal kann ich natürlich die verschiedenen Werte in einen String formatieren (Wert formatieren (Funktion) ). Dabei gibts sowohl integer werte als auch fließkomma werte. die verschiedenen strings kann ich dann mit (Strings verknüpfen (Funktion)) zu einem langen String verknüpfen und der client bekommt dann einen langen string.

das wäre z.B.:
100005,44432,4566565654,554545454100000

Und da die anzahl der vorkomma und nachkomma stellen variabel ist kann man schlecht wissen wo man trennen muss.

Gibts eine Funktion, der man sagen kann:

"die ersten 4 byte sind ein integer, dann kommt ein float, dann wieder ein integer" oder geht das nach einer string umwandlung nicht mehr.

im idealfall würde ich wirklich gerne einen string verschicken, mit festen datentypen die der rechner wieder aufdröseln kann.




also meine fragen:
a) Gibt es ausser string noch eine möglichkeit viele verschiedene datentypen (int float double) in einem paket über udp zu verschicken?
b) Ist es möglich einen String mit unbekannten trennpunkten wieder aufzudröseln wenn bekannt ist welcher datentyp das ursprünglich war?

das ganze soll später nicht mehr mit labview sondern mit einem c programm gemacht werden. (also der client, server bleibt labview)

vielen Dank schonmal allein fürs durchlesen der langen Frage.
Hallo AgesKing,

So viel ich weiß, kannst du nur Strings verschicken. Du kannst aber mit der Funktion in String formatieren festlegen, dass jeder Wert exakt n Zeichen lang ist. So könntest du es einfacher zerlegen beim Einlesen, sendest aber Fülldaten mit.

Du kannst aber auch mit den Variantfunktionen mal rumspielen.

Gruß, Marko
Du kannst dir ja auch Trennzeichen selbst schaffen und beim Einlesen nach diesen parsen bzw. deinen String in ein Array zerlegen lassen.
Ich würde bei String beiben, denn wo sollte da das Problem sein?
Das Trennen lässt sich immer machen, aber es erleichtert die Sache ungemein, wenn es zwischen den Daten ein Trennzeichen gibt, und am Ende eines Datensatzes ein Endezeichen. Dann ist eine unterschiedliche Anzahl von Vor/Nachkommastellen bei der Konvertierung überhaupt kein Problem.
Labview default ist: Trennzeichen: TAB, Endezeichen: LF (Zeilenende), aber das können auch andere Zeichen sein

Dein Beispiel
100005,44432,4566565654,554545454100000
ist ohne Erläuterung "nicht hilfreich" (Originalzitat A. Merkel zu einem Buch von Sarrazin Big Grin), da weiß man nicht mal, was die Kommas bedeuten: Dezimalzeichen oder Trennzeichen.
Vorschlag: Poste ein oder mehrere String-Beispiele und beschreibe sie, und Du bekommst postwendend die Konvertierung präsentiert. (Von Trinitatis, nicht von mir Big Grin)
Hallo Agesking,

Zitat:100005,44432,4566565654,554545454100000
Und da die anzahl der vorkomma und nachkomma stellen variabel ist kann man schlecht wissen wo man trennen muss.
Und ich dachte, die Kommata wären die Trennzeichen in deinem String...

Zitat:Gibts eine Funktion, der man sagen kann: "die ersten 4 byte sind ein integer, dann kommt ein float, dann wieder ein integer" oder geht das nach einer string umwandlung nicht mehr. im idealfall würde ich wirklich gerne einen string verschicken, mit festen datentypen die der rechner wieder aufdröseln kann.
- Du kannst U32/I32-Integer ohne Rundungsfehler in DBL-Werten speichern, dem Client kann also der Datentyp egal sein (solange du nicht U64/I64 verwendest)
- Nein, eine solche Funktion gibt es nicht. Woran sollte die Funktion den Datentyp erkennen?
- Falls dein Client LabVIEW verwendet, bist du aufgrund der strikten Typisierung an feste Datentypen gebunden. Du kannst nicht einmal DBL- und ein andermal I32-Werte ausgeben...

P.S.: Ist dir schon mal aufgefallen, dass deine Tastatur defekt ist? Die Umschalttasten zeigen beide Ausfallerscheinungen...
@Lucki
So lange könntest du deine Finger doch niemals stillhaltenAss

Aber ich fürchte, Gerd käme uns beiden zuvor.


Gruß, Marko
Ab lv11_img würden sich vielleicht auch die "Network-Stream"-VIs anbieten.

Gruß, Jens
(01.02.2013 14:29 )Trinitatis schrieb: [ -> ]@Lucki
So lange könntest du deine Finger doch niemals stillhaltenAss
Aber ich fürchte, Gerd käme uns beiden zuvor.
Gruß, Marko
Offtopic2
Ja, hier es gibt hier eben keine auf User-Rückmeldung basierende Qualitätsmessung, man arbeitet sich hier allein mit der Menge der Beiträge hoch.
Aber es gilt auch: Wer zuletzt lacht.. Will sagen: Der erste Beitrag muss nicht der beste sein, und dann gibt es nachzubesseren.
Na dann pass´ich mal auf, dass ich nicht durch die Decke schieße!
Waoh viele Antworten, ist ja echt nett hier :-)

Also ich hoffe ich hab das meisten auch verstanden.

Die Vorschläge "aufzufüllen" bzw. Trennzeichen zu setzen scheint mir sinnvoll. Mein Client soll jedoch in c++ geschrieben werden und der erwartet ganz bestimmte daten.
Ein Beispiel:

ich möchte verschicken:

int: 23
double: 2,340
double: 120,23
double: -0,23


und der c++-client will dann wirklich in den ersten 4 bytes den int haben, in den zweiten 8 bytes den double, u.s.w.
also kann ich da schlecht Trennzeichen einbauen.

Code:
so solltes ankommen:
Byte 0: 0x0X2A
Byte 1: 0x0
Byte 2: 0x0
Byte 3: 0x0
Byte 4: 0x0
Byte 5: 0x0
Byte 6: 0x0
Byte 7: 0x0
Byte 8: 0x0XCD
Byte 9: 0x0XCC
...
...


Ich bräuchte einen string der keine ASCII-Zeichen beinhaltet sondern wirklich die einzelnen bytes.

Es gibt ja die Funktion: String nach Byte-Array (Funktion)
Code:
Wandelt einen String in ein Array aus vorzeichenlosen Bytes um.
Jedes Byte im Array hat den ASCII-Wert des dazugehörigen Zeichens im String
Aber vermutlich hilft die mir nicht oder?

vielen Dank schonmal an euch alle.
AgesKing


/edit: falls ich was schlecht erkläre, oder übersehen hab, nehmts mir nicht krumm. ich hab versucht alles zu verstehen
Aha, wenn ich richtig verstehe, brauchst du eher Type Cast, da du bei int immer 4 Byte und bei DBL immer 8 Byte senden willst:
[attachment=43359]
Bei Bedarf musst du noch die Reihenfolge der Bytes drehen, falls du im C++ Programm "little endian" erwartest.

Gruß, Jens
Seiten: 1 2
Referenz-URLs