FP_BCD_TO_ASCII

BCD -> ASCII 변환

이 FP 명령은 트리거 ENTRUE이면 s1의 BCD 코드를 ASCII 코드로 변환합니다. s2_Control에서 변환할 바이트 수와 변환 방향을 지정합니다.

결과는 d_Start에서 지정한 영역에 저장됩니다. 1 BCD 문자를 표현하려면 ASCII 코드에 8비트(1바이트)가 필요합니다. 따라서 ASCII로 변환하면 데이터 길이는 소스 데이터 길이의 두 배가 됩니다.

파라미터

입력

s1 (WORD, DWORD)

BCD 코드

s2_Control (WORD)

바이트 수와 변환 방향

출력

d_Start (WORD, INT, UINT)

결과에 대한 데이터 영역의 시작 어드레스입니다. 크기는 n_Bits * 2 워드입니다.

주석

제어 코드 s2_Control

  1.  (1) 변환할 데이터 크기:

    16비트: 1–2바이트 변환 예정

    32비트: 1-4바이트 변환 예정

  2.  (2) 항상 0
  3.  (3) 변환 방향:

    0: 정방향

    1: 역방향

저장되면 1바이트로 구성된 두 문자가 교환됩니다. 2바이트는 데이터의 1세그먼트로 변환됩니다.

  • 정방향:

  • 역방향:

BCD 문자를 표시하는 ASCII HEX 코드:

BCD 문자

ASCII HEX 코드

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

에러 플래그

sys_bIsOperationErrorHold(TRUE로 전환되어 TRUE로 유지됨)
  • 인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.

  • s1_Start에서 지정한 데이터가 BCD 데이터가 아닌 경우

  • s2_Control에서 지정한 바이트 수가 s1_Start에서 지정한 영역보다 큰 경우

  • 변환 결과가 d_Start에서 지정한 데이터 영역 보다 큰 경우

  • s2_Control = 0인 경우

  • 변환 방향이 범위를 벗어난 경우

  • s2_Control에서 지정한 바이트 수가 4 보다 큰 경우

sys_bIsOperationErrorNonHold(스캔 1회에 대해 TRUE로 전환)
  • 인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.

  • s1_Start에서 지정한 데이터가 BCD 데이터가 아닌 경우

  • s2_Control에서 지정한 바이트 수가 s1_Start에서 지정한 영역보다 큰 경우

  • 변환 결과가 d_Start에서 지정한 데이터 영역 보다 큰 경우

  • s2_Control = 0인 경우

  • 변환 방향이 범위를 벗어난 경우

  • s2_Control에서 지정한 바이트 수가 4 보다 큰 경우

16비트 데이터, 정방향, 2바이트(문자)

오프셋

BCD 문자

오프셋

변환된 ASCII 코드

BCD와 동일

s1

0

16#1234

Þ

d_Start

0

16#3433

43

s2_Control

16#0002

16#3231

21

16비트 데이터, 역방향, 2바이트(문자)

오프셋

BCD 문자

오프셋

변환된 ASCII 코드

BCD와 동일

s1

0

16#1234

Þ

d_Start

0

16#3231

21

s2_Control

16#1002

16#3433

43

32비트 데이터, 정방향, 4바이트(문자)

오프셋

BCD 문자

오프셋

변환된 ASCII 코드

BCD와 동일

s1

0

16#5678

Þ

d_Start

0

16#3837

87

1

16#1234

1

16#3635

65

s2_Control

16#0004

16#3433

43

16#3231

21

32비트 데이터, 역방향, 4바이트(문자)

오프셋

BCD 문자

오프셋

변환된 ASCII 코드

BCD와 동일

s1

0

16#5678

Þ

d_Start

0

16#3231

21

1

16#1234

1

16#3433

43

s2_Control

16#1004

16#3635

65

16#3837

87

POU 헤더

이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다.모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.

	VAR
		bStart: BOOL:=FALSE;
		wInput: WORD:=16#1234;
		awResult: ARRAY [0..2] OF WORD:=[3(0)];
	END_VAR

POU 본문

변수 bStartTRUE로 설정되면 펑션이 실행됩니다.s1_Start의 2바이트는 ASCII 값으로 변환됩니다(역방향).

LD 본문

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 8 ;
        NETWORK_BODY
B(B_COMMENT,,After conversion: ø^awResult[0]=16#3231ø^awResult[1]=16#3433ø^awResult[2] is not written,24,1,39,5,);
B(B_CONTACT,,bStart,4,4,6,6,R);
B(B_F,FP_BCD_TO_ASCII!,,12,3,22,8,,?DEN?D@'s1'?Ds2_Control?AENO?Cd_Start);
B(B_VARIN,,wInput,10,5,12,7,);
B(B_VAROUT,,awResult[0],22,5,24,7,);
B(B_VARIN,,16#1002,10,6,12,8,);
L(1,0,1,8);
L(1,5,4,5);
L(6,5,12,5);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST 본문

If (DF(bStart)) Then
    FP_BCD_TO_ASCII(s1 := wInput, s2_Control := 16#1002,
                    d_Start => awResult[0]);
            (* After conversion: 
			awResult[0]=16#3231
			awResult[1]=16#3433
			awResult[2] is not written *)

End_if;

최종 수정일: 2021-05-19이 페이지에 대한 피드백Panasonic 직통 전화