Bloc système

Compteurs — CTU, CTD, CTUD

Compter des fronts en incrémental, en décrémental, ou dans les deux sens — sans réécrire soi-même la logique de comptage à chaque programme.

CTUCTDCTUD

À quoi ça sert

Comme les temporisateurs, ce sont des blocs fonctionnels IEC avec instance propre. Ils comptent des fronts logiciels, au rythme du cycle automate — pas des impulsions haute fréquence. Pour du comptage rapide (codeur, débitmètre à sortie impulsionnelle au-delà de quelques centaines de Hz), il faut un compteur rapide matériel (HSC), pas ces blocs.

CTU — Comptage incrémental (Count Up)

Chaque front montant de CU incrémente CV de 1. Q passe à VRAI dès que CV atteint ou dépasse PV. R remet CV à 0 et est prioritaire sur CU : si les deux sont vrais au même cycle, le comptage repart de zéro.

ParamètreTypeRôle
CUBOOLEntrée de comptage — un front montant = +1
RBOOLRemise à zéro de CV, prioritaire sur CU
PVINTValeur de consigne (seuil)
QBOOLSortie — VRAI quand CV ≥ PV
CVINTValeur courante du comptage
Quand l’utiliserCompter des pièces passant devant un capteur de présence sur un convoyeur jusqu'à un seuil de lot, ou compter des cycles machine avant une maintenance préventive.
PiègeR prioritaire sur CU : si le signal de remise à zéro et le signal de comptage arrivent vrais sur le même cycle, CV repasse à 0 sans jamais tenir compte du front de CU de ce cycle-là.

CTD — Comptage décrémental (Count Down)

Chaque front montant de CD décrémente CV de 1. Q passe à VRAI quand CV atteint 0 ou moins. LD charge CV avec la valeur PV, indépendamment du comptage en cours — c'est l'équivalent du R du CTU, mais pour repartir d'une valeur de départ plutôt que de zéro.

ParamètreTypeRôle
CDBOOLEntrée de comptage — un front montant = −1
LDBOOLChargement de CV avec PV
PVINTValeur de départ à charger via LD
QBOOLSortie — VRAI quand CV ≤ 0
CVINTValeur courante du comptage
Quand l’utiliserDécompte de stock à chaque sortie de pièce d'un magasin, ou compte à rebours d'un nombre de cycles restants avant arrêt programmé.
PiègeSans un LD initial, CV démarre à 0 : un CTD non initialisé passe Q à VRAI dès la mise en route, avant même le premier comptage.

CTUD — Comptage bidirectionnel (Count Up/Down)

Combine les deux sens dans un seul bloc : CU incrémente, CD décrémente, sur la même valeur CV. QU et QD sont les deux sorties de seuil (haute et basse), R et LD gardent le même rôle que dans CTU et CTD.

ParamètreTypeRôle
CU / CDBOOLComptage montant / descendant
RBOOLRemise à zéro de CV, prioritaire
LDBOOLChargement de CV avec PV
PVINTValeur de consigne / de chargement
QU / QDBOOLVRAI si CV ≥ PV / si CV ≤ 0
CVINTValeur courante, modifiable dans les deux sens
Quand l’utiliserSuivi de position par comptage d'impulsions dans les deux sens — par exemple un axe qui va-et-vient sans codeur absolu, où chaque capteur de sens incrémente ou décrémente le même total.
PiègeCTUD reste un compteur logiciel cyclique : à cadence élevée, deux fronts CU qui arrivent dans le même cycle automate ne comptent qu'une fois. Pour du comptage rapide, c'est un compteur matériel (HSC) qu'il faut configurer, pas ce bloc.

Programmation

Réseau 1 — Comptage de pièces jusqu'au seuil du lot
              ┌──────────────┐
              │     CTU      │
              │  "compteur"  │
──────────────┤CU         Q  ├──────────────( lotComplet )
 detectionPiece│              │
──────────────┤R         CV  ├──────────────[ nbPieces ]
 rearmement   │              │
         24───┤PV            │
              └──────────────┘

// lotComplet passe à 1 dès que nbPieces atteint 24.
// rearmement (prioritaire) remet nbPieces à 0.
// Comptage de pièces sur un convoyeur, lot de 24, remise à zéro
// manuelle par bouton poussoir.

FUNCTION_BLOCK "FB_ComptageLot"
VAR_INPUT
    detectionPiece : BOOL;   // capteur de présence, un front par pièce
    rearmement     : BOOL;   // bouton poussoir opérateur
END_VAR
VAR_OUTPUT
    lotComplet : BOOL;
    nbPieces   : INT;
END_VAR
VAR
    compteur : CTU;
END_VAR

BEGIN
    #compteur(CU := #detectionPiece, R := #rearmement, PV := 24);
    #lotComplet := #compteur.Q;
    #nbPieces   := #compteur.CV;
END_FUNCTION_BLOCK
CONT ou SCL ?La mise à l’échelle est plus lisible en SCL. L’usage courant est d’écrire ce bloc en SCL et de l’appeler depuis le programme CONT. La version CONT existe pour les sites où le SCL n’est pas autorisé.
Code non validé sur installationGénéré depuis la documentation. À confirmer sur matériel avant mise en production.

Les pièges

CV est un INT — débordement silencieuxSur S7-1200/1500, CV est borné à la plage −32768…32767 pour un compteur INT standard. Un dépassement n'arrête rien et ne remonte pas d'erreur visible : CV boucle simplement. À sécuriser par un test de plage si le comptage peut monter haut.
Le comptage est basé sur le front, pas sur l'étatCU et CD ne comptent que sur un front montant détecté d'un cycle au suivant. Si l'entrée change deux fois plus vite que le temps de cycle automate, un ou plusieurs événements sont perdus sans avertissement — vérifier le temps de cycle face à la cadence réelle du process.

Sources

Documentation TIA Portal — instructions de comptage IEC 61131-3 (SIMATIC S7-1200/S7-1500), aide en ligne Siemens.

À propos de cette page Cette page est générée depuis des fiches de données structurées, pas écrite à la main — voir la maquette interactive pour naviguer parmi tous les guides.