LabVIEWForum.de
String in unterschiedliche Teilstrings zerlegen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenbank & File IO (/Forum-Datenbank-File-IO)
+---- Thema: String in unterschiedliche Teilstrings zerlegen (/Thread-String-in-unterschiedliche-Teilstrings-zerlegen)

Seiten: 1 2


String in unterschiedliche Teilstrings zerlegen - ThomasDipl - 04.11.2008 13:58

Hallo zusammen,

das Zerlegen eines Strings in mehrere, gleiche Teile ist mir nach Forum Hilfe gelungen :PSo sieht das ganze nun aus:

Ausgangspunkt hex-Darstellung:
0070 08D9 0101 0000 1000

Ergebnis:
00 70 08 D9 01 01 00 00 10 00

Nun muss das ganze noch in dezimal umgewandelt werden. Auch kein Problem wenn man die getrennten Bytes einzeln betrachtet. Nun muss ich aber verschiedene Bytes umrechnen.

hex_____dez
00______0
70______112
08______8
0101____257
000010__16
00______0

Sprich ich muss den String folgendermaßen trennen:
00 40 08 0101 000010 00

Wie genau mache ich das?

Im Anhang das Programm zur byteweisen Trennung.

LabVIEW 8.5


String in unterschiedliche Teilstrings zerlegen - Lucki - 04.11.2008 15:57

Die Hex-Darstellung von Strings hat meines Erachtesn nach nur mal so für Diagnosezwecke Bedeutung, aber nicht, um in einem VI etwas damit zu zu machen. Bei der Hex-Darstellung von Strings in LabVIEW hat man nach je 2 zweistellungen Hexzeichen (00..FF) eine Lücke. Das ist aber kein real existierendes Leerzeichen, sondern dient nur der übersichtlichen Gruppierung.
Das ist auch so bei Deinem zuerst genannten Hex-String im angehängten VI der Fall. Der zweite "Hex-String", auf den sich Deine Frage bezieht, kann von seine Gruppierung her nicht von LabVIEW stammen. Als Darstellung im Fragetext ist er sowieso kein Hexstring. Da ist guter Rat einfach nicht zu geben.

Ich vermute, daß Du Dich mit dieser Hex-String-Konvertierung in eine ganz falsche Richtung verrannt hast.
Am besten Du sagst mal etwas über den Hintergrund der Aufgabe, woher Deine Daten kommen, welches Format sie genau haben (und damit meine ich nicht die Darstellung in einer Anzeige, sondern die reale Bedeutung der ankommenten Bytes), und was das Endergebnis der Umformung dieser Daten sein soll.

Nochmal zur Klarstellung:
Die Hexadezimale ASCII-Darstellung einer Zahl sieht z.B. so aus:
U8: 00 .. FF
U16: 0000 .. FFFF
U32: 00000000...FFFFFFFF
Und das in der ganz normalen Stringdarstellung. Hände weg von der Darstellung "Hexadezimaler String" !!!


String in unterschiedliche Teilstrings zerlegen - ThomasDipl - 04.11.2008 16:06

Hintergrund der Aufgabe ist folgende:

Es werden hex-Daten an ein BHKW gesendet welche anhand des Befehls Messwerte in hex ausgibt. Das alles funktioniert auch super. Nur müssen eben diese byteweise Messwerte in dez umgerechnet werden um z.B. die Temperatur, Leistung,... zu bekommen. Das Problem ist eben das die Temperatur byteweise ausgegeben wird und die Leistung belegt 2 Byte. Insgesamt sind es 56 Byte die eben unterschiedlich getrennt werden müssen (mal ergeben zwei Byte ein Wert, mal drei, mal nur einer).


String in unterschiedliche Teilstrings zerlegen - Lucki - 04.11.2008 16:38

' schrieb:Hintergrund der Aufgabe ist folgende:

Es werden hex-Daten an ein BHKW gesendet welche anhand des Befehls Messwerte in hex ausgibt. Das alles funktioniert auch super. Nur müssen eben diese byteweise Messwerte in dez umgerechnet werden um z.B. die Temperatur, Leistung,... zu bekommen. Das Problem ist eben das die Temperatur byteweise ausgegeben wird und die Leistung belegt 2 Byte. Insgesamt sind es 56 Byte die eben unterschiedlich getrennt werden müssen (mal ergeben zwei Byte ein Wert, mal drei, mal nur einer).
Wenn es ein normaler HEX-String ist und daraus normale Zahlen gemacht werden sollen, dann ist das eine ganz einfache Sache:
Lv85_img[attachment=15172]


String in unterschiedliche Teilstrings zerlegen - ThomasDipl - 04.11.2008 16:59

Danke für den Versuch. Allerdings geht das so einfach nicht. Ich bekomme meine Werte in hex. Und die sind nicht mit nem Leerzeichen getrennt. Ich muss nun diese 56 Byte lange Response byteweise aufschlüsseln. Bis Byte 36 byteweise, zwischen Byte 37 und Byte 48 immer zwei Byte zusammen und danach wieder byteweise. Wie gesagt, das Problem liegt in der Trennung unterschiedlicher Byte.


String in unterschiedliche Teilstrings zerlegen - Lucki - 04.11.2008 23:10

