Compteur croissant/décroissant
Le bloc fonction CTUD (count up/down) permet de programmer des procédures de comptage (croissant et décroissant).
Compteur croissant (CU définie sur TRUE)
Le compteur croissant démarre à zéro jusqu’à ce que la valeur maximale 32767 soit atteinte. À chaque front montant du compteur croissant CU, la valeur courante CV est incrémentée de 1.
Compteur décroissant (CD définie sur TRUE)
Le compteur décroissant démarre à zéro jusqu’à ce que la valeur minimale -32768 soit atteinte. À chaque front montant du compteur décroissant CD, la valeur courante CV est décrémentée de 1.
Entrée
Compteur croissant
La valeur 1 est ajoutée à la valeur courante CV à chaque front montant détecté sur CU, sauf lorsque R et/ou LD est/sont activé(s).
Compteur décroissant
La valeur 1 est déduite de la valeur courante CV à chaque front montant détecté sur CD, sauf lorsque R et/ou LD est/sont activé(s).
Lorsque CU et CD sont définis sur TRUE simultanément, le comptage n’est pas exécuté.
Réinitialiser
CV est réinitialisée à zéro à chaque front montant de R et le comptage s’arrête. La sortie QU/QD est définie sur FALSE.
Le front descendant suivant en R redémarre le comptage.
Chargement
Lorsque LD est activée, PV est chargée dans CV et QU est définie sur TRUE. Cependant, ceci ne s’applique pas si R est activée simultanément. Dans ce cas, LD est ignoré.
Valeur de consigne
Détermine la valeur de consigne à atteindre par l’addition ou la soustraction.
Si aucune valeur de consigne n’est définie ou si la valeur de consigne est zéro la sortie QU est définie sur TRUE immédiatement après le démarrage du comptage.
Sortie
Sortie de signal - Compteur croissant
Définie sur TRUE lorsque CV est supérieure/égale à PV
Définie sur FALSE lorsqu’un front montant est détecté sur R.
Sortie de signal - Compteur décroissant
Définie sur TRUE lorsque CV = zéro
Définie sur FALSE lorsqu’un front montant est détecté sur R.
Valeur courante
Résultat de l’addition/soustraction
Comptage croissant :
Lorsque CV atteint la valeur de consigne PV, la sortie QU est définie sur TRUE, mais le comptage continue jusqu’à ce que la valeur maximale 32767 soit atteinte.
Comptage décroissant :
Lorsque CV atteint zéro, la sortie QD est définie sur TRUE, mais le comptage continue jusqu’à ce que la valeur minimale -32768 soit atteinte.
La valeur peut être modifiée pendant le comptage en écrivant dans la variable à partir de l’éditeur de programmation.
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
CTUD1: CTUD;
bCountUp: BOOL:=FALSE;
(*increments CV if TRUE*)
bCountDown: BOOL:=FALSE;
(*decrements CV if TRUE*)
bReset: BOOL:=FALSE;
(*sets CV to zero if TRUE*)
bLoad: BOOL:=FALSE;
(*sets CV to PV if TRUE*)
iPresetValue: INT:=3;
(*if CV reaches this value,
output QU is set*)
bUpCounting_PV_reached: BOOL:=FALSE;
(*is set, if CV reaches PV*)
bDownCounting_zero_reached: BOOL:=FALSE;
(*is set, if CV reaches zero*)
iCurrentValue: INT:=0;
(*contains the current value*)
END_VAR
Compteur croissant :
Lorsque bReset est activé, iCurrentValue(CV) est réinitialisée. Lorsque bCountUp est activé, la valeur 1 est ajoutée à iCurrentValue. Cette procédure est répétée à chaque front montant détecté sur bCountUp jusqu’à ce que iCurrentValue soit supérieure/égale à la valeur iPresetValue. bUpCounting_PV_reached est alors défini sur TRUE. La procédure n’est pas exécutée lorsque bReset et/ou bLoad est/sont activé(s).
Compteur décroissant :
Lorsque bReset est activé (état = TRUE), la valeur de consigne iPresetValue (PV) est chargée dans la valeur courante iCurrentValue. Lorsque bCountDown est activé, la valeur 1 est soustraite de iPresetValue. Cette procédure est répétée à chaque front montant détecté jusqu’à ce que la valeur courante iCurrentValue soit inférieure/égale à zéro. bDownCounting_zero_reached est alors défini sur TRUE. La procédure n’est pas exécutée lorsque bReset et/ou bLoad est/sont activé(s). Lorsque CU et CD sont activés en même temps, le comptage n’est pas exécuté.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 14 ;
NETWORK_BODY
B(B_CONTACT,,bCountUp,5,3,7,5,);
B(B_CONTACT,,bCountDown,5,5,7,7,);
B(B_FB,CTUD!,CTUD1,12,4,18,11,,?BCU?BCD?BR?BLD?BPV?AQU?AQD?ACV);
B(B_COIL,,bUpCounting_PV_reached,25,5,27,7,);
B(B_CONTACT,,bReset,5,7,7,9,);
B(B_COIL,,bDownCounting_zero_reached,25,8,27,10,);
B(B_CONTACT,,bLoad,5,9,7,11,);
B(B_VAROUT,,iCurrentValue,20,10,22,12,);
B(B_VARIN,,iPresetValue,7,11,9,13,);
L(1,0,1,14);
L(1,4,5,4);
L(7,4,10,4);
L(10,4,10,6);
L(1,6,5,6);
L(7,6,9,6);
L(10,6,12,6);
L(18,6,25,6);
L(9,6,9,7);
L(9,7,12,7);
L(18,7,20,7);
L(20,7,20,9);
L(1,8,5,8);
L(7,8,12,8);
L(18,8,19,8);
L(19,8,19,11);
L(9,9,12,9);
L(20,9,25,9);
L(9,9,9,10);
L(1,10,5,10);
L(7,10,9,10);
L(10,10,12,10);
L(10,10,10,12);
L(19,11,20,11);
L(9,12,10,12);
END_NETWORK_BODY
END_NET_WORK
END_BODY
CTUD1(CU := bCountUp, CD := bCountDown, R := bReset, LD := bLoad,
PV := iPresetValue, QU => bUpCounting_PV_reached,
QD => bDownCounting_zero_reached, CV => iCurrentValue);