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에서 지정한 제어 문자열에 에러가 있는 경우.

  • 형식이 10진수일 때 s1_Control에서 표준 방향(+)이 지정된 경우.

  • s1_Control에서 16진수 지정 시 n_ConversionMethod에서 지정한 변환 단위당 ASCII 문자 숫자가 16비트 데이터에 4, 32비트 데이터에 8을 초과하는 경우.

  • n_ConversionMethod에서 변환할 16비트 또는 32비트(1 또는 2 워드) 숫자에 0이 지정된 경우.

  • n_ConversionMethod에서 지정한 변환할 16비트 또는 32비트 10진수 숫자가 ASCII 데이터를 저장하는 영역을 초과하는 경우.

  • 변환 결과가 영역을 초과하는 경우.

sys_bIsOperationErrorNonHold(스캔 1회에 대해 TRUE로 전환)
  • s1_Control에서 지정한 제어 문자열에 에러가 있는 경우.

  • 형식이 10진수일 때 s1_Control에서 표준 방향(+)이 지정된 경우.

  • s1_Control에서 16진수 지정 시 n_ConversionMethod에서 지정한 변환 단위당 ASCII 문자 숫자가 16비트 데이터에 4, 32비트 데이터에 8을 초과하는 경우.

  • n_ConversionMethod에서 변환할 16비트 또는 32비트(1 또는 2 워드) 숫자에 0이 지정된 경우.

  • n_ConversionMethod에서 지정한 변환할 16비트 또는 32비트 10진수 숫자가 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_ Con-trol

n_Con- version Method

결과 ASCII 데이터

코멘트

데이터 형식

16비트 워드 단위로 오프셋

16진수 값

D

D+1

D+2

D+3

INT, WORD

0

16#5678

16+H

16#204

'78'

'56'

'34'

'12'

표준 방향.

2 x 4 ASCII 문자.

1

16#1234

INT, WORD

0

16#5678

16-H

16#204

'78'

'56'

'12'

'34'

역방향.

2 x 4 ASCII 문자.

1

16#1234

INT, WORD

0

16#0456

16+H

16#203

'56'

'42'

'31'

'$xx$xx'

표준 방향.

2 x 3 ASCII 문자.

1

16#0123

INT, WORD

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 본문

bExecuteTRUE로 설정되면 명령이 실행됩니다. 16비트 단위 두 개를 2 x 4 10진수 ASCII 데이터로 변환합니다. 오프셋 = 1 ASCII 문자(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이 페이지에 대한 피드백Panasonic 직통 전화