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 

Binär-String deserialisieren



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!

11.02.2013, 16:11
Beitrag #1

Lessy2205 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 65
Registriert seit: Oct 2010

2011
2011
DE



Binär-String deserialisieren
Hallo zusammen,

ich brauche Eure Hilfe, liebe Gurus des Forums!

Ich habe ein Problem beim Parsen eines Binär-Strings, und zwar

ein Messgerät liefert mir die Messdaten im Binärformat. Diesen String möchte ich deserialisieren mittels der "String deserialisieren"-Funktion! Alles was mit UINT 16 klappt wunderbar (s. Anhang), außer CHAR (String incl. End Of String character). In der Definition des Binär-Strings steht folgendes:

Byte Nr: 1,2 Format: UINT16 Inhalt: 0-standby.....usw.
....
.
.
Byte Nr: 29...34 Format: CHAR Inhalt: Substanzname


Byte Nr: 35,36 Format: UINT16 Inhalt: 0-....usw.
und ab hier funktioniert bei mir nicht. Ich komme nicht weiter(((((Es wird nicht's angezeigt, obwohl die Substanz erkannt wurde. Was ich an der Stelle falsch mache??

Ich freue mich sehr auf Euren Antwort und bin für jeden Typ dankbar!

Gruß

Lessy


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
11.02.2013, 16:21 (Dieser Beitrag wurde zuletzt bearbeitet: 11.02.2013 16:28 von Kiesch.)
Beitrag #2

Kiesch Offline
LVF-Stammgast
***


Beiträge: 412
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04519
Deutschland
RE: Binär-String deserialisieren
Ich nehme mal an dass die Datenquelle keinen serialisierten Labview Cluster übermittelt sondern eben einfach serialisierte Daten nach dem von dir angegebenen Muster.

Heist: Das kannst du so nicht zwingend einfach über nen Labview - Cluster modellieren.

Soweit ich weist musst du wirklich den String entsprechend zerteilen (selbst) und dann die Typecasts machen die du brauchst (ergo: Wenn die ersten 6 Bytes 3 U16 entsprechen, dann trennst du die ab und castest die auf U16, wenn danach nen String kommt der 5 zeichen Lang ist, dann musst du die 5 zeichen abtrennen und casten auf nen String etc. pp.).

Denke mal hauptsächlich bricht das bei dir weil labview vermutlich ne Angabe zur String länge erwartet die nicht kommt (könnte mir vorstellen die wird als I16 / I32 abgelegt und das würde in deinem Fall nen negativen Wert ergeben - das ist aber nur geraten).

Simpel gesagt: Woher soll Labview denn "wissen" dass dein String an der Stelle 5 zeichen lang ist?

Bottom Line:

Wenn du nicht einen serialisierten Cluster als Datenquelle hast, dann musst du den selbst parsen.

*edit*
Achja, dass vielleicht auch nochmal: Du kannst mehrere Aufeinanderfolgende identische (Typ z.B. U16) Elemente FESTER LÄNGE natürlich auch gleichzeitig abtrennen und dann auf nen Array casten. Wenn du das mit deserialisieren machst musst du darauf achten, dass "Array / String Länge anhängen" auf False ist (da der sonst die erste Zahl als länge des Arrays interpretiert). Aber wie gesagt nochmal: Das zerlegen des Strings musst du selbst übernehmen (nach den dir bekannten Vorgaben).

Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.02.2013, 19:35 (Dieser Beitrag wurde zuletzt bearbeitet: 11.02.2013 19:43 von Lucki.)
Beitrag #3

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Binär-String deserialisieren
In der Hilfe steht:
Array- oder String-Größe voranstellen? gilt nur für Daten von nicht hierarchischen Elementen. Arrays und Strings in hierarchischen Datentypen wie Clustern enthalten immer Angaben zur Größe.

Also bei einem Cluster bei "String-Länge voranstellen" irgendwas eingeben - man besten gar nichts.
Von den Ursprungsdaten sollte vor der Serialisierung ein Cluster gebildet werden. Dann wird vor dem String die Länge mit übergeben. Offensichtlich ist das bei Dir nicht der Fall. (Diesen entscheidenden Teil hast Du sauber ausgeblendet, Du wolltest es den "Gurus" nicht zu einfach machen Big Grin)

Umständlichere, weniger flexible Möglichkeit: Du manipulierst den ankommenden String und fügst vor dem 6-byte String die 4 Byte Stringlänge "\00\00\00\06" ein. Die wird nämlich bei einem Cluster erwartet. Dann wie gehabt deserialisieren.
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.02.2013, 14:54 (Dieser Beitrag wurde zuletzt bearbeitet: 12.02.2013 15:07 von Lessy2205.)
Beitrag #4

Lessy2205 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 65
Registriert seit: Oct 2010

2011
2011
DE



RE: Binär-String deserialisieren
Erstmal Danke für die schnellen Antwort, Kiesch

mit dem Thema "Serialisieren und deserialisieren" war ich noch nicht beschäftigt und kenne mich hier nicht gut aus. Ich verwende nur das, was ich im Internet gefunden habe. Aber das macht nicht viel aus((((

(11.02.2013 16:21 )Kiesch schrieb:  Soweit ich weist musst du wirklich den String entsprechend zerteilen (selbst) und dann die Typecasts machen die du brauchst (... wenn danach nen String kommt der 5 zeichen Lang ist, dann musst du die 5 zeichen abtrennen und casten auf nen String etc. pp.).


wie macht man das? gibt es ein Beispiel, wie man die Zeichen abtrennt?

(11.02.2013 16:21 )Kiesch schrieb:  Simpel gesagt: Woher soll Labview denn "wissen" dass dein String an der Stelle 5 zeichen lang ist?

Wie soll ich das (Stringlänge) festlegen (n-zeichen-String)?
Bottom Line:
(11.02.2013 16:21 )Kiesch schrieb:  Wenn du nicht einen serialisierten Cluster als Datenquelle hast, dann musst du den selbst parsen.

Wie erkenne ich, dass ich als Datenquelle keinen serialisierten Cluster bekomme??

Danke im Voraus.

Gruß

Lessy

Danke Dir, Lucki für Deine Antwort,

ich kann schon damit was anfangen!!

(11.02.2013 19:35 )Lucki schrieb:  Von den Ursprungsdaten sollte vor der Serialisierung ein Cluster gebildet werden. Dann wird vor dem String die Länge mit übergeben. Offensichtlich ist das bei Dir nicht der Fall.

Den Cluster mit allen Parameter, die in der Dokumentation stehen bzw. bekommen werden, habe ich erstellt. Aber mit dem String, der 6-Byte lang ist, ist mir nicht ganz klar, wie man das richtig machen soll, um den Wertauf der Anzeige hinzukriegen??

(11.02.2013 19:35 )Lucki schrieb:  (Diesen entscheidenden Teil hast Du sauber ausgeblendet, Du wolltest es den "Gurus" nicht zu einfach machen Big Grin)

Auf keinem Fall, Entschuldigung!

(11.02.2013 19:35 )Lucki schrieb:  Umständlichere, weniger flexible Möglichkeit: Du manipulierst den ankommenden String und fügst vor dem 6-byte String die 4 Byte Stringlänge "\00\00\00\06" ein. Die wird nämlich bei einem Cluster erwartet. Dann wie gehabt deserialisieren.

Wie kann ich die 4-Byte einfügen?

Danke im Voraus.

Gruß

Lessy


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.02.2013, 15:21
Beitrag #5

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Binär-String deserialisieren
Hier ein Screenshot zur Erklärung von Kiesch:
   

Das ist das Standard-Vorgehen, wenn man irgendwelche Daten in Binärform von irgendwo erhält. Man unterteilt das Ganze in die Abschnitte, die man gut "manipulieren" kann.

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
12.02.2013, 15:32 (Dieser Beitrag wurde zuletzt bearbeitet: 13.02.2013 07:58 von Lucki.)
Beitrag #6

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Binär-String deserialisieren
Due hängst 2 neue Bilder an, ohne etwas dazu zu sagen. Falls das rechte Bild der Cluster ist, den Du serialisierst, dann würde das nicht zu dem in Posting #1 erklärten Binärstring passen. Denn bei der Serialisierung würde automatisch die Zeichenlänge zu jedem String mit eingefügt.
Der String würde also nicht so:

Byte Nr: 1,2 Format: UINT16 Inhalt: 0-standby.....usw.
....
Byte Nr: 29...34 Format: CHAR Inhalt: Substanzname
Byte Nr: 35,36 Format: UINT16 Inhalt: 0-....usw.

sondern so aussehen:

Byte Nr: 1,2 Format: UINT16 Inhalt: 0-standby.....usw.
....
Byte Nr: 29...32: Stringlänge
Byte Nr: 23...37 Format: CHAR Inhalt: Substanzname

Byte Nr: 38,39 Format: UINT16 Inhalt: 0-....usw.


Wenn der String aus dem Messgerät eines Fremdherstellers kommt, dann sieht die Sache anders aus, dann muß man es so machen wie im Beispiel von Jens.
Oder man fügt die Stringlänge noch ein. Dann kommt man ganz einfach zu dem von Dir gewünschten Cluster. Aber leider muss man die Bytes noch tauschen, und das geht nur mit zusätzlichem Code (die For-Schleife im angehängtem Beispiel).

11.0 .vi  Serialisierung.vi (Größe: 13,19 KB / Downloads: 280)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
15.02.2013, 09:00
Beitrag #7

Lessy2205 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 65
Registriert seit: Oct 2010

2011
2011
DE



RE: Binär-String deserialisieren
(12.02.2013 15:21 )jg schrieb:  Hier ein Screenshot zur Erklärung von Kiesch:


Das ist das Standard-Vorgehen, wenn man irgendwelche Daten in Binärform von irgendwo erhält. Man unterteilt das Ganze in die Abschnitte, die man gut "manipulieren" kann.

Gruß, Jens

Ich bedanke mich ganz herzlich für die Erklärung, wie man einen string zerteilt und für den Screenshot!!!! Das hat mir sehr geholfen!!! Superrr!

Gruß

Lessy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.02.2013, 10:06
Beitrag #8

Lessy2205 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 65
Registriert seit: Oct 2010

2011
2011
DE



RE: Binär-String deserialisieren
(12.02.2013 15:32 )Lucki schrieb:  Oder man fügt die Stringlänge noch ein. Dann kommt man ganz einfach zu dem von Dir gewünschten Cluster. Aber leider muss man die Bytes noch tauschen, und das geht nur mit zusätzlichem Code (die For-Schleife im angehängtem Beispiel).

Danke, Lucki, für das Beispiel. Damit kann ich weiter vorgehen!

Gruß

Lessy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.10.2019, 15:02
Beitrag #9

hansi9990 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 180
Registriert seit: Mar 2015

2019
2014
DE

96xxx
Deutschland
RE: Binär-String deserialisieren
Hi

Da ich ein ähnlichers Problem hatte bin ich bei meiner Suche auf diesen Beitrag hier gestoßen.
Auf Basis der Antwort von Lucki habe ich mir das mal angesehen und für dieses Problem ein paar VI's gebaut die ich hier mal für künftige Fragesteller in der LV2016 Version anhänge.
So können Strings und Arrays in Cluster deserialisiert werden, man muss allerdings den Index und die Länge der Strings und Arrays kennen.
Es ist zwar nicht das Optimum aber es geht eben mal nicht anders wenn die Quelle keine Parameter zur String- oder Arraylänge mitsendet.


Angehängte Datei(en) Thumbnail(s)
   

0.0 .zip  Datenverarbeitung.zip (Größe: 20,17 KB / Downloads: 154)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Dezimalzahl in Binär darstellen Natalie1984 3 4.282 01.07.2019 19:08
Letzter Beitrag: Natalie1984
  Gray Code in Binär - SSI Encoder Nullstrom 11 12.431 19.12.2014 11:42
Letzter Beitrag: Nullstrom
  Int > binär >cluster BCG 10 9.163 14.03.2014 13:26
Letzter Beitrag: rolfk
  16 bit binär String mit 0 Danyang 3 4.567 24.04.2013 12:32
Letzter Beitrag: Danyang
  Zahl to binär String Napoleon 4 10.663 26.12.2010 14:08
Letzter Beitrag: Napoleon
  Little/Big Endian Flag in Binär Datei Oleg 4 5.809 10.02.2010 11:48
Letzter Beitrag: Oleg

Gehe zu: