Détection de front — R_TRIG, F_TRIG
Transformer un état stable en une impulsion d'un seul cycle — la base de toute logique « une seule fois par événement », et l'erreur la plus fréquente chez qui l'ignore.
À quoi ça sert
Un capteur ou un bouton reste souvent VRAI pendant plusieurs cycles automate d'affilée. Sans détection de front, une condition testée directement sur cet état déclenche l'action qu'elle commande à chaque cycle tant que l'état reste vrai — pas une seule fois. R_TRIG et F_TRIG isolent le changement d'état lui-même, indépendamment de sa durée. Chaque instance a sa propre mémoire d'un cycle à l'autre : c'est ce qui permet de « se souvenir » de l'état précédent pour détecter le changement.
R_TRIG — Détection de front montant
Q passe à VRAI pendant exactement un cycle lorsque CLK passe de FAUX à VRAI, puis retombe à FAUX même si CLK reste VRAI. Nécessite une instance (DB) pour mémoriser l'état de CLK au cycle précédent.
| Paramètre | Type | Rôle |
|---|---|---|
| CLK | BOOL | Signal à surveiller |
| Q | BOOL | Impulsion d'un cycle au front montant de CLK |
F_TRIG — Détection de front descendant
Symétrique de R_TRIG : Q passe à VRAI pendant un cycle lorsque CLK passe de VRAI à FAUX.
| Paramètre | Type | Rôle |
|---|---|---|
| CLK | BOOL | Signal à surveiller |
| Q | BOOL | Impulsion d'un cycle au front descendant de CLK |
Programmation
Réseau 1 — Impulsion unique sur franchissement de seuil ┌──────────────┐ │ R_TRIG │ │ "detecteur" │ ──────────────┤CLK Q ├──────────────( impulsionAlarme ) niveauHaut │ │ └──────────────┘ // impulsionAlarme ne reste à 1 qu'un cycle, même si niveauHaut // reste à 1 pendant des heures.
// Déclenche une alarme une seule fois quand le niveau franchit le // seuil haut, plutôt qu'en continu tant que le seuil est dépassé. FUNCTION_BLOCK "FB_AlarmeUneFois" VAR_INPUT niveauHaut : BOOL; // ex. bit HIGH remonté par le capteur END_VAR VAR_OUTPUT impulsionAlarme : BOOL; // un seul cycle par dépassement END_VAR VAR detecteur : R_TRIG; END_VAR BEGIN #detecteur(CLK := #niveauHaut); #impulsionAlarme := #detecteur.Q; END_FUNCTION_BLOCK
Les pièges
| Une instance par signal surveillé | R_TRIG et F_TRIG mémorisent l'état du cycle précédent dans leur propre instance. Réutiliser la même instance pour surveiller deux signaux différents (par exemple en copiant un réseau sans changer le nom du DB) ne détecte correctement le front que sur l'un des deux, de façon imprévisible selon l'ordre d'évaluation. |
|---|---|
| Alternative plus légère en CONT : les contacts P et N | Un contact « P » (front montant) ou « N » (front descendant) posé directement sur un fil produit le même résultat qu'un R_TRIG/F_TRIG, mais mémorise son état dans un simple bit interne plutôt que dans une instance de bloc — pratique pour une détection ponctuelle sans vouloir déclarer un DB dédié. Le résultat logique est identique. |
| Un redémarrage à chaud peut générer un faux front | Si CLK est déjà VRAI au premier cycle après une remise en RUN, l'instance non initialisée peut, selon son état de mémoire au démarrage, interpréter cela comme un front montant. À vérifier si l'action déclenchée est sensible (démarrage moteur, par exemple). |
Sources
Documentation TIA Portal — instructions de détection de front IEC 61131-3 (SIMATIC S7-1200/S7-1500), aide en ligne Siemens.
