ASCII -> Binärumwandlung
Wandelt den ASCII-Code, der im Bereich s2_AsciiData festgelegt ist, in 16-Bit/32-Bit-Binärwerte um. Die Umwandlungsmethode wird durch n_ConversionMethod entsprechend den vier Steuerzeichen von s1_Control festgelegt. Das Umwandlungsergebnis wird in den Speicherbereich d_BinaryData geschrieben.
Eingang
Steuerzeichen, z.B. D-16
D
: wandelt dezimale ASCII-Werte umH
: wandelt hexadezimale ASCII-Werte um+
Vorwärtsrichtung-
Rückwärtsrichtung16
wandelt ASCII-Werte in 16-Bitwerte um, -32768 bis +32767 (16#0 bis 16#FFFF)32
wandelt ASCII-Werte in 32-Bitwerte um, -2147483648 bis +2147483647 (16#0 bis 16#FFFFFFFF)Anfangsbereich zum Speichern der ASCII-Werte
Umwandlungsmethode z.B. 16#404
(nähere Erläuterungen finden Sie in den nachstehenden Tabellen)
Ausgang
Anfangsbereich zum Speichern der Binärwerte
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.
Geben Sie für kommagetrennte Daten die Höchstzahl numerischer Daten an. Bei dezimalen ASCII-Daten sind Leerzeichen, Symbole sowie ein Dezimalpunkt enthalten. Der Datenbereich wird von der Steuerzeichenkette s1_Control eingeschränkt.
s1_ Control=H+16
, n_ConversionMethod=16#404
Vorwärtsrichtung. 4 x 4 ASCII-Zeichen.
ASCII-Werte |
Binärwerte |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Datentyp |
Offset in 16-Bit-Worteinheiten |
Hexadezimalzahl |
||||||||
D |
D+1 |
D+2 |
D+3 |
D+4 |
D+5 |
D+6 |
D+7 |
INT, WORD |
0 |
16#2301 |
'01' |
'23' |
'45' |
'67' |
'89' |
'0B' |
'CD' |
'EF' |
1 |
16#6745 |
|
2 |
16#AB89 |
|||||||||
3 |
16#EFCD |
s1_ Control=H-16
, n_ConversionMethod=16#404
Rückwärtsrichtung. 4 x 4 ASCII-Zeichen.
ASCII-Werte |
Binärwerte |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Datentyp |
Offset in 16-Bit-Worteinheiten |
Hexadezimalzahl |
||||||||
D |
D+1 |
D+2 |
D+3 |
D+4 |
D+5 |
D+6 |
D+7 |
INT, WORD |
0 |
6#0123 |
'01' |
'23' |
'45' |
'67' |
'89' |
'0B' |
'CD' |
'EF' |
1 |
16#4567 |
|
2 |
16#89AB |
|||||||||
3 |
16#CDEF |
s1_ Control=H+16
, n_ConversionMethod=16#403
Vorwärtsrichtung. 3 x 4 ASCII-Zeichen.
ASCII-Werte |
Binärwerte |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Datentyp |
Offset in 16-Bit-Worteinheiten |
Hexadezimalzahl |
||||||||
D |
D+1 |
D+2 |
D+3 |
D+4 |
D+5 |
D+6 |
D+7 |
INT, WORD |
0 |
16#*201 |
'01' |
'23' |
'45' |
'67' |
'89' |
'0B' |
'CD' |
'EF' |
1 |
16#*534 |
|
2 |
16#*867 |
|||||||||
3 |
16#*B9A |
s1_ Control=H-16
, n_ConversionMethod=16#403
Rückwärtsrichtung. 3 x 4 ASCII-Zeichen.
ASCII-Werte |
Binärwerte |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Datentyp |
Offset in 16-Bit-Worteinheiten |
Hexadezimalzahl |
||||||||
D |
D+1 |
D+2 |
D+3 |
D+4 |
D+5 |
D+6 |
D+7 |
INT, WORD |
0 |
16#*012 |
'01' |
'23' |
'45' |
'67' |
'89' |
'0B' |
'CD' |
'EF' |
1 |
16#*345 |
|
2 |
16#*678 |
|||||||||
3 |
6#*9AB |
s1_ Control=H+32
, n_ConversionMethod=16#802
Vorwärtsrichtung. 8 x 2 ASCII-Zeichen.
ASCII-Werte |
Binärwerte |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Datentyp |
Offset in 16-Bit-Worteinheiten |
Hexadezimalzahl |
||||||||
D |
D+1 |
D+2 |
D+3 |
D+4 |
D+5 |
D+6 |
D+7 |
DINT, DWORD |
0 |
16#67452301 |
'01' |
'23' |
'45' |
'67' |
'89' |
'0B' |
'CD' |
'EF' |
2 |
16#EFCDAB89 |
s1_ Control=H-32
, n_ConversionMethod=16#802
Rückwärtsrichtung. 8 x 2 ASCII-Zeichen.
ASCII-Werte |
Binärwerte |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Datentyp |
Offset in 16-Bit-Worteinheiten |
Hexadezimalzahl |
||||||||
D |
D+1 |
D+2 |
D+3 |
D+4 |
D+5 |
D+6 |
D+7 |
DINT, DWORD |
0 |
16#01234567 |
'01' |
'23' |
'45' |
'67' |
'89' |
'0B' |
'CD' |
'EF' |
2 |
16#89ABCDEF |
s1_ Control=H+32
, n_ConversionMethod=16#502
Vorwärtsrichtung. 5 x 2 ASCII-Zeichen.
ASCII-Werte |
Binärwerte |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Datentyp |
Offset in 16-Bit-Worteinheiten |
Hexadezimalzahl |
||||||||
D |
D+1 |
D+2 |
D+3 |
D+4 |
D+5 |
D+6 |
D+7 |
DINT, DWORD |
0 |
16#***42301 |
'01' |
'23' |
'45' |
'67' |
'89' |
'0B' |
'CD' |
'EF' |
2 |
16#***97856 |
s1_ Control=H-32
, n_ConversionMethod=16#502
Rückwärtsrichtung. 5 x 2 ASCII-Zeichen.
ASCII-Werte |
Binärwerte |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
Datentyp |
Offset in 16-Bit-Worteinheiten |
Hexadezimalzahl |
||||||||
D |
D+1 |
D+2 |
D+3 |
D+4 |
D+5 |
D+6 |
D+7 |
DINT, DWORD |
0 |
16#***01234 |
'01' |
'23' |
'45' |
'67' |
'89' |
'0B' |
'CD' |
'EF' |
2 |
16#***56789 |
* Die extra Zeichen werden '0'.
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;
iArray2: ARRAY [0..1] OF INT:=[2(0)];
(*Begin ASCII: _1,23,04,-5,6_*)
iAscii1: ARRAY [0..4] OF WORD:=[5(16#FFFF)];
END_VAR
Wenn bExecute auf TRUE gesetzt ist, wird der Befehl ausgeführt. Wandelt 2 x 4 dezimale ASCII-Zeichen in Binärwerte um. Offset = 0 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,F251_ATOB!,Instance,9,3,21,9,,?DEN?Ds1_Control?Ds2_AsciiData?Dn_ConversionMethod?AENO?Cd_BinaryData);
B(B_VARIN,,'D-16',7,5,9,7,);
B(B_VARIN,,iAscii1,7,6,9,8,);
B(B_VARIN,,16#214,7,7,9,9,);
B(B_VAROUT,,iArray2,21,5,23,7,);
B(B_CONTACT,,bExecute,3,4,5,6,R);
B(B_COMMENT,,Result iArray2: [1234~-56],22,7,35,8,);
B(B_COMMENT,,Converts 2x4 decimal ASCII data to binary data. Offset = 1 ASCII character (8-bit).,2,1,35,2,);
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
F251_ATOB(s1_Control := 'D-16',
s2_AsciiData := iAscii1,
n_ConversionMethod := 16#214,
d_BinaryData => iArray2);
END_IF;