F353_FSORT

Trier des données dans un tableau de données en nombres réels (tableau de données à virgule flottante)

La fonction trie les valeurs (avec signes +/-) dans un tableau de données dans l’ordre croissant ou décroissant.

Paramètres

Entrée

s1_Start (REAL)

Zone de départ du tableau des données qui doivent être triées

s2_End (REAL)

Zone finale du tableau des données qui doivent être triées

s3_Descending (INT)

Indique l’ordre de tri :

  • 0 = croissant

  • 1 = décroissant

Remarques

  • Au lieu d’utiliser cette instruction F, nous recommandons d’utiliser l’instruction FP7 correspondante : FP_DATA_SORT Trier des données dans un tableau de données

  • L’entrée s1_Start désigne la zone de départ du tableau de données et s2_End indique la fin. Vous déterminez l’ordre du tri en entrée s3_Descending.

  • En entrée s3_Descending, vous pouvez entrer les valeurs suivantes :

    0

    Ordre croissant, c.-à-d. en commençant par la plus petite valeur

    1

    Ordre décroissant, c.-à-d. en commençant par la valeur la plus élevée

  • Les données sont triées, via un procédé de tri par permutation, dans l’ordre indiqué par la valeur en entrée s1. Puisque le nombre de comparaisons de mots correspond au nombre de mots au carré, le tri peut prendre quelque temps lorsqu’il y a un grand nombre de mots. Lorsque la valeur en entrée s1_Start=s2_End, aucun tri n’a lieu.

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 des valeurs en entrées 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 des valeurs en entrées 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
		CalculateY: BOOL:=FALSE;
		xValue: REAL:=4.0;
		yValue: REAL:=0.0;
		xyValues: XY_DUT;
	END_VAR
	VAR
		CalculateY: BOOL:=FALSE;
		xValue: REAL:=4.0;
		yValue: REAL:=0.0;
		xyValues: XY_DUT;
	END_VAR

Dans cet exemple, la variable d’entrée sort_order est déclarée. Cependant, vous pouvez entrer directement une constante (par ex. 1 pour un ordre de tri décroissant) au contact d’entrée de la fonction, dans le corps.

Corps du POU

La valeur 1 est indiquée pour la variable sort_order.

La fonction est exécutée lorsque la variable start est sur TRUE.

La fonction trie les éléments du tableau (ARRAY) de la zone de données data_field dans l’ordre décroissant.

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 := 3 ;
        NETWORK_BODY
B(B_VAROUT,,sort_order,9,0,11,2,);
B(B_VARIN,,1,7,0,9,2,);
L(1,0,1,3);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 9 ;
        NETWORK_BODY
B(B_VARIN,,output,8,1,10,3,);
B(B_F,F353_FSORT,,10,0,19,6,,?DEN?D@'s1'?Ds2?Ds3?AENO);
B(B_VARIN,,sort_order,8,4,10,6,);
B(B_VARIN,,data field[0],8,2,10,4,);
B(B_VARIN,,data field[4],8,3,10,5,);
B(B_COMMENT,,sorting order:ø^s3 = 0:ascending~ 1:descending,11,6,26,8,);
L(1,0,1,9);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corps en ST

sort_order:=1;
IF start then
    F353_FSORT( s1_Start:= data_field[0],
         s2_End:= data_field[4],
         s3_Descending:= sort_order);
END_IF;

Corps en IL

Modifié le : 2021-08-09Feedback on this pagePanasonic hotline