16비트 데이터 테이블에서 최소값 검색
이 펑션은 16비트 데이터 테이블에서 최소값과 그 위치를 검색합니다.
입력
데이터 테이블 시작
데이터 테이블 끝
출력
최소값
최소값 위치
입력 s1_Start는 데이터 테이블의 시작 영역을 지정하고 s2_End는 끝을 지정합니다. 최소값은 출력 Min에서 반환되고 해당 위치는 출력 Pos에서 반환됩니다.
위치 Pos는 데이터 테이블의 시작과 최소값 최초 발생 위치와 상관이 있습니다.
인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.
입력 s1_Start의 변수 어드레스가 s2_End보다 큰 경우
s1_Start와 s2_End가 서로 다른 데이터 영역에 속하는 경우.
인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.
입력 s1_Start의 변수 어드레스가 s2_End보다 큰 경우
s1_Start와 s2_End가 서로 다른 데이터 영역에 속하는 경우.
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
start: BOOL:=FALSE;
(*activates the function*)
data_array: ARRAY [0..4] OF INT:=[4,7,-32,13,5];
output_max: INT:=0;
(*the maximum value of
data_array; here: -32*)
output_pos: INT:=0;
(*the position of the
maximum value; here: 2*)
END_VAR
변수 start가 TRUE로 설정되면 펑션이 실행됩니다.
data_field에서 minimum 값과 해당 위치가 검색됩니다. result는 다음과 같습니다. minimum_value = -3 및 position = 3.BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_VARIN,,output,5,1,7,3,);
B(B_VARIN,,data field[0],5,2,7,4,);
B(B_VARIN,,data field[4],5,3,7,5,);
B(B_VAROUT,,minimum,15,2,17,4,);
B(B_VAROUT,,position,15,3,17,5,);
B(B_F,F272_MIN,,7,0,15,5,,?DEN?D@'s1'?Ds2?AENO?Cmin?Cpos);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F272_MIN( s1_Start:= data_field[0],
s2_End:= data_field[4],
Min=> minimum_value,
Pos=> position);
END_IF;