F251_ATOB

ASCII -> 이진 변환

s2_AsciiData에서 지정한 영역에 저장된 ASCII 코드를 16비트/32비트 이전 데이터로 전환됩니다. 변환 방법은 s1_Control의 제어 문자 4개에 따라 n_ConversionMethod에서 지정됩니다. 변환 결과는 d_BinaryData에서 지정한 영역에 저장됩니다.

파라미터

입력

s1_Control (STRING)

제어 문자열, 예: D-16

  • D 10진수 ASCII 데이터 변환
  • H 16진수 ASCII 데이터 변환
  • + 통상 방향
  • - 역방향
  • 16 ASCII 데이터를 16비트 데이터로, -32,768을 +32,767로(16#0을 16#FFFF로) 변환합니다.
  • 32 ASCII 데이터를 32비트 데이터로, -2,147,483,648을 +2,147,483,647로(16#0을 16#FFFFFFFF로) 변환합니다.
s2_AsciiData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

ASCII 데이터를 저장하는 시작 영역

n_ConversionMethod (WORD, INT, UINT)

변환 방법 예: 16#404

  1.  (1) 변환된 단위 당 ASCII 문자수
  2.  (2) ASCII 문자 단위 오프셋(8비트)
  3.  (3) 변환된 16비트(1워드) 또는 32비트(2워드) 단위수

(자세한 내용은 다음 표의 설명 참조)

출력

d_BinaryData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

이전 데이터를 저장하는 시작 영역

에러 플래그

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 = ASCII 데이터 '0123456789012'의 16#0413)

콤마로 구분된 데이터의 경우 숫자 데이터의 최대수를 지정합니다. 10진수 ASCII 데이터에는 스페이스, 기호 및 소수점이 포함됩니다. 데이터 범위는 제어 문자열 s1_Control에 의해 제한됩니다.

  1.  (1) 변환된 단위 당 ASCII 문자수
  2.  (2) 레지스터 콘텐츠(16진수)
  3.  (3) 문자열
  4.  (4) 결과를 저장하는 ASCII 문자 단위(8비트)의 오프셋
  5.  (5) 변환할 16비트(1워드) 또는 32비트(2워드) 단위수

ASCII 데이터 '0123456789ABCDEF'의 변환 예제

n_Conversion 방법

s1_ Control

ASCII 데이터

이진 데이터

코멘트

데이터 형식

오프셋1)

16진수 값

 

H+16

16#404

D:'01'

D+1:'23'

D+2:'45'

D+3:'67'

D+4:'89'

D+5:'AB'

D+6:'CD'

D+7:'EF'

INT, WORD

0

16#2301

통상 방향

4 x 4 ASCII 문자

1

16#6745

2

16#AB89

3

16#EFCD

H-16

16#404

INT, WORD

0

6#0123

역방향

4 x 4 ASCII 문자

1

16#4567

2

16#89AB

3

16#CDEF

H+16

16#403

INT, WORD

0

16#*201

통상 방향

3 x 4 ASCII 문자

1

16#*534

2

16#*867

3

16#*B9A

H-16

16#403

INT, WORD

0

16#*012

역방향

3 x 4 ASCII 문자

1

16#*345

2

16#*678

3

6#*9AB

H+32

16#208

DINT, DWORD

0

16#67452301

통상 방향

8 x 2 ASCII 문자

2

16#EFCDAB89

H-32

16#208

DINT, WORD

0

16#01234567

역방향

8 x 2 ASCII 문자

2

16#89ABCDEF

H+32

16#205

DINT, DWORD

0

16#***42301

통상 방향

5 x 2 ASCII 문자

2

16#***97856

H-32

16#205

DINT, DWORD

0

16#***01234

역방향

5 x 2 ASCII 문자

2

16#***56789

1) 16비트 워드 단위의 오프셋

*추가 문자는 '0'이 됩니다.

POU 헤더

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

	VAR
		bExecute: BOOL:=FALSE;
		iArray2: ARRAY [0..1] OF INT:=[2(0)];
			(*Begin ASCII: _1,23,04,-5,6_*)
		iAscii1: ARRAY [0..4] OF WORD:=[5(16#FFFF)];
	END_VAR

POU 본문

bExecuteTRUE로 설정되면 명령이 실행됩니다. 2 x 4 10진수 ASCII 문자가 이진 데이터로 변환됩니다. 오프셋 = 0 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,F251_ATOB!,Instance,9,3,21,9,,?DEN?Ds1_Control?Ds2_AsciiData?Dn_ConversionMethod?AENO?Cd_BinaryData);
B(B_VARIN,,'D-16',7,5,9,7,);
B(B_VARIN,,iAscii1,7,6,9,8,);
B(B_VARIN,,16#214,7,7,9,9,);
B(B_VAROUT,,iArray2,21,5,23,7,);
B(B_CONTACT,,bExecute,3,4,5,6,R);
B(B_COMMENT,,Result iArray2: [1234~-56],22,7,35,8,);
B(B_COMMENT,,Converts 2x4 decimal ASCII data to binary data. Offset = 1 ASCII character (8-bit).,2,1,35,2,);
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
    F251_ATOB(s1_Control := 'D-16', 
    s2_AsciiData := iAscii1, 
    n_ConversionMethod := 16#214, 
    d_BinaryData => iArray2);
END_IF;

최종 수정일: 2020-02-21이 페이지에 대한 피드백Panasonic 직통 전화