LabVIEWForum.de
String Zerlegen indem man MSB in einem Byte erkennt - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: String Zerlegen indem man MSB in einem Byte erkennt (/Thread-String-Zerlegen-indem-man-MSB-in-einem-Byte-erkennt)

Seiten: 1 2


String Zerlegen indem man MSB in einem Byte erkennt - labuser2010 - 24.06.2010 09:05

Über die RS232 Schnittstelle erhalte ich Daten. Nun möchte ich mir ein Protokoll bastelln.

In jedem Byte soll das MSB vorbehalten werden, um zu erkennen (1 gesetzt) dass das Protokoll von neuem losgeht. Habe bis jetzt nur Funktionen gefunden die ein ganzes Zeichen in einem Byte erkennen. Auf ein Zeichen kann ich mich bei dieser Realisierung jedoch nicht festlegen, da im Startbyte auch schon Daten übertragen werden, die sich ändern. Also in C würde ich das Ganze byte einfach "verunden" um den relevanten Teil herauszubekommen. Habe aber noch nicht herausgefunden wie man das in LabVIEW macht. Ansonsten muss ich mir eine andere Protokollstruktur ausdenken.

Vielen Dank schon mal für die Hilfe


String Zerlegen indem man MSB in einem Byte erkennt - GerdW - 24.06.2010 09:39

Hallo labuser,

na dann schließ doch das Byte einfach mal an ein AND an. Und an den zweiten Eingang des ANDs eben eine 0x80-U8-Konstante...

Wieso denkst du, LabVIEW könnte keine Bytes verUNDen?


String Zerlegen indem man MSB in einem Byte erkennt - Lucki - 24.06.2010 09:42

Der entscheidende Tip ist: Die Funktionen UND, OR... funktionieren auch mit Ganzzahlen bitweise.
Hab mal für die Sendeseite etwas gemacht, und gehe davon aus, daß Du das dann auf der Empfangsseite selber hinbekommst:
(Die binäre Zahlendarstellung muß natürlich nicht sein)

[attachment=27345]


String Zerlegen indem man MSB in einem Byte erkennt - labuser2010 - 24.06.2010 09:53

so habe ich es mit auch schon gedacht, wenn ich aber diesen part suchen möchte zum Beispiel mit der Funktion "Muster Suchen" gibt es hier keine Möglichkeit nach dem MSB zu suchen. wie kann man das denn am besten machen??? Also Problem ist es ja dieses byte erstmal zu suchen wo das msb = 1 ist.


String Zerlegen indem man MSB in einem Byte erkennt - labuser2010 - 24.06.2010 10:02

Oder man verUNDet erstmal alle bytes und legt dann an die funktion muster suchen "10000000b" ran dann findet er ja auf jeden fall den anfang. jetzt muss man nur irgendwie das noch so umsetzen, dass das auf die nicht verUNDeten daten umgesetzt wird. aber wie?


String Zerlegen indem man MSB in einem Byte erkennt - GerdW - 24.06.2010 10:16

Hallo labuser,

"Also Problem ist es ja dieses byte erstmal zu suchen wo das msb = 1 ist."

Wo ist das Problem? (Ich denke, das Problem liegt darin, dass du partout mit Strings/Chars arbeiten willst, anstatt mit einem U8-Array - was aber defacto das Gleiche ist!)
Erst machst du ein "AND 0x80" mit deinem Byte-Array, dann ein "= 0x80" mit dem Array, dann suchst du ein TRUE im erhaltenen Bool-Array. Nix mit "Muster suchen"... (Wenn du die Einzelbytes in einer FOR-Loop abarbeitest, brauchst du auch die ArraySuch-Funktion nicht mehr, dann hast du dein Ergebnis schon nach dem Vergleich...)


String Zerlegen indem man MSB in einem Byte erkennt - Lucki - 24.06.2010 10:45

' schrieb:Also Problem ist es ja dieses byte erstmal zu suchen wo das msb = 1 ist.
Ganz einfach: In einer Schleife mit VisaRead immer nur ein Zeichen empfangen, und das solange, bis der Bytewert diese Zeichens größer als 127 ist. Das ist dann das gefundene Startbyte. Dann raus aus der Schleife und den Rest das Protokollstrings normal lesen.

@GerdW: Die Verwendung von Stringzeichen statt Bytes ist hier keine Frage das Wollens, sonder weil VISA-Send und -Read nur dieses Format benutzt.


String Zerlegen indem man MSB in einem Byte erkennt - labuser2010 - 30.06.2010 08:35

ich habe jetzt, weil es mir einfacher erscheint, erstmal einen formelknoten erstellt. Also eine funktion mit Ein- und Ausgang, welche mir meine Daten aufsplittet. Problem ist der Datentyp. WERT1 wurde zuvor in ein ByteArray umgewandelt.
Ich möchte wenn ich es jetzt mal in C beschreibe, wenn ich das Array anlege den ersten wert des Array prüfen ob das MSB == 1 ist,. Wenn dies der fall ist brauche ich die ersten vier werte aus dem array um daraus meine Varaiblen ADC1 und ADC2 zu erstellen.

Was fehlt hier oder was mache ich grundsätzlich falsch???

vielen Dank schonmal


String Zerlegen indem man MSB in einem Byte erkennt - labuser2010 - 30.06.2010 09:50

???? ist wahrscheinlich ein ganz einfaches problem


String Zerlegen indem man MSB in einem Byte erkennt - GerdW - 30.06.2010 10:30

Hallo labuser,

bitte nicht drängeln, wir müssen alle unsere Brötchen nebenbei verdienen (die meisten jedenfalls)...

Ich habe deinen C-Code mal versucht, nach LabVIEW umzusetzen. Ich hoffe, ich habe die Shift-Faktoren richtig umgerechnet...
[attachment=27473]
(Der andere Case ist auf Default gestellt und gibt "0" für beide Werte aus.)