Arcoseno BCD
La función calcula el arcoseno de un valor BCD introducido en la entrada s como un ARRAY con tres elementos. El resultado es un ángulo BCD entre 0° y 360° (de 16#0 a 16#360) que se almacena en la salida d.
Entrada
Área donde se almacena el valor del ángulo
Salida
El resultado se almacena en un array de 3 palabras
Los valores BCD de la entrada s tienen que estar dentro del rango de -1,0000 a 1,0000. Se introducen de la siguiente forma:
signo (0 si es +, 1 si es -)
parte entera antes de la coma (0 ó 1)
parte decimal después de la coma con 4 cifras como valor BCD (de 16#0000 a 16#9999).
si s no es un dato BCD
si s no está entre -1,0000 y 1,0000
si s no es un dato BCD
si s no está entre -1,0000 y 1,0000
si el resultado es 0.
en caso de desbordamiento del resultado.
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: ARRAY [0..2] OF WORD:=[2(0),16#5000];
(*corresponds to 0.5*)
output_value: WORD:=0;
(*result after a 0->1 leading
edge from start: 16#60
corresponds to 60°*)
END_VAR
El primer elemento del ARRAY, input_value tiene el valor 1 (signo -). El segundo elemento tiene un 0 como valor entero, y el tercer elemento tiene 16#4500 como valor después de la coma. Cuando la variable start está ajustada a TRUE, se ejecuta la función. El resultado de output_value = 16#333 (333°).
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 3 ;
NETWORK_BODY
B(B_VARIN,,1,8,0,10,2,);
B(B_VAROUT,,input_value[0],10,0,12,2,);
L(1,0,1,3);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 3 ;
NETWORK_BODY
B(B_VARIN,,0,8,0,10,2,);
B(B_VAROUT,,input_value[1],10,0,12,2,);
L(1,0,1,3);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 3 ;
NETWORK_BODY
B(B_VARIN,,16#4500,8,0,10,2,);
B(B_VAROUT,,input_value[2],10,0,12,2,);
L(1,0,1,3);
END_NETWORK_BODY
END_NET_WORK
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,18,2,20,4,);
B(B_F,F303_BASIN,,9,0,18,4,,?DEN?D@'s'?AENO?Cd);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
input_value[0]:=1;
input_value[1]:=0;
input_value[2]:=16#4500;
IF start THEN
F303_BASIN(input_value, output_value);
END_IF;