FP_BIN_TO_ASCII

이진 -> ASCII 변환

이 FP 명령은 s2_BinaryData에서 지정한 영역에 저장된 16비트/32비트 이진 데이터를 ASCII 코드로 변환합니다. 변환 방법은 s1_Format의 제어 문자열에서 지정됩니다. 변환 결과는 d_AsciiData에서 지정한 영역에 저장됩니다.

파라미터

입력

s1_Format (STRING)

따옴표로 묶인 제어 형식 문자열 집합

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

이진 데이터를 저장하는 시작 어드레스

n_Conversions (WORD, INT, UINT)

변환할 수량: 0~65535

n_AsciiDataStartPosition (INT)

ASCII 데이터의 시작 위치: 0-255

출력

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

ASCII 데이터 저장을 위한 시작 어드레스

16비트 PLC에 대한 제어 문자열 s1_Format의 설명 및 예제

s1_Format: 예, +%08lX

예제에서 위치

설명

s1_Format

이진 데이터

ASCII 데이터 변환 결과

코멘트

+

정방향(16진수에만 해당)

'+%4X'

16#B2A

'2AB'

정방향(x, X 지정자가 있는 경우에만 사용 가능)

+ 기호가 생략된 경우: 역방향(기본 설정)

'%4X'

16#B2A

'B2A'

역방향

%

형식 문자열 지정자(필수)

패딩 형식

0

0으로 채우기

'%06x'

16#100

'000100'

폭 6문자, 3개의 선행 0이 있는 10진수 값(i, d 지정자에 허용 안 됨, x, X 지정자에 필수)

8

ASCII 데이터 요소의 폭

'%06d'

100

'100'

3개의 선행 스페이스가 있는 폭 6문자

지정자 앞의 값에 허용되는 범위:

  • d, ld, i, li 지정자 앞 1-15

  • X 지정자 앞 1-4

  • lX 지정자 앞 1-8

I

두 배 길이 지정자

예: 지정자 i 및 l = Ii -> DINT

'+%4Id'

100

'100'

폭 4문자, 변환 결과에 DINT 또는 DWORD 필요

형식 지정자

i

INT

'%6i'

-100

'-100'

폭 6문자, 3개의 선행 스페이스, 부호가 있는 정수

d

INT

'%6d'

100

'000100'

폭 6문자, 3개의 0으로 시작되는 10진수 값

X

16진수 대문자

'%4X'

16#12A

'12A'

폭 4문자, 16진수 대문자

32비트 PLC에 대한 제어 문자열 s1_Format의 설명 및 예제

s1_Format: e.g. +%#12.5lxBCD

예제에서 위치

설명

s1_Format

이진 데이터

ASCII 데이터 변환 결과

코멘트

+

정방향(16진수에만 해당)

'+%4X'

16#B2A

'2AB'

정방향(x, X 또는 b 지정자가 있는 경우에만 사용 가능)

+ 기호가 생략된 경우: 역방향(기본 설정)

'%4X'

16#B2A

'B2A'

역방향

%

형식 문자열 지정자(필수)

패딩 형식

0

0으로 채우기

'%06d'

100

'000100'

폭 6문자, 3개의 0으로 시작되는 10진수 값

+

+ 부호 추가

'%+4d'

100

'+100'

폭 4문자, 10진수 값, + 부호 추가

-

왼쪽 정렬

'%-6d'

100

'100'

폭 6문자, 10진수 값, 왼쪽 정렬

(스페이스): + 기호 대신 스페이스 추가

'%4d'

100

'100'

폭 4문자, 스페이스가 채워진 10진수 값

#

16진수에 0x 삽입

'%#4X'

100

'0X64'

폭 4문자, 0X로 시작되는 16진수 형식의 숫자 값

실수에 대해 항상 소수점 추가

'%#8.0f'

123.45678

'123.'

폭 8문자, 부동 소수점, 스페이스 4개로 시작

12

ASCII 데이터 요소 폭(쉼표 있음 또는 없음)

'%012d'

100

'000000000100'

폭 12문자, 9개의 0으로 시작

폭 없음:

  • FP_BIN_TO_ASCII: 필수 최소 폭 가정

  • FP_ASCII_TO_BINFP_ASCII_CHECK: 쉼표 구분 기호 필요

'%d,'

100

100,

