이진 -> ASCII 변환
이 FP 명령은 s2_BinaryData에서 지정한 영역에 저장된 16비트/32비트 이진 데이터를 ASCII 코드로 변환합니다. 변환 방법은 s1_Format의 제어 문자열에서 지정됩니다. 변환 결과는 d_AsciiData에서 지정한 영역에 저장됩니다.
입력
따옴표로 묶인 제어 형식 문자열 집합
이진 데이터를 저장하는 시작 어드레스
변환할 수량: 0~65535
ASCII 데이터의 시작 위치: 0-255
출력
ASCII 데이터 저장을 위한 시작 어드레스
s1_Format: 예, +%08lX
예제에서 위치 |
설명 |
s1_Format |
이진 데이터 |
ASCII 데이터 변환 결과 |
코멘트 |
|
---|---|---|---|---|---|---|
+ |
정방향(16진수에만 해당) |
'+%4X' |
16#B2A |
'2AB' |
정방향(x, X 지정자가 있는 경우에만 사용 가능) |
|
+ 기호가 생략된 경우: 역방향(기본 설정) |
'%4X' |
16#B2A |
'B2A' |
역방향 |
||
% |
형식 문자열 지정자(필수) |
|||||
패딩 형식 |
||||||
0 |
0으로 채우기 |
'%06x' |
16#100 |
'000100' |
폭 6문자, 3개의 선행 0이 있는 10진수 값(i, d 지정자에 허용 안 됨, x, X 지정자에 필수) |
|
8 |
ASCII 데이터 요소의 폭 |
'%06d' |
100 |
'100' |
3개의 선행 스페이스가 있는 폭 6문자 지정자 앞의 값에 허용되는 범위:
|
|
I |
두 배 길이 지정자 예: 지정자 i 및 l = Ii -> DINT |
'+%4Id' |
100 |
'100' |
폭 4문자, 변환 결과에 DINT 또는 DWORD 필요 |
|
형식 지정자 |
||||||
i |
INT |
'%6i' |
-100 |
'-100' |
폭 6문자, 3개의 선행 스페이스, 부호가 있는 정수 |
|
d |
INT |
'%6d' |
100 |
'000100' |
폭 6문자, 3개의 0으로 시작되는 10진수 값 |
|
X |
16진수 대문자 |
'%4X' |
16#12A |
'12A' |
폭 4문자, 16진수 대문자 |
s1_Format: e.g. +%#12.5lxBCD
예제에서 위치 |
설명 |
s1_Format |
이진 데이터 |
ASCII 데이터 변환 결과 |
코멘트 |
|
---|---|---|---|---|---|---|
+ |
정방향(16진수에만 해당) |
'+%4X' |
16#B2A |
'2AB' |
정방향(x, X 또는 b 지정자가 있는 경우에만 사용 가능) |
|
+ 기호가 생략된 경우: 역방향(기본 설정) |
'%4X' |
16#B2A |
'B2A' |
역방향 |
||
% |
형식 문자열 지정자(필수) |
|||||
패딩 형식 |
||||||
0 |
0으로 채우기 |
'%06d' |
100 |
'000100' |
폭 6문자, 3개의 0으로 시작되는 10진수 값 |
|
+ |
+ 부호 추가 |
'%+4d' |
100 |
'+100' |
폭 4문자, 10진수 값, + 부호 추가 |
|
- |
왼쪽 정렬 |
'%-6d' |
100 |
'100' |
폭 6문자, 10진수 값, 왼쪽 정렬 |
|
(스페이스): + 기호 대신 스페이스 추가 |
'%4d' |
100 |
'100' |
폭 4문자, 스페이스가 채워진 10진수 값 |
||
# |
16진수에 0x 삽입 |
'%#4X' |
100 |
'0X64' |
폭 4문자, 0X로 시작되는 16진수 형식의 숫자 값 |
|
실수에 대해 항상 소수점 추가 |
'%#8.0f' |
123.45678 |
'123.' |
폭 8문자, 부동 소수점, 스페이스 4개로 시작 |
||
12 |
ASCII 데이터 요소 폭(쉼표 있음 또는 없음) |
'%012d' |
100 |
'000000000100' |
폭 12문자, 9개의 0으로 시작 |
|
폭 없음:
|
'%d,' |
100 |
100, |
지정된 폭 없음, 쉼표 추가 |
||
소수점 다음의 정밀도 |
||||||
.5 |
소수점 뒤의 모든 자릿수 |
'%8.3f' |
123.45599 |
'123.456' |
폭 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' |
100 |
'000100' |
폭 6문자, 3개의 0으로 시작되는 10진수 값 |
|
x |
16진수 소문자 |
'%4x' |
16#12A |
'12a' |
폭 4문자, 16진수 소문자 |
|
X |
16진수 대문자 1) |
'%4X' |
16#12A |
'12A' |
폭 4문자, 16진수 대문자 |
|
b |
BCD |
'%5b' |
16#123 |
'123' |
폭 5문자, BCD 데이터 |
|
f |
부동 소수점 |
'%-6.2f' |
1.2345 |
'1.23' |
폭 6문자, 왼쪽으로 정렬, 소수점 다음의 정밀 2자릿수 |
|
e |
지수 1.23e10 |
'%9.3e' |
1234.5678 |
'1.235e+03' |
폭 9문자, 소수점 다음의 정밀 3자릿수, 지수 소문자 |
|
E |
지수 대문자 1.23E10 1) |
'%9.3E' |
1234.5678 |
'1.235E+03' |
폭 9문자, 소수점 다음의 정밀 3자릿수, 지수 대문자 |
|
g |
부동 소수점 또는 지수 1) |
'%12g' |
1234.5678 |
'1234.57' |
폭 12문자, 부동 소수점 |
|
G |
부동 소수점 또는 지수 대문자1) |
'%#9.3G' |
1234 |
'1.E+03' |
폭 9문자, 소수점 다음의 정밀도 3문자 |
|
|
'%8dPANA' |
100 |
'100PANA' |
폭 8문자, 10진수, 'PANA' 추가 |
1) FP 명령 FP_ASCII_TO_BIN 및 FP_ASCII_CHECK은 대문자와 소문자를 구별하지 않음
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;