Interpolation linéaire des valeurs REAL discrètes
Cette fonction exécute une mise à l’échelle (linéarisation) d’un tableau de données en nombre réel et renvoie une valeur en sortie Y pour la valeur d’entrée X.
Entrée
Valeur d’entrée X
Applique le premier élément du DUT défini par l’utilisateur, c.-à-d. le nombre de valeurs xy à cette entrée. Voir la description de la structure des DUT ci-dessous.
Sortie
Valeur de sortie Y
Au lieu d’utiliser cette instruction F, nous recommandons d’utiliser l’instruction FP7 correspondante : FP_SCALE
Pour en savoir plus, voir les instructions : F282_SCAL et F283_DSCAL.
Si l’adresse spécifiée utilisant le modificateur d’index est en dehors des limites autorisées.
Si la valeur d’entrée x n’est pas un nombre réel.
Si le nombre de valeurs (premier élément du DUT) < 2 ou > 99.
Si les valeurs xt, yt spécifiées dans 'xy_data' ne sont pas des nombres réels.
Si les données de 'xy_data' ne sont pas enregistrées dans l’ordre croissant de x.
Si les données de 'xy_data' sont en dehors de la zone autorisée.
Si la mise à l’échelle provoque un dépassement positif.
Si l’adresse spécifiée utilisant le modificateur d’index est en dehors des limites autorisées.
Si la valeur d’entrée x n’est pas un nombre réel.
Si le nombre de valeurs (premier élément du DUT) < 2 ou > 99.
Si les valeurs xt, yt spécifiées dans 'xy_data' ne sont pas des nombres réels.
Si les données de 'xy_data' ne sont pas enregistrées dans l’ordre croissant de x.
Si les données de 'xy_data' sont en dehors de la zone autorisée.
Si la mise à l’échelle provoque un dépassement positif.
Le type de données structurées est créé dans le gestionnaire de DUT.
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;
X_value: REAL:=4.0;
Y_value: REAL:=0.0;
XY_values: XY_DUT;
@'': @'';
END_VAR
VAR_EXTERNAL
ProcessData: ProcessDataStructure;
END_VAR
VAR
@'': @'';
END_VAR
La fonction est exécutée lorsque la variable CalculateY est sur TRUE.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_VARIN,,CalculateY,10,1,12,3,);
B(B_VARIN,,X_value,10,2,12,4,);
B(B_VARIN,,XY_values.Number,10,3,12,5,);
B(B_VAROUT,,Y_value,19,2,21,4,);
B(B_F,F354_FSCAL!,Instance,12,0,19,5,);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F354_FSCAL(x := X_value, xy_data := XY_values.Number, y => Y_value);
END_IF;