Temporisateurs — TON, TOF, TP
Trois temporisateurs IEC, chacun pour un besoin différent — retarder une entrée, prolonger une sortie, ou générer une impulsion calibrée.
À quoi ça sert
Les trois sont des blocs fonctionnels standard (IEC 61131-3), disponibles aussi bien en CONT qu'en SCL. Chacun a besoin d'une instance propre — un DB créé automatiquement à l'appel, ou une multi-instance si on l'utilise à l'intérieur d'un autre bloc. Sans instance dédiée, deux temporisations qui partagent le même DB partagent aussi le même état : la seconde écrase la première.
TON — Retard à l'enclenchement (On-delay)
La sortie Q passe à VRAI seulement si l'entrée IN reste VRAIE sans interruption pendant la durée PT. Si IN repasse à FAUX avant l'échéance, le comptage repart de zéro au prochain front — rien n'est mémorisé entre-temps.
| Paramètre | Type | Rôle |
|---|---|---|
| IN | BOOL | Entrée à surveiller |
| PT | TIME | Durée de temporisation à atteindre |
| Q | BOOL | Sortie — VRAI une fois PT écoulé, tant que IN reste VRAI |
| ET | TIME | Temps écoulé depuis le dernier front montant de IN |
TOF — Retard au déclenchement (Off-delay)
La sortie Q passe à VRAI immédiatement dès que IN passe à VRAI — pas de délai à la montée. Elle ne repasse à FAUX que PT après que IN soit retombé à FAUX. C'est l'inverse d'un TON, et c'est la confusion la plus fréquente entre les deux.
| Paramètre | Type | Rôle |
|---|---|---|
| IN | BOOL | Entrée à surveiller |
| PT | TIME | Durée de maintien après la retombée de IN |
| Q | BOOL | Sortie — VRAI dès IN, reste VRAI PT de plus après sa retombée |
| ET | TIME | Temps écoulé depuis le dernier front descendant de IN |
TP — Impulsion calibrée (Pulse)
Un front montant de IN déclenche une impulsion de durée PT sur Q, quelle que soit la durée réelle de IN — même si IN redescend avant la fin de PT, Q reste actif jusqu'au bout. Un nouveau front pendant que Q est déjà actif est ignoré : TP ne redémarre pas le comptage.
| Paramètre | Type | Rôle |
|---|---|---|
| IN | BOOL | Entrée déclenchante — seul le front montant compte |
| PT | TIME | Durée fixe de l'impulsion générée |
| Q | BOOL | Sortie — impulsion de durée PT |
| ET | TIME | Temps écoulé depuis le déclenchement |
Programmation
// Un réseau suffit : le bloc TON encapsule toute la logique. Réseau 1 — Filtrage par temporisation à l'enclenchement ┌──────────────┐ │ TON │ │ "tempo" │ ──────────────┤IN Q ├──────────────( entreeFiltree ) entreeBrute │ │ T#50ms───┤PT ET │ └──────────────┘ // entreeFiltree ne passe à 1 que si entreeBrute est resté à 1 // sans interruption pendant 50 ms.
// Filtrage anti-rebond d'une entrée TOR par TON — le front n'est // validé que s'il tient au moins 50 ms sans interruption. FUNCTION_BLOCK "FB_Antirebond" VAR_INPUT entreeBrute : BOOL; // signal capteur, potentiellement bruité END_VAR VAR_OUTPUT entreeFiltree : BOOL; END_VAR VAR tempo : TON; // instance dédiée à ce FB END_VAR BEGIN #tempo(IN := #entreeBrute, PT := T#50ms); #entreeFiltree := #tempo.Q; END_FUNCTION_BLOCK
Les pièges
| PT est un TIME, pas un entier | Une constante s'écrit T#500ms ou T#2s500ms, pas simplement « 500 ». Passer un INT brut sans conversion est une erreur de compilation, pas une erreur silencieuse — mais elle surprend les débutants venus d'autres langages. |
|---|---|
| Une instance par appel, pas par bloc | Copier-coller un réseau contenant un TON sans changer le nom d'instance (le DB associé) fait cohabiter deux temporisations différentes sur le même état interne. Symptôme typique : une des deux temporisations semble « figée » ou copie le comportement de l'autre. |
| PT peut être une variable, pas seulement une constante | Rien n'empêche de câbler PT sur une variable modifiable en cours de fonctionnement (recette, réglage opérateur) — utile, mais un changement de PT pendant que la temporisation est en cours ne réinitialise pas ET : l'effet n'est visible qu'au prochain front. |
Sources
Documentation TIA Portal — instructions de temporisation IEC 61131-3 (SIMATIC S7-1200/S7-1500), aide en ligne Siemens.
