F350_FMAX

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.

Paramètres

Entrée

s1_Start (REAL)

Zone de départ du tableau de données

s2_End (REAL)

Zone finale du tableau de données

Sortie

Max (REAL)

Valeur maximale

Pos (INT)

Position de la valeur maximale

Remarques

  • 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.

Drapeaux d’erreur

sys_bIsOperationErrorHold (passe à TRUE et reste TRUE)
  • 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.

sys_bIsOperationErrorNonHold (passe à TRUE pendant un cycle)
  • 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.

Exemple

En-tête du POU

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

Corps du POU

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.

Corps en LD

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

Corps en ST

IF start then
    F350_FMAX( s1_Start:= data_field[0],
        s2_End:= data_field[4],
        Max=> max_value,
        Pos=> position);
END_IF;

Corps en IL

Modifié le : 2022-10-12Commentaires sur cette pageAssistance téléphonique