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 데이터 저장을 위한 시작 어드레스

제어 코드 s1_Format의 각 자릿수에 대한 설명:

제어 코드의 위치

설명

s1_Format

16비트 PLC

32비트 PLC

변환 방향

     

+

순방향(지정자가 x, X인 16진수만 해당)

'+%4X'

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

'%4X'

%

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

 

패딩 형식

     

0

0으로 채우기

'%06x'

-

+

+ 기호 추가

'%+4d'

-

-

왼쪽 정렬

'%-6d'

-

˽

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

'%˽4d'

-

#

16진수에 0x 삽입

'%#4X'

-

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

'%#8.0f'

-

8

ASCII 데이터 요소의 폭

'%08d'

폭 없음

  • FP_BIN_TO_ASCII: 필수 최소 폭 가정

  • FP_ASCII_TO_BINFP_ASCII_CHECK: 쉼표 구분 기호 필요

'%d,'

-

소수점 다음의 정밀도

     

.5

소수점 뒤의 모든 자릿수

'%8.5f'

-

I

두 배 길이 지정자

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

'+%4ld'

형식 지정자

     

i

INT

'%10i'

u

UINT

'%10u'

-

d

INT

'%6d'

x

16진수 소문자

'+%4x'

X

16진수 대문자

'+%4X'

b

BCD

'+%5b'

-

f

부동 소수점

'+%-6.2f'

-

e

지수 1.23e10

'+%9.3e'

-

E

지수 대문자 1.23E10

'+%9.3E'

-

g

부동 소수점 또는 지수

'+%12g'

-

G

부동 또는 지수 대문자

'+%9.3G'

-

  • FP_BIN_TO_ASCII의 경우: 모든 문자열을 변환에 추가 가능(예: 'PANA')

  • FP_ASCII_TO_BINFP_ASCII_CHECK의 경우: 쉼표만 허용

'+%8dPANA'

-

16비트/32비트 PLC에서 사용 가능

