Búsqueda de datos
Esta instrucción FP busca el valor especificado en s1 dentro del rango especificado por s2_Start y s3_End si el trigger EN es TRUE.
Entrada
Datos a buscar
Comienzo del rango de búsqueda
Fin del rango de búsqueda
Salida
Número de resultados
Posición relativa de la primera coincidencia (la primera posición es 0)
Verificar que s2_Start£s3_End
Las variables s1, s2_Start y s3_End tienen que ser del mismo tipo de datos.
El número máximo de datos que se pueden buscar es 30000.
si el área especificada utilizando el modificador índice supera el límite.
si s2_Start>s3_End
Si s2_Start y s3_End pertenecen a diferentes áreas de datos
si el área especificada utilizando el modificador índice supera el límite.
si s2_Start>s3_End
Si s2_Start y s3_End pertenecen a diferentes áreas de datos
Instrucciones F correspondientes: F96_SRC
Todas las variables de entrada y de salida utilizadas para la programación de esta función han sido declaradas en la Cabecera de la POU.Se utiliza la misma cabecera de la POU para todos los lenguajes de programación.
VAR
bStart: BOOL:=FALSE;
(*activates the fuction*)
diSearch_value: DINT:=16#20;
(*specifies the value to
search for*)
adiDataField: ARRAY [0..3] OF DINT:=[16#101,16#20,16#2A04,16#20];
(*2 matches for 16#20
data_array[2] = 1st match*)
diNumber_matches: DINT:=0;
diPosition1_match: DINT:=0;
END_VAR
Cuando la variable bStart se encuentra a TRUE, se ejecuta la función.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 7 ;
NETWORK_BODY
B(B_CONTACT,,bStart,6,2,8,4,);
B(B_VARIN,,diSearch_value,11,3,13,5,);
B(B_VARIN,,adiDataField[0],11,4,13,6,);
B(B_VARIN,,adiDataField[3],11,5,13,7,);
B(B_F,FP_DATA_SEARCH!,,13,1,23,7,,?DEN?D@'s1'?Ds2_Start?Ds3_End?AENO?Cd1_Count?Cd2_Pos);
B(B_VAROUT,,diNumber_matches,23,3,25,5,);
B(B_VAROUT,,diPosition1_match,23,4,25,6,);
L(8,3,13,3);
L(1,3,6,3);
L(1,0,1,7);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF bStart then
FP_DATA_SEARCH(s1 := diSearch_value,
s2_Start := adiDataField[0],
s3_End := adiDataField[3],
d1_Count => diNumber_matches,
d2_Pos => diPosition1_match);
END_IF;