Spezielles Byte nach Eingang weiterverarbeiten, RS232
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!
RE: Spezielles Byte nach Eingang weiterverarbeiten, RS232
Moin,
danke für die weiteren Ratschläge und das Erstellen des VI.
In der Anleitung des Stellmotors steht, dass die Daten im ASCII Code kommen.
Bei der Definition der Bytes steht dann:
$Kxxxx<LF>
$K Kennung Istposition
xxxx Istposition, 0x0000 bis 0x0480, (Begrenzung durch relatives Messsystem)
<LF> Line-Feed
Die Begrenzung durch das relative Messsystem sind meine (jetzt) „036C“ (Ventil geht net weiter auf). Allerdings ist dies ASCII Code (char), und nicht hex, richtig?
Das dort „0x“ vor der 0000 bzw. 0480 steht verwirrte mich, denn ich hatte gelesen, dass Hexadezimalzahlen durch die Folge von „0x“ angekündigt werden. Wenn man sich dies Ziffer für Ziffer nach der angehängten Tabelle entschlüsseln würde, kämen nur irgendwelche Befehle aber keine Werte zustande.
Zum Verständnis:
Habe ich ein ASCII Zeichen, kann ich dieses in hex, dez oder binär ummünzen. Aus jedem System lässt es sich wieder zurück ins ASCII Zeichen „holen“, oder in eines der anderen Formate ändern.
Wenn ich jetzt aber das eigentlich Zeichen als hex angebe, hat es doch eine ganz andere Bedeutung oder nicht?
Sprich:
ASCII „30“
Ist nicht
Hex „30“.
Wenn ich nun in die beiden VIs schaue und dort von einem Hexadezimal-String in eine Zahl umgewandelt wird, frage ich mich, ob das richtig ist.
Es kommt ein ASCII Code durch das VISA herein. Der Baustein nimmt dann diesen Wert und geht davon aus, dass es ein Hexwert ist. Anschließend wandelt er diesen in eine Zahl (eine Dezimalzahl nehme ich an).
Stört das gar nicht, bzw. ist das nicht „eigentlich“ falsch?
Die Bedeutung der „0“ bei Hex ist ja eine andere als wenn es sich um eine ASCII Chars „0“ handelt.
In der Hilfe steht:
„Interpretiert die Zeichen 0 bis 9, A bis F und a bis f in String beginnend am Offset als eine ganze Hexadezimalzahl und zeigt diese in Zahl an“.
Heißt für 036C dann (C=12)*1 + 6*16 + 3*256 + 0*4096 = 876 (ist auch der ausgegebene Wert).
Nehme ich die 036C in ASCII und wandel sie in hex um, ergibt das 30 33 36 43.
Wandelt man dies in eine Dezimalzahl, ergibt es: 808662595
Im Endeffekt müsste das Verhältnis ja immer gleich bleiben und ich kann auch aus dem Wert „876“ eine Prozentangabe erzeugen. Aber ich möchte gerne ein wenig dahinter steigen und bin gut durcheinander : )
Wäre super, wenn mir das jemand erklären/bestätigen kann.