32비트 테이블 데이터 검색
이 펑션은 32비트 영역들로 구성된 블록(그 시작은 입력 s2_Start로 지정되고 끝은 s3_End로 지정됨)에서 입력 s1에 지정된 값을 검색합니다.
입력
검색된 값을 저장하는 32비트 영역 또는 해당 정수
블록의 32비트 영역을 시작함
블록의 32비트 영역을 종료함
s1과 매칭되는 데이터 항목들의 수가 특수 데이터 레지스터 DT90037(sys_iNumberOfFoundMatches)에 저장됩니다.
시작하는 32비트 영역 s2_Start에서부터 계산하여 첫 번째로 매칭되는 데이터 항목의 상대 위치가 특수 데이터 레지스터 DT90038(sys_iPositionOfFirstMatch)에 저장됩니다.
입력 s2_Start와 s3_End의 변수들의 어드레스는 어드레스 유형이 동일해야 합니다.
인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.
s2_Start>s3_End인 경우
인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.
s2_Start>s3_End인 경우
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
start: BOOL:=FALSE;
data_table: ARRAY [0..3] OF DINT:=[-44,222222,-44,12345];
number_matches: INT:=0;
position_1match: INT:=0;
END_VAR
변수 start가 TRUE로 설정되면 펑션이 실행됩니다.
이 예에서는 입력 변수를 사용하지 않고 정수(-44)를 입력 s1에 할당합니다. result는 특수 데이터 레지스터 DT90037 및 DT90038에 저장됩니다. 두 E_MOVE 함수를 복사하면 number_matches 및 position_1match 등의 변수 두 개가 생성됩니다.BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_F,F97_DSRC!,Instance,8,0,15,6,,?DEN?Ds1?Ds2_Start?Ds3_End?AENO);
B(B_VARIN,,start,6,1,8,3,);
B(B_VARIN,,-44,6,2,8,4,);
B(B_VARIN,,data_table[0],6,3,8,5,);
B(B_VARIN,,data_table[3],6,4,8,6,);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_F,E_MOVE!,Instance,8,1,14,5,,?DEN?D?AENO?C);
B(B_VAROUT,,number_matches,14,3,16,5,);
B(B_VARIN,,start,6,2,8,4,);
B(B_VARIN,,DT90037,6,3,8,5,);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_F,E_MOVE!,Instance,8,1,14,5,,?DEN?D?AENO?C);
B(B_VAROUT,,position_1match,14,3,16,5,);
B(B_VARIN,,start,6,2,8,4,);
B(B_VARIN,,DT90038,6,3,8,5,);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F97_DSRC( s1:= -44 ,
s2_Start:= data_table[0] ,
s3_End:= data_table[3] );
number_matches:=DT90037;
position1_match:=DT90038;
END_IF;