F351_FMIN

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.

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

Min (REAL)

Valeur minimale

Pos (INT)

Position de la valeur minimale

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

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];
		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

Corps du POU

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.

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,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

Corps en ST

IF start then
    F351_FMIN( s1_Start:= data_field[0],
         s2_End:= data_field[4],
         Min=> min_value ,
         Pos=> position );
END_IF;

Corps en IL

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