F305_BATAN

Arcotangente BCD

La función calcula el arcotangente de un valor BCD introducido en la entrada s como un ARRAY con tres elementos. El resultado es un ángulo BCD entre 0° y 90° (de 16#0 a 16#90) ó entre 270° y 360° (de 16#270 a 16#360) que se almacena en d

Parámetros

Entrada

s ARRAY [0..2] of (WORD)

Área de 3 palabras para almacenar el ángulo

Salida

d (WORD)

Resultado

Observaciones

Los valores BCD de la entrada s tienen que estar dentro del rango de -9999,9999 a 9999,9999. Se introducen de la siguiente forma:

ARRAY[0]

signo (0 si es +, 1 si es -)

ARRAY[1]

parte entera antes de la coma (0 ó 1)

ARRAY[2]

parte decimal después de la coma con 4 cifras como valor BCD (de 16#0000 a 16#9999).

Banderas de error

sys_bIsOperationErrorHold (pasa a TRUE y permanece TRUE)

si s no es un dato BCD

sys_bIsOperationErrorNonHold (pasa a TRUE para un ciclo de scan)

si s no es un dato BCD

sys_bIsEqual (pasa a TRUE y permanece TRUE)

si el resultado es 0.

sys_bIsCarry (pasa a TRUE para un ciclo de scan)

en caso de desbordamiento del resultado.

Ejemplo

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
		output: BOOL:=FALSE;
			(*activates the function*)
		input_value: ARRAY [0..2] OF WORD:=[3(0)];
			(*number between -9999.9999 and 9999.9999
input_value[0] = +/- sign
input_value[1] = pre-decimal point values
input_value[2] = post-decimal point values*)
		output_value: WORD:=0;
			(*BCD value between
16#0 and 16#360 (0° and 360°)
result: here 16#20*)
	END_VAR

Cuerpo LD

El primer elemento del ARRAY, input_value tiene el valor 0 (signo +). 0 es el valor entero almacenado en el segundo elemento, y el valor del tercer elemento del array es 3639. Cuando la variable start está ajustada a TRUE, se ejecuta la función. El resultado de output_value = 16#20 (20°).

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,,0,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#3639,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,8,1,10,3,);
B(B_VARIN,,input_value,8,2,10,4,);
B(B_VAROUT,,output_value,19,2,21,4,);
B(B_F,F305_BATAN,,10,0,19,4,,?DEN?D@'s'?AENO?Cd);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Cuerpo en ST

input_value[0]:=0;
input_value[1]:=0;
input_value[2]:=16#3639;
IF start THEN         
    F305_BATAN(input_value, output_value);
END_IF;

Cuerpo IL

Modificado el: 2021-07-14Comentarios sobre esta páginaLínea directa de Panasonic