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.
Entrée
Zone de départ du tableau des données qui doivent être triées
Zone finale du tableau des données qui doivent être triées
Indique l’ordre de tri :
0 = croissant
1 = décroissant
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.
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.
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.
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.
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.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
sort_order:=1;
IF start then
F353_FSORT( s1_Start:= data_field[0],
s2_End:= data_field[4],
s3_Descending:= sort_order);
END_IF;