F251_ATOB

ASCII ->バイナリ変換

s2_AsciiDataで指定したエリアに格納されているASCIIコードを16ビット/32ビットバイナリデータに変換します。変換方法は、s1_Controlの4文字の制御文字列に従い、n_ConversionMethodで指定します。変換結果は、d_BinaryDataで指定したエリアに格納されます。

パラメータ

入力

s1_Control (STRING)

制御文字列。例: D-16

  • D 10進ASCIIデータへ変換
  • H 16進ASCIIデータへ変換
  • + 順方向
  • - 逆方向
  • 16 ASCIIデータを16ビットデータに変換、-32,768~+32,767 (16#0~16#FFFF)
  • 32 ASCIIデータを32ビットデータに変換、-2,147,483,648~+2,147,483,647 (16#0~16#FFFFFFFF)
s2_AsciiData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

ASCIIデータを格納するエリアの先頭

n_ConversionMethod (WORD, INT, UINT)

変換方法。例: 16#404

  1.  (1) 変換単位あたりのASCIIデータ数
  2.  (2) ASCII文字列単位(8ビット)のオフセット
  3.  (3) 変換する16ビット(1ワード)または32ビット(2ワード)データの数

(詳細は、以下の説明をご参照ください)

出力

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

バイナリデータを格納するエリアの先頭

エラーフラグ

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

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

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

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

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

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

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

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

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

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

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

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

変換方法の説明 例: n_ConversionMethod = 16#0413 (ASCIIデータ'0123456789012'の場合)

カンマ区切りデータの場合は、数値データの最大数を指定します。10進ASCIIデータの場合は、スペース、記号、小数点が含まれます。データ範囲は、制御文字列s1_Controlによって制限されます。

  1.  (1) 変換単位あたりのASCIIデータ数
  2.  (2) レジスタコンテンツ(16進)
  3.  (3) 文字列
  4.  (4) 結果を格納するためのASCII文字列単位(8ビット)のオフセット
  5.  (5) 変換する16ビット(1ワード)または32ビット(2ワード)データの数

ASCIIデータ'0123456789ABCDEF'の変換例

n_Conversion 方法

s1_ Control

ASCIIデータ

バイナリデータ

コメント

データ型

オフセット1)

16進の値

 

H+16

16#404

D:'01'

D+1:'23'

D+2:'45'

D+3:'67'

D+4:'89'

D+5:'AB'

D+6:'CD'

D+7:'EF'

INT, WORD

0

16#2301

順方向

4 x 4 ASCII文字

1

16#6745

2

16#AB89

3

16#EFCD

H-16

16#404

INT, WORD

0

6#0123

逆方向

4 x 4 ASCII文字

1

16#4567

2

16#89AB

3

16#CDEF

H+16

16#403

INT, WORD

0

16#*201

順方向

3 x 4 ASCII文字

1

16#*534

2

16#*867

3

16#*B9A

H-16

16#403

INT, WORD

0

16#*012

逆方向

3 x 4 ASCII文字

1

16#*345

2

16#*678

3

6#*9AB

H+32

16#208

DINT, DWORD

0

16#67452301

順方向

8 x 2 ASCII文字

2

16#EFCDAB89

H-32

16#208

DINT, WORD

0

16#01234567

逆方向

8 x 2 ASCII文字

2

16#89ABCDEF

H+32

16#205

DINT, DWORD

0

16#***42301

順方向

5 x 2 ASCII文字

2

16#***97856

H-32

16#205

DINT, DWORD

0

16#***01234

逆方向

5 x 2 ASCII文字

2

16#***56789

1) 16ビットワード単位でのオフセット

※余った文字は0になります。

POUヘッダ

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

	VAR
		bExecute: BOOL:=FALSE;
		iArray2: ARRAY [0..1] OF INT:=[2(0)];
			(*Begin ASCII: _1,23,04,-5,6_*)
		iAscii1: ARRAY [0..4] OF WORD:=[5(16#FFFF)];
	END_VAR

POUボディ

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

LDボディ

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 9 ;
        NETWORK_BODY
B(B_F,F251_ATOB!,Instance,9,3,21,9,,?DEN?Ds1_Control?Ds2_AsciiData?Dn_ConversionMethod?AENO?Cd_BinaryData);
B(B_VARIN,,'D-16',7,5,9,7,);
B(B_VARIN,,iAscii1,7,6,9,8,);
B(B_VARIN,,16#214,7,7,9,9,);
B(B_VAROUT,,iArray2,21,5,23,7,);
B(B_CONTACT,,bExecute,3,4,5,6,R);
B(B_COMMENT,,Result iArray2: [1234~-56],22,7,35,8,);
B(B_COMMENT,,Converts 2x4 decimal ASCII data to binary data. Offset = 1 ASCII character (8-bit).,2,1,35,2,);
L(1,5,3,5);
L(5,5,9,5);
L(1,0,1,9);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

STボディ

IF DF(bExecute) then
    F251_ATOB(s1_Control := 'D-16', 
    s2_AsciiData := iAscii1, 
    n_ConversionMethod := 16#214, 
    d_BinaryData => iArray2);
END_IF;

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