01.02.2013, 13:21
(Dieser Beitrag wurde zuletzt bearbeitet: 01.02.2013 13:22 von AgesKing.)
Beitrag #1
|
AgesKing
LVF-Neueinsteiger
Beiträge: 8
Registriert seit: Jan 2013
2011
2011
DE
|
verschiedene Datentypen über TCP/IP / UDP
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.
|
|
|
01.02.2013, 13:25
(Dieser Beitrag wurde zuletzt bearbeitet: 01.02.2013 13:29 von Trinitatis.)
Beitrag #2
|
|
|
01.02.2013, 13:49
(Dieser Beitrag wurde zuletzt bearbeitet: 01.02.2013 13:53 von Lucki.)
Beitrag #3
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
RE: verschiedene Datentypen über TCP/IP / UDP
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 ), 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 )
|
|
|
01.02.2013, 13:50
(Dieser Beitrag wurde zuletzt bearbeitet: 01.02.2013 13:51 von GerdW.)
Beitrag #4
|
GerdW
______________
Beiträge: 17.469
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: verschiedene Datentypen über TCP/IP / UDP
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...
|
|
|
01.02.2013, 14:29
Beitrag #5
|
|
|
01.02.2013, 14:40
Beitrag #6
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
RE: verschiedene Datentypen über TCP/IP / UDP
Ab würden sich vielleicht auch die "Network-Stream"-VIs anbieten.
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.
|
|
|
01.02.2013, 15:06
Beitrag #7
|
|
|
01.02.2013, 15:22
Beitrag #8
|
|
|
01.02.2013, 16:34
(Dieser Beitrag wurde zuletzt bearbeitet: 01.02.2013 16:35 von AgesKing.)
Beitrag #9
|
AgesKing
LVF-Neueinsteiger
Beiträge: 8
Registriert seit: Jan 2013
2011
2011
DE
|
RE: verschiedene Datentypen über TCP/IP / UDP
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
|
|
|
01.02.2013, 16:42
(Dieser Beitrag wurde zuletzt bearbeitet: 01.02.2013 16:43 von jg.)
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
RE: verschiedene Datentypen über TCP/IP / UDP
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:
Bei Bedarf musst du noch die Reihenfolge der Bytes drehen, falls du im C++ Programm "little endian" erwartest.
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.
|
|
|
| |