ASCII telegramm: 0x30354146 (4Byte)
Dies entspricht : 0x 0 5 A F (2Byte)
Das ist also eine Wandlung einer ASCII-Zeichenkette mit Hex-Zeichen zu einem 16-Bit Wert.
Die gibt es eigentlich schon fertig als FC94 ATH (Standard Library > TI-S7 Converting Blocks).
Man kann die einfache Wandlung aber auch selber programmieren.
Umwandlung eines ASCII-Zeichens in einen Hex-Wert:
- '0' ... '9' ? --> '0' abziehen --> 0 ... 9
- 'A' ... 'F' ? --> '7' abziehen --> 10 ... 15 (16#0A ... 16#0F)
- alle anderen ASCII-Zeichen sind unzulässig, kann man z.B. mit 0 ersetzen
Man kann das auch ein wenig optimieren:
- >'F' --> unzulässiges Zeichen
- >='A' --> '7' abziehen --> fertig
- >'9' --> unzulässiges Zeichen
- '0' abziehen, Ergebnis negativ? --> unzulässiges Zeichen
In Microprozessoren nimmt man gerne auch Lookup-Tables.
Man kann die Wandlung in AWL auch einfach mit einer Sprungleiste realisieren:
Code:
L #myChar // das ASCII-Zeichen (z.B. von DBB [AR1,P#0.0])
L '0' // ASCII-Wert des kleinsten zulässigen Zeichens
-I // Normierung zu 0...x zur Verkürzung der SPL
SPL MUNZ
SPA MZIF // '0'
SPA MZIF // '1'
SPA MZIF // '2'
SPA MZIF // '3'
SPA MZIF // '4'
SPA MZIF // '5'
SPA MZIF // '6'
SPA MZIF // '7'
SPA MZIF // '8'
SPA MZIF // '9'
SPA MUNZ // B#16#3A
SPA MUNZ // B#16#3B
SPA MUNZ // B#16#3C
SPA MUNZ // B#16#3D
SPA MUNZ // B#16#3E
SPA MUNZ // B#16#3F
SPA MUNZ // B#16#40
SPA MTET // 'A'
SPA MTET // 'B'
SPA MTET // 'C'
SPA MTET // 'D'
SPA MTET // 'E'
SPA MTET // 'F'
MUNZ: L 7 // unzulässiges Zeichen! --> soll als 0 interpretiert werden
MTET: + -7 // bei Tetraden A...F 7 abziehen
MZIF: T #myByte // der umgewandelte Wert 0...15 (B#16#00 ... B#16#0F)
PS: ASCII-Schreibweise '0' ... '9' = B#16#30 ... B#16#39 / 'A' ... 'F' = B#16#41 ... B#16#46
Harald