Interpolación lineal de valores REAL discretos
Esta función realiza la linealización (escalado) de una tabla de números reales y proporciona la salida (Y) correspondiente a la entrada (X).
Entrada
Valor de entrada X
Aplicar a esta entrada el primer elemento de la DUT definida por el usuario, esto es, el número de valores xy. Véase más abajo la descripción de la estructura de la DUT.
Salida
Valor de salida Y
En lugar de utilizar esta instrucción F, se recomienda utilizar la instrucción FP7 correspondiente: FP_SCALE
Para obtener información más detallada sobre la linealización, consultar las instrucciones: F282_SCAL y F283_DSCAL.
si la dirección especificada utilizando un modificador índice supera un límite.
s el valor de x no es un número real.
si el número de valores (primer elemento de la DUT) es < 2 ó > 99.
si en 'xy_data' no se han introducido pares de valores (xt, yt) de tipo real.
si los valores de x no se han registrado en orden secuencial ascendente en la tabla lineal 'xy_data'.
si la tabla lineal de 'xy_data' es demasiado grande.
si se produce un desbordamiento (no es posible realizar la operación) durante el proceso de linealización.
si la dirección especificada utilizando un modificador índice supera un límite.
s el valor de x no es un número real.
si el número de valores (primer elemento de la DUT) es < 2 ó > 99.
si en 'xy_data' no se han introducido pares de valores (xt, yt) de tipo real.
si los valores de x no se han registrado en orden secuencial ascendente en la tabla lineal 'xy_data'.
si la tabla lineal de 'xy_data' es demasiado grande.
si se produce un desbordamiento (no es posible realizar la operación) durante el proceso de linealización.
La DUT (Data Unit Type) se crea en el repositorio de DUTs
Todas las variables de entrada y de salida utilizadas para la programación de esta función han sido declaradas en la Cabecera de la POU.
Se utiliza la misma cabecera de la POU para todos los lenguajes de programación.
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
Cuando la variable CalculateY pasa a TRUE, se ejecuta la función.
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;