FP_ASCII_CHECK

ASCIIデータチェック

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

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

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

注記

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

パラメータ

入力

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

制御コードs1_Formatの各桁の説明:

制御コード内の位置

説明

s1_Format

16ビットPLC

32ビットPLC

変換方向

     

+

正方向(16進数で指定子xまたはXが指定されている場合のみ)

'+%4X'

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

'%4X'

%

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

 

パディングフォーマット

     

0

ゼロ埋め

'%06x'

-

+

+符号を付加

'%+4d'

-

-

左揃え

'%-6d'

-

˽

(スペース)プラス記号の代わりにスペースを追加

'%˽4d'

-

#

16進数に0xを挿入

'%#4X'

-

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

'%#8.0f'

-

8

ASCIIデータ要素の長さ

'%08d'

文字長なし

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

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

'%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'

-

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

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

'+%8dPANA'

-

16ビット/32ビットPLCで利用可能

制御文字列s1_Formatの例

  • 例: '+%4X'は、バイナリ値を4文字長で大文字の順方向の値に変換します(16ビット/32ビットPLCの場合)

    Valid ASCII data for this example: '˽12A'

  • 例: '%4X'は、バイナリ値を4文字長で大文字の逆方向の値に変換します(16ビット/32ビットPLCの場合)

    Valid ASCII data for this example: '˽B2A'

  • 例: '%06d'は、バイナリ値を6文字長で先頭の3桁がゼロの10進数の値に変換します(32ビットPLCの場合のみ)

    Valid ASCII data for this example: '000100'

  • 例: '%+4d'は、バイナリ値を4文字長で+記号付き10進数の値に変換します(32ビットPLCの場合のみ)

    Valid ASCII data for this example: '+100 ˽ ˽'

  • 例: '%-6d'は、バイナリ値を6文字長で左揃えの値に変換します(32ビットPLCの場合のみ)

    Valid ASCII data for this example: '100˽ ˽ ˽'

  • 例: '%˽4d'は、バイナリ値を4文字長で先頭に1つのスペースを持つ値に変換します(32ビットPLCの場合のみ)

    Valid ASCII data for this example: '˽100'

  • 例: '%#8.0f'は、バイナリ値を、8文字長で浮動小数点数の先頭に4つのスペースがある値に変換します(32ビットPLCの場合のみ)

    Valid ASCII data for this example: '˽ ˽ ˽ ˽123.'

  • 例: '%8.3f'は、バイナリ値を8文字長で小数点以下3桁の精度を持つ値に変換します(32ビットPLCの場合のみ)

    Valid ASCII data for this example: '˽123.456'

  • 例: '+%10u'は、バイナリ値を、10文字長で先頭に7つのスペースがある、符号なし整数の値に変換します(32ビットPLCの場合のみ)

    Valid ASCII data for this example: '˽ ˽ ˽ ˽ ˽ ˽ ˽100'

  • 例: '%06d'は、バイナリ値を、6文字長で先頭に3つのスペースがある値に変換します(16ビット/32ビットPLCの場合)

    Valid ASCII data for this example: '˽ ˽ ˽100'

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

    '˽ ˽ ˽ ˽ ˽100PANA'

    長さの指定がない場合、カンマを付加。例:'%d,' (32ビットPLCの場合のみ)

    Valid ASCII data for this example: '100,'

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

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

  • 例: '+%4ld'は、バイナリ値を4文字長の値に変換します。変換結果にはDINTまたはDWORDが必要です(16ビット/32ビットPLCの場合)

    Valid ASCII data for this example: '˽100'

  • 例: '+%6i'は、バイナリ値を6文字長で先頭に3つのスペースがある、符号付き整数の順方向の値に変換します(16ビット/32ビットPLCの場合)

    Valid ASCII data for this example: '˽ ˽ ˽-100'

  • 例: '+%6d'は、バイナリ値を6文字長で先頭に3つのゼロがある順方向の値に変換します(16ビット/32ビットPLCの場合)

    Valid ASCII data for this example: '000100'

  • 例: '+%4X'は、バイナリ値を4文字長で大文字の16進数、順方向の値に変換します(16ビット/32ビットPLCの場合)

    Valid ASCII data for this example: '˽12A'

  • 例: '+%5b'は、バイナリ値を5文字長のBCDデータの値に変換します(32ビットPLCの場合のみ)

    Valid ASCII data for this example: '˽123'

  • 例: '+%-6.2f'は、バイナリ値を6文字長で小数点以下2桁の精度を持つ、左揃えの値に変換します(32ビットPLCの場合のみ)

    Valid ASCII data for this example: '1.23˽'

  • 例: '+%9.3e'は、バイナリ値を9文字長で小数点以下3桁の精度を持つ、小文字の指数表記の値に変換します(32ビットPLCの場合のみ)

    Valid ASCII data for this example: '1.235e+03'

  • 例: '1.235E+03'は、バイナリ値を9文字長で小数点以下3桁の精度を持つ、大文字の指数表記の値に変換します(32ビットPLCの場合のみ)

    Valid ASCII data for this example: '1.235E+03'

  • 例: '+%12g'は、バイナリ値を12文字長で浮動小数点数を持つ値に変換します(32ビットPLCの場合のみ)

    Valid ASCII data for this example: '˽ ˽ ˽ ˽ ˽1234.57'

  • 例: '+%9.3G'は、バイナリ値を9文字長で小数点以下3桁の精度の、浮動小数点数で大文字の指数表記に変換します(32ビットPLCの場合のみ)

    Valid ASCII data for this example: '˽ ˽ ˽1.E+03'

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

    例: '+%8dPANA'は、バイナリ値を8文字長で10進数の、'PANA'を追加した値に変換します(32ビットPLCの場合のみ)

    Valid ASCII data for this example: '˽ ˽ ˽ ˽ ˽100PANA'

エラーフラグ

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;

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