FP_ASCII_CHECK

ASCII 데이터 체크

이 FP 명령은 s2_AsciiData에서 지정한 영역에 저장된 ASCII 코드가 s1_Format에서 지정한 변환 방법을 사용하여 올바르게 변환될 수 있는지 여부를 확인합니다.

  • 결과가 올바르면 시스템 변수 sys_bIsEqual 및 출력 d_IsValid가 켜집니다.

  • 결과가 잘못되면 시스템 변수 sys_bIsEqual 및 출력 d_IsValid가 꺼집니다.

주석

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_IsValid (BOOL)

ASCII 데이터가 원하는 형식으로 변환될 수 있는 이진수로 구성된 경우 TRUE

제어 코드 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 데이터: '˽12A'

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

    이 예에 유효한 ASCII 데이터: '˽B2A'

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

    이 예에 유효한 ASCII 데이터: '000100'

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

    이 예에 유효한 ASCII 데이터: '+100 ˽ ˽'

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

    이 예에 유효한 ASCII 데이터: '100˽ ˽ ˽'

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

    이 예에 유효한 ASCII 데이터: '˽100'

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

    이 예에 유효한 ASCII 데이터: '˽ ˽ ˽ ˽123.'

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

    이 예에 유효한 ASCII 데이터: '˽123.456'

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

    이 예에 유효한 ASCII 데이터: '˽ ˽ ˽ ˽ ˽ ˽ ˽100'

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

    이 예에 유효한 ASCII 데이터: '˽ ˽ ˽100'

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

    '˽ ˽ ˽ ˽ ˽100PANA'

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

    이 예에 유효한 ASCII 데이터: '100,'

    • FP_BIN_TO_ASCII: 필수 최소 폭 가정

    • FP_ASCII_TO_BINFP_ASCII_CHECK: 쉼표 구분 기호 필요

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

    이 예에 유효한 ASCII 데이터: '˽100'

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

    이 예에 유효한 ASCII 데이터: '˽ ˽ ˽-100'

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

    이 예에 유효한 ASCII 데이터: '000100'

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

    이 예에 유효한 ASCII 데이터: '˽12A'

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

    이 예에 유효한 ASCII 데이터: '˽123'

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

    이 예에 유효한 ASCII 데이터: '1.23˽'

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

    이 예에 유효한 ASCII 데이터: '1.235e+03'

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

    이 예에 유효한 ASCII 데이터: '1.235E+03'

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

    이 예에 유효한 ASCII 데이터: '˽ ˽ ˽ ˽ ˽1234.57'

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

    이 예에 유효한 ASCII 데이터: '˽ ˽ ˽1.E+03'

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

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

    이 예에 유효한 ASCII 데이터: '˽ ˽ ˽ ˽ ˽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;
		sExample1: STRING[32]:='*1234,5678,';
		bIsAsciiValid: BOOL:=FALSE;
	END_VAR

POU 본문

bStartTRUE로 설정된 경우, 형식 문자열이 '%d'이면 명령은 s2_AsciiData에서 연결된 데이터가 10진수 데이터로 변환될 수 있는지 확인합니다.

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_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_VAROUT,,bIsAsciiValid,41,2,43,4,);
B(B_F,FP_ASCII_CHECK!,,28,0,41,7,,?DEN?hs1_Format?ds2_AsciiData?dn_Conversions?dn_AsciiDataStartPosition?AENO?cd_IsValid);
B(B_CONTACT,,bStart,5,1,7,3,);
L(23,4,28,4);
L(1,2,5,2);
L(7,2,28,2);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST 본문

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

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