Rechercher la valeur minimale dans un tableau de données en nombres réels (données à virgule flottante)
La fonction recherche la valeur minimale et sa position dans un tableau de données à virgule flottante.
Entrée
Zone de départ du tableau de données
Zone finale du tableau de données
Sortie
Valeur minimale
Position de la valeur minimale
L’entrée s1_Start désigne la zone de départ du tableau de données et s2_:End indique la fin. La valeur minimale est renvoyée en sortie Min et sa position en sortie Pos.
Si plusieurs valeurs minimales sont trouvées, l’adresse relative de la première valeur maximale, à partir de l’adresse de départ désignée par s1_Start, est sauvegardée dans Min.
L’adresse de la valeur minimale en sortie Pos est l’adresse relative du début du tableau de données, indiquée en entrée s1_Start.
Si l’adresse de la variable en entrée s1_Start > s2_End.
Si les zones d’adresses de s1_Start et s2_End sont différentes.
Si les valeurs à virgule flottante sont en dehors de l’intervalle de traitement.
Si l’adresse de la variable en entrée s1_Start > s2_End.
Si les zones d’adresses de s1_Start et s2_End sont différentes.
Si les valeurs à virgule flottante sont en dehors de l’intervalle de traitement.
Toutes les variables d’entrée et de sortie utilisées pour programmer cette fonction ont été déclarées dans l’en-tête du POU. Le même en-tête de POU est utilisé pour tous les langages de programmation.
VAR
start: BOOL:=FALSE;
(*activates the function*)
data_array: ARRAY [0..4] OF REAL:=[4.0,7.0,-32.0,13.0,5.0];
sum: REAL:=0.0;
(*the sum of all elements of
data_array; here: -3.0*)
mean: REAL:=0.0;
(*the arithmetic mean of all
elements of data_array;
here: -0.6*)
END_VAR
La fonction est exécutée lorsque la variable start est sur TRUE.
Elle recherche la valeur minimale minimum et sa position dans la zone de données data_field. Le résultat (result) est ici : min_value = 6,91 et position = 2.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_VARIN,,output,7,1,9,3,);
B(B_VARIN,,data field[0],7,2,9,4,);
B(B_VARIN,,data field[4],7,3,9,5,);
B(B_VAROUT,,min_value,18,2,20,4,);
B(B_F,F351_FMIN,,9,0,18,5,,?DEN?D@'s1'?Ds2?AENO?Cmin?Cpos);
B(B_VAROUT,,position,18,3,20,5,);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F351_FMIN( s1_Start:= data_field[0],
s2_End:= data_field[4],
Min=> min_value ,
Pos=> position );
END_IF;