제어 문자열 s1_Format의 예

  • 예: '+%4X'는 이진 값을 폭이 4자인 대문자로 순방향으로 변환합니다(16비트/32비트 PLC에 유효)

    이진 데이터

    ASCII 데이터 변환 결과

    16#12A

    '˽12A'

  • 예: '%4X'는 이진 값을 폭이 4자인 대문자로 역방향으로 변환합니다(16비트/32비트 PLC에 유효)

    이진 데이터

    ASCII 데이터 변환 결과

    16#B2A

    '˽B2A'

  • 예: '%06d'는 이진 값을 폭이 6자이고 선행 0이 3개인 10진수 값으로 변환합니다 (32비트 PLC에만 유효)

    이진 데이터

    ASCII 데이터 변환 결과

    16#100

    '000100'

  • 예: '%+4d'는 이진 값을 폭이 4자이고 10진수이며 + 기호가 추가된 값으로 변환합니다 (32비트 PLC에만 유효)

    이진 데이터

    ASCII 데이터 변환 결과

    100

    '+100 ˽ ˽'

  • 예: '%-6d'는 이진 값을 폭 6자의 왼쪽 정렬된 값으로 변환합니다 (32비트 PLC에만 유효)

    이진 데이터

    ASCII 데이터 변환 결과

    100

    '100˽ ˽ ˽'

  • 예: '%˽4d'는 이진 값을 폭 4자, 선행 스페이스 1개로 이루어진 값으로 변환합니다 (32비트 PLC에만 유효)

    이진 데이터

    ASCII 데이터 변환 결과

    100

    '˽100'

  • 예: '%#8.0f'는 이진 값을 폭 8자, 부동 소수점 수, 선행 스페이스 4개로 이루어진 값으로 변환합니다 (32비트 PLC에만 유효)

    이진 데이터

    ASCII 데이터 변환 결과

    123.45678

    '˽ ˽ ˽ ˽123.'

  • 예: '%8.3f'는 이진 값을 폭 8자, 소수점 다음 3자 정밀도의 값으로 변환합니다 (32비트 PLC에만 유효)

    이진 데이터

    ASCII 데이터 변환 결과

    123.45599

    '˽123.456'

  • 예: '+%10u'는 이진 값을 폭 10자, 선행 스페이스 7개, 기호 없는 정수로 이루어진 값으로 변환합니다 (32비트 PLC에만 유효)

    이진 데이터

    ASCII 데이터 변환 결과

    -100

    '˽ ˽ ˽ ˽ ˽ ˽ ˽100'

  • 예: '%06d'는 이진 값을 폭 6자, 선행 스페이스 3개로 이루어진 값으로 변환합니다(16비트/32비트 PLC에 유효)

    이진 데이터

    ASCII 데이터 변환 결과

    100

    '˽ ˽ ˽100'

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

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

    X 지정자 앞 1-4

    lX 지정자 앞 1-8

    지정된 폭 없음, 쉼표 추가(예: '%d,') (32비트 PLC에만 유효)

    이진 데이터

    ASCII 데이터 변환 결과

    100

    '100,'

    • FP_BIN_TO_ASCII: 필수 최소 폭 가정

    • FP_ASCII_TO_BINFP_ASCII_CHECK: 쉼표 구분 기호 필요

  • 예: '+%4ld'는 이진 값을 폭 4자로 변환하며, 변환된 결과에는 DINT 또는 DWORD 형식이 필요합니다(16비트/32비트 PLC에 유효)

    이진 데이터

    ASCII 데이터 변환 결과

    100

    '˽100'

  • 예: '+%6i'는 이진 값을 폭 6자, 선행 스페이스 3개, 기호 있는 정수로 이루어진 값을 순방향으로 변환합니다(16비트/32비트 PLC에 유효)

    이진 데이터

    ASCII 데이터 변환 결과

    -100

    '˽ ˽ ˽-100'

  • 예: '+%6d'는 이진 값을 폭이 6자이고 선행 0이 3개가 있는 값으로 순방향으로 변환합니다(16비트/32비트 PLC에 유효)

    이진 데이터

    ASCII 데이터 변환 결과

    100

    '000100'

  • 예: '+%4X'는 이진 값을 폭이 4자인 대문자 형태의 16진수로 순방향으로 변환합니다(16비트/32비트 PLC에 유효)

    이진 데이터

    ASCII 데이터 변환 결과

    16#12A

    '˽12A'

  • 예: '+%5b'는 이진 값을 폭이 5자인 값, BCD 데이터로 변환합니다 (32비트 PLC에만 유효)

    이진 데이터

    ASCII 데이터 변환 결과

    16#123

    '˽123'

  • 예: '+%-6.2f'는 이진 값을 폭 6자, 소수점 다음 2자 정밀도의 왼쪽 정렬된 값으로 변환합니다 (32비트 PLC에만 유효)

    이진 데이터

    ASCII 데이터 변환 결과

    1.2345

    '1.23˽'

  • 예: '+%9.3e'는 이진 값을 폭 9자, 소수점 다음 3자 정밀도, 지수 소문자의 값으로 변환합니다 (32비트 PLC에만 유효)

    이진 데이터

    ASCII 데이터 변환 결과

    1234.5678

    '1.235e+03'

  • 예: '1.235E+03'는 이진 값을 폭 9자, 소수점 다음 3자 정밀도, 지수 대문자의 값으로 변환합니다 (32비트 PLC에만 유효)

    이진 데이터

    ASCII 데이터 변환 결과

    1234.5678

    '1.235E+03'

  • 예: '+%12g'는 이진 값을 폭 12자의 부동 소수점 수로 이루어진 값으로 변환합니다 (32비트 PLC에만 유효)

    이진 데이터

    ASCII 데이터 변환 결과

    1234.5678

    '˽ ˽ ˽ ˽ ˽1234.57'

  • 예: '+%9.3G'는 이진 값을 폭 9자, 소수점 다음 3자 정밀도, 부동 소수점 수, 지수 대문자의 값으로 변환합니다 (32비트 PLC에만 유효)

    이진 데이터

    ASCII 데이터 변환 결과

    1234

    '˽ ˽ ˽1.E+03'

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

    예: '+%8dPANA'는 이진 값을 폭이 8자인 10진수로 변환하고, 그 뒤에, 'PANA'라는 문자열을 덧붙입니다 (32비트 PLC에만 유효)

    이진 데이터

    ASCII 데이터 변환 결과

    100

    '˽ ˽ ˽ ˽ ˽100PANA'

에러 플래그

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;

최종 수정일: 2025-01-10이 페이지에 대한 피드백Panasonic 직통 전화