FP_ASCII_TO_BIN

ASCII -> 이진 변환

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

주석

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

파라미터

입력

s1_Format (STRING)

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

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

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

n_Conversions (WORD, INT, UINT)

변환할 수량: 0~65535

n_AsciiDataStartPosition (INT)

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

출력

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

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

제어 코드 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'ASCII 값을 폭이 4자인 대문자로 순방향으로 변환합니다(16비트/32비트 PLC에 유효)

    ASCII 데이터

    이진 데이터에서 변환 결과

    '˽12A'

    16#12A(16진수 형식으로 표시)

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

    ASCII 데이터

    이진 데이터에서 변환 결과

    '˽B2A'

    16#B2A (16진수 형식으로 표시)

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

    ASCII 데이터

    이진 데이터에서 변환 결과

    '000100'

    16#100 (16진수 형식으로 표시)

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

    ASCII 데이터

    이진 데이터에서 변환 결과

    '+100 ˽ ˽'

    100(10진수 형식으로 표시)

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

    ASCII 데이터

    이진 데이터에서 변환 결과

    '100˽ ˽ ˽'

    100(10진수 형식으로 표시)

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

    ASCII 데이터

    이진 데이터에서 변환 결과

    '˽100'

    100(10진수 형식으로 표시)

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

    ASCII 데이터

    이진 데이터에서 변환 결과

    '˽ ˽ ˽ ˽123.'

    123.45678(10진수 형식으로 표시)

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

    ASCII 데이터

    이진 데이터에서 변환 결과

    '˽123.456'

    123.45599(10진수 형식으로 표시)

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

    ASCII 데이터

    이진 데이터에서 변환 결과

    '˽ ˽ ˽ ˽ ˽ ˽ ˽100'

    -100(10진수 형식으로 표시)

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

    ASCII 데이터

    이진 데이터에서 변환 결과

    '˽ ˽ ˽100'

    100(10진수 형식으로 표시)

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

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

    X 지정자 앞 1-4

    lX 지정자 앞 1-8

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

    ASCII 데이터

    이진 데이터에서 변환 결과

    '100,'

    100(10진수 형식으로 표시)

    • FP_BIN_TO_ASCII: 필수 최소 폭 가정

    • FP_ASCII_TO_BINFP_ASCII_CHECK: 쉼표 구분 기호 필요

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

    ASCII 데이터

    이진 데이터에서 변환 결과

    '˽100'

    100(10진수 형식으로 표시)

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

    ASCII 데이터

    이진 데이터에서 변환 결과

    '˽ ˽ ˽-100'

    -100(10진수 형식으로 표시)

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

    ASCII 데이터

    이진 데이터에서 변환 결과

    '000100'

    100(10진수 형식으로 표시)

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

    ASCII 데이터

    이진 데이터에서 변환 결과

    '˽12A'

    16#12A (16진수 형식으로 표시)

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

    ASCII 데이터

    이진 데이터에서 변환 결과

    '˽123'

    16#123 (16진수 형식으로 표시)

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

    ASCII 데이터

    이진 데이터에서 변환 결과

    '1.23˽'

    1.2345(10진수 형식으로 표시)

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

    ASCII 데이터

    이진 데이터에서 변환 결과

    '1.235e+03'

    1234.5678 (10진수 형식으로 표시)

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

    ASCII 데이터

    이진 데이터에서 변환 결과

    '1.235E+03'

    1234.5678 (10진수 형식으로 표시)

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

    ASCII 데이터

    이진 데이터에서 변환 결과

    '˽ ˽ ˽ ˽ ˽1234.57'

    1234.5678 (10진수 형식으로 표시)

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

    ASCII 데이터

    이진 데이터에서 변환 결과

    '˽ ˽ ˽1.E+03'

    1234 (10진수 형식으로 표시)

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

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

    ASCII 데이터

    이진 데이터에서 변환 결과

    '˽ ˽ ˽ ˽ ˽100PANA'

    100(10진수 형식으로 표시)

에러 플래그

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;
		sExample1: STRING[32]:='*1234,5678,';
		arrayValuesExample1: ARRAY [0..1] OF UINT:=[2(0)];
	END_VAR

POU 본문

bStartTRUE로 설정되면 명령이 실행됩니다. 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 := 8 ;
        NETWORK_BODY
B(B_VARIN,,'%d~',26,2,28,4,);
B(B_VARIN,,2,26,4,28,6,);
B(B_VARIN,,1,26,5,28,7,);
B(B_VAROUT,,arrayValuesExample1,41,2,43,4,);
B(B_F,Adr_Of_VarOffs_I!,,14,2,23,6,,?D@'Var'?DOffs?CAdr);
B(B_VARIN,,sExample1,12,3,14,5,);
B(B_VARIN,,2,12,4,14,6,);
B(B_F,FP_ASCII_TO_BIN!,,28,0,41,7,,?DEN?hs1_Format?ds2_AsciiData?dn_Conversions?dn_AsciiDataStartPosition?AENO?cd_BinaryData);
B(B_CONTACT,,bStart,5,1,7,3,);
L(23,4,28,4);
L(7,2,28,2);
L(1,2,5,2);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST 본문

If (bStart) then
    FP_ASCII_TO_BIN(s1_Format := '%d,',
                s2_AsciiData := Adr_Of_VarOffs(Var := sExample1, Offs := 2),
                n_Conversions := 2, 
                n_AsciiDataStartPosition := 1,
                d_BinaryData => arrayValuesExample1);
End_if;

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