Tangente de données BCD
La fonction calcule la tangente de la valeur d’un angle codé BCD (entrée s) et enregistre le résultat (sortie d) en tant que valeur BCD dans un tableau (Array) à trois éléments.
Entrée
Zone dans laquelle la valeur d’angle est sauvegardée
Sortie
Résultat sauvegardé dans 3 mots
Les valeurs BCD pour l’entrée s sont situées entre 0° et 360° (16#0 à 16#360) par étapes de 1°. Le résultat indiqué en sortie d est quant à lui situé entre -57,2900 et 57,2900 Le résultat de la fonction est le suivant :
Signe positif ou négatif (0 lorsque l’entrée est positive, 1 lorsque l’entrée est négative)
Nombre entier avant le point décimal (0 ou 1)
Nombres après le point décimal arrondis à 4 chiffres comme valeur BCD (16#0000 à 16#9999).
Si s n’est pas une valeur BCD
Si s n’est pas entre 0° et 360°.
Si s n’est pas une valeur BCD
Si s n’est pas entre 0° et 360°.
Si le résultat est 0.
Si le résultat provoque un dépassement positif.
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
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#30
corresponds to 30°*)
END_VAR
Dans cet exemple, la variable d’entrée input_value est déclarée. Cependant, vous pouvez entrer directement une constante (par ex. 16#89 pour 89°) au contact d’entrée de la fonction.
La fonction est exécutée lorsque la variable start est sur TRUE. La valeur d’entrée input_value a été initialisée avec la valeur 16#89 (89°) dans l’en-tête du POU. Le résultat est écrit dans le tableau (ARRAY) output_value. Dans le premier élément du tableau, la valeur de sortie output_value = 16# (signe +). Dans le second élément, 16#57 représente le nombre avant le point décimal et dans le troisième élément, 16#2899 représente le nombre après le point décimal.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 14 ;
NETWORK_BODY
B(B_VARIN,,output,6,1,8,3,);
B(B_VARIN,,input_value,6,2,8,4,);
B(B_VAROUT,,output_value,17,2,19,4,);
B(B_F,F302_BTAN,,8,0,17,4,,?DEN?D@'s'?AENO?Cd);
B(B_COMMENT,,output_value undefinedø^if input_valueø^90° or 270°,25,0,37,3,);
B(B_COMMENT,,output_value[0] = 1ø^if input_valueø^between 91° and 179° orø^between 271° and 359°,25,3,37,7,);
L(1,0,1,14);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start THEN
F302_BTAN(input_value, output_value);
END_IF;