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'の変換例

  • s1_ Control=H+16, n_ConversionMethod=16#404

    順方向4 x 4 ASCII文字

    ASCIIデータ

    バイナリデータ

    データ型

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

    HEX (16進数)

    D

    D+1

    D+2

    D+3

    D+4

    D+5

    D+6

    D+7

    INTWORD

    0

    16#2301

    '01'

    '23'

    '45'

    '67'

    '89'

    '0B'

    'CD'

    'EF'

    1

    16#6745

     

    2

    16#AB89

    3

    16#EFCD

  • s1_ Control=H-16, n_ConversionMethod=16#404

    逆方向4 x 4 ASCII文字

    ASCIIデータ

    バイナリデータ

    データ型

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

    HEX (16進数)

    D

    D+1

    D+2

    D+3

    D+4

    D+5

    D+6

    D+7

    INTWORD

    0

    6#0123

    '01'

    '23'

    '45'

    '67'

    '89'

    '0B'

    'CD'

    'EF'

    1

    16#4567

     

    2

    16#89AB

    3

    16#CDEF

  • s1_ Control=H+16, n_ConversionMethod=16#403

    順方向3 x 4 ASCII文字

    ASCIIデータ

    バイナリデータ

    データ型

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

    HEX (16進数)

    D

    D+1

    D+2

    D+3

    D+4

    D+5

    D+6

    D+7

    INTWORD

    0

    16#*201

    '01'

    '23'

    '45'

    '67'

    '89'

    '0B'

    'CD'

    'EF'

    1

    16#*534

     

    2

    16#*867

    3

    16#*B9A

  • s1_ Control=H-16, n_ConversionMethod=16#403

    逆方向3 x 4 ASCII文字

    ASCIIデータ

    バイナリデータ

    データ型

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

    HEX (16進数)

    D

    D+1

    D+2

    D+3

    D+4

    D+5

    D+6

    D+7

    INTWORD

    0

    16#*012

    '01'

    '23'

    '45'

    '67'

    '89'

    '0B'

    'CD'

    'EF'

    1

    16#*345

     

    2

    16#*678

    3

    6#*9AB

  • s1_ Control=H+32, n_ConversionMethod=16#802

    順方向8 x 2 ASCII文字

    ASCIIデータ

    バイナリデータ

    データ型

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

    HEX (16進数)

    D

    D+1

    D+2

    D+3

    D+4

    D+5

    D+6

    D+7

    DINTDWORD

    0

    16#67452301

    '01'

    '23'

    '45'

    '67'

    '89'

    '0B'

    'CD'

    'EF'

    2

    16#EFCDAB89

  • s1_ Control=H-32, n_ConversionMethod=16#802

    逆方向8 x 2 ASCII文字

    ASCIIデータ

    バイナリデータ

    データ型

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

    HEX (16進数)

    D

    D+1

    D+2

    D+3

    D+4

    D+5

    D+6

    D+7

    DINTDWORD

    0

    16#01234567

    '01'

    '23'

    '45'

    '67'

    '89'

    '0B'

    'CD'

    'EF'

    2

    16#89ABCDEF

  • s1_ Control=H+32, n_ConversionMethod=16#502

    順方向5 x 2 ASCII文字

    ASCIIデータ

    バイナリデータ

    データ型

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

    HEX (16進数)

    D

    D+1

    D+2

    D+3

    D+4

    D+5

    D+6

    D+7

    DINTDWORD

    0

    16#***42301

    '01'

    '23'

    '45'

    '67'

    '89'

    '0B'

    'CD'

    'EF'

    2

    16#***97856

  • s1_ Control=H-32, n_ConversionMethod=16#502

    逆方向5 x 2 ASCII文字

    ASCIIデータ

    バイナリデータ

    データ型

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

    HEX (16進数)

    D

    D+1

    D+2

    D+3

    D+4

    D+5

    D+6

    D+7

    DINTDWORD

    0

    16#***01234

    '01'

    '23'

    '45'

    '67'

    '89'

    '0B'

    'CD'

    'EF'

    2

    16#***56789

※ 余った文字は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;

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