지정된 폭 없음, 쉼표 추가

소수점 다음의 정밀도

.5

소수점 뒤의 모든 자릿수

'%8.3f'

123.45599

'123.456'

폭 8문자, 소수점 다음의 3문자 정밀도

두 배 길이 지정자

I

지정자 길이 두 배

예: 지정자 i 및 l = Ii -> DINT

'+%4Iu'

100

'100'

폭 4문자, 변환 결과에 DINT 또는 DWORD 필요

형식 지정자

i

INT

'%10i'

-100

'-100'

폭 10문자, 스페이스 6개로 시작, 부호가 있는 정수

u

UINT1)

'%10u'

-100

'100'

폭 10문자, 스페이스 7개로 시작, 부호 없는 정수

d

INT

'%6d'

100

'000100'

폭 6문자, 3개의 0으로 시작되는 10진수 값

x

16진수 소문자

'%4x'

16#12A

'12a'

폭 4문자, 16진수 소문자

X

16진수 대문자 1)

'%4X'

16#12A

'12A'

폭 4문자, 16진수 대문자

b

BCD

'%5b'

16#123

'123'

폭 5문자, BCD 데이터

f

부동 소수점

'%-6.2f'

1.2345

'1.23'

폭 6문자, 왼쪽으로 정렬, 소수점 다음의 정밀 2자릿수

e

지수 1.23e10

'%9.3e'

1234.5678

'1.235e+03'

폭 9문자, 소수점 다음의 정밀 3자릿수, 지수 소문자

E

지수 대문자 1.23E10 1)

'%9.3E'

1234.5678

'1.235E+03'

폭 9문자, 소수점 다음의 정밀 3자릿수, 지수 대문자

g

부동 소수점 또는 지수 1)

'%12g'

1234.5678

'1234.57'

폭 12문자, 부동 소수점

G

부동 소수점 또는 지수 대문자1)

'%#9.3G'

1234

'1.E+03'

폭 9문자, 소수점 다음의 정밀도 3문자

  • FP_BIN_TO_ASCII의 경우: 모든 문자열을 변환에 추가 가능

  • FP_ASCII_TO_BINFP_ASCII_CHECK의 경우: 쉼표만 허용

'%8dPANA'

100

'100PANA'

폭 8문자, 10진수, 'PANA' 추가

1) FP 명령 FP_ASCII_TO_BINFP_ASCII_CHECK은 대문자와 소문자를 구별하지 않음

에러 플래그

sys_bIsOperationErrorHold(TRUE로 전환되어 TRUE로 유지됨)
  • sFormat에서 지정한 제어 문자열에 에러가 있는 경우.

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

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

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

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

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

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

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

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

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

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

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

POU 헤더

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

	VAR
		bStart: BOOL:=FALSE;
		iArray1: ARRAY [0..1] OF INT:=[1234,-56];
		iAscii1: ARRAY [0..4] OF WORD:=[5(16#FFFF)];
	END_VAR

POU 본문

변수 bStartFALSE에서 TRUE로 변경되면 함수가 실행됩니다. 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 := 10 ;
        NETWORK_BODY
B(B_VARIN,,'%4d',10,5,12,7,);
B(B_VARIN,,iArray1,10,6,12,8,);
B(B_VARIN,,2,10,7,12,9,);
B(B_VAROUT,,iAscii1,25,5,27,7,);
B(B_CONTACT,,bStart,7,4,9,6,R);
B(B_COMMENT,,Converts two 16-bit units to 2x4 decimal ASCII data. Offset = 1 ASCII character (8-bit).,5,1,38,3,);
B(B_F,FP_BIN_TO_ASCII!,,12,3,25,10,,?DEN?hs1_Format?ds2_BinaryData?dn_Conversions?dn_AsciiDataStartPosition?AENO?cd_AsciiData);
B(B_VARIN,,1,10,8,12,10,);
B(B_COMMENT,,Result iAscii1: 'x1234 -56x',28,8,41,9,);
L(9,5,12,5);
L(1,5,7,5);
L(1,0,1,10);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST 본문

IF DF(bStart) then
    FP_BIN_TO_ASCII(s1_Format := '%4d', 
        s2_BinaryData := iArray1, 
        n_Conversions := 2, 
        d_AsciiData => iAscii1);
END_IF;

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