FP_HEX_TO_ASCII

HEX -> ASCII 変換

このFP命令は、実行条件ENTRUEのとき、s_Startで指定された16進データをASCIIコードに変換します。n_Bytesは変換するバイト数を指定します。演算結果はd_Startで指定されたエリアに格納されます。ASCIIコードは、1つの16進文字を表わすのに8ビット(1バイト)必要です。アスキー変換により、演算結果のデータ長は2倍になります。

パラメータ

入力

s_Start (WORD, DWORD)

16進データ

n_Bytes (INT, DINT, UINT, UDINT)

バイト数

出力

d_Start (WORD, INT, UINT)

結果を格納するデータエリアの先頭アドレスサイズはn_Bits * 2 ワード

解説

1バイト分を構成する2文字は、変換後、入れ替わって格納されます。2バイト分を一区切りとして変換します。

エラーフラグ

sys_bIsOperationErrorHold (TRUEになり、TRUEを保持)
  • インデックス修飾時にエリアを超えたとき

  • n_Bytesで指定したバイト数が、s_Startで指定したエリアを超えるとき

  • 計算結果がd_Startで指定したエリアを超えるとき

  • n_Bytes= 0または負の値

sys_bIsOperationErrorNonHold (1回のスキャンに対してTRUE)
  • インデックス修飾時にエリアを超えたとき

  • n_Bytesで指定したバイト数が、s_Startで指定したエリアを超えるとき

  • 計算結果がd_Startで指定したエリアを超えるとき

  • n_Bytes= 0または負の値

16ビットデータ

オフセット

16進データ

オフセット

変換ASCIIコード

同等文字列

s_Start

0

16#ABCD

Þ

d_Start

0

16#4443

DC

n_Bytes

16#0002

16#4241

BA

32ビットデータ

オフセット

16進データ

オフセット

変換ASCIIコード

同等文字列

s_Start

0

16#1234

Þ

d_Start

0

16#3433

43

1

16#5678

1

16#3231

21

n_Bytes

16#0004

16#3837

87

16#3635

65

POUヘッダ

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

	VAR
		bStart: BOOL:=FALSE;
		awInput: ARRAY [0..2] OF WORD:=[16#ABCD,2(0)];
		awResult: ARRAY [0..5] OF WORD:=[6(16#FFFF)];
	END_VAR

POUボディ

変数bStartTRUEにセットされると、このファンクションが実行されます。

LDボディ

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 9 ;
        NETWORK_BODY
B(B_COMMENT,,After conversion: ø^awResult[0]=16#4443ø^awResult[1]=16#4241ø^awResult[2]=16#3030ø^awResult[3]=16#3030ø^awResult[4] is not written,23,0,38,6,);
B(B_CONTACT,,bStart,4,5,6,7,R);
B(B_F,FP_HEX_TO_ASCII!,,12,4,22,9,,?DEN?D@'s'?Dn_Chars?AENO?Cd_Start);
B(B_VARIN,,awInput[0],10,6,12,8,);
B(B_VAROUT,,awResult[0],22,6,24,8,);
B(B_VARIN,,4,10,7,12,9,);
L(1,0,1,9);
L(1,6,4,6);
L(6,6,12,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

STボディ

if (DF(bStart)) then
	FP_HEX_TO_ASCII(s_Start := awInput[0], n_Bytes := 4, d_Start => awResult[0]);
	(* After conversion: 
		awResult[0]=16#4443
		awResult[1]=16#4241
		awResult[2]=16#3030
		awResult[3]=16#3030
		awResult[4] is not written *)
end_if;

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