Realizar un escalado de valores discretos
Estas instrucciones FP representan el valor y en la posición x realizando un escalado basado en los puntos de referencia contiguos Pw(xw, yw) y Pw+1(xw+1, yw+1). En este ejemplo, w es el punto de referencia más próximo cuyo valor x es menor que el valor de entrada s1_x, esto es, la función conecta los puntos de referencia individuales en serie y representa el valor de salida d_y basado en el valor de entrada s1_x.
Entrada
Valor de entrada
En tipos de PLC de 16 bits: (INT, DINT, REAL)
En tipos de PLC de 32 bits: (INT, DINT, UINT, UDINT, REAL, LREAL)
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
Resultado
En tipos de PLC de 16 bits: (INT, DINT, REAL)
En tipos de PLC de 32 bits: (INT, DINT, UINT, UDINT, REAL, LREAL)
Aplicaciones ejemplo:
Linealizar valores medidos, p. ej., con sensores no lineales
Representar una temperatura de salida y de un calentador en relación con la temperatura exterior x
si el área especificada utilizando el modificador índice supera el límite.
si el número de puntos de referencia está fuera del rango de 2–256.
si s2_xyData está fuera de rango.
si los valores x de los puntos de referencia no están en orden ascendente.
si el área especificada utilizando el modificador índice supera el límite.
si el número de puntos de referencia está fuera del rango de 2–256.
si s2_xyData está fuera de rango.
si los valores x de los puntos de referencia no están en orden ascendente.
Si el valor de entrada x es inferior a la coordenada x del primer punto de referencia (P1: x< x1), la salida y se encuentra a la coordenada y del primer punto de referencia (salida y = y1, línea horizontal discontinua horizontal en la esquina superior izquierda de la gráfica).
Si el valor de entrada x es superior a la coordenada x del último punto de referencia (P8: x > x8), la salida y se encuentra a la coordenada y del último punto de referencia (salida y = y8, línea horizontal discontinua horizontal en la esquina superior derecha de la gráfica).
DUT para los pares de valores xy (puntos de referencia P1, P2, ...):
Los puntos de referencia (P1, P2, ...) se copian a la función a través de una variable de tipo DUT que contiene el número de puntos de referencia y los pares de valores xy (número; x1, x2, ...; y1, y2; ...).
Elemento: Variable del tipo de dato ARRAY[1..z] OF INT (en tipos de PLC de 16 bits: INT, DINT, REAL; en tipos de PLC de 32 bits: (INT, DINT, UINT, UDINT, REAL)) o ARRAY[0..z-1] of INT (en tipos de PLC de 16 bits: INT, DINT, REAL; en tipos de PLC de 32 bits: (INT, DINT, UINT, UDINT, REAL)) que contiene los valores x. Aquí, z representa la línea marcadora para el número de puntos de referencia (véase la entrada 1).
Elemento: Variable del tipo de dato ARRAY[1..z] OF INT (en tipos de PLC de 16 bits: INT, DINT, REAL; en tipos de PLC de 32 bits: (INT, DINT, UINT, UDINT, REAL)) o ARRAY[0..z-1] of INT (en tipos de PLC de 16 bits: INT, DINT, REAL; en tipos de PLC de 32 bits: (INT, DINT, UINT, UDINT, REAL)) que contiene los valores y . Aquí, z representa la línea marcadora para el número de puntos de referencia (véase la entrada 1).
FP_SCALE es compatible con los siguientes tipos de datos:
En tipos de PLC de 16 bits (FP-Sigma, FP-X): INT, DINT, REAL
En tipos de PLC de 32 bits (FP7): INT, DINT, REAL, UINT, UDINT
Instrucciones F correspondientes: F282_SCAL, F283_DSCAL, F354_FSCAL
Con un Tipo de Datos Estructurados (DUT) se puede definir un tipo de dato compuesto por otros tipos de datos. Una DUT se define primero en el repositorio de DUTs y, seguidamente, se procesa como los tipos de datos estándar (BOOL, INT, etc.) en la lista de variables globales o la cabecera de la POU.
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
bStart: BOOL:=FALSE;
iInput: INT:=50;
xy_data: xy_data_dut;
iScaledOutput: INT:=0;
@'': @'';
END_VAR
Cuando la variable bStart se encuentra 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 := 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;