FP_ASCII_TO_BIN

ASCII -> バイナリ変換

このFP命令は、s2_AsciiDataで指定したエリアに格納されているASCIIコードを16ビット/32ビットバイナリデータに変換します。変換方法は、s1_Formatで指定します。変換結果は、d_BinaryDataで指定したエリアに格納されます。

パラメータ

入力

s1_Format (STRING)

引用符にセットされた制御文字列およびフォーマット文字列

s2_AsciiData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

ASCIIデータを格納するための先頭アドレス

n_Conversions (WORD, INT, UINT)

変換するデータの数: 0~65535

n_AsciiDataStartPosition (INT)

ASCIIデータの開始位置: 0~255

出力

d_BinaryData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

バイナリデータを格納するための先頭アドレス

16ビットPLC用制御文字列s1_Formatの説明および使用例

s1_Format: 例: +%08lX

例での位置

説明

s1_Format

ASCIIデータ

バイナリデータの変換結果

コメント

+

正転(16進数のみ)

'+%4X'

'2AB'

16#B2A

正転(指定子xXでのみ指定可能)

+符号が省略されている場合: 逆転(デフォルト設定)

'%4X'

'B2A'

16#B2A

逆転

%

フォーマット文字列指定子(必須)

パディングフォーマット

0

ゼロ埋め

'%06x'

'000100'

16#100

文字長6、10進数、先頭にゼロ3つ(禁止指定子はid、必須指定子はxX)

8

ASCIIデータ要素の長さ

'%06d'

'100'

100

文字長6、先頭にスペース3つ

指定子前の値の指定可能範囲:

  • 指定子dldiliの前: 1~15

  • 指定子Xの前: 1~4

  • 指定子lXの前: 1~8

I

倍長指定子

例: 指定子l付きi = Ii -> DINT

'+%4Id'

'100'

100

文字長4、変換結果にはDINTまたはDWORDが必要

フォーマット指定子

i

INT

'%6i'

'-100'

-100

文字長6、先頭にスペース3つ、符号付き整数

d

INT

'%6d'

'000100'

100

文字長6、10進数、先頭にゼロ3つ

X

16進数大文字

'%4X'

'12A'

16#12A

文字長4、16進数大文字

32ビットPLC用制御文字列s1_Formatの説明および使用例

s1_Format: 例: +%#12.5lxBCD

例での位置

説明

s1_Format

ASCIIデータ

バイナリデータの変換結果

コメント

+

正転(16進数のみ)

'+%4X'

'2AB'

16#B2A

正転(指定子xXでのみ指定可能)

+符号が省略されている場合: 逆転(デフォルト設定)

'%4X'

'B2A'

16#B2A

逆転

%

フォーマット文字列指定子(必須)

パディングフォーマット

0

ゼロ埋め

'%06d'

'000100'

100

文字長6、10進数、先頭にゼロ3つ

+

+符号を付加

'%+4d'

'+100'

100

文字長4、10進数、+符号付加

-

左揃え

'%-6d'

'100'

100

文字長6、10進数、左揃え

(スペース) +符号の代わりにスペースを付加

'%4d'

'100'

100

文字長4、10進数、先頭にスペース

#

16進数に0xを挿入

'%#4X'

'0X64'

100

文字長4、0Xから始まる16進形式の数値

実数には必ず小数点を付加

'%#8.0f'

'123.'

123.45678

文字長8、浮動小数点数、先頭にスペース4つ

12

ASCIIデータ要素の長さ(カンマあり/なし)

'%012d'

'000000000100'

100

文字長12、先頭にゼロ9つ

文字長なし:

  • FP_BIN_TO_ASCII: 必要最小限の長さを適用

  • FP_ASCII_TO_BINおよびFP_ASCII_CHECK: カンマ区切りが必要

'%d,'

100

100

長さ指定なし、カンマの付加

小数点以下の精度

.5

任意の小数点以下の桁数

'%8.3f'

'123.456'

123.45599

文字長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'

'000100'

100

文字長6、10進数、先頭にゼロ3つ

x

16進数小文字

'%4x'

'12a'

16#12A

文字長4、16進数小文字

X

16進数大文字1)

'%4X'

'12A'

16#12A

文字長4、16進数大文字

b

BCD

'%5b'

'123'

16#123

文字長5、BCDデータ

f

浮動小数点数

'%-6.2f'

'1.23'

1.2345

文字長6、左揃え、小数点以下2桁の精度

e

指数1.23e10

'%9.3e'

'1.235e+03'

1234.5678

文字長9、小数点以下3桁の精度、指数小文字

E

指数大文字1.23E10 1)

'%9.3E'

'1.235E+03'

1234.5678

文字長9、小数点以下3桁の精度、指数大文字

g

浮動小数点型実数または指数1)

'%12g'

'1234.57'

1234.5678

文字長12、浮動小数点数

G

浮動小数点型実数または指数大文字 1)

'%#9.3G'

'1.E+03'

1234

文字長9、小数点以下3文字の精度

  • FP_BIN_TO_ASCIIの場合: 変換に任意の文字列を付加することが可能

  • FP_ASCII_TO_BINおよびFP_ASCII_CHECKの場合: カンマのみ許可

'%8dPANA'

'100PANA'

100

文字長8、10進数、'PANA'付加

1) FP命令FP_ASCII_TO_BINおよびFP_ASCII_CHECKは、大文字、小文字を区別しません。

エラーフラグ

sys_bIsOperationErrorHold (TRUEになり、TRUEを保持)
  • sFormatで指定した制御文字列に異常がある場合

  • sFormatで指定した変換フォーマットが10進数のときに、変換方向を順方向 (+) とした場合

  • s1_Formatで指定した変換フォーマットが16進数のときに、n_Conversionsで指定したASCIIコード格納エリアの大きさが規定値を超える場合(16ビットの場合の規定値: 4、32ビットの場合の規定値: 8)

  • n_Conversionsで指定した変換データ数が0の場合

  • 変換結果がn_Conversionsで指定したASCIIコード格納エリアの大きさを超える場合

  • 変換結果がエリアを超える場合

sys_bIsOperationErrorNonHold (1回のスキャンに対してTRUE)
  • sFormatで指定した制御文字列に異常がある場合

  • sFormatで指定した変換フォーマットが10進数のときに、変換方向を順方向 (+) とした場合

  • s1_Formatで指定した変換フォーマットが16進数のときに、n_Conversionsで指定したASCIIコード格納エリアの大きさが規定値を超える場合(16ビットの場合の規定値: 4、32ビットの場合の規定値: 8)

  • n_Conversionsで指定した変換データ数が0の場合

  • 変換結果がn_Conversionsで指定したASCIIコード格納エリアの大きさを超える場合

  • 変換結果がエリアを超える場合

POUヘッダ

POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。

	VAR
		bStart: BOOL:=FALSE;
		sExample1: STRING[32]:='*1234,5678,';
		arrayValuesExample1: ARRAY [0..1] OF UINT:=[2(0)];
	END_VAR

POUボディ

bStartがON(TRUE)のとき、このファンクションが実行されます。10進ASCIIデータをバイナリデータに変換します。オフセット=ASCII 1文字(8ビット)

LDボディ

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

STボディ

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;

最終修正日: 2021-11-24このページに関するフィードバックお問い合わせ窓口