ASCII ->バイナリ変換
s2_AsciiDataで指定したエリアに格納されているASCIIコードを16ビット/32ビットバイナリデータに変換します。変換方法は、s1_Controlの4文字の制御文字列に従い、n_ConversionMethodで指定します。変換結果は、d_BinaryDataで指定したエリアに格納されます。
入力
制御文字列。例: D-16
D
10進ASCIIデータへ変換H
16進ASCIIデータへ変換+
順方向-
逆方向16
ASCIIデータを16ビットデータに変換、-32,768~+32,767 (16#0~16#FFFF)32
ASCIIデータを32ビットデータに変換、-2,147,483,648~+2,147,483,647 (16#0~16#FFFFFFFF)ASCIIデータを格納するエリアの先頭
変換方法。例: 16#404
(詳細は、以下の説明をご参照ください)
出力
バイナリデータを格納するエリアの先頭
s1_Controlで指定した制御文字列に異常がある場合
s1_Controlで指定した変換フォーマットが10進数のときに、変換方向を順方向(+)とした場合
s1_Controlで指定した変換フォーマットが16進数のときに、n_ConversionMethodで指定したASCIIコード格納エリアの大きさが規定値を超える場合(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コード格納エリアの大きさを超える場合
変換結果がエリアを超える場合
カンマ区切りデータの場合は、数値データの最大数を指定します。10進ASCIIデータの場合は、スペース、記号、小数点が含まれます。データ範囲は、制御文字列s1_Controlによって制限されます。
n_Conversion 方法 |
s1_ Control |
ASCIIデータ |
バイナリデータ |
コメント |
||
---|---|---|---|---|---|---|
データ型 |
オフセット1) |
16進の値 |
||||
H+16 |
16#404 |
D:'01' D+1:'23' D+2:'45' D+3:'67' D+4:'89' D+5:'AB' D+6:'CD' D+7:'EF' |
INT, WORD |
0 |
16#2301 |
順方向 4 x 4 ASCII文字 |
1 |
16#6745 |
|||||
2 |
16#AB89 |
|||||
3 |
16#EFCD |
|||||
H-16 |
16#404 |
INT, WORD |
0 |
6#0123 |
逆方向 4 x 4 ASCII文字 |
|
1 |
16#4567 |
|||||
2 |
16#89AB |
|||||
3 |
16#CDEF |
|||||
H+16 |
16#403 |
INT, WORD |
0 |
16#*201 |
順方向 3 x 4 ASCII文字 |
|
1 |
16#*534 |
|||||
2 |
16#*867 |
|||||
3 |
16#*B9A |
|||||
H-16 |
16#403 |
INT, WORD |
0 |
16#*012 |
逆方向 3 x 4 ASCII文字 |
|
1 |
16#*345 |
|||||
2 |
16#*678 |
|||||
3 |
6#*9AB |
|||||
H+32 |
16#208 |
DINT, DWORD |
0 |
16#67452301 |
順方向 8 x 2 ASCII文字 |
|
2 |
16#EFCDAB89 |
|||||
H-32 |
16#208 |
DINT, WORD |
0 |
16#01234567 |
逆方向 8 x 2 ASCII文字 |
|
2 |
16#89ABCDEF |
|||||
H+32 |
16#205 |
DINT, DWORD |
0 |
16#***42301 |
順方向 5 x 2 ASCII文字 |
|
2 |
16#***97856 |
|||||
H-32 |
16#205 |
DINT, DWORD |
0 |
16#***01234 |
逆方向 5 x 2 ASCII文字 |
|
2 |
16#***56789 |
1) 16ビットワード単位でのオフセット
※余った文字は0になります。
POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。
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
bExecuteがON(TRUE)のとき、このファンクションが実行されます。10進ASCIIデータをバイナリデータに変換します。オフセット=0 アスキー文字単位(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,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;