' schrieb:Danke für den Versuch. Allerdings geht das so einfach nicht. Ich bekomme meine Werte in hex. Und die sind nicht mit nem Leerzeichen getrennt. Ich muss nun diese 56 Byte lange Response byteweise aufschlüsseln. Bis Byte 36 byteweise, zwischen Byte 37 und Byte 48 immer zwei Byte zusammen und danach wieder byteweise. Wie gesagt, das Problem liegt in der Trennung unterschiedlicher Byte.
So ganz klar ist das immer nicht. Für die Hex-Darstellung eines Bytes = 8 Bit wird ein String nit 2 Zeichen benötigt. (Um Missverständnisse auszuschließen, vemeide ich die Bezeichnung "Byte", wenn ich von den Zeichen im String rede). Mit "56byte Response" meinst Du einen ASCII-String, bestehend aus 56 Zeichen. Damit lassen sich 28 Zahlen á 8bit, oder, anderes ausgedrückt. 28 1-Byte-Zahlen, oder noch anders ausgedrückt, 28 U8-Zahlen darstellen. Die Frage ist, was Du mit "Bytes" hier meinst: Ein Zeichen des Strings oder einen einen 8-Bit-numerischen Wert, der mittels "ASCII-String Zeichenlänge 2" übertragen wird.
Ich gehe jetzt mal davon aus, daß Du Dich bei den Bytes auf die Zahlen beziehst. Und das hieße: Mit dem 56 Zeichen langen String werden übertragen;
Zeichen 1..36: 18 Zahlenwerte U8-Format
Zeichen 37..48: 3 Zahlenwerte U16-Format
Zeichen 49..56: 4 Zehlenwerte U8-Format.
Dann würde die Dekodierung so aussehen:
[attachment=15181]

Falls das immer noch nicht das ist was Du brauchst, dann bitte keine neuen Worterklärungen, sondern einfach dies: poste ein VI mit nichts als 2 unverdrahteten Anzeigen/Bedienelementen mit darin enthaltenen Standardwerten.
Element 1: ein Beispielstring, so wie er empfangen wird
Element 2: die Zahlen oder der/die String(s), die du als Endergebnis sehen möchtest.
Als Antwort erhälst Du postwendend die dazwischenliegende Verdrahtung.


String in unterschiedliche Teilstrings zerlegen - ThomasDipl - 05.11.2008 13:11

Lucki,

in Deinem Screenshot hast du denn hex-String allerdings als "Normale Anzeige" geschrieben. Wenn ich das mache bekomme ich aber keine Response

Schick ich dem BHKW die Request als hex-String (Hexadezimalanzeige)
0070 08D9 0101
bekomme ich folgenden Response
0070 37D9 0101 000A 6300 0000 0017 0018 0000 0100 D700 D700 D5FE 0E00 D901 E2FF D9FF D900 28FF D9FF D9FF D900 2800 0000 3C00 00FF 00F3 AF
den gilt es nun in unterschiedliche Byte zu zerlegen und in dez-Werte umzurechnen.

Schick ich aber die Request als hex-String (normale Anzeige)
007008D90101
bekomme ich keine Response!!!


String in unterschiedliche Teilstrings zerlegen - ThomasDipl - 05.11.2008 13:28

So Lucki,

ich hab Dir mal das leere vi in den Anhang gepostet. Ich hoffe Du verstehst was ich meine. Und vielen Dank für Deine Bemühungen!!!
Lv85_img


String in unterschiedliche Teilstrings zerlegen - ThomasDipl - 05.11.2008 13:29

Der Request ist

0070 0620

und der Response dazu ist

0070 3820 0003 6300 00C0 0004 0000 001B 0200 0000 0000 0000 0004 0000 0400 0000 0017 0698 0043 0F8C 0001 00DA 00DA 00D8 00DA FFD9 003C 9853


String in unterschiedliche Teilstrings zerlegen - Lucki - 05.11.2008 14:14

' schrieb:Der Request ist

0070 0620

und der Response dazu ist

0070 3820 0003 6300 00C0 0004 0000 001B 0200 0000 0000 0000 0004 0000 0400 0000 0017 0698 0043 0F8C 0001 00DA 00DA 00D8 00DA FFD9 003C 9853
Diese Response in Zahlen mit unterschiedlichen Bytelängen aufzuteilen ist eine ganz uind gar einfache Aufgabe. Wie es geht, haate ich bereits gezeigt. Trotzdem gebe ich wegen unüberwindlicher Informationsschwierigkeiten langsam auf.
Gerade Hattest Du noch geschrieben
Zitat:Bis Byte 36 byteweise, zwischen Byte 37 und Byte 48 immer zwei Byte zusammen und danach wieder byteweise. Wie gesagt, das Problem liegt in der Trennung unterschiedlicher Byte.
Und jetzt, in VI, solle auf einmal die Bytes 1..8 8 U8-Integerzahlen ergeben, die Bytes 9..11 1*U32-Integer, das Bytes 12 wieder eine U8-Zahl, und die Bytes 13-16 zwei U16-Zahlen. Und das anschließende "..." soll wohl heißen, daß es sich ab nun von selbst versteht, wie es mit den restlichen Bytes weitergeht??? Hellsehen können wie hier aber alle wohl eher nicht.