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 

String in unterschiedliche Teilstrings zerlegen



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!

04.11.2008, 13:58
Beitrag #1

ThomasDipl Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 54
Registriert seit: Oct 2008

8.5
-
de

85375
Deutschland
String in unterschiedliche Teilstrings zerlegen
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


Angehängte Datei(en)
Sonstige .vi  String_aus_HEX_in_Array.vi (Größe: 10,69 KB / Downloads: 409)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.11.2008, 15:57 (Dieser Beitrag wurde zuletzt bearbeitet: 04.11.2008 16:14 von Lucki.)
Beitrag #2

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
String in unterschiedliche Teilstrings zerlegen
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" !!!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.11.2008, 16:06
Beitrag #3

ThomasDipl Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 54
Registriert seit: Oct 2008

8.5
-
de

85375
Deutschland
String in unterschiedliche Teilstrings zerlegen
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).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.11.2008, 16:38 (Dieser Beitrag wurde zuletzt bearbeitet: 04.11.2008 16:48 von Lucki.)
Beitrag #4

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
String in unterschiedliche Teilstrings zerlegen
' 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
Sonstige .vi  Unbenannt_1.vi (Größe: 9,05 KB / Downloads: 426)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.11.2008, 16:59
Beitrag #5

ThomasDipl Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 54
Registriert seit: Oct 2008

8.5
-
de

85375
Deutschland
String in unterschiedliche Teilstrings zerlegen
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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.11.2008, 23:10 (Dieser Beitrag wurde zuletzt bearbeitet: 05.11.2008 08:44 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
String in unterschiedliche Teilstrings zerlegen
' 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:
   

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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.11.2008, 13:11
Beitrag #7

ThomasDipl Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 54
Registriert seit: Oct 2008

8.5
-
de

85375
Deutschland
String in unterschiedliche Teilstrings zerlegen
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!!!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.11.2008, 13:28 (Dieser Beitrag wurde zuletzt bearbeitet: 07.11.2008 01:30 von jg.)
Beitrag #8

ThomasDipl Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 54
Registriert seit: Oct 2008

8.5
-
de

85375
Deutschland
String in unterschiedliche Teilstrings zerlegen
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


Angehängte Datei(en)
Sonstige .vi  leeres_vi.vi (Größe: 5,8 KB / Downloads: 288)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.11.2008, 13:29
Beitrag #9

ThomasDipl Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 54
Registriert seit: Oct 2008

8.5
-
de

85375
Deutschland
String in unterschiedliche Teilstrings zerlegen
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.11.2008, 14:14 (Dieser Beitrag wurde zuletzt bearbeitet: 05.11.2008 14:15 von Lucki.)
Beitrag #10

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
String in unterschiedliche Teilstrings zerlegen
' 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.
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
  Pfad zerlegen hrathke 4 5.126 19.10.2020 19:17
Letzter Beitrag: hrathke
  Unterschiedliche Datentypen in Datei speichern holistic 5 6.283 25.06.2010 13:14
Letzter Beitrag: holistic
  unterschiedliche Datentypen in Datei schreiben reNNer 10 11.522 22.02.2010 11:57
Letzter Beitrag: reNNer
  XML zerlegen kkh84 4 6.229 24.12.2008 14:30
Letzter Beitrag: Teutates

Gehe zu: