Arc sinus de données BCD
La fonction calcule l’arc sinus 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 360° (16#0 à 16#360), en sortie d.
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 -1,0000 et 1,0000. Ces valeurs sont entrées de la façon suivante :
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 -1,0000 et 1,0000.
Si s n’est pas une valeur BCD
Si s n’est pas entre -1,0000 et 1,0000.
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#60
corresponds to 60°*)
END_VAR
La valeur 1 (signe -) est attribuée au premier élément du tableau (array) en valeur d’entrée input_value. Dans le second élément, la valeur 0 représente le nombre avant le point décimal et dans le troisième élément, 16#4500 représente le nombre après le point décimal. La fonction est exécutée lorsque la variable start est sur TRUE. Le résultat pour la valeur de sortie 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;