FP_ASCII_TO_BIN

ASCII -> 이진 변환

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

파라미터

입력

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)

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

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

s1_Format: 예, +%08lX

예제에서 위치

설명

s1_Format

ASCII 데이터

이진 데이터에서 변환 결과

코멘트

+

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

'+%4X'

'2AB'

16#B2A

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

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

'%4X'

'B2A'

16#B2A

역방향

%

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

패딩 형식

0

0으로 채우기

'%06x'

'000100'

16#100

폭 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'

'000100'

100

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

X

16진수 대문자

'%4X'

'12A'

16#12A

폭 4문자, 16진수 대문자

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

s1_Format: e.g. +%#12.5lxBCD

예제에서 위치

설명

s1_Format

ASCII 데이터

이진 데이터에서 변환 결과

코멘트

+

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

'+%4X'

'2AB'

16#B2A

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

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

'%4X'

'B2A'

16#B2A

역방향

%

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

패딩 형식

0

0으로 채우기

'%06d'

'000100'

100

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

+

+ 부호 추가

'%+4d'

'+100'

100

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

-

왼쪽 정렬

'%-6d'

'100'

100

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

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

'%4d'

'100'

100

폭 4문자, 스페이스로 시작되는 10진수 값

#

16진수에 0x 삽입

'%#4X'

'0X64'

100

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

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

'%#8.0f'

'123.'

123.45678

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

12

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

'%012d'

'000000000100'

100

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

폭 없음:

  • FP_BIN_TO_ASCII: 필수 최소 폭 가정

  • FP_ASCII_TO_BINFP_ASCII_CHECK: 쉼표 구분 기호 필요

'%d,'

100,

100

지정된 폭 없음, 쉼표 추가

소수점 다음의 정밀도

.5

소수점 뒤의 모든 자릿수

'%8.3f'

'123.456'

123.45599

폭 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'

'000100'

100

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

x

16진수 소문자

'%4x'

'12a'

16#12A

폭 4문자, 16진수 소문자

X

16진수 대문자 1)

'%4X'

'12A'

16#12A

폭 4문자, 16진수 대문자

b

BCD

'%5b'

'123'

16#123

폭 5문자, BCD 데이터

f

부동 소수점

'%-6.2f'

'1.23'

1.2345

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

e

지수 1.23e10

'%9.3e'

'1.235e+03'

1234.5678

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

E

지수 대문자 1.23E10 1)

'%9.3E'

'1.235E+03'

1234.5678

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

g

부동 소수점 또는 지수 1)

'%12g'

'1234.57'

1234.5678

폭 12문자, 부동 소수점

G

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

'%#9.3G'

'1.E+03'

1234

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

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

  • FP_ASCII_TO_BINFP_ASCII_CHECK의 경우: 쉼표만 허용

'%8dPANA'

'100PANA'

100

폭 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;
		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;

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