LabVIEWForum.de
ASCII über HEX in Dezimal umrechnen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: ASCII über HEX in Dezimal umrechnen (/Thread-ASCII-ueber-HEX-in-Dezimal-umrechnen)

Seiten: 1 2


ASCII über HEX in Dezimal umrechnen - Lektor - 28.07.2006 19:57

Hallo,
ich habe ein Problem an dem ich mir langsam die Zähne ausbeisse. Es müßte eigentlich eine Kleinigkeit sein, aber ich bekomme es einfach nicht hin.

Über die Com1 bekomme ich einen String von 58 Bytes und davon benötige ich nur einige. Zwei zusammenhängende Bytes stehen für einen Temperaturwert und den möchte ich mir in LV anzeigen lassen.

Ich bekomme mit String Subset also die beiden Bytes, welche für eine Temperatur stehen in der Form 0B01. 0B ist das Lowbyte, 01 das Highbyte. Durch weitere Funktionen habe ich diese Bytes gedreht und habe nun 010B da stehen welches von HEX in DEZ umgewandelt 267 ergibt, was für 26,7°C steht.
Ich habe also nun die 010B da stehen und ich weiss nicht wie ich mit LV auf die 267 kommen soll.
Habe die Funktion Hexadecimal String to Number ausprobiert und noch paar andere, aber nichts hat so wirklich funktioniert. Bei den String Indicatoren kann man schön über die rechte Maustaste angeben Hex Display und er zeigt es wunderbar an, nur wie kann ich ihm sagen, dass er ständig mit den Hexwerten umgehen soll.
Ich vermute, dass er ständig mit ASCII arbeitet und deswegen auch die Funktion Hexadecimal String to Number nicht funktioniert.

Ich denke ich bin dicht dran, aber ich finde einfach die richtige Funktion nicht.

Ich lade mal mein Projekt hoch. Der entscheidende Teil ist auf der zweiten Seite von der Stacked Sequence.

[attachment=2727]

Wie gesagt, es muß eine Kleinigkeit sein.


ASCII über HEX in Dezimal umrechnen - Lucki - 28.07.2006 22:49

' schrieb:Wie gesagt, es muß eine Kleinigkeit sein.
Ja, es ist eine Kleinigkeit, aber sie hat es in sich. Nebenbei ausgezeichneter Intelligenztest, hat Spaß gemacht das herauszufinden.
Also: In der als Beipiel mitgelieferten Stringkonstanten hast Du im Kontextmenü das Häkchen "Hexadezimalanzeige" gesetzt. Damit gaukelst Du Dir ein ASCII-Format vor, welches dieser String in Wirklichkeit gar nicht hat. Wenn er ASCII-Format hätte, würde es bereits in der normalem Anzeige wie ein ASCII-Format aussehen, das ist aber nicht der Fall. In Deinem Fall besteht der String überhaupt nicht aus Buchstaben und Ziffern (wenn, dann ist das Zufall und nicht so gemeint), sondern die Bytes im String sind direkt die zu übertragenen Zahlen-Bytes selbst.
Was ist zu tun: a) String in Byte-Array umwandeln b) die Elemente 10 und 11 herauspicken c) die beiden Bytes zu 16 Bit Zahl verbinden d) durch 10 dividieren und Temperatur anzeigen
[attachment=2728]


ASCII über HEX in Dezimal umrechnen - Lektor - 29.07.2006 09:48

' schrieb:Damit gaukelst Du Dir ein ASCII-Format vor, welches dieser String in Wirklichkeit gar nicht hat. Wenn er ASCII-Format hätte, würde es bereits in der normalem Anzeige wie ein ASCII-Format aussehen, das ist aber nicht der Fall. In Deinem Fall besteht der String überhaupt nicht aus Buchstaben und Ziffern, sondern die Bytes im String sind direkt die zu übertragenen Zahlen-Bytes selbst.

die Elemente 10 und 11 herauspicken
Danke für die Hilfe. Es sieht doch erfolgbringend aus. Bin seit einer Stunde am suchen, wo ich diese "die Elemente 10 und 11 herauspicken" Funktion finde. Kenne den Namen dieser Funktion nicht und unter Array und den anderen Rubriken finde ich sie auch nicht. Ein Suche in der Hilfe war auch erfolglos.

Und wie bekomme ich dieses orange DBL Zeichen hin? Wenn ich Numeric Indicator auswähle und Representation ändere, dann sieht es zwar auch orange aus, aber dennoch anders.

Ich bin davon ausgegangen, dass über COM1 die Daten binär übertragen werden und durch Programme in jedes Format umgewandelt werden können ( ASCII, HEX, DEC).


ASCII über HEX in Dezimal umrechnen - ahlers01 - 29.07.2006 10:12

Versuch's mal so:
[attachment=2729]


-Franz


ASCII über HEX in Dezimal umrechnen - Teutates - 29.07.2006 10:30

