Opérations logiques sur bits
Contacts, Bobines & Détection de front
Le cœur de la programmation automate. Les instructions logiques sur bits gèrent chaque opération booléenne — des simples contacts et bobines aux bascules et à la détection de front. Maîtrisez-les et vous pourrez construire n'importe quelle logique d'automatisation.
Que sont les opérations logiques sur bits ?
Les opérations logiques sur bits sont les instructions les plus fondamentales de la programmation automate. Elles travaillent avec des signaux booléens (VRAI/FAUX, 1/0) — lecture d'états d'entrée, combinaison de conditions avec une logique ET/OU, et pilotage de sorties. En CONT, elles apparaissent comme des contacts et des bobines sur des réseaux. En LOG, elles apparaissent comme des boîtes de portes ET/OU/NON.
Chaque programme automate utilise intensivement les instructions logiques sur bits. Un circuit de démarrage/arrêt moteur, une condition d'alarme, un verrouillage de vanne — tout commence par des contacts lisant les états des capteurs et se termine par des bobines pilotant les actionneurs.
Contacts — Lecture des états d'entrée
Les contacts lisent l'état booléen d'une variable et le transmettent le long de la chaîne logique
Contact à fermeture (NO)
—| |—Ce qu'il fait
Lit une variable booléenne (BOOL). Si la variable est à VRAI (1), le contact se ferme et transmet le signal (RLG = VRAI) à l'élément suivant. Si la variable est à FAUX (0), le contact est ouvert et bloque le flux. C'est l'instruction la plus utilisée en programmation CONT.
Quand l'utiliser
Chaque fois que vous devez vérifier si une condition est VRAI : un bouton est-il pressé ? Un capteur est-il actif ? Un indicateur est-il activé ? Placez un contact à fermeture et affectez-lui votre variable.
Conseils d'expert
Le nom 'Normalement Ouvert' vient de la logique à relais — le contact est ouvert (ne laissant pas passer le courant) dans son état normal/de repos. Il se ferme lorsqu'il est actionné.
Plusieurs contacts NO en série créent une logique ET. Plusieurs contacts NO dans des branches parallèles créent une logique OU.
En LOG, l'équivalent consiste simplement à câbler une variable BOOL à l'entrée d'une boîte ET/OU — aucun symbole de contact explicite n'est nécessaire.
Contact à ouverture (NF)
—|/|—Ce qu'il fait
L'inverse d'un contact à fermeture. Si la variable est à FAUX (0), le contact est fermé et transmet le signal. Si la variable est à VRAI (1), le contact s'ouvre et bloque le signal. Il agit comme une opération NON sur la valeur de la variable.
Quand l'utiliser
Lorsque vous devez vérifier qu'une condition n'est PAS vraie : arrêt d'urgence non pressé, aucun défaut actif, fin de course non atteint. Très courant pour les verrouillages de sécurité et les conditions d'alarme.
Conseils d'expert
Utilisez des contacts NF pour les arrêts d'urgence et les circuits de sécurité — ils sont à sécurité positive. Si le fil se casse, le contact NF s'ouvre et arrête la machine.
En LOG, l'équivalent est une entrée inversée (petit cercle sur la broche d'entrée d'une boîte ET/OU).
Ne confondez pas l'instruction de contact NF avec un bouton-poussoir physiquement NF. Ce sont des concepts indépendants.
Inverser le RLG
—|NOT|—Ce qu'il fait
Inverse (négate) le Résultat Logique Global (RLG) actuel. Si la chaîne logique jusqu'à ce point est évaluée à VRAI, NOT la rend FAUX, et vice versa. Elle opère sur le résultat logique accumulé, pas sur une variable spécifique.
Quand l'utiliser
Lorsque vous devez inverser une expression logique complexe plutôt qu'une seule variable. Au lieu de réécrire toute la condition avec des contacts inversés, placez NOT à la fin pour basculer le résultat.
Conseils d'expert
NOT inverse l'ensemble du RLG à ce point de la chaîne — c'est différent d'un contact NF qui n'inverse qu'une seule variable.
En LOG, utilisez la boîte NOT ou inversez la sortie d'une porte logique.
À utiliser avec parcimonie — l'utilisation excessive de NOT rend la logique difficile à lire. Souvent, la restructuration de la logique est plus claire.
Bobines — Pilotage des sorties
Les bobines écrivent le résultat de la chaîne logique dans une variable de sortie
Affectation
—( )—Ce qu'il fait
Écrit le Résultat Logique Global (RLG) actuel dans une variable booléenne. Si la chaîne logique est VRAI, la variable devient VRAI. Si elle est FAUX, la variable devient FAUX. C'est la bobine de sortie standard — elle reflète directement la logique d'entrée à chaque cycle de scrutation.
Quand l'utiliser
Pour toute sortie qui doit suivre directement ses conditions d'entrée. Un voyant allumé quand un moteur tourne, une vanne qui s'ouvre quand les conditions sont réunies. La sortie suit l'entrée — quand les conditions passent à FAUX, la sortie passe aussi à FAUX.
Conseils d'expert
La bobine d'affectation est 'non-rémanente' — elle écrit à chaque scrutation. Si la logique passe à FAUX, la sortie passe immédiatement à FAUX.
Une variable ne doit être affectée que dans UN SEUL réseau. Plusieurs affectations à la même variable font que la dernière l'emporte, ce qui entraîne un comportement imprévisible.
En LOG, l'affectation consiste simplement à connecter la sortie d'une porte logique à une variable BOOL.
Affectation inversée
—(/)—Ce qu'il fait
Écrit le RLG inversé dans une variable booléenne. Si la chaîne logique est VRAI, la variable devient FAUX. Si la chaîne logique est FAUX, la variable devient VRAI. Elle combine Affectation + NOT en une seule instruction.
Quand l'utiliser
Lorsqu'une sortie doit être active dans la condition opposée. Par exemple, un voyant 'système OK' qui s'éteint lorsqu'un défaut est détecté. Au lieu d'inverser toute la chaîne logique, utilisez la bobine inversée.
Conseils d'expert
Équivalent à placer un NOT avant une bobine d'affectation régulière, mais plus compact.
À utiliser avec prudence — les bobines inversées peuvent être déroutantes à lire. Parfois, il est plus clair de restructurer la logique.
En LOG, il s'agit d'une connexion de sortie inversée.
Mettre à 0 (R)
—(R)—Ce qu'il fait
Lorsque le RLG est à VRAI, la variable est mise à FAUX (0). Lorsque le RLG est à FAUX, la variable reste inchangée (conserve sa valeur actuelle). Il s'agit d'une opération unidirectionnelle — elle ne peut qu'éteindre les choses, jamais les allumer.
Quand l'utiliser
Dans les circuits de mise à 1/0 : un réseau met la sortie à 1 (Set), un autre la met à 0 (Reset). Utilisez Mettre à 0 pour les conditions d'arrêt, l'effacement des défauts et l'acquittement des alarmes. Le Reset a généralement la priorité dans la logique de sécurité.
Conseils d'expert
Le Reset n'agit que lorsque son RLG est à VRAI. Lorsque le RLG est à FAUX, la sortie reste inchangée — il ne la met PAS à VRAI.
Dans une paire S/R, l'instruction qui apparaît en DERNIER dans le programme a la priorité (si les deux conditions sont VRAI simultanément).
Le Reset est rémanent — après un Reset, la sortie reste à FAUX jusqu'à ce qu'elle soit explicitement remise à 1.
Mettre à 1 (S)
—(S)—Ce qu'il fait
Lorsque le RLG est à VRAI, la variable est mise à VRAI (1). Lorsque le RLG est à FAUX, la variable reste inchangée (conserve sa valeur actuelle). Il s'agit d'une opération unidirectionnelle — elle ne peut qu'allumer les choses, jamais les éteindre.
Quand l'utiliser
Dans les circuits de mise à 1/0 : utilisez Mettre à 1 pour les conditions de démarrage, les signaux de mémorisation et les indicateurs de premier cycle. Une fois mise à 1, la sortie reste à VRAI jusqu'à ce qu'elle soit explicitement mise à 0 — ce qui la rend 'auto-maintenue' sans avoir besoin d'un contact d'auto-maintien.
Conseils d'expert
Le Set n'agit que lorsque son RLG est à VRAI. Lorsque le RLG est à FAUX, la sortie reste inchangée — il ne la remet pas à 0.
Commande moteur classique : Réseau 1 = Bouton Marche → Mettre à 1 Moteur. Réseau 2 = Bouton Arrêt OU Défaut → Mettre à 0 Moteur.
Attention aux variables rémanentes dans les circuits de sécurité — après un cycle d'alimentation, les sorties mises à 1 peuvent conserver leur dernier état selon les réglages du DB.
Opérations sur champ de bits
Mettre à 1 ou à 0 une plage de bits en une seule opération
SET_BF — Mettre à 1 champ de bits
Ce qu'il fait
Met à VRAI un groupe de bits contigus à partir d'une adresse spécifiée. Vous définissez le bit de départ et le nombre de bits à mettre à 1. Lorsque le RLG est à VRAI, tous les bits spécifiés sont mis à 1.
Quand l'utiliser
Lorsque vous devez activer plusieurs sorties liées simultanément — par exemple, mettre à 1 tous les bits d'un mot d'état, initialiser un groupe d'indicateurs ou activer un banc de sorties à la fois.
Conseils d'expert
Utile pour les opérations par lots au lieu d'écrire des instructions Mettre à 1 individuelles pour chaque bit.
Le paramètre du nombre de bits détermine le nombre de bits consécutifs affectés.
Comme Mettre à 1, cela n'agit que lorsque le RLG est à VRAI — les bits sont inchangés lorsque le RLG est à FAUX.
RESET_BF — Mettre à 0 champ de bits
Ce qu'il fait
Met à FAUX un groupe de bits contigus à partir d'une adresse spécifiée. Vous définissez le bit de départ et le nombre de bits à mettre à 0. Lorsque le RLG est à VRAI, tous les bits spécifiés sont effacés à 0.
Quand l'utiliser
Lorsque vous devez effacer plusieurs indicateurs ou sorties à la fois — par exemple, effacer tous les bits d'alarme dans un mot d'état, remettre à 0 un groupe de sorties pendant l'arrêt ou initialiser une zone de données.
Conseils d'expert
Le pendant de SET_BF — utilisez-les ensemble pour les opérations de mise à 1/0 groupées.
Particulièrement utile pour effacer des mots d'alarme ou des registres d'état en une seule opération.
Comme Mettre à 0, cela n'agit que lorsque le RLG est à VRAI — les bits sont inchangés lorsque le RLG est à FAUX.
Bascules — Circuits de mémorisation
Éléments bistables qui mémorisent leur état jusqu'à un changement explicite
SR — Bascule de mise à 1/0
Ce qu'il fait
Une bascule bistable avec priorité à la mise à 1 (Set). Elle possède deux entrées : S (Set) et R (Reset), et une sortie Q. Quand S=VRAI, Q devient VRAI. Quand R=VRAI, Q devient FAUX. Quand S et R sont VRAI simultanément, Q est à VRAI (Set domine).
Quand l'utiliser
Pour les circuits de mémorisation où la condition de mise à 1 doit avoir la priorité. Dans une bascule SR, si les boutons marche et arrêt sont pressés en même temps, la sortie reste active. Utilisez ceci lorsque la 'priorité marche' est acceptable.
Conseils d'expert
SR = Priorité à la mise à 1. Si S=1 et R=1 → Q=1. À utiliser lorsque le démarrage est plus important que l'arrêt.
Dans les applications critiques pour la sécurité, préférez RS (priorité au Reset) — c'est plus sûr si les deux conditions se déclenchent simultanément.
La bascule est une boîte unique en CONT et en LOG avec les entrées S, R et la sortie Q.
RS — Bascule de mise à 0/1
Ce qu'il fait
Une bascule bistable avec priorité à la mise à 0 (Reset). Elle possède deux entrées : R (Reset) et S (Set), et une sortie Q. Quand S=VRAI, Q devient VRAI. Quand R=VRAI, Q devient FAUX. Quand R et S sont VRAI simultanément, Q est à FAUX (Reset domine).
Quand l'utiliser
Pour les circuits de mémorisation où la sécurité est primordiale. La condition de mise à 0 (arrêt) a la priorité — si la marche et l'arrêt sont tous deux actifs, la sortie est désactivée. C'est le choix standard pour la commande moteur et les verrouillages de sécurité.
Conseils d'expert
RS = Priorité à la mise à 0. Si S=1 et R=1 → Q=0. Le choix le plus sûr pour la plupart des applications industrielles.
Schéma classique de commande moteur : S = Marche ET NON Défaut, R = Arrêt OU Arrêt_Urgence OU Défaut.
La sortie Q est rémanente pendant le cycle de scrutation — elle conserve sa valeur jusqu'à ce que la bascule soit à nouveau évaluée.
Détection de front — Détection des changements de signaux
Détecter quand un signal passe de FAUX→VRAI ou de VRAI→FAUX
Interroger l'opérande sur front montant
—|P|—Ce qu'il fait
Détecte un front montant (transition FAUX→VRAI) sur un opérande spécifique. L'instruction compare la valeur actuelle avec la valeur du cycle précédent. Si la valeur est passée de 0 à 1, le RLG est à VRAI pendant exactement un cycle de scrutation. Nécessite un bit de mémoire de front (bit M) pour stocker l'état précédent.
Quand l'utiliser
Lorsque vous avez besoin d'une impulsion unique à partir d'un signal maintenu : compter les pressions sur un bouton, déclencher une action unique sur un changement de niveau, incrémenter un compteur à chaque activation. Sans détection de front, un bouton maintenu se déclencherait à chaque cycle de scrutation.
Conseils d'expert
Vous DEVEZ affecter un bit de mémoire de front unique (bit M) — ne réutilisez PAS le même bit M pour plusieurs détections de front, sinon elles interféreront.
La sortie est à VRAI pendant exactement un cycle de scrutation de l'automate (généralement 1 à 50 ms). Si vous avez besoin d'une impulsion plus longue, utilisez une temporisation.
En CONT, cela apparaît comme un contact marqué 'P'. La variable du bit M est affichée au-dessus/au-dessous du contact.
Interroger l'opérande sur front descendant
—|N|—Ce qu'il fait
Détecte un front descendant (transition VRAI→FAUX) sur un opérande spécifique. L'instruction compare la valeur actuelle avec la valeur du cycle précédent. Si la valeur est passée de 1 à 0, le RLG est à VRAI pendant exactement un cycle de scrutation. Nécessite un bit de mémoire de front.
Quand l'utiliser
Lorsque vous devez réagir à l'extinction d'un signal : détecter quand un bouton est relâché, déclencher lors de la désactivation d'un capteur ou capturer le moment où une étape de processus se termine.
Conseils d'expert
Mêmes règles que pour le front montant — chaque détection de front descendant a besoin de son propre bit M unique.
Utile pour les actions 'au relâchement du bouton' : démarrer une temporisation quand un bouton est relâché, pas quand il est pressé.
Dans une séquence d'arrêt, utilisez des fronts descendants pour détecter quand chaque étape se termine (la sortie passe de MARCHE à ARRÊT).
Affecter l'opérande sur front montant
—(P)—Ce qu'il fait
Met à VRAI un opérande spécifié pendant un cycle de scrutation lorsqu'un front montant (FAUX→VRAI) est détecté sur le RLG. Combine la détection de front et l'affectation de sortie en une seule instruction.
Quand l'utiliser
Lorsque vous souhaitez mettre un indicateur ou une sortie à 1 pendant exactement un cycle sur un front montant, sans avoir besoin d'un contact de détection de front séparé suivi d'une bobine.
Conseils d'expert
C'est une instruction de type bobine — elle se place à la fin d'un réseau, pas au milieu.
Nécessite un bit de mémoire de front tout comme la version contact.
L'opérande est à VRAI pour un seul cycle, puis revient automatiquement à FAUX.
Affecter l'opérande sur front descendant
—(N)—Ce qu'il fait
Met à VRAI un opérande spécifié pendant un cycle de scrutation lorsqu'un front descendant (VRAI→FAUX) est détecté sur le RLG. Combine la détection de front descendant et l'affectation de sortie en une seule instruction.
Quand l'utiliser
Lorsque vous souhaitez mettre un indicateur ou une sortie à 1 pendant exactement un cycle sur un front descendant. Utile pour déclencher des actions après désactivation.
Conseils d'expert
Instruction de type bobine — à placer à la fin d'un réseau.
Nécessite son propre bit de mémoire de front unique.
Souvent utilisé pour les actions de 'nettoyage' qui doivent se produire une fois lorsqu'un processus s'arrête.
P_TRIG — Interroger le RLG sur front montant
Ce qu'il fait
Détecte un front montant sur le Résultat Logique Global (RLG) plutôt que sur un opérande spécifique. Lorsque le résultat logique combiné passe de FAUX à VRAI, la sortie est à VRAI pendant un cycle de scrutation. La mémoire de front est stockée dans l'instance de l'instruction.
Quand l'utiliser
Lorsque vous souhaitez détecter un front montant sur une combinaison logique complexe, pas seulement sur une seule variable. Par exemple : détecter quand (Capteur1 ET Capteur2 ET NON Défaut) devient VRAI pour la première fois.
Conseils d'expert
P_TRIG opère sur le RLG accumulé — il détecte le front de toute la chaîne logique qui le précède.
La mémoire de front est intégrée à l'instruction — aucun bit M séparé n'est nécessaire.
En LOG, P_TRIG est une boîte avec une entrée CLK et une sortie Q.
N_TRIG — Interroger le RLG sur front descendant
Ce qu'il fait
Détecte un front descendant sur le RLG. Lorsque le résultat logique combiné passe de VRAI à FAUX, la sortie est à VRAI pendant un cycle de scrutation. La mémoire de front est stockée dans l'instance de l'instruction.
Quand l'utiliser
Lorsque vous souhaitez détecter quand une condition complexe cesse d'être vraie. Par exemple : détecter le moment où (Mode_Auto ET Tout_OK) passe de VRAI à FAUX.
Conseils d'expert
N_TRIG est le pendant du P_TRIG pour le front descendant.
Aucun bit M séparé n'est nécessaire — la mémoire de front est interne.
Utile pour détecter la fin d'une condition combinée plutôt que celle d'un signal unique.
R_TRIG — Détecter un front de signal montant
Ce qu'il fait
Un bloc fonctionnel détecteur de front montant conforme à la norme CEI 61131-3. Il possède une entrée CLK et une sortie Q. Lorsque CLK passe de FAUX à VRAI, Q est à VRAI pendant un cycle de scrutation. La mémoire de front est stockée dans les données d'instance du FB.
Quand l'utiliser
Lorsque vous souhaitez une détection de front conforme à la norme CEI avec ses propres données d'instance. R_TRIG est un bloc fonctionnel — chaque instance gère sa propre mémoire de front automatiquement. Préféré dans le code structuré et réutilisable.
Conseils d'expert
R_TRIG est un FB — il a besoin de données d'instance (soit son propre DB, soit en tant que multi-instance dans un FB parent). Cela le rend autonome et réutilisable.
Disponible depuis la V1.0 sur S7-1200/1500. C'est la manière standard CEI 61131-3 de détecter les fronts.
En SCL : myRTRIG(CLK := mySignal); IF myRTRIG.Q THEN ... END_IF;
F_TRIG — Détecter un front de signal descendant
Ce qu'il fait
Un bloc fonctionnel détecteur de front descendant conforme à la norme CEI 61131-3. Il possède une entrée CLK et une sortie Q. Lorsque CLK passe de VRAI à FAUX, Q est à VRAI pendant un cycle de scrutation. La mémoire de front est stockée dans les données d'instance du FB.
Quand l'utiliser
Lorsque vous souhaitez une détection de front descendant conforme à la norme CEI avec ses propres données d'instance. F_TRIG est le pendant de R_TRIG pour le front descendant.
Conseils d'expert
F_TRIG est un FB avec sa propre instance — tout comme R_TRIG, il est autonome et conforme à la norme CEI 61131-3.
En SCL : myFTRIG(CLK := mySignal); IF myFTRIG.Q THEN ... END_IF;
Préférez R_TRIG/F_TRIG aux contacts |P|/|N| lors de l'écriture de code de bibliothèque réutilisable, car ils ne nécessitent pas de bits M externes.
Référence rapide — Les 20 instructions logiques sur bits
| # | Instruction | Symbole CONT | Raccourci | Description |
|---|---|---|---|---|
| 1 | Contact à fermeture (NO) | —| |— | F9 | Transmet le signal lorsque la variable est à VRAI |
| 2 | Contact à ouverture (NF) | —|/|— | F10 | Transmet le signal lorsque la variable est à FAUX |
| 3 | Inverser le RLG | —|NOT|— | — | Inverse le Résultat Logique Global |
| 4 | Affectation | —( )— | Maj + F7 | Écrit le RLG dans la variable de sortie |
| 5 | Affectation inversée | —(/)— | — | Écrit le RLG inversé dans la variable de sortie |
| 6 | Mettre à 0 (R) | —(R)— | — | Met la variable à FAUX quand le RLG est à VRAI |
| 7 | Mettre à 1 (S) | —(S)— | — | Met la variable à VRAI quand le RLG est à VRAI |
| 8 | SET_BF — Mettre à 1 champ de bits | — | — | Met à 1 une plage de bits |
| 9 | RESET_BF — Mettre à 0 champ de bits | — | — | Met à 0 une plage de bits |
| 10 | SR — Bascule de mise à 1/0 | — | — | Bascule avec priorité à la mise à 1 (S=1,R=1 → Q=1) |
| 11 | RS — Bascule de mise à 0/1 | — | — | Bascule avec priorité à la mise à 0 (S=1,R=1 → Q=0) |
| 12 | Interroger l'opérande sur front montant | —|P|— | — | Détecte un front montant sur un opérande |
| 13 | Interroger l'opérande sur front descendant | —|N|— | — | Détecte un front descendant sur un opérande |
| 14 | Affecter l'opérande sur front montant | —(P)— | — | Met à 1 l'opérande pour 1 cycle sur front montant |
| 15 | Affecter l'opérande sur front descendant | —(N)— | — | Met à 1 l'opérande pour 1 cycle sur front descendant |
| 16 | P_TRIG — Interroger le RLG sur front montant | — | — | Détecte un front montant sur le RLG |
| 17 | N_TRIG — Interroger le RLG sur front descendant | — | — | Détecte un front descendant sur le RLG |
| 18 | R_TRIG — Détecter un front de signal montant | — | — | Détecteur de front montant CEI (FB) |
| 19 | F_TRIG — Détecter un front de signal descendant | — | — | Détecteur de front descendant CEI (FB) |
Foire aux questions
Quelle est la différence entre les bobines de mise à 1/0 et les bascules SR/RS ?
Les bobines Mettre à 1 (S) et Mettre à 0 (R) sont des instructions individuelles placées dans des réseaux séparés — vous gérez la priorité selon le réseau qui arrive en dernier. Les bascules SR/RS sont des boîtes uniques avec les deux entrées — la priorité est intégrée (SR = priorité Set, RS = priorité Reset). Les bascules sont plus compactes et rendent la priorité explicite.
Quelle détection de front dois-je utiliser : |P|/|N|, (P)/(N), P_TRIG/N_TRIG, ou R_TRIG/F_TRIG ?
Les contacts |P|/|N| détectent les fronts sur une variable spécifique et nécessitent un bit M externe. Les bobines (P)/(N) combinent la détection de front avec l'affectation de sortie. P_TRIG/N_TRIG détectent les fronts sur le RLG (logique combinée). R_TRIG/F_TRIG sont des FB standards CEI avec mémoire intégrée. Pour le code de bibliothèque réutilisable, préférez R_TRIG/F_TRIG. Pour la logique simple en ligne, les contacts |P|/|N| conviennent parfaitement.
Pourquoi mon circuit de mise à 1/0 se comporte-t-il de manière inattendue ?
La cause la plus fréquente est que les conditions de mise à 1 et à 0 sont toutes deux VRAI simultanément. Dans ce cas, la dernière instruction du programme l'emporte. Si votre réseau de mise à 0 est avant votre réseau de mise à 1, la sortie sera mise à 1. Solution : utilisez une bascule RS (priorité au Reset) pour les circuits critiques pour la sécurité, ou assurez-vous que vos conditions s'excluent mutuellement.
La détection de front peut-elle fonctionner sur des valeurs analogiques ou seulement sur du BOOL ?
Les instructions de détection de front (|P|, |N|, R_TRIG, F_TRIG) ne fonctionnent que sur des signaux booléens. Pour les valeurs analogiques, vous devez créer une comparaison (par exemple, valeur > seuil) qui produit un résultat BOOL, puis appliquer la détection de front à ce BOOL.