이진 -> ASCII 변환
s2_BinaryData에서 지정한 영역에 저장된 16비트/32비트 이진 데이터를 ASCII 코드로 변환합니다. 변환 방법은 s1_Control의 제어 문자 4개에 따라 n_ConversionMethod에서 지정됩니다. 변환 결과는 d_AsciiData에서 지정한 영역에 저장됩니다.
입력
제어 문자열
H: 16진수 ASCII 데이터로 변환
- 역방향
32: 32비트(2워드) 단위로 변환
이전 데이터를 저장하는 시작 영역
변환 방법
(자세한 내용은 다음 표의 설명 참조)
출력
ASCII 데이터를 저장하는 시작 영역
s1_Control에서 지정한 제어 문자열에 에러가 있는 경우.
형식이 10진수일 때 s1_Control에서 표준 방향(+)이 지정된 경우.
s1_Control에서 16진수 지정 시 n_ConversionMethod에서 지정한 변환 단위당 ASCII 문자 숫자가 16비트 데이터에 4, 32비트 데이터에 8을 초과하는 경우.
n_ConversionMethod에서 변환할 16비트 또는 32비트(1 또는 2 워드) 숫자에 0이 지정된 경우.
n_ConversionMethod에서 지정한 변환할 16비트 또는 32비트 10진수 숫자가 ASCII 데이터를 저장하는 영역을 초과하는 경우.
변환 결과가 영역을 초과하는 경우.
s1_Control에서 지정한 제어 문자열에 에러가 있는 경우.
형식이 10진수일 때 s1_Control에서 표준 방향(+)이 지정된 경우.
s1_Control에서 16진수 지정 시 n_ConversionMethod에서 지정한 변환 단위당 ASCII 문자 숫자가 16비트 데이터에 4, 32비트 데이터에 8을 초과하는 경우.
n_ConversionMethod에서 변환할 16비트 또는 32비트(1 또는 2 워드) 숫자에 0이 지정된 경우.
n_ConversionMethod에서 지정한 변환할 16비트 또는 32비트 10진수 숫자가 ASCII 데이터를 저장하는 영역을 초과하는 경우.
변환 결과가 영역을 초과하는 경우.
(X 값은 변경되지 않음)
변환 단위당 ASCII 문자수(8비트) 정보
16비트 이진 단위를 16진수 ASCII 데이터로 변환한 경우:
범위: 16#1~16#4
32비트 이진 단위를 16진수 ASCII 데이터로 변환한 경우:
범위: 16#1~16#8
이진 단위를 10진수 ASCII 데이터로 변환한 경우:
범위: 16#1~16#F
이진 데이터 |
s1_ Con-trol |
n_Con- version Method |
결과 ASCII 데이터 |
코멘트 |
|||||
---|---|---|---|---|---|---|---|---|---|
데이터 형식 |
16비트 워드 단위로 오프셋 |
16진수 값 |
D |
D+1 |
D+2 |
D+3 |
|||
INT, WORD |
0 |
16#5678 |
16+H |
16#204 |
'78' |
'56' |
'34' |
'12' |
표준 방향. 2 x 4 ASCII 문자. |
1 |
16#1234 |
||||||||
INT, WORD |
0 |
16#5678 |
16-H |
16#204 |
'78' |
'56' |
'12' |
'34' |
역방향. 2 x 4 ASCII 문자. |
1 |
16#1234 |
||||||||
INT, WORD |
0 |
16#0456 |
16+H |
16#203 |
'56' |
'42' |
'31' |
'$xx$xx' |
표준 방향. 2 x 3 ASCII 문자. |
1 |
16#0123 |
||||||||
INT, WORD |
0 |
16#0456 |
16-H |
16#203 |
'45' |
'61' |
'23' |
'$xx$xx' |
역방향. 2 x 3 ASCII 문자. |
1 |
16#0123 |
||||||||
DINT, DWORD |
0 |
16#1234 5678 |
32+H |
16#108 |
'78' |
'56' |
'34' |
'12' |
표준 방향. 1 x 8 ASCII 문자. |
DINT, DWORD |
0 |
16#1234 5678 |
32-H |
16#108 |
'12' |
'34' |
'56' |
'78' |
역방향. 1 x 8 ASCII 문자. |
DINT, DWORD |
0 |
16#00012345 |
32+H |
16#105 |
'45' |
'23' |
'1$xx' |
'$xx$xx' |
표준 방향. 1 x 5 ASCII 문자. |
DINT, DWORD |
0 |
16#00012345 |
32-H |
16#105 |
'12' |
'34' |
'5$xx' |
'$xx$xx' |
역방향. 1 x 5 ASCII 문자. |
'x' 값은 변경되지 않습니다.
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
bExecute: BOOL:=FALSE;
iArray1: ARRAY [0..1] OF INT:=[1234,-56];
iAscii1: ARRAY [0..4] OF WORD:=[5(16#FFFF)];
END_VAR
bExecute이 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 := 9 ;
NETWORK_BODY
B(B_F,F250_BTOA!,Instance,9,3,21,9,,?DEN?Ds1_Control?Ds2_BinaryData?Dn_ConversionMethod?AENO?Cd_AsciiData);
B(B_VARIN,,'16-D',7,5,9,7,);
B(B_VARIN,,iArray1,7,6,9,8,);
B(B_VARIN,,16#214,7,7,9,9,);
B(B_VAROUT,,iAscii1,21,5,23,7,);
B(B_CONTACT,,bExecute,3,4,5,6,R);
B(B_COMMENT,,Result iAscii1: 'x1234 -56x',22,7,35,8,);
B(B_COMMENT,,Converts two 16-bit units to 2x4 decimal ASCII data. Offset = 1 ASCII character (8-bit).,2,1,35,3,);
L(1,5,3,5);
L(5,5,9,5);
L(1,0,1,9);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(bExecute) then
F250_BTOA(s1_Control := '16-D',
s2_BinaryData := iArray1,
n_ConversionMethod := 16#214,
d_AsciiData => iAscii1);
END_IF;