FP_ASCII_TO_BCD

ASCII -> BCD変換

このFP命令は、実行条件ENTRUEのときs1_Startで指定された16進ASCIIコードをBCDデータに変換します。 s2_Controlは変換するバイト数と変換方向を指定します。

結果はdに格納されます。

パラメータ

入力

s1_Start (WORD, INT, UINT)

先頭アドレス

s2_Control (WORD)

変換するバイト数と変換方向

出力

d (WORD, DWORD)

変換バイト

解説

  • 制御コードs2_Controlの指定

    1.  (1) 変換元データサイズ

      16ビット: 1~2バイトを変換

      32ビット: 1~4バイトを変換

    2.  (2) 常時0
    3.  (3) 変換方向:

      0: 正転

      1: 逆転

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

    • 順方向:

    • 逆方向:

  • ASCII HEXコードとBCDの対応表:

    BCDデータ

    ASCII HEXコード

    0123456789 16#30 16#31 16#32 16#33 16#34 16#35 16#36 16#37 16#38 16#39

符号あり/符号なし16ビットデータ、順方向、4文字

オフセット

ASCIIコード

BCD相当

オフセット

変換BCDデータ

s1_Start

0

16#3231

21

Þ

d

0

16#3412

1

16#3433

3

1

s2_Control

16#0004

16ビットデータ、逆方向、4文字

オフセット

ASCIIコード

BCD相当

オフセット

変換BCDデータ

s1_Start

0

16#3231

21

Þ

d

0

16#1234

1

16#3433

43

1

s2_Control

16#1004

32ビットデータ、順方向、8文字

オフセット

ASCIIコード

BCD相当

オフセット

変換BCDデータ

s1_Start

0

16#3231

21

Þ

d

0

16#3412

1

16#3433

3

1

16#7856

2

16#3635

65

2

3

16#3837

87

3

s2_Control

16#0008

32ビットデータ、逆方向、8文字

オフセット

ASCIIコード

BCD相当

オフセット

変換BCDデータ

s1_Start

0

16#3231

21

Þ

d

0

16#5678

1

16#3433

43

1

16#1234

2

16#3635

65

2

3

16#3837

87

3

s2_Control

16#1008

32ビットデータ、逆方向、7文字

奇数が変換されると、変換方向が"順方向"の場合、最終変換バイトのビット位置 0~3 に 0 が入力されます。変換方向が逆方向の場合、ビット位置4-7に0が入力されます。

オフセット

ASCIIコード

BCD相当

オフセット

変換BCDデータ

s1_Start

0

16#3231

21

Þ

d

0

16#4567

1

16#3433

43

1

16#0123

2

16#3635

65

2

3

16#3837

87

3

s2_Control

16#1007

エラーフラグ

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

  • 16#30~16#39以外のASCII文字が指定されているとき

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

  • 変換結果がdで指定したデータエリアを超えるとき

  • s2_Control = 0

  • 変換方向が範囲外であるとき

  • s2_Controlで指定したバイト数が、8を超えるとき

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

  • 16#30~16#39以外のASCII文字が指定されているとき

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

  • 変換結果がdで指定したデータエリアを超えるとき

  • s2_Control = 0

  • 変換方向が範囲外であるとき

  • s2_Controlで指定したバイト数が、8を超えるとき

POUヘッダ

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

	VAR
		bStart: BOOL:=FALSE;
			(*activates the function*)
		wASCIIInput: WORD:=16#3031;
		wControlCode: WORD:=16#2;
			(*specifies the operation:
digit 0: the number of bytes
to convert
digit 1,2: has to be zero
digit 3: nomal or reverse direction*)
		wConversionResult: WORD:=0;
			(*result after a 0->1 leading
edge from start:
[16#2033,0]*)
	END_VAR

POUボディ

変数bStartTRUEにセットされると、このファンクションが実行されます。ASCII入力値の2文字が順方向に変換されます。

LDボディ

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_CONTACT,,bStart,5,2,7,4,);
B(B_VARIN,,wASCIIInput,11,3,13,5,);
B(B_VARIN,,wControlCode,11,4,13,6,);
B(B_VAROUT,,wConversionResult,23,3,25,5,);
B(B_F,FP_ASCII_TO_BCD!,,13,1,23,6,,?DEN?Ds1_Start?Ds2_Control?AENO?Cd);
L(1,3,5,3);
L(7,3,13,3);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

STボディ

if bStart then
    FP_ASCII_TO_BCD(s1_Start := wASCIIInput, 
                    s2_Control := wControlCode, 
                    d => wConversionResult);
END_IF;

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