ASCII -> 이진 변환
s2_AsciiData에서 지정한 영역에 저장된 ASCII 코드를 16비트/32비트 이전 데이터로 전환됩니다. 변환 방법은 s1_Control의 제어 문자 4개에 따라 n_ConversionMethod에서 지정됩니다. 변환 결과는 d_BinaryData에서 지정한 영역에 저장됩니다.
입력
제어 문자열, 예: D-16
D
10진수 ASCII 데이터 변환H
16진수 ASCII 데이터 변환+
통상 방향-
역방향16
ASCII 데이터를 16비트 데이터로, -32,768을 +32,767로(16#0을 16#FFFF로) 변환합니다.32
ASCII 데이터를 32비트 데이터로, -2,147,483,648을 +2,147,483,647로(16#0을 16#FFFFFFFF로) 변환합니다.ASCII 데이터를 저장하는 시작 영역
변환 방법 예: 16#404
(자세한 내용은 다음 표의 설명 참조)
출력
이전 데이터를 저장하는 시작 영역
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 데이터를 저장하는 영역을 초과하는 경우.
변환 결과가 영역을 초과하는 경우.
콤마로 구분된 데이터의 경우 숫자 데이터의 최대수를 지정합니다. 10진수 ASCII 데이터에는 스페이스, 기호 및 소수점이 포함됩니다. 데이터 범위는 제어 문자열 s1_Control에 의해 제한됩니다.
n_Conversion 방법 |
s1_ Control |
ASCII 데이터 |
이진 데이터 |
코멘트 |
||
---|---|---|---|---|---|---|
데이터 형식 |
오프셋1) |
16진수 값 |
||||
H+16 |
16#404 |
D:'01' D+1:'23' D+2:'45' D+3:'67' D+4:'89' D+5:'AB' D+6:'CD' D+7:'EF' |
INT, WORD |
0 |
16#2301 |
통상 방향 4 x 4 ASCII 문자 |
1 |
16#6745 |
|||||
2 |
16#AB89 |
|||||
3 |
16#EFCD |
|||||
H-16 |
16#404 |
INT, WORD |
0 |
6#0123 |
역방향 4 x 4 ASCII 문자 |
|
1 |
16#4567 |
|||||
2 |
16#89AB |
|||||
3 |
16#CDEF |
|||||
H+16 |
16#403 |
INT, WORD |
0 |
16#*201 |
통상 방향 3 x 4 ASCII 문자 |
|
1 |
16#*534 |
|||||
2 |
16#*867 |
|||||
3 |
16#*B9A |
|||||
H-16 |
16#403 |
INT, WORD |
0 |
16#*012 |
역방향 3 x 4 ASCII 문자 |
|
1 |
16#*345 |
|||||
2 |
16#*678 |
|||||
3 |
6#*9AB |
|||||
H+32 |
16#208 |
DINT, DWORD |
0 |
16#67452301 |
통상 방향 8 x 2 ASCII 문자 |
|
2 |
16#EFCDAB89 |
|||||
H-32 |
16#208 |
DINT, WORD |
0 |
16#01234567 |
역방향 8 x 2 ASCII 문자 |
|
2 |
16#89ABCDEF |
|||||
H+32 |
16#205 |
DINT, DWORD |
0 |
16#***42301 |
통상 방향 5 x 2 ASCII 문자 |
|
2 |
16#***97856 |
|||||
H-32 |
16#205 |
DINT, DWORD |
0 |
16#***01234 |
역방향 5 x 2 ASCII 문자 |
|
2 |
16#***56789 |
1) 16비트 워드 단위의 오프셋
*추가 문자는 '0'이 됩니다.
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
bExecute: BOOL:=FALSE;
iArray2: ARRAY [0..1] OF INT:=[2(0)];
(*Begin ASCII: _1,23,04,-5,6_*)
iAscii1: ARRAY [0..4] OF WORD:=[5(16#FFFF)];
END_VAR
bExecute이 TRUE로 설정되면 명령이 실행됩니다. 2 x 4 10진수 ASCII 문자가 이진 데이터로 변환됩니다. 오프셋 = 0 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,F251_ATOB!,Instance,9,3,21,9,,?DEN?Ds1_Control?Ds2_AsciiData?Dn_ConversionMethod?AENO?Cd_BinaryData);
B(B_VARIN,,'D-16',7,5,9,7,);
B(B_VARIN,,iAscii1,7,6,9,8,);
B(B_VARIN,,16#214,7,7,9,9,);
B(B_VAROUT,,iArray2,21,5,23,7,);
B(B_CONTACT,,bExecute,3,4,5,6,R);
B(B_COMMENT,,Result iArray2: [1234~-56],22,7,35,8,);
B(B_COMMENT,,Converts 2x4 decimal ASCII data to binary data. Offset = 1 ASCII character (8-bit).,2,1,35,2,);
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
F251_ATOB(s1_Control := 'D-16',
s2_AsciiData := iAscii1,
n_ConversionMethod := 16#214,
d_BinaryData => iArray2);
END_IF;