Le bloc fonction CT_FB permet de réaliser un comptage décroissant. La zone de comptage SV (set value) s’étend de 1 à 32767.
Entrée
Contact comptage (décroissant)
Lorsqu’un front montant est détecté sur Count, la valeur 1 est soustraite de la valeur courante EV jusqu’à ce que la valeur 0 soit atteinte
Contact réinitialisation
Lorsqu’un front montant est détecté sur Reset, la valeur 0 est affectée à la valeur courante EV et la sortie de signal C est réinitialisée ; lorsqu’un front descendant est détecté sur Reset, la valeur de consigne SV est affectée à la valeur courante EV
Valeur de consigne
Valeur de EV après réinitialisation
Sortie
Sortie de signal
Activée lorsque EV est égale à 0
Valeur courante
Valeur courante du compteur
La valeur peut être modifiée pendant le comptage en écrivant dans la variable à partir de l’éditeur de programmation.
Pour pouvoir fonctionner correctement, le bloc fonction CT_FB doit être réinitialisé avant chaque utilisation.
Le nombre de compteurs est limité et dépend des paramètres des registres système 5 et 6. Le compilateur affecte une adresse NUM* à chaque instance du compteur. Les adresses sont affectées de manière décroissante, en commençant par l’adresse la plus élevée.
La fonction CT de base (compteur décroissant) utilise la même zone d’adresses NUM* (entrée Num). Pour éviter les erreurs (conflits d’adresses), la fonction CT et le bloc fonction CT_FB ne doivent pas être utilisés ensemble dans un projet.
Chronogramme
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
copy_name: CT_FB;
set_value: INT:=10;
signal_output: BOOL:=FALSE;
count_contact: BOOL:=FALSE;
Reset_CT: BOOL:=FALSE;
machine_error: BOOL:=FALSE;
number_error: INT:=0;
END_VAR
Cet exemple utilise des variables. Vous pouvez également utiliser des constantes pour les variables d’entrée. Lorsqu’un front montant est détecté sur count_contact la valeur 1 est soustraite de la valeur courante EV. Signal_output est défini sur TRUE lorsque la valeur courante EV est égale à 0.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_FB,CT_FB!,copy_name,9,1,15,6,,?BCount?BReset?BSV?AC?AEV);
B(B_VARIN,,count_contact,7,2,9,4,);
B(B_VARIN,,Reset_CT,7,3,9,5,);
B(B_VARIN,,set_value,7,4,9,6,);
B(B_VAROUT,,signal_output,15,2,17,4,);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_F,E_MOVE!,Instance,10,1,16,5,,?DEN?D?AENO?C);
B(B_VARIN,,copy_name.EV,8,3,10,5,);
B(B_VAROUT,,number_error,16,3,18,5,);
B(B_CONTACT,,machine_error,4,2,6,4,);
L(1,3,4,3);
L(6,3,10,3);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
Si vous souhaitez appeler le bloc fonction dans une liste d’instructions, entrez ce qui suit :