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!
01.02.2013, 13:21 (Dieser Beitrag wurde zuletzt bearbeitet: 01.02.2013 13:22 von AgesKing.)
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.
Anzeige
01.02.2013, 13:25 (Dieser Beitrag wurde zuletzt bearbeitet: 01.02.2013 13:29 von Trinitatis.)
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.
01.02.2013, 13:49 (Dieser Beitrag wurde zuletzt bearbeitet: 01.02.2013 13:53 von Lucki.)
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.)
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 )Trinitatis schrieb: @Lucki
So lange könntest du deine Finger doch niemals stillhalten
Aber ich fürchte, Gerd käme uns beiden zuvor.
Gruß, Marko
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.
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:
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.
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!