ASCII ->バイナリ変換
このFP命令は、s2_AsciiDataで指定したエリアに格納されているASCIIコードを16ビット/32ビットバイナリデータに変換します。変換方法は、s1_Formatで指定します。変換結果は、d_BinaryDataで指定したエリアに格納されます。
FP命令FP_ASCII_TO_BINおよびFP_ASCII_CHECKは、大文字、小文字を区別しません。
入力
引用符にセットされた制御文字列およびフォーマット文字列
ASCIIデータを格納するための先頭アドレス
変換するデータの数: 0~65535
ASCIIデータの開始位置: 0~255
出力
バイナリデータを格納するための先頭アドレス
制御コード内の位置 |
説明 |
s1_Format |
16ビットPLC |
32ビットPLC |
|
---|---|---|---|---|---|
変換方向 |
|||||
+ |
正方向(16進数で指定子xまたはXが指定されている場合のみ) |
'+%4X' |
● |
● |
|
+符号が省略されている場合:逆方向(デフォルト設定) |
'%4X' |
● |
● |
||
% |
フォーマット文字列指定子(必須) |
● |
● |
||
パディングフォーマット |
|||||
0 |
ゼロ埋め |
'%06x' |
- |
● |
|
+ |
+符号を付加 |
'%+4d' |
- |
● |
|
- |
左揃え |
'%-6d' |
- |
● |
|
˽ |
(スペース)プラス記号の代わりにスペースを追加 |
'%˽4d' |
- |
● |
|
# |
16進数に0xを挿入 |
'%#4X' |
- |
● |
|
実数には必ず小数点を付加 |
'%#8.0f' |
- |
● |
||
8 |
ASCIIデータ要素の長さ |
'%08d' |
● |
● |
|
文字長なし
|
'%d,' |
- |
● |
||
小数点以下の精度 |
|||||
.5 |
任意の小数点以下の桁数 |
'%8.5f' |
- |
● |
|
I |
倍長指定子 例: 指定子l付きi = Ii -> DINT |
'+%4ld' |
● |
● |
|
フォーマット指定子 |
|||||
i |
INT |
'%10i' |
● |
● |
|
u |
UINT |
'%10u' |
- |
● |
|
d |
INT |
'%6d' |
● |
● |
|
x |
16進数小文字 |
'+%4x' |
● |
● |
|
X |
16進数大文字 |
'+%4X' |
● |
● |
|
b |
BCD |
'+%5b' |
- |
● |
|
f |
浮動小数点数 |
'+%-6.2f' |
- |
● |
|
e |
指数1.23e10 |
'+%9.3e' |
- |
● |
|
E |
指数大文字1.23E10 |
'+%9.3E' |
- |
● |
|
g |
浮動小数点型実数または指数 |
'+%12g' |
- |
● |
|
G |
浮動小数点または指数大文字 |
'+%9.3G' |
- |
● |
|
|
'+%8dPANA' |
- |
● |
● 16ビット/32ビットPLCで利用可能
例: '+%4X'
は、4文字長の大文字で順方向のASCII値を変換します(16ビット/32ビットPLCの場合)
ASCIIデータ |
バイナリデータの変換結果 |
---|---|
'˽12A' |
16#12A(16進形式で表示) |
例: '%4X'
は、4文字長の大文字で逆方向のASCII値を変換します(16ビット/32ビットPLCの場合)
ASCIIデータ |
バイナリデータの変換結果 |
---|---|
'˽B2A' |
16#B2A (16進形式で表示) |
例: '%06d'
は、6文字長で3つのゼロを先頭に持つ10進値のASCII値を変換します(32ビットPLCの場合のみ)
ASCIIデータ |
バイナリデータの変換結果 |
---|---|
'000100' |
16#100 (16進形式で表示) |
例: '%+4d'
は、4文字長で+記号付きの10進数のASCII値を変換します(32ビットPLCの場合のみ)
ASCIIデータ |
バイナリデータの変換結果 |
---|---|
'+100 ˽ ˽' |
100(10進形式で表示) |
例: '%-6d'
は、6文字長で左揃えのASCII値を変換します(32ビットPLCの場合のみ)
ASCIIデータ |
バイナリデータの変換結果 |
---|---|
'100˽ ˽ ˽' |
100 (10進形式で表示) |
例: '%˽4d'
は、4文字長で先頭に1つのスペースのあるASCII値を変換します(32ビットPLCの場合のみ)
ASCIIデータ |
バイナリデータの変換結果 |
---|---|
'˽100' |
100 (10進形式で表示) |
例: '%#8.0f'
は、8文字長で先頭に4つのスペースがある浮動小数点数のASCII値を変換します(32ビットPLCの場合のみ)
ASCIIデータ |
バイナリデータの変換結果 |
---|---|
'˽ ˽ ˽ ˽123.' |
123.45678 (10進形式で表示) |
例: '%8.3f'
は、8文字長で少数点以下3桁の精度のASCII値を変換します(32ビットPLCの場合のみ)
ASCIIデータ |
バイナリデータの変換結果 |
---|---|
'˽123.456' |
123.45599 (10進形式で表示) |
例: '+%10u'
は、10文字長で先頭に7つのスペースがある符号なし整数のASCII値を変換します(32ビットPLCの場合のみ)
ASCIIデータ |
バイナリデータの変換結果 |
---|---|
'˽ ˽ ˽ ˽ ˽ ˽ ˽100' |
-100 (10進形式で表示) |
例: '%06d'
は、6文字長で先頭に3つのスペースがあるASCII値を変換します(16ビット/32ビットPLCの場合)
ASCIIデータ |
バイナリデータの変換結果 |
---|---|
'˽ ˽ ˽100' |
100 (10進形式で表示) |
文字長の値に指定可能な範囲:
指定子d、ld、i、liの前: 1~15 |
指定子Xの前: 1~4 |
指定子lXの前: 1~8 |
長さの指定がない場合、カンマを付加。例:'%d,'
(32ビットPLCの場合のみ)
ASCIIデータ |
バイナリデータの変換結果 |
---|---|
'100,' |
100 (10進形式で表示) |
FP_BIN_TO_ASCII:必要最小限の長さを適用
FP_ASCII_TO_BINおよびFP_ASCII_CHECK: カンマ区切りが必要
例: '+%4ld'
は、4文字長のASCII値を変換します。変換結果にはDINTまたはDWORDが必要です(16ビット/32ビットPLCの場合)
ASCIIデータ |
バイナリデータの変換結果 |
---|---|
'˽100' |
100 (10進形式で表示) |
例: '+%6i'
は、6文字長で先頭に3つのスペースがある、順方向の符号付き整数のASCII値を変換します(16ビット/32ビットPLCの場合)
ASCIIデータ |
バイナリデータの変換結果 |
---|---|
'˽ ˽ ˽-100' |
-100 (10進形式で表示) |
例: '+%6d'
は、6文字長で先頭に3つのゼロがある、順方向のASCII値を変換します(16ビット/32ビットPLCの場合)
ASCIIデータ |
バイナリデータの変換結果 |
---|---|
'000100' |
100 (10進形式で表示) |
例: '+%4X'
は、4文字長で大文字の16進数の順方向のASCII値を変換します(16ビット/32ビットPLCの場合)
ASCIIデータ |
バイナリデータの変換結果 |
---|---|
'˽12A' |
16#12A (16進形式で表示) |
例: '+%5b'
は、5文字長でBCDデータのASCII値を変換します(32ビットPLCの場合のみ)
ASCIIデータ |
バイナリデータの変換結果 |
---|---|
'˽123' |
16#123 (16進形式で表示) |
例: '+%-6.2f'
は、6文字長で左揃えの小数点以下2桁の精度を持つASCII値を変換します(32ビットPLCの場合のみ)
ASCIIデータ |
バイナリデータの変換結果 |
---|---|
'1.23˽' |
1.2345 (10進形式で表示) |
例: '+%9.3e'
は、9文字長で小数点以下3桁の精度の小文字の指数表記を持つASCII値を変換します(32ビットPLCの場合のみ)
ASCIIデータ |
バイナリデータの変換結果 |
---|---|
'1.235e+03' |
1234.5678 (10進形式で表示) |
例: '1.235E+03'
は、9文字長で小数点以下3桁の精度の大文字の指数表記を持つASCII値を変換します(32ビットPLCの場合のみ)
ASCIIデータ |
バイナリデータの変換結果 |
---|---|
'1.235E+03' |
1234.5678 (10進形式で表示) |
例: '+%12g'
は、12文字長で浮動小数点数を持つASCII値を変換します(32ビットPLCの場合のみ)
ASCIIデータ |
バイナリデータの変換結果 |
---|---|
'˽ ˽ ˽ ˽ ˽1234.57' |
1234.5678 (10進形式で表示) |
例: '+%9.3G'
は、9文字長で小数点以下3桁の精度、浮動小数点数、大文字の指数表記を持つASCII値を変換します(32ビットPLCの場合のみ)
ASCIIデータ |
バイナリデータの変換結果 |
---|---|
'˽ ˽ ˽1.E+03' |
1234 (10進形式で表示) |
FP_BIN_TO_ASCIIの場合:変換に任意の文字列を付加することが可能
例: '+%8dPANA'
は、8文字長で10進数の、'PANA'が付加されたASCII値を変換します(32ビットPLCの場合のみ)
ASCIIデータ |
バイナリデータの変換結果 |
---|---|
'˽ ˽ ˽ ˽ ˽100PANA' |
100 (10進形式で表示) |
sFormatで指定した制御文字列に異常がある場合
sFormatで指定した変換フォーマットが10進数のときに、変換方向を順方向 (+) とした場合
s1_Formatで指定した変換フォーマットが16進数のときに、n_Conversionsで指定したASCIIコード格納エリアの大きさが規定値を超える場合(16ビットの場合の規定値: 4、32ビットの場合の規定値: 8)
n_Conversionsで指定した変換データ数が0の場合
変換結果がn_Conversionsで指定したASCIIコード格納エリアの大きさを超える場合
変換結果がエリアを超える場合
sFormatで指定した制御文字列に異常がある場合
sFormatで指定した変換フォーマットが10進数のときに、変換方向を順方向 (+) とした場合
s1_Formatで指定した変換フォーマットが16進数のときに、n_Conversionsで指定したASCIIコード格納エリアの大きさが規定値を超える場合(16ビットの場合の規定値: 4、32ビットの場合の規定値: 8)
n_Conversionsで指定した変換データ数が0の場合
変換結果がn_Conversionsで指定したASCIIコード格納エリアの大きさを超える場合
変換結果がエリアを超える場合
POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。
VAR
bStart: BOOL:=FALSE;
sExample1: STRING[32]:='*1234,5678,';
arrayValuesExample1: ARRAY [0..1] OF UINT:=[2(0)];
END_VAR
bStartがON(TRUE)のとき、このファンクションが実行されます。10進ASCIIデータをバイナリデータに変換します。オフセット=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 := 8 ;
NETWORK_BODY
B(B_VARIN,,'%d~',26,2,28,4,);
B(B_VARIN,,2,26,4,28,6,);
B(B_VARIN,,1,26,5,28,7,);
B(B_VAROUT,,arrayValuesExample1,41,2,43,4,);
B(B_F,Adr_Of_VarOffs_I!,,14,2,23,6,,?D@'Var'?DOffs?CAdr);
B(B_VARIN,,sExample1,12,3,14,5,);
B(B_VARIN,,2,12,4,14,6,);
B(B_F,FP_ASCII_TO_BIN!,,28,0,41,7,,?DEN?hs1_Format?ds2_AsciiData?dn_Conversions?dn_AsciiDataStartPosition?AENO?cd_BinaryData);
B(B_CONTACT,,bStart,5,1,7,3,);
L(23,4,28,4);
L(7,2,28,2);
L(1,2,5,2);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
END_BODY
If (bStart) then
FP_ASCII_TO_BIN(s1_Format := '%d,',
s2_AsciiData := Adr_Of_VarOffs(Var := sExample1, Offs := 2),
n_Conversions := 2,
n_AsciiDataStartPosition := 1,
d_BinaryData => arrayValuesExample1);
End_if;