Hier ich schick Dir mal was, das von Franz ist natürlich eleganter aber im Grunde wirst da auch bestimmt nicht so einfach zurecht kommen mit TypecastWink

Aber im Grunde bastel ruhig mal ein wenig rum so lernt mans am Besten.


MfG

T.


ASCII über HEX in Dezimal umrechnen - Lektor - 29.07.2006 11:56

Danke für die Antworten. Teutates ist ziemlich identisch mit dem von Lucki und sieht auch ziemlich kompakt aus. Da ich aber nicht wußte, dass diese Funktion Index Array heisst, habe ich sie selbst nicht über die Suche gefunden. Den Rest eigentlich schon.
Habe es erstmal nach dem Beispiel von ahlers01 aufgebaut, da es gleich funktioniert hat.


ASCII über HEX in Dezimal umrechnen - Lucki - 29.07.2006 12:12

Ja, unter LV 8 hat sich einiges geändert, da beginnt man wieder neu mit suchen
Zitat:Bin seit einer Stunde am suchen, wo ich diese "die Elemente 10 und 11 herauspicken" Funktion finde
Das ist einfach "Array indizieren". Seit einiger Zeit (Aber ich glaube schon seit LV7 und nicht erst seit LV8) kann man diese Funktion mit der linken Maustaste nach unten verlängern und dadurch mehr als nur ein Element "herauspicken". Hat bei mir auch lange gedauert, bis ich diese neue Möglichkeit mitbekommen hatte.
Zitat:Und wie bekomme ich dieses orange DBL Zeichen hin?
High byte und low byte zu 16bit Zahl: Unter "Numerisch/Datenmanipulation"
String zu byte array: unter "String/String-Array-Pfad-Konvertierung/


ASCII über HEX in Dezimal umrechnen - Lektor - 29.07.2006 18:29

Hier mal den Stand der Dinge. Bisher klappt es wunderbar. Habe es auch mal an die Solaranlage angeschlossen und die Werte werden auch angezeigt. So im Nachhinein ist mir aufgefallen, dass der Index Array Befehl für die 4 Temperaturen wohl besser wäre, weil ich dadurch paar Funktionen einspare, aber es war ja meistens eh nur copy paste. Wenn ich denn Datenlogger fertig mache, dann muß ich mir das ganze Konzept eh anders überlegen.
Falls euch grober Mist auffallen sollte, dann schreibt es mal bitte. Man hat ja nie ausgelernt und ich habe bisher vielleicht gerade mal 20 Std. LV Erfahrung.Wink

Danke nochmal für die Hilfe

[attachment=2731]


ASCII über HEX in Dezimal umrechnen - ahlers01 - 30.07.2006 23:07

' schrieb:Hier mal den Stand der Dinge. Bisher klappt es wunderbar. Habe es auch mal an die Solaranlage angeschlossen und die Werte werden auch angezeigt. So im Nachhinein ist mir aufgefallen, dass der Index Array Befehl für die 4 Temperaturen wohl besser wäre, weil ich dadurch paar Funktionen einspare, aber es war ja meistens eh nur copy paste. Wenn ich denn Datenlogger fertig mache, dann muß ich mir das ganze Konzept eh anders überlegen.
Falls euch grober Mist auffallen sollte, dann schreibt es mal bitte. Man hat ja nie ausgelernt und ich habe bisher vielleicht gerade mal 20 Std. LV Erfahrung.Wink

Danke nochmal für die Hilfe

[attachment=28672:attachment]
Für 20 Std. LV ist das schon ganz schön gut!

Zwar kein 'grober Mist', aber dennoch änderungswert: für den sich wiederholenden Code-Teil eine subVI benutzen, und auf die Sequenz-Struktur würde ich auch verzichten (ist aber bisschen Geschmacksache):
[attachment=2733]
Die subVI ist beigefügt:
[attachment=2732]


ASCII über HEX in Dezimal umrechnen - Lektor - 31.07.2006 21:40

' schrieb:Zwar kein 'grober Mist', aber dennoch änderungswert: für den sich wiederholenden Code-Teil eine subVI benutzen, und auf die Sequenz-Struktur würde ich auch verzichten (ist aber bisschen Geschmacksache):
Das sieht natürlich super aus. Habe mir schon gedacht, dass es sowas zum Vereinfachen geben könnte. Wie kriegt man denn die Komponenten so schön angeordnet? Gibts da einen Befehl für. Clean up wires kenne ich. Align Objects sieht auch nicht sonderlich schön aus. Gibts noch etwas, was schneller zum Ziel führt oder geht es von Hand noch am schnellsten?

Müßte mir noch die ganzen Tutorials durchschauen, aber jetzt hatte ich eine Anwendung und ich wollte schnell zum Ziel kommen und da konnte ich auf eine besonders schöne Formatierung verzichten. Aber wenn es kein besonders großer Zeitaufwand ist, dann mache ich es auch in zukünftigen VIs