FP_ASCII_CHECK

ASCIIデータチェック

このFP命令は、s2_AsciiDataで指定したエリアに格納されているASCIIコードをs1_Formatで指定した変換方法を使用して正しく変換できるかチェックします。

  • 結果が正しい場合、システム変数sys_bIsEqualと出力d_IsValidがONになります。

  • 結果が正しくない場合、システム変数sys_bIsEqualと出力d_IsValidがOFFになります。

パラメータ

入力

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_IsValid (BOOL)

ASCIIデータが目的のフォーマットに変換可能な2進数で構成されている場合、TRUE

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

s1_Format: 例: +%08lX

例での位置

説明

s1_Format

ASCIIデータ

コメント

+

正転(16進数のみ)

'+%4X'

'2AB'

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

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

'%4X'

'B2A'

逆転

%

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

パディングフォーマット

0

ゼロ埋め

'%06x'

'000100'

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

8

ASCIIデータ要素の長さ

'%06d'

'100'

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

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

  • 指定子dldiliの前: 1~15

  • 指定子Xの前: 1~4

  • 指定子lXの前: 1~8

I

倍長指定子

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

'+%4Id'

'100'

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

フォーマット指定子

i

INT

'%6i'

'-100'

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

d

INT

'%6d'

'000100'

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

X

16進数大文字

'%4X'

'12A'

文字長4、16進数大文字

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

s1_Format: 例: +%#12.5lxBCD

例での位置

説明

s1_Format

ASCIIデータ

コメント

+

正転(16進数のみ)

'+%4X'

'2AB'

正転(指定子xXまたはbでのみ指定可能)

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

'%4X'

'B2A'

逆転

%

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

パディングフォーマット

0

ゼロ埋め

'%06d'

'000100'

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

+

+符号を付加

'%+4d'

'+100'

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

-

左揃え

'%-6d'

'100'

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

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

'%4d'

'100'

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

#

16進数に0xを挿入

'%#4X'

'0X64'

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

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

'%#8.0f'

'123.'

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

12

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

'%012d'

'000000000100'

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

文字長なし:

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

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

'%d,'

100

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

小数点以下の精度

.5

任意の小数点以下の桁数

'%8.3f'

'123.456'

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

倍長指定子

I

指定子の倍長

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

'+%4Iu'

'100'

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

フォーマット指定子

i

INT

'%10i'

'-100'

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

u

UINT1)

'%10u'

'100'

文字長10、先頭にスペース7つ、符号なし整数

d

INT

'%6d'

'000100'

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

x

16進数小文字

'%4x'

'12a'

文字長4、16進数小文字

X

16進数大文字1)

'%4X'

'12A'

文字長4、16進数大文字

b

BCD

'%5b'

'123'

文字長5、BCDデータ

f

浮動小数点型実数

'%-6.2f'

'1.23'

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

e

指数1.23e10

'%9.3e'

'1.235e+03'

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

E

指数大文字1.23E10 1)

'%9.3E'

'1.235E+03'

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

g

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

'%12g'

'1234.57'

文字長12、浮動小数点数

G

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

'%#9.3G'

'1.E+03'

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

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

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

'%8dPANA'

'100PANA'

文字長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,';
		bIsAsciiValid: BOOL:=FALSE;
	END_VAR

POUボディ

bStartTRUEにセットされている場合、フォーマット文字列が'%d'のとき、s2_AsciiDataのデータが10進データに変換できるかチェックします。

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_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_VAROUT,,bIsAsciiValid,41,2,43,4,);
B(B_F,FP_ASCII_CHECK!,,28,0,41,7,,?DEN?hs1_Format?ds2_AsciiData?dn_Conversions?dn_AsciiDataStartPosition?AENO?cd_IsValid);
B(B_CONTACT,,bStart,5,1,7,3,);
L(23,4,28,4);
L(1,2,5,2);
L(7,2,28,2);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

STボディ

If (bStart) then
    FP_ASCII_CHECK(s1_Format := '%d,',
                   s2_AsciiData := Adr_Of_VarOffs(Var := sExample1, Offs := 2),
                   n_Conversions := 2, 
                   n_AsciiDataStartPosition := 1,
                   d_IsValid => bIsAsciiValid);
End_if;

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