Conversión de coma flotante -> entero de 16 bits (al mayor entero sin superar el valor en coma flotante)
La función convierte en entero con signo, el dato en coma flotante almacenado en s en el rango de -32.767,99 a 32.767,99. La función devuelve el resultado en la salida d.
Entrada
Número REAL a convertir (2 palabras)
Salida
Destino donde se almacena el resultado de la conversión
El resultado de la conversión en la salida d es siempre menor o igual que el valor en coma flotante de la entrada s:
Si el valor en coma flotante de la entrada es positivo, se devuelve a la salida la parte entera del valor real.
Si el valor en coma flotante de la entrada es negativo, se devuelve a la salida el valor negativo inmediatamente inferior a la parte entera.
Si el valor en coma flotante solo tiene ceros después del punto decimal, se devuelve directamente la parte entera.
El valor en la entrada s no es un número REAL, o el resultado de la conversión desborda el área de 16 bits de la salida d.
El valor en la entrada s no es un número REAL, o el resultado de la conversión desborda el área de 16 bits de la salida d.
Si el resultado calculado es 0.
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
start: BOOL:=FALSE;
(*activates the function*)
input_value: REAL:=-1.234;
output_value: INT:=0;
(*result after a 0->1 leading
edge from start: 32*)
END_VAR
En este ejemplo se ha declarado la variable de entrada input_value. Sin embargo, se puede introducir una constante directamente en la entrada de la función.
Cuando la variable start está ajustada a TRUE, se ejecuta la función. Convierte el valor en coma flotante -1,234 en el valor entero -2 y se almacena en la variable output_value. Puesto que el número entero nunca debe ser mayor que el valor en coma flotante, la función redondea al valor entero inmediatamente inferior.
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,,output,7,1,9,3,);
B(B_VARIN,,input_value,7,2,9,4,);
B(B_VAROUT,,output_value,17,2,19,4,);
B(B_F,F327_INT,,9,0,17,4,,?DEN?D@'s'?AENO?Cd);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start THEN
F327_INT(input_value, output_value);
END_IF;