' schrieb:Hey Jens,
ok - jetzt blicke ich da schon etwas mehr durch...
Der String setzt sich wie folgt zusammen:
1.) Steuerzeichen - bei mir das kleine "p" -> 1 Byte ASCII als 1 byte HEX
2.) Stellwert Dezimal 0-3000 -> Dezimalzahl als 2 byte HEX
3.) Auffüllen mit "00000" -> 5 Byte ASCII als 5 Byte HEX ("0" -> 0x30)
...Insgesamt also 8 Byte
Nun hast du mir mit der 7_2.vi schon ein paar tolle Tipps gegeben, insb. was die Prüfsumme angeht. Leider habe ich den ersten Teil nach wie vor nicht alleine richten können, da mich genau der Unterschied Zahl->HEX bzw. ASCII->Hex von einer einfachen Lösung abhält. M.E. gäbe es ja zwei Wege, den String zu berechnen:
- Steuerzeichen als String
- Dezimalzahl nach HEX, dies in einen String wandeln und dran hängen
- 00000 als String dran hängen
Oder aber:
- Steuerzeichen ASCII -> HEX wandeln
- Dezimalzahl nach HEX und dies dran hängen
- "00000" von ASCII nach HEX wandeln und dran hängen
- Das Ganze wieder in ASCII zurück wandeln
Ich habe mich bisher fast ausschließlich an der umständlichen zweiten Variante versucht und dabei zur Vereinfachung Steuerzeichen und "00000" als 70 bzw. 3030303030 direkt in den String eingegeben. Die 2 Byte Stellgröße auch als "2 Byte" Hex- String auszugeben hat auch noch irgendwie geklappt. Ich wußte letzlich bloß mit dem zusammengesetzten "Hex-String" nichts anzufangen, weil ich mit dem keine Prüfsumme rechnen konnte und es auch keine einfache Möglichkeit gibt, diesen wieder in Zeichen umzuwandeln.... Die erste Variante ist aber vermutlich eh einfacher, scheitert aber an einer einfachen Umwandlung der Dezimalzahl zu Hex und das zum ASCII Zeichen.
Ich schau' mal, ob ich hier noch ein nützliches sub-VI für die Wandlung ASCII->HEX finde. Vielleicht denk' ich aber auch viel zu kompliziert und es wird hier eh schon Einspruch erhoben...
Gruß,
Dennis
Jaja, meiner Meinung nach denkst du VIEL zu kompliziert.
Ich habe das schon mal probiert, zu erklären.
Wenn du einen Buchstaben "p" per RS-232 senden willst, dann sendest du einfach das "p". Das der ASCII-Code (also die Binärdarstellung nach ASCII-Code-Tabelle) dieses Buchstaben 112dez bzw. 0x70 ist, braucht dabei nicht zu interessieren. Also ja nicht sich von dem p den Binärcode holen, diesen dann in eine Hex-Zahl wandeln und dies dann wieder in einen String wandeln. Somit machst du aus einem Byte zwei Byte.
Von dem, was du geschrieben hast, ist definitiv Variante 1 richtig, vergiss das mit Variante 2.
Oder noch mal anders gesagt:
Du musst unterscheiden zwischen einem String und seiner Darstellung im Speicher des Computer! Da wird schließlich alles binär als 1 und 0 dargestellt.
Als sinnvolle Zusammenfassung wurden dann mal 8bit zu einem Byte zusammengefasst. In 8bit kannst du 256 verschiedene Zahlen darstellen. Oder, wenn du dir die erweitere ASCII-Tabelle zur Hand nimmst, kannst du damit auch 256 Zeichen/Buchstaben codieren.
Um jetzt nicht jedes mal die Bit-Darstellung hinzuschreiben, gibt es zur Vereinfachung den HEX-Code. Denn nun kannst du mit 2 HEX-Zahlen (also 00-FF) alle möglichen Zahlen eines Byte hinschreiben.
Gruß, Jens
P.S.: Das mit Datenblatt nicht posten (dürfen) erschwert die Diskussion ungemein. Ich frage mich jedes Mal, ob du den Befehlscode wirklich richtig weitergibst oder nicht.
Bsp: Du sagst was von Stellwert 0-3000. Wobei du auch mal was von geteilt durch 10 gesagt hast. Das wäre dann 0-300.
Andererseits soll der Stellwert als HEX-Zahl (nun wieder in 2 Byte) übertragen werden. Aber in einem 2-Byte-String bekomme ich max. FF rein, also max. 255.