Rechercher la valeur maximale dans un tableau de données en nombres réels (données à virgule flottante)
La fonction recherche la valeur maximale 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 maximale
Position de la valeur maximale
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 maximale est renvoyée en sortie Max et sa position en sortie Pos.
La position Pos correspond à la position relative du début du tableau de données à la première valeur maximale trouvée.
Si plusieurs valeurs maximales 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 Max.
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];
output_max: REAL:=0.0;
(*the maximum value of
data_array; here: -32.0*)
output_pos: INT:=0;
(*the position of the
maximum value; here: 2*)
END_VAR
La fonction est exécutée lorsque la variable start est sur TRUE.
Elle recherche la valeur maximale et sa position dans la zone de données data_field. Le résultat (result) est ici : max_value = 5,44 et position = 3.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,8,1,10,3,);
B(B_VARIN,,data field[0],8,2,10,4,);
B(B_VARIN,,data field[4],8,3,10,5,);
B(B_VAROUT,,max_value,19,2,21,4,);
B(B_F,F350_FMAX,,10,0,19,5,,?DEN?D@'s1'?Ds2?AENO?Cmax?Cpos);
B(B_VAROUT,,position,19,3,21,5,);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F350_FMAX( s1_Start:= data_field[0],
s2_End:= data_field[4],
Max=> max_value,
Pos=> position);
END_IF;