FP_ASCII_TO_BIN

ASCII ->バイナリ変換

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

注記

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_BinaryData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

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

制御コード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文字長の大文字で順方向の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進形式で表示)

    文字長の値に指定可能な範囲:

    指定子dldiliの前: 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進形式で表示)

エラーフラグ

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;

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