F305_BATAN

Arc tangente de données BCD

La fonction calcule l’arc tangente d’une valeur BCD définie en entrée s dans un tableau (ARRAY) à trois éléments. Le résultat est renvoyé en valeur d’angle BCD, située entre 0° et 90° (16#0 à 16#90) ou 270° et 360° (16#270 à 16#360), en sortie d.

Paramètres

Entrée

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

Zone dans laquelle la valeur d’angle est sauvegardée dans trois mots

Sortie

d (WORD)

Résultat

Remarques

Les valeurs BCD pour l’entrée s sont situées entre -9999,9999 et 9999,9999. Ces valeurs sont entrées de la façon suivante :

ARRAY[0]

Signe positif ou négatif (0 lorsque l’entrée est positive, 1 lorsque l’entrée est négative)

ARRAY[1]

Nombre entier avant le point décimal (0 ou 1)

ARRAY[2]

Nombres après le point décimal arrondis à 4 chiffres comme valeur BCD (16#0000 à 16#9999).

Drapeaux d’erreur

sys_bIsOperationErrorHold (passe à TRUE et reste TRUE)

Si s n’est pas une valeur BCD

sys_bIsOperationErrorNonHold (passe à TRUE pendant un cycle)

Si s n’est pas une valeur BCD

sys_bIsEqual (passe à TRUE et reste TRUE)

Si le résultat est 0.

sys_bIsCarry (passe à TRUE pendant un cycle)

Si le résultat provoque un dépassement positif.

Exemple

En-tête du POU

Toutes les variables d’entrée et de sortie utilisées pour programmer cette fonction ont été déclarées dans l’en-tête du POU. Le même en-tête de POU est utilisé pour tous les langages de programmation.

	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

Corps en LD

La valeur 0 (signe +) est attribuée au premier élément du tableau (array) input_value. Dans le second élément, 0 représente la valeur avant le point décimal et dans le troisième élément, la valeur après le point décimal est 3639. La fonction est exécutée lorsque la variable start est sur TRUE. Le résultat pour la valeur de sortie 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

Corps 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;

Corps en IL

Modifié le : 2021-08-09Commentaires sur cette pageAssistance téléphonique