F250_BTOA

バイナリ ->ASCII変換

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

パラメータ

入力

s1_Control (STRING)

制御文字

  1.  (1) D: 10進ASCIIデータへ変換

    H: 16進ASCIIデータへ変換

  2.  (2) + 順方向

    - 逆方向

  3.  (3) 16: 16ビット(1ワード)の変換

    32: 32ビット(2ワード)の変換

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

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

n_ConversionMethod (WORD, INT, UINT)

変換方法

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

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

出力

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

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

解説

F命令を使用する代わりに、対応するFP7命令を使用することをおすすめします。FP_BIN_TO_ASCII

エラーフラグ

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

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

  • s1_Control.で指定した変換フォーマットが16進数のときに、n_ConversionMethodで指定したアスキーコード格納エリアの大きさが規定値を超える場合 (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#0214

  1.  (1) 変換単位あたりのASCII文字数(制限の注意を参照)
  2.  (2) レジスタコンテンツ(16進)
  3.  (3) 文字列(注意を参照)
  4.  (4) 結果を格納するためのASCII文字列単位(8ビット)のオフセット

    'x'の値は変化しない

  5.  (5) 変換する16ビット(1ワード)または32ビット(2ワード)データの数
  6.  (6) レジスタコンテンツ(16進)
  7.  (7) 値(10進数)
注記

ASCIIデータ桁数(8ビット)について

  • 16ビットバイナリデータを16進ASCIIデータへ変換するとき:

    範囲:16#1~16#4

  • 32ビットバイナリデータを16進ASCIIデータへ変換するとき:

    範囲:16#1~16#8

  • バイナリデータを10進ASCIIデータへ変換するとき:

    範囲:16#1~16#F

変換例:

  • s1_ Control=16+H, n_Conversion Method=16#204

    順方向2 x 4 ASCII文字

    バイナリデータ

    ASCIIデータの変換結果

    データ型

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

    HEX (16進数)

    D

    D+1

    D+2

    D+3

    INTWORD

    0

    16#5678

    '78'

    '56'

    '34'

    '12'

    1

    16#1234

  • s1_ Control=16-H, n_Conversion Method=16#204

    逆方向2 x 4 ASCII文字

    バイナリデータ

    ASCIIデータの変換結果

    データ型

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

    HEX (16進数)

    D

    D+1

    D+2

    D+3

    INTWORD

    0

    16#5678

    '78'

    '56'

    '12'

    '34'

    1

    16#1234

  • s1_ Control=16+H, n_Conversion Method=16#203

    順方向2 x 3 ASCII文字

    バイナリデータ

    ASCIIデータの変換結果

    データ型

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

    HEX (16進数)

    D

    D+1

    D+2

    D+3

    INTWORD

    0

    16#0456

    '56'

    '42'

    '31'

    '$xx$xx'

    1

    16#0123

  • s1_ Control=16-H, n_Conversion Method=16#203

    逆方向2 x 3 ASCII文字

    バイナリデータ

    ASCIIデータの変換結果

    データ型

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

    HEX (16進数)

    D

    D+1

    D+2

    D+3

    INTWORD

    0

    16#0456

    '45'

    '61'

    '23'

    '$xx$xx'

    1

    16#0123

  • s1_ Control=32+H, n_Conversion Method=16#108

    順方向1 x 8 ASCII文字

    バイナリデータ

    ASCIIデータの変換結果

    データ型

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

    HEX (16進数)

    D

    D+1

    D+2

    D+3

    DINTDWORD

    0

    16#12345678

    '78'

    '56'

    '34'

    '12'

  • s1_ Control=32-H, n_Conversion Method=16#108

    逆方向1 x 8 ASCII文字

    バイナリデータ

    ASCIIデータの変換結果

    データ型

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

    HEX (16進数)

    D

    D+1

    D+2

    D+3

    DINTDWORD

    0

    16#12345678

    '12'

    '34'

    '56'

    '78'

  • s1_ Control=32+H, n_Conversion Method=16#105

    順方向1 x 5 ASCII文字

    バイナリデータ

    ASCIIデータの変換結果

    データ型

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

    HEX (16進数)

    D

    D+1

    D+2

    D+3

    DINTDWORD

    0

    16#00012345

    '45'

    '23'

    '1$xx'

    '$xx$xx'

  • s1_ Control=32-H, n_Conversion Method=16#105

    逆方向1 x 5 ASCII文字

    バイナリデータ

    ASCIIデータの変換結果

    データ型

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

    HEX (16進数)

    D

    D+1

    D+2

    D+3

    DINTDWORD

    0

    16#00012345

    '12'

    '34'

    '5$xx'

    '$xx$xx'

'x'の値は変化しない

POUヘッダ

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

	VAR
		bExecute: BOOL:=FALSE;
		iArray1: ARRAY [0..1] OF INT:=[1234,-56];
		iAscii1: ARRAY [0..4] OF WORD:=[5(16#FFFF)];
	END_VAR

POUボディ

bExecuteがON(TRUE)のとき、このファンクションが実行されます。2つの16ビットバイナリデータを"2 x 4"の10進アスキーデータに変換します。オフセット=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 := 9 ;
        NETWORK_BODY
B(B_F,F250_BTOA!,Instance,9,3,21,9,,?DEN?Ds1_Control?Ds2_BinaryData?Dn_ConversionMethod?AENO?Cd_AsciiData);
B(B_VARIN,,'16-D',7,5,9,7,);
B(B_VARIN,,iArray1,7,6,9,8,);
B(B_VARIN,,16#214,7,7,9,9,);
B(B_VAROUT,,iAscii1,21,5,23,7,);
B(B_CONTACT,,bExecute,3,4,5,6,R);
B(B_COMMENT,,Result iAscii1: 'x1234 -56x',22,7,35,8,);
B(B_COMMENT,,Converts two 16-bit units to 2x4 decimal ASCII data. Offset = 1 ASCII character (8-bit).,2,1,35,3,);
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
    F250_BTOA(s1_Control := '16-D', 
        s2_BinaryData := iArray1, 
        n_ConversionMethod := 16#214, 
        d_AsciiData => iAscii1);
END_IF;

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