F301_BCOS

Cosinus de données BCD

La fonction calcule le cosinus 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.

Paramètres

Entrée

s (WORD)

Zone de 16 bits dans laquelle la valeur d’angle est sauvegardée

Sortie

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

Résultat sauvegardé dans 3 mots

Remarques

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 -1,0000 et 1,0000. Le résultat de la fonction est le suivant :

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

  • Si s n’est pas entre 0° et 360°.

sys_bIsOperationErrorNonHold (passe à TRUE pendant un cycle)
  • Si s n’est pas une valeur BCD

  • Si s n’est pas entre 0° et 360°.

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
		start: BOOL:=FALSE;
			(*activates the function*)
		input_value: WORD:=16#60;
			(*corresponds to 60°*)
		output_value: ARRAY [0..2] OF WORD:=[3(0)];
			(*result after a 0->1 leading
edge from start:
[0,1,7321]*)
	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#45 pour 45°) au contact d’entrée de la fonction.

Corps en LD

Dans le corps, la valeur 16#45° est affectée à la variable input_value. La fonction est exécutée lorsque la variable start est sur TRUE. Le résultat en sortie d est output_value[0] = 0, output_value[1] = 0, output_value[2] = 7071.

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,,16#45,8,0,10,2,);
B(B_VAROUT,,input_value,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 := 6 ;
        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,F301_BCOS,,9,0,18,4,,?DEN?D@'s'?AENO?Cd);
B(B_COMMENT,,output_value[0] = 1ø^if input_valueø^between 91° and 269°,26,0,38,3,);
B(B_COMMENT,,output_value[1] = 1ø^if input_valueø^0° or 180°,26,3,38,6,);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corps en ST

input_value:=16#45;
IF start THEN         
    F301_BCOS( input_value, output_value );
END_IF;

Corps en IL

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