ASCII -> 이진 변환
이 FP 명령은 s2_AsciiData에서 지정한 영역에 저장된 ASCII 코드를 16비트/32비트 이진 데이터로 변환합니다. s1_Format에서 변환 방법이 지정됩니다. 변환 결과는 d_BinaryData에서 지정한 영역에 저장됩니다.
입력
따옴표로 묶인 제어 형식 문자열 집합
ASCII 데이터 저장을 위한 시작 어드레스
변환할 수량: 0~65535
ASCII 데이터의 시작 위치: 0-255
출력
이진 데이터를 저장하는 시작 어드레스
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문자 지정자 앞의 값에 허용되는 범위:
|
|
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진수 대문자 |
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으로 시작 |
|
폭 없음:
|
'%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문자 |
|
|
'%8dPANA' |
'100PANA' |
100 |
폭 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;
sExample1: STRING[32]:='*1234,5678,';
arrayValuesExample1: ARRAY [0..1] OF UINT:=[2(0)];
END_VAR
bStart이 TRUE로 설정되면 명령이 실행됩니다. 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 := 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
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;