ASCII -> 이진 변환
이 FP 명령은 s2_AsciiData에서 지정한 영역에 저장된 ASCII 코드를 16비트/32비트 이진 데이터로 변환합니다. s1_Format에서 변환 방법이 지정됩니다. 변환 결과는 d_BinaryData에서 지정한 영역에 저장됩니다.
FP 명령 FP_ASCII_TO_BIN 및 FP_ASCII_CHECK은 대문자와 소문자를 구별하지 않음
입력
따옴표로 묶인 제어 형식 문자열 집합
ASCII 데이터 저장을 위한 시작 어드레스
변환할 수량: 0~65535
ASCII 데이터의 시작 위치: 0-255
출력
이진 데이터를 저장하는 시작 어드레스
제어 코드의 위치 |
설명 |
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'
는 ASCII 값을 폭이 4자인 대문자로 순방향으로 변환합니다(16비트/32비트 PLC에 유효)
ASCII 데이터 |
이진 데이터에서 변환 결과 |
---|---|
'˽12A' |
16#12A(16진수 형식으로 표시) |
예: '%4X'
는 ASCII 값을 폭이 4자인 대문자로 역방향으로 변환합니다(16비트/32비트 PLC에 유효)
ASCII 데이터 |
이진 데이터에서 변환 결과 |
---|---|
'˽B2A' |
16#B2A (16진수 형식으로 표시) |
예: '%06d'
는 ASCII 값을 폭이 6자이고 선행 0이 3개인 10진수로 변환합니다 (32비트 PLC에만 유효)
ASCII 데이터 |
이진 데이터에서 변환 결과 |
---|---|
'000100' |
16#100 (16진수 형식으로 표시) |
예: '%+4d'
는 ASCII 값을 폭이 4자이고 10진수이며 + 기호가 추가된 값으로 변환합니다 (32비트 PLC에만 유효)
ASCII 데이터 |
이진 데이터에서 변환 결과 |
---|---|
'+100 ˽ ˽' |
100(10진수 형식으로 표시) |
예: '%-6d'
는 ASCII 값을 폭 6자의 왼쪽 정렬된 값으로 변환합니다 (32비트 PLC에만 유효)
ASCII 데이터 |
이진 데이터에서 변환 결과 |
---|---|
'100˽ ˽ ˽' |
100(10진수 형식으로 표시) |
예: '%˽4d'
는 ASCII 값을 폭 4자, 선행 스페이스 1개로 이루어진 값으로 변환합니다 (32비트 PLC에만 유효)
ASCII 데이터 |
이진 데이터에서 변환 결과 |
---|---|
'˽100' |
100(10진수 형식으로 표시) |
예: '%#8.0f'
는 ASCII 값을 폭 8자, 부동 소수점 수, 선행 스페이스 4개로 이루어진 값으로 변환합니다 (32비트 PLC에만 유효)
ASCII 데이터 |
이진 데이터에서 변환 결과 |
---|---|
'˽ ˽ ˽ ˽123.' |
123.45678(10진수 형식으로 표시) |
예: '%8.3f'
는 ASCII 값을 폭 8자, 소수점 다음 3자 정밀도인 값으로 변환합니다 (32비트 PLC에만 유효)
ASCII 데이터 |
이진 데이터에서 변환 결과 |
---|---|
'˽123.456' |
123.45599(10진수 형식으로 표시) |
예: '+%10u'
는 ASCII 값을 폭 10자, 선행 스페이스 7개, 기호 없는 정수로 이루어진 값으로 변환합니다 (32비트 PLC에만 유효)
ASCII 데이터 |
이진 데이터에서 변환 결과 |
---|---|
'˽ ˽ ˽ ˽ ˽ ˽ ˽100' |
-100(10진수 형식으로 표시) |
예: '%06d'
는 ASCII 값을 폭 6자, 선행 스페이스 3개로 이루어진 값으로 변환합니다(16비트/32비트 PLC에 유효)
ASCII 데이터 |
이진 데이터에서 변환 결과 |
---|---|
'˽ ˽ ˽100' |
100(10진수 형식으로 표시) |
지정자 앞의 값에 허용되는 범위:
d, ld, i, li 지정자 앞 1-15 |
X 지정자 앞 1-4 |
lX 지정자 앞 1-8 |
지정된 폭 없음, 쉼표 추가(예: '%d,'
) (32비트 PLC에만 유효)
ASCII 데이터 |
이진 데이터에서 변환 결과 |
---|---|
'100,' |
100(10진수 형식으로 표시) |
FP_BIN_TO_ASCII: 필수 최소 폭 가정
FP_ASCII_TO_BIN 및 FP_ASCII_CHECK: 쉼표 구분 기호 필요
예: '+%4ld'
는 ASCII 값을 폭 4자로 변환하며, 변환된 결과에는 DINT 또는 DWORD 형식이 필요합니다(16비트/32비트 PLC에 유효)
ASCII 데이터 |
이진 데이터에서 변환 결과 |
---|---|
'˽100' |
100(10진수 형식으로 표시) |
예: '+%6i'
는 ASCII 값을 폭 6자, 선행 스페이스 3개, 기호 있는 정수로 이루어진 값으로 순방향으로 변환합니다(16비트/32비트 PLC에 유효)
ASCII 데이터 |
이진 데이터에서 변환 결과 |
---|---|
'˽ ˽ ˽-100' |
-100(10진수 형식으로 표시) |
예: '+%6d'
는 ASCII 값을 폭이 6자이고 선행 0이 3개인 값으로 순방향으로 변환합니다(16비트/32비트 PLC에 유효)
ASCII 데이터 |
이진 데이터에서 변환 결과 |
---|---|
'000100' |
100(10진수 형식으로 표시) |
예: '+%4X'
는 ASCII 값을 폭이 4자인 대문자로 된 16진수로 순방향으로 변환합니다(16비트/32비트 PLC에 유효)
ASCII 데이터 |
이진 데이터에서 변환 결과 |
---|---|
'˽12A' |
16#12A (16진수 형식으로 표시) |
예: '+%5b'
는 ASCII 값을 폭이 5자인 BCD 데이터로 변환합니다 (32비트 PLC에만 유효)
ASCII 데이터 |
이진 데이터에서 변환 결과 |
---|---|
'˽123' |
16#123 (16진수 형식으로 표시) |
예: '+%-6.2f'
는 ASCII 값을 폭 6자, 소수점 다음 2자 정밀도의 왼쪽 정렬된 값으로 변환합니다 (32비트 PLC에만 유효)
ASCII 데이터 |
이진 데이터에서 변환 결과 |
---|---|
'1.23˽' |
1.2345(10진수 형식으로 표시) |
예: '+%9.3e'
는 ASCII 값을 폭 9자, 소수점 다음 3자 정밀도, 지수 소문자인 값으로 변환합니다 (32비트 PLC에만 유효)
ASCII 데이터 |
이진 데이터에서 변환 결과 |
---|---|
'1.235e+03' |
1234.5678 (10진수 형식으로 표시) |
예: '1.235E+03'
은 ASCII 값을 폭 9자, 소수점 다음 3자 정밀도, 지수 대문자인 값으로 변환합니다 (32비트 PLC에만 유효)
ASCII 데이터 |
이진 데이터에서 변환 결과 |
---|---|
'1.235E+03' |
1234.5678 (10진수 형식으로 표시) |
예: '+%12g'
는 ASCII 값을 폭 12자의 부동 소수점 수로 변환합니다 (32비트 PLC에만 유효)
ASCII 데이터 |
이진 데이터에서 변환 결과 |
---|---|
'˽ ˽ ˽ ˽ ˽1234.57' |
1234.5678 (10진수 형식으로 표시) |
예: '+%9.3G'
는 ASCII 값을 폭 9자, 소수점 다음 3자 정밀도, 부동 소수점 수, 지수 대문자로 이루어진 값으로 변환합니다 (32비트 PLC에만 유효)
ASCII 데이터 |
이진 데이터에서 변환 결과 |
---|---|
'˽ ˽ ˽1.E+03' |
1234 (10진수 형식으로 표시) |
FP_BIN_TO_ASCII의 경우: 모든 문자열을 변환에 추가 가능
예: '+%8dPANA'
는 ASCII 값을 폭이 8자인 10진수로 변환하고, 그 뒤에 'PANA'라는 문자열을 덧붙입니다 (32비트 PLC에만 유효)
ASCII 데이터 |
이진 데이터에서 변환 결과 |
---|---|
'˽ ˽ ˽ ˽ ˽100PANA' |
100(10진수 형식으로 표시) |
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;