F250_BTOA

バイナリ ->ASCII変換

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

エラーフラグ

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

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

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

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

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

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

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

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

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

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

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

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

変換方法の説明 例: n_ConversionMethod = 16#0214

  1.  (1) 変換単位あたりのASCII文字数(制限の注意を参照)
  2.  (2) レジスタの内容(16進数)
  3.  (3) 文字列(注意を参照)
  4.  (4) 結果を格納するアスキー文字列単位(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_ Con-trol

n_Con- version Method

変換後のアスキーデータ

コメント

データ型

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

Hexの値

D

D+1

D+2

D+3

INTWORD

0

16#5678

16+H

16#204

'78'

'56'

'34'

'12'

順方向

2 x 4 ASCII文字

1

16#1234

INTWORD

0

16#5678

16-H

16#204

'78'

'56'

'12'

'34'

逆方向

2 x 4 ASCII文字

1

16#1234

INTWORD

0

16#0456

16+H

16#203

'56'

'42'

'31'

'$xx$xx'

順方向

2 x 3 ASCII文字

1

16#0123

INTWORD

0

16#0456

16-H

16#203

'45'

'61'

'23'

'$xx$xx'

逆方向

2 x 3 ASCII文字

1

16#0123

DINT, DWORD

0

16#1234 5678

32+H

16#108

'78'

'56'

'34'

'12'

順方向

1 x 8 ASCII文字

DINT, DWORD

0

16#1234 5678

32-H

16#108

'12'

'34'

'56'

'78'

逆方向

1 x 8 ASCII文字

DINT, DWORD

0

16#00012345

32+H

16#105

'45'

'23'

'1$xx'

'$xx$xx'

順方向

1 x 5 ASCII文字

DINT, DWORD

0

16#00012345

32-H

16#105

'12'

'34'

'5$xx'

'$xx$xx'

逆方向

1 x 5 ASCII文字

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

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