이진 -> ASCII 변환
이 FP 명령은 s2_BinaryData에서 지정한 영역에 저장된 16비트/32비트 이진 데이터를 ASCII 코드로 변환합니다. 변환 방법은 s1_Format의 제어 문자열에서 지정됩니다. 변환 결과는 d_AsciiData에서 지정한 영역에 저장됩니다.
입력
따옴표로 묶인 제어 형식 문자열 집합
이진 데이터를 저장하는 시작 어드레스
변환할 수량: 0~65535
ASCII 데이터의 시작 위치: 0-255
출력
ASCII 데이터 저장을 위한 시작 어드레스
제어 코드의 위치 |
설명 |
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' |
● |
● |
|
폭 없음
|
'%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' |
- |
● |
|
|
'+%8dPANA' |
- |
● |
● 16비트/32비트 PLC에서 사용 가능
예: '+%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_BIN 및 FP_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' |
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 데이터를 저장하는 영역을 초과하는 경우.
변환 결과가 영역을 초과하는 경우.
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 헤더를 사용합니다.
VAR
bStart: BOOL:=FALSE;
iArray1: ARRAY [0..1] OF INT:=[1234,-56];
iAscii1: ARRAY [0..4] OF WORD:=[5(16#FFFF)];
END_VAR
변수 bStart가 FALSE에서 TRUE로 변경되면 함수가 실행됩니다. 16비트 단위 두 개를 2 x 4 10진수 ASCII 데이터로 변환합니다. 오프셋 = 1 ASCII 문자(8비트).
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
IF DF(bStart) then
FP_BIN_TO_ASCII(s1_Format := '%4d',
s2_BinaryData := iArray1,
n_Conversions := 2,
d_AsciiData => iAscii1);
END_IF;