バイナリ -> ASCII変換
このFP命令は、s2_BinaryDataで指定したエリアに格納されている16ビット/32ビットのバイナリデータをASCIIコードに変換します。変換方法は、s1_Formatの制御文字列で指定します。変換結果は、d_AsciiDataで指定したエリアに格納されます。
入力
引用符にセットされた制御文字列およびフォーマット文字列
バイナリデータを格納するための先頭アドレス
変換するデータの数: 0~65535
ASCIIデータの開始位置: 0~255
出力
ASCIIデータを格納するための先頭アドレス
s1_Format: 例: +%08lX
例での位置 |
説明 |
s1_Format |
バイナリデータ |
ASCIIデータの変換結果 |
コメント |
|
---|---|---|---|---|---|---|
+ |
正転(16進数のみ) |
'+%4X' |
16#B2A |
'2AB' |
正転(指定子x、Xでのみ指定可能) |
|
+符号が省略されている場合: 逆転(デフォルト設定) |
'%4X' |
16#B2A |
'B2A' |
逆転 |
||
% |
フォーマット文字列指定子(必須) |
|||||
パディングフォーマット |
||||||
0 |
ゼロ埋め |
'%06x' |
16#100 |
'000100' |
文字長6、10進数、先頭にゼロ3つ(禁止指定子はi、d、必須指定子はx、X) |
|
8 |
ASCIIデータ要素の長さ |
'%06d' |
100 |
'100' |
文字長6、先頭にスペース3つ 指定子前の値の指定可能範囲:
|
|
I |
倍長指定子 例: 指定子l付きi = Ii -> DINT |
'+%4Id' |
100 |
'100' |
文字長4、変換結果にはDINTまたはDWORDが必要 |
|
フォーマット指定子 |
||||||
i |
INT |
'%6i' |
-100 |
'-100' |
文字長6、先頭にスペース3つ、符号付き整数 |
|
d |
INT |
'%6d' |
100 |
'000100' |
文字長6、10進数、先頭にゼロ3つ |
|
X |
16進数大文字 |
'%4X' |
16#12A |
'12A' |
文字長4、16進数大文字 |
s1_Format: 例: +%#12.5lxBCD
例での位置 |
説明 |
s1_Format |
バイナリデータ |
ASCIIデータの変換結果 |
コメント |
|
---|---|---|---|---|---|---|
+ |
正転(16進数のみ) |
'+%4X' |
16#B2A |
'2AB' |
正転(指定子x、Xまたはbでのみ指定可能) |
|
+符号が省略されている場合: 逆転(デフォルト設定) |
'%4X' |
16#B2A |
'B2A' |
逆転 |
||
% |
フォーマット文字列指定子(必須) |
|||||
パディングフォーマット |
||||||
0 |
ゼロ埋め |
'%06d' |
100 |
'000100' |
文字長6、10進数、先頭にゼロ3つ |
|
+ |
+符号を付加 |
'%+4d' |
100 |
'+100' |
文字長4、10進数、+符号付加 |
|
- |
左揃え |
'%-6d' |
100 |
'100' |
文字長6、10進数、左揃え |
|
(スペース) +符号の代わりにスペースを付加 |
'%4d' |
100 |
'100' |
文字長4、10進数、スペース挿入 |
||
# |
16進数に0xを挿入 |
'%#4X' |
100 |
'0X64' |
文字長4、0Xから始まる16進形式の数値 |
|
実数には必ず小数点を付加 |
'%#8.0f' |
123.45678 |
'123.' |
文字長8、浮動小数点数、先頭にスペース4つ |
||
12 |
ASCIIデータ要素の長さ(カンマあり/なし) |
'%012d' |
100 |
'000000000100' |
文字長12、先頭にゼロ9つ |
|
文字長なし:
|
'%d,' |
100 |
100 |
長さ指定なし、カンマの付加 |
||
小数点以下の精度 |
||||||
.5 |
任意の小数点以下の桁数 |
'%8.3f' |
123.45599 |
'123.456' |
文字長8、小数点以下3文字の精度 |
|
倍長指定子 |
||||||
I |
指定子の倍長 例: 指定子l付きi = Ii -> DINT |
'+%4Iu' |
100 |
'100' |
文字長4、変換結果にはDINTまたはDWORDが必要 |
|
フォーマット指定子 |
||||||
i |
INT |
'%10i' |
-100 |
'-100' |
文字長10、先頭にスペース6つ、符号付き整数 |
|
u |
UINT1) |
'%10u' |
-100 |
'100' |
文字長10、先頭にスペース7つ、符号なし整数 |
|
d |
INT |
'%6d' |
100 |
'000100' |
文字長6、10進数、先頭にゼロ3つ |
|
x |
16進数小文字 |
'%4x' |
16#12A |
'12a' |
文字長4、16進数小文字 |
|
X |
16進数大文字1) |
'%4X' |
16#12A |
'12A' |
文字長4、16進数大文字 |
|
b |
BCD |
'%5b' |
16#123 |
'123' |
文字長5、BCDデータ |
|
f |
浮動小数点型実数 |
'%-6.2f' |
1.2345 |
'1.23' |
文字長6、左揃え、小数点以下2桁の精度 |
|
e |
指数1.23e10 |
'%9.3e' |
1234.5678 |
'1.235e+03' |
文字長9、小数点以下3桁の精度、指数小文字 |
|
E |
指数大文字1.23E10 1) |
'%9.3E' |
1234.5678 |
'1.235E+03' |
文字長9、小数点以下3桁の精度、指数大文字 |
|
g |
浮動小数点型実数または指数1) |
'%12g' |
1234.5678 |
'1234.57' |
文字長12、浮動小数点数 |
|
G |
浮動小数点型実数または指数大文字 1) |
'%#9.3G' |
1234 |
'1.E+03' |
文字長9、小数点以下3文字の精度 |
|
|
'%8dPANA' |
100 |
'100PANA' |
文字長8、10進数、'PANA'付加 |
1) FP命令FP_ASCII_TO_BINおよびFP_ASCII_CHECKは、大文字、小文字を区別しません。
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;
iArray1: ARRAY [0..1] OF INT:=[1234,-56];
iAscii1: ARRAY [0..4] OF WORD:=[5(16#FFFF)];
END_VAR
変数bStartがFALSEから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 := 10 ;
NETWORK_BODY
B(B_VARIN,,'%4d',10,5,12,7,);
B(B_VARIN,,iArray1,10,6,12,8,);
B(B_VARIN,,2,10,7,12,9,);
B(B_VAROUT,,iAscii1,25,5,27,7,);
B(B_CONTACT,,bStart,7,4,9,6,R);
B(B_COMMENT,,Converts two 16-bit units to 2x4 decimal ASCII data. Offset = 1 ASCII character (8-bit).,5,1,38,3,);
B(B_F,FP_BIN_TO_ASCII!,,12,3,25,10,,?DEN?hs1_Format?ds2_BinaryData?dn_Conversions?dn_AsciiDataStartPosition?AENO?cd_AsciiData);
B(B_VARIN,,1,10,8,12,10,);
B(B_COMMENT,,Result iAscii1: 'x1234 -56x',28,8,41,9,);
L(9,5,12,5);
L(1,5,7,5);
L(1,0,1,10);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(bStart) then
FP_BIN_TO_ASCII(s1_Format := '%4d',
s2_BinaryData := iArray1,
n_Conversions := 2,
d_AsciiData => iAscii1);
END_IF;