테이블 데이터 검색(16비트 검색)
트리거 EN이 ON 상태일 경우, s2_Start(시작 영역)에서부터 s3_End(종료 영역)로 지정된 16비트 영역들의 블록에서 s1과 동일한 값을 검색합니다.
입력
검색된 값을 저장하는 16비트 영역 또는 해당 정수
블록의 16비트 영역을 시작함
블록의 16비트 영역을 종료함
검색 작업을 수행하면 검색 결과가 다음과 같이 저장됩니다.
s1과 동일한 데이터 수가 sys_iNumberOfFoundMatches로 전송됩니다.
데이터가 처음 발견된 위치(시작하는 16비트 영역부터 계산)가 sys_iPositionOfFirstMatch로 전송됩니다.
s2_Start £ s3_End가 되도록 하십시오.
변수 s1, s2_Start 및 s3_End의 데이터 형식은 같아야 합니다.
인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.
s2_Start>s3_End인 경우
인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.
s2_Start>s3_End인 경우
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
start: BOOL:=FALSE;
(*activates the fuction*)
search_value: WORD:=16#20;
(*specifies the value to
search for*)
data_array: ARRAY [0..3] OF WORD:=[16#101,16#2A04,16#20,16#20];
(*2 matches for 16#20
data_array[2] = 1st match*)
number_matches: INT:=0;
position1_match: INT:=0;
END_VAR
변수 start가 TRUE로 설정되면 펑션이 실행됩니다.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 3 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 7 ;
NETWORK_BODY
B(B_CONTACT,,start,4,2,6,4,);
B(B_VARIN,,search_value,7,3,9,5,);
B(B_VARIN,,data_array[0],7,4,9,6,);
B(B_VARIN,,data_array[3],7,5,9,7,);
B(B_F,F96_SRC,,9,1,16,7,,?DEN?D@'s1'?Ds2?Ds3?AENO);
L(1,3,4,3);
L(6,3,9,3);
L(1,0,1,7);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_CONTACT,,start,4,1,6,3,);
B(B_F,E_MOVE,,9,0,16,4,,?DEN?Da_Num?AENO?C);
B(B_VARIN,,DT90037,7,2,9,4,);
B(B_VAROUT,,number_matches,16,2,18,4,);
L(1,0,1,6);
L(1,2,4,2);
L(6,2,9,2);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_CONTACT,,start,4,1,6,3,);
B(B_F,E_MOVE,,9,0,16,4,,?DEN?Da_Num?AENO?C);
B(B_VARIN,,DT90038,7,2,9,4,);
B(B_VAROUT,,position1_match,16,2,18,4,);
L(1,2,4,2);
L(6,2,9,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F96_SRC( s1:= search_value ,
s2_Start:= data_array[0] ,
s3_End:= data_array[3] );
number_matches:=DT90037;
position_1match:=DT90038;
END_IF;