LabVIEWForum.de - HEX-String in Dezimal umwandeln

LabVIEWForum.de

Normale Version: HEX-String in Dezimal umwandeln
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
ok, wenn ich meinen durch String in Hex -erstellten Hex-String als Hex anzeigen lasse, hat er nicht mehr die Werte wie vorab, sodass mir jetzt auch klar ist warum er einen anderen Zahlenwert aufweißt.

d.h. ich muss mein Problem anders formulieren bzw. nochmal ganz am Anfang angreifen:

Mein Messgerät gibt mir meine Werte in Dezimalschreibweise aus (als U8), diese muss ich jedoch erst in Hex umwandeln um diese dann über IEEE in meinen gewünschten Wert zu erhalten.

d.h. Mein Messgerät spuckt mir 65 und 160 aus, in Hex sind das dann 41 und A0 und über IEEE-Umwandlung erhalte ich aus 41A0 (zusammengefügt) dann 20 und somit meinen gewünschten Wert. Wie kann ich das realisieren?
Hallo sumsi,

ein SGL besteht aus 4 Bytes!
[attachment=52854]
Das hatten wir doch alles schon einmal…

Zitat:Mein Messgerät gibt mir meine Werte in Dezimalschreibweise aus (als U8)
Falsch formuliert!
Dein Gerät gibt dir U8-Werte aus, die du dir in Dezimaldarstellung anguckst. Du kannst dir die Werte aber auch in Hex-, Binär- oder Oktaldarstellung anschauen…
so, bin immer noch am Kämpfen. Mit den Lösungsvorschlägen von GerdW komm ich leider nicht weiter, sodass ich euch mal ein VI als Beispiel angehängt habe. Ich bekomme von meinem Gerät die DATA zurück und muss diese über IEEE umwandeln, ein Lösungsversuch ist mit dabei bei welchem ich die Daten versuche zu einem String zu verknüpfen und dann umzuwandeln. Zudem ist nochmal die Variante mit String eingeben und über Typecast umwandeln dabei, welche ja auch gut funktioniert, ich nur nicht weiß wie ich meine Eingangsdaten auf dieses oder ein anderers funktionierendes Format bekomme.

Was mir Labview bei sämtlichen Versuchen macht, ist dass er meine 41A0 (hex) als 65 160 interprätiert bzw. bei anderer Darstellung mit der ASCII-Hex-Tabelle in 34 31 41 30 umwandelt und dies dann in die Zahl konvertiert.

Was ich aber möchte, ist dass er das ganze als 4 1 A 0 interpretiert (bin 0100 0001 1010 0000) und dies dann in eine Zahl konviertiert (sodass ich 20 als Ergebnis erhalte).

Ich hab mich glaub ich inzwischen so festgefahren, dass ich keine Ahnung mehr habe was ich noch probieren soll. Komm irgendwie hier mit LabView nicht zurecht.
Hallo sumsi,

Zitat:Komm irgendwie hier mit LabView nicht zurecht.
Das sieht man an dem unnötigerweise verwendeten Matrix-Datentyp…
Und daran, dass du immer noch nicht bei allen deinen String-Controls den Anzeigemodus sichtbar machst!

Außerdem, weiß ich nicht, was du hast: Dein VI funktioniert doch!

Beweis:
[attachment=52857]

Dummerweise hast du keine Daten in deinem "Modbus Data Unit" hinterlegt, sodass wir immer noch nichts über deine zu wandelnden Daten wissen…

Nachtrag: Der Umweg über den DBL-Datentyp hilft dir garantiert nicht weiter - der stört hier nur!
was meinst du mit keine Daten hinterlegt? Ich habe hier einfach von Hand Zahlen eingetragen (siehe Screenshot).

das der untere Teil funktioniert ist mir schon klar, ich möchte aber dass der obere Teil auch als Ergebnis 20 ausgibt, da ich meine Daten nur über Data hineinbekomme und nicht händisch in String 2 eintrage.
Es stand hier schon öfters und kommt auch aus den Screenshots heraus:

Ein FLOAT-Wert belegt im Speicher 4 Byte, du arbeitest aber nur mit 2 Byte. Da stimmt was nicht.

Und bitte nach dem Werte eintragen noch auf "Make Current Value Default" klicken und speichern, sonst bringt das nichts.

Gruß, Jens
Hallo sumsi,

wenn du einfach einen der Vorschläge von hier anwenden würdest, wärst du am Ziel.

Aber du musst ja eine DBL-Matrix erstellen, um daraus wieder Elemente zu indizieren. Dann wandelst du die DBL-Werte in hex-formatierte ASCII-Strings um, die du dann wiederum per Typecast in "vernünftige" SGL-Zahlen umwandeln willst. Das hört sich schon sehr beratungsresistent an…

Aber anscheinend schaffst du es nicht, eine vorhandene Lösung auf deine Daten anzuwenden:
[attachment=52859] Wall

Oder direkt ohne Umweg über den U32:
[attachment=52860]
Wobei sicherzustellen ist, dass du die korrekte Anzahl von 4 Bytes bereitstellst - auch das hast du ja noch immer nicht geschafft…
Danke, da stand ich grad total auf dem Schlauch. Jetzt funktioniert es wie gewünscht.
Nachtrag: Wenn du die Daten per Modbus bekommst, dann musst du für einen Float-Wert zwei U16-Register auslesen, nicht nur eines!

Gruß, Jens
Seiten: 1 2
Referenz-URLs