Binär -> ASCII Wandlung
Dieser Befehl wandelt die 16-Bit/32-Bit binärcodierten Werte aus dem Bereich in ASCII-Code um, der durch s2_BinaryData angegeben wird. Die Umwandlungsmethode wird durch n_ConversionMethod entsprechend den vier Steuerzeichen von s1_Control festgelegt. Das Umwandlungsergebnis wird in den Speicherbereich d_AsciiData geschrieben.
Eingang
Steuerzeichen
H: wandelt in hexadezimale ASCII-Werte um
- Rückwärtsrichtung
32: wandelt 32-Bit-Einheiten (2 Worte) um
Anfangsbereich zum Speichern der Binärwerte
Umwandlungsmethode
(nähere Erläuterungen finden Sie in den nachstehenden Tabellen)
Ausgang
Anfangsbereich zum Speichern der ASCII-Werte
Wir empfehlen, anstelle von diesem F-Befehl den entsprechenden FP7-Befehl zu verwenden: FP_BIN_TO_ASCII
wenn das Steuerzeichen s1_Control fehlerhaft ist.
wenn die Vorwärtsrichtung (+) in s1_Control angegeben, und das Format dezimal ist.
wenn die Anzahl der ASCII-Zeichen pro umgewandelter Einheit, angegeben in n_ConversionMethod, für 16-Bitwerte den Wert 4 und für 32-Bitwerte den Wert 8 übersteigt und das hexadezimale Format durch s1_Control angegeben ist.
wenn 0 als Anzahl der 16- oder 32-Bit-Einheiten (1 oder 2 Worte) angegeben ist, die mit n_ConversionMethod umgewandelt werden sollen.
wenn die Anzahl der mit n_ConversionMethod umzuwandelnden 16- oder 32-Bit Dezimalzahlen den Speicherbereich der ASCII-Werte übersteigt.
wenn das Ergebnis der Umwandlung den Speicherplatz überschreitet.
wenn das Steuerzeichen s1_Control fehlerhaft ist.
wenn die Vorwärtsrichtung (+) in s1_Control angegeben, und das Format dezimal ist.
wenn die Anzahl der ASCII-Zeichen pro umgewandelter Einheit, angegeben in n_ConversionMethod, für 16-Bitwerte den Wert 4 und für 32-Bitwerte den Wert 8 übersteigt und das hexadezimale Format durch s1_Control angegeben ist.
wenn 0 als Anzahl der 16- oder 32-Bit-Einheiten (1 oder 2 Worte) angegeben ist, die mit n_ConversionMethod umgewandelt werden sollen.
wenn die Anzahl der mit n_ConversionMethod umzuwandelnden 16- oder 32-Bit Dezimalzahlen den Speicherbereich der ASCII-Werte übersteigt.
wenn das Ergebnis der Umwandlung den Speicherplatz überschreitet.
('X' Werte ändern sich nicht.)
Anzahl der ASCII-Zeichen (8 Bit) pro umgewandelter Einheit
Umwandlung von 16-Bit Binäreinheiten in hexadezimale ASCII-Werte:
Wertebereich: 16#1–16#4
Umwandlung von 32-Bit Binäreinheiten in hexadezimale ASCII-Werte:
Wertebereich: 16#1–16#8
Umwandlung von Binärwerteinheiten in dezimale ASCII-Werte:
Wertebereich: 16#1–16#F
s1_ Control=16+H
, n_Conversion Method=16#204
Vorwärtsrichtung. 2 x 4 ASCII-Zeichen.
Binärwerte |
Umwandlungsergebnis in ASCII Werten |
Datentyp |
Offset in 16-Bit-Worteinheiten |
Hexadezimalzahl |
D |
D+1 |
D+2 |
D+3 |
(row]
---|---|---|---|---|---|---|
INT, WORD |
0 |
16#5678 |
'78' |
'56' |
'34' |
'12' |
1 |
16#1234 |
s1_ Control=16-H
, n_Conversion Method=16#204
Rückwärtsrichtung. 2 x 4 ASCII-Zeichen.
Binärwerte |
Umwandlungsergebnis in ASCII Werten |
Datentyp |
Offset in 16-Bit-Worteinheiten |
Hexadezimalzahl |
D |
D+1 |
D+2 |
D+3 |
(row]
---|---|---|---|---|---|---|
INT, WORD |
0 |
16#5678 |
'78' |
'56' |
'12' |
'34' |
1 |
16#1234 |
s1_ Control=16+H
, n_Conversion Method=16#203
Vorwärtsrichtung. 2 x 3 ASCII-Zeichen.
Binärwerte |
Umwandlungsergebnis in ASCII Werten |
Datentyp |
Offset in 16-Bit-Worteinheiten |
Hexadezimalzahl |
D |
D+1 |
D+2 |
D+3 |
(row]
---|---|---|---|---|---|---|
INT, WORD |
0 |
16#0456 |
'56' |
'42' |
'31' |
'$xx$xx' |
1 |
16#0123 |
s1_ Control=16-H
, n_Conversion Method=16#203
Rückwärtsrichtung. 2 x 3 ASCII-Zeichen.
Binärwerte |
Umwandlungsergebnis in ASCII Werten |
Datentyp |
Offset in 16-Bit-Worteinheiten |
Hexadezimalzahl |
D |
D+1 |
D+2 |
D+3 |
(row]
---|---|---|---|---|---|---|
INT, WORD |
0 |
16#0456 |
'45' |
'61' |
'23' |
'$xx$xx' |
1 |
16#0123 |
s1_ Control=32+H
, n_Conversion Method=16#108
Vorwärtsrichtung. 1 x 8 ASCII-Zeichen.
Binärwerte |
Umwandlungsergebnis in ASCII Werten |
Datentyp |
Offset in 16-Bit-Worteinheiten |
Hexadezimalzahl |
D |
D+1 |
D+2 |
D+3 |
(row]
---|---|---|---|---|---|---|
DINT, DWORD |
0 |
16#12345678 |
'78' |
'56' |
'34' |
'12' |
s1_ Control=32-H
, n_Conversion Method=16#108
Rückwärtsrichtung. 1 x 8 ASCII-Zeichen.
Binärwerte |
Umwandlungsergebnis in ASCII Werten |
Datentyp |
Offset in 16-Bit-Worteinheiten |
Hexadezimalzahl |
D |
D+1 |
D+2 |
D+3 |
(row]
---|---|---|---|---|---|---|
DINT, DWORD |
0 |
16#12345678 |
'12' |
'34' |
'56' |
'78' |
s1_ Control=32+H
, n_Conversion Method=16#105
Vorwärtsrichtung. 1 x 5 ASCII-Zeichen.
Binärwerte |
Umwandlungsergebnis in ASCII Werten |
Datentyp |
Offset in 16-Bit-Worteinheiten |
Hexadezimalzahl |
D |
D+1 |
D+2 |
D+3 |
(row]
---|---|---|---|---|---|---|
DINT, DWORD |
0 |
16#00012345 |
'45' |
'23' |
'1$xx' |
'$xx$xx' |
s1_ Control=32-H
, n_Conversion Method=16#105
Rückwärtsrichtung. 1 x 5 ASCII-Zeichen.
Binärwerte |
Umwandlungsergebnis in ASCII Werten |
Datentyp |
Offset in 16-Bit-Worteinheiten |
Hexadezimalzahl |
D |
D+1 |
D+2 |
D+3 |
(row]
---|---|---|---|---|---|---|
DINT, DWORD |
0 |
16#00012345 |
'12' |
'34' |
'5$xx' |
'$xx$xx' |
'x' Werte ändern sich nicht.
Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden. Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.
VAR
bExecute: BOOL:=FALSE;
iArray1: ARRAY [0..1] OF INT:=[1234,-56];
iAscii1: ARRAY [0..4] OF WORD:=[5(16#FFFF)];
END_VAR
Wenn bExecute auf TRUE gesetzt ist, wird der Befehl ausgeführt. Wandelt zwei 16-Bit-Einheiten in 2 x 4 dezimale ASCII-Werte um. Offset = 1 ASCII-Zeichen (8-Bit).
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 9 ;
NETWORK_BODY
B(B_F,F250_BTOA!,Instance,9,3,21,9,,?DEN?Ds1_Control?Ds2_BinaryData?Dn_ConversionMethod?AENO?Cd_AsciiData);
B(B_VARIN,,'16-D',7,5,9,7,);
B(B_VARIN,,iArray1,7,6,9,8,);
B(B_VARIN,,16#214,7,7,9,9,);
B(B_VAROUT,,iAscii1,21,5,23,7,);
B(B_CONTACT,,bExecute,3,4,5,6,R);
B(B_COMMENT,,Result iAscii1: 'x1234 -56x',22,7,35,8,);
B(B_COMMENT,,Converts two 16-bit units to 2x4 decimal ASCII data. Offset = 1 ASCII character (8-bit).,2,1,35,3,);
L(1,5,3,5);
L(5,5,9,5);
L(1,0,1,9);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(bExecute) then
F250_BTOA(s1_Control := '16-D',
s2_BinaryData := iArray1,
n_ConversionMethod := 16#214,
d_AsciiData => iAscii1);
END_IF;