Exécuter une interpolation linéaire des valeurs discrètes
Cette instruction FP renvoie la valeur y en position x en exécutant une interpolation linéaire basée sur les points de référence voisins Pw(xw, yw) et Pw+1(xw+1, yw+1). Dans cet exemple, w est le point de référence le plus proche, dont la valeur x est inférieure à la valeur d’entrée s1_x, c.-à-d. que la fonction relie les points de référence en série et renvoie la valeur de sortie d_y basée sur la valeur d’entrée s1_x.
Entrée
Valeur d’entrée
Sur les automates de type 16 bits : (INT, DINT, REAL)
Sur les automates de type 32 bits : (INT, DINT, UINT, UDINT, REAL, LREAL)
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
Résultat
Sur les automates de type 16 bits : (INT, DINT, REAL)
Sur les automates de type 32 bits : (INT, DINT, UINT, UDINT, REAL, LREAL)
Exemples d’applications :
Linéariser des valeurs mesurées, par ex. avec des capteurs non-linéaires
Renvoyer la température de départ y d’un chauffage par rapport à la température extérieure x
Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.
Si le nombre de points de référence est en dehors de l’intervalle de 2–256.
Si s2_xyData est en dehors de l’intervalle autorisé
Si les valeurs x des points de référence ne sont pas dans l’ordre croissant.
Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.
Si le nombre de points de référence est en dehors de l’intervalle de 2–256.
Si s2_xyData est en dehors de l’intervalle autorisé
Si les valeurs x des points de référence ne sont pas dans l’ordre croissant.
Lorsque la valeur d’entrée x est inférieure à la coordonnée x du premier point de référence (P1 : x< x1), la sortie y est définie sur la coordonnée y du premier point de référence (sortie y = y1, ligne horizontale pointillée dans le graphique, en haut à gauche).
Lorsque la valeur d’entrée x est supérieure à la coordonnée x du dernier point de référence (P8 : x > x8), la sortie y est définie sur la coordonnée y du dernier point de référence (y = y8, ligne horizontale pointillée dans le graphique, en haut à droite).
DUT pour les valeurs xy (points de référence P1, P2,...) :
Les points de référence (P1, P2,...) sont copiés vers la fonction via une variable de type DUT contenant le nombre de points de référence et les valeurs xy (nombre ;x1, x2,... ; y1, y2 ;...).
Élément : variable du type de données ARRAY[1..z] OF INT (sur les automates de type 16 bits : INT, DINT, REAL ; sur les automates de type 32 bits : (INT, DINT, UINT, UDINT, REAL)) ou ARRAY[0..z-1] of INT (sur les automates de type 16 bits : INT, DINT, REAL ; sur les automates de type 32 bits : (INT, DINT, UINT, UDINT, REAL)) qui contient les valeurs x. z est ici le caractère générique du nombre de points de référence (voir entrée 1).
Élément : variable du type de données ARRAY[1..z] OF INT (sur les automates de type 16 bits : INT, DINT, REAL ; sur les automates de type 32 bits : (INT, DINT, UINT, UDINT, REAL)) ou ARRAY[0..z-1] of INT (sur les automates de type 16 bits : INT, DINT, REAL ; sur les automates de type 32 bits : (INT, DINT, UINT, UDINT, REAL)) qui contient les valeurs y . z est ici le caractère générique du nombre de points de référence (voir entrée 1).
FP_SCALE prend en charge les types de données suivants :
Sur les automates de type 16 bits (FP-Sigma, FP-X) : INT, DINT, REAL
Sur les automates de type 32 bits (FP7) : INT, DINT, REAL, UINT, UDINT
Instructions F correspondantes : F282_SCAL, F283_DSCAL, F354_FSCAL
Un type de données structurées (DUT) peut être composé d’autres types de données. Un DUT est tout d’abord défini dans le gestionnaire de DUT et ensuite traité comme les autres types de données standard (BOOL, INT, etc.) dans la liste des variables globales ou l’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
bStart: BOOL:=FALSE;
iInput: INT:=50;
xy_data: xy_data_dut;
iScaledOutput: INT:=0;
@'': @'';
END_VAR
La fonction est exécutée lorsque la variable bStart est définie sur TRUE.
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_CONTACT,,bStart,4,2,6,4,);
B(B_F,FP_SCALE!,,17,1,25,6,,?DEN?Ds1_x?Ds2_xyData?AENO?Cd_y);
B(B_VARIN,,iInput,15,3,17,5,);
B(B_VAROUT,,iScaledOutput,25,3,27,5,);
B(B_VARIN,,xy_data.iNumberOfValues,15,4,17,6,);
L(1,0,1,6);
L(1,3,4,3);
L(6,3,17,3);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF (bStart) then
FP_SCALE(s1_x := iInput,
s2_xyData := xy_data.iNumberOfValues,
d_y => iScaledOutput);
END_IF;