バイナリ ->ASCII変換
s2_BinaryDataで指定したエリアに格納されている16ビット/32ビットのバイナリデータをASCIIコードに変換します。変換方法は、n_ConversionMethodの4文字の制御文字列に従い、s1_Controlで指定します。変換結果は、d_AsciiDataで指定したエリアに格納されます。
入力
制御文字
H: 16進ASCIIデータへ変換
- 逆方向
32: 32ビット(2ワード)の変換
バイナリデータを格納するエリアの先頭
変換方法
(詳細は、以下の説明をご参照ください)
出力
ASCIIデータを格納するエリアの先頭
F命令を使用する代わりに、対応するFP7命令を使用することをおすすめします。FP_BIN_TO_ASCII
s1_Controlで指定した制御文字列に異常がある場合
s1_Controlで指定した変換フォーマットが10進数のときに、変換方向を順方向(+)とした場合
s1_Control.で指定した変換フォーマットが16進数のときに、n_ConversionMethodで指定したアスキーコード格納エリアの大きさが規定値を超える場合 (16ビットの場合の規定値: 4、32ビットの場合の規定値: 8)
n_ConversionMethodで指定した変換データ数が0の場合
変換結果がn_ConversionMethodで指定したASCIIコード格納エリアの大きさを超える場合
変換結果がエリアを超える場合
s1_Controlで指定した制御文字列に異常がある場合
s1_Controlで指定した変換フォーマットが10進数のときに、変換方向を順方向(+)とした場合
s1_Controlで指定した変換フォーマットが16進数のときに、n_ConversionMethodで指定したASCIIコード格納エリアの大きさが規定値を超える場合(16ビットの場合の規定値: 4、32ビットの場合の規定値: 8)
n_ConversionMethodで指定した変換データ数が0の場合
変換結果がn_ConversionMethodで指定したASCIIコード格納エリアの大きさを超える場合
変換結果がエリアを超える場合
'x'の値は変化しない
ASCIIデータ桁数(8ビット)について
16ビットバイナリデータを16進ASCIIデータへ変換するとき:
範囲:16#1~16#4
32ビットバイナリデータを16進ASCIIデータへ変換するとき:
範囲:16#1~16#8
バイナリデータを10進ASCIIデータへ変換するとき:
範囲:16#1~16#F
s1_ Control=16+H
, n_Conversion Method=16#204
順方向2 x 4 ASCII文字
バイナリデータ |
ASCIIデータの変換結果 |
|||||
---|---|---|---|---|---|---|
データ型 |
16ビットワード単位でのオフセット |
HEX (16進数) |
D |
D+1 |
D+2 |
D+3 |
INT、WORD |
0 |
16#5678 |
'78' |
'56' |
'34' |
'12' |
1 |
16#1234 |
s1_ Control=16-H
, n_Conversion Method=16#204
逆方向2 x 4 ASCII文字
バイナリデータ |
ASCIIデータの変換結果 |
|||||
---|---|---|---|---|---|---|
データ型 |
16ビットワード単位でのオフセット |
HEX (16進数) |
D |
D+1 |
D+2 |
D+3 |
INT、WORD |
0 |
16#5678 |
'78' |
'56' |
'12' |
'34' |
1 |
16#1234 |
s1_ Control=16+H
, n_Conversion Method=16#203
順方向2 x 3 ASCII文字
バイナリデータ |
ASCIIデータの変換結果 |
|||||
---|---|---|---|---|---|---|
データ型 |
16ビットワード単位でのオフセット |
HEX (16進数) |
D |
D+1 |
D+2 |
D+3 |
INT、WORD |
0 |
16#0456 |
'56' |
'42' |
'31' |
'$xx$xx' |
1 |
16#0123 |
s1_ Control=16-H
, n_Conversion Method=16#203
逆方向2 x 3 ASCII文字
バイナリデータ |
ASCIIデータの変換結果 |
|||||
---|---|---|---|---|---|---|
データ型 |
16ビットワード単位でのオフセット |
HEX (16進数) |
D |
D+1 |
D+2 |
D+3 |
INT、WORD |
0 |
16#0456 |
'45' |
'61' |
'23' |
'$xx$xx' |
1 |
16#0123 |
s1_ Control=32+H
, n_Conversion Method=16#108
順方向1 x 8 ASCII文字
バイナリデータ |
ASCIIデータの変換結果 |
|||||
---|---|---|---|---|---|---|
データ型 |
16ビットワード単位でのオフセット |
HEX (16進数) |
D |
D+1 |
D+2 |
D+3 |
DINT、DWORD |
0 |
16#12345678 |
'78' |
'56' |
'34' |
'12' |
s1_ Control=32-H
, n_Conversion Method=16#108
逆方向1 x 8 ASCII文字
バイナリデータ |
ASCIIデータの変換結果 |
|||||
---|---|---|---|---|---|---|
データ型 |
16ビットワード単位でのオフセット |
HEX (16進数) |
D |
D+1 |
D+2 |
D+3 |
DINT、DWORD |
0 |
16#12345678 |
'12' |
'34' |
'56' |
'78' |
s1_ Control=32+H
, n_Conversion Method=16#105
順方向1 x 5 ASCII文字
バイナリデータ |
ASCIIデータの変換結果 |
|||||
---|---|---|---|---|---|---|
データ型 |
16ビットワード単位でのオフセット |
HEX (16進数) |
D |
D+1 |
D+2 |
D+3 |
DINT、DWORD |
0 |
16#00012345 |
'45' |
'23' |
'1$xx' |
'$xx$xx' |
s1_ Control=32-H
, n_Conversion Method=16#105
逆方向1 x 5 ASCII文字
バイナリデータ |
ASCIIデータの変換結果 |
|||||
---|---|---|---|---|---|---|
データ型 |
16ビットワード単位でのオフセット |
HEX (16進数) |
D |
D+1 |
D+2 |
D+3 |
DINT、DWORD |
0 |
16#00012345 |
'12' |
'34' |
'5$xx' |
'$xx$xx' |
'x'の値は変化しない
POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。
VAR
bExecute: BOOL:=FALSE;
iArray1: ARRAY [0..1] OF INT:=[1234,-56];
iAscii1: ARRAY [0..4] OF WORD:=[5(16#FFFF)];
END_VAR
bExecuteがON(TRUE)のとき、このファンクションが実行されます。2つの16ビットバイナリデータを"2 x 4"の10進アスキーデータに変換します。オフセット=ASCII 1文字(8ビット)
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;