Aller au contenu principal

Un système, ses états, ses événements

Ce que ce chapitre apporte

  • Décrire un système par ses états, ses événements et ses transitions.
  • Lire un diagramme d'automate : la flèche d'entrée, les cercles, les arcs étiquetés, le double cercle.
  • Faire tourner un automate sur une séquence d'événements et repérer l'endroit exact où la lecture se bloque.
  • Repérer une séquence dangereuse qu'un modèle autorise, puis corriger le modèle.
  • Expliquer ce qu'un état résume du passé, et ce qu'il oublie forcément.

Un séquenceur de chaîne, un grafcet, une machine à états écrite sur un microcontrôleur : l'objet de ce module est déjà familier à qui a câblé un automate de contrôle. Ce chapitre lui donne son nom, son vocabulaire et son dessin, en partant d'un système réel plutôt que d'une théorie. Il montre surtout ce qu'un état représente vraiment : le résumé de tout ce qu'un système a besoin de retenir de son passé, et rien de plus. C'est ce résumé qui rend le modèle utilisable, et c'est aussi ce qui fixe sa limite.

Une machine à états, déjà rencontrée

Un portique d'accès a deux situations possibles, et deux seulement : verrouillé, ou déverrouillé le temps d'un passage. Deux événements le font changer de situation : un badge validé par le lecteur, et le passage d'une personne détecté par la cellule. Rien d'autre ne compte, ni l'heure, ni le nom du porteur du badge, ni le nombre de passages de la journée.

Ce système se dessine avec deux cercles et deux flèches. La petite flèche qui vient de nulle part désigne la situation de départ, celle du portique à la mise sous tension.

Machine à étatsincomplet : une lecture peut se bloquer
badgepassageferméouvert

badgepassage

État actif : fermé.

Cliquer deux fois sur « Lire un symbole » et suivre le cercle qui s'allume. Remplacer ensuite la séquence par « badge badge passage » et relancer : la lecture s'arrête avant la fin.

Sur la séquence proposée, le cercle allumé passe de fermé à ouvert, puis revient à fermé. Sur badge badge passage, la figure s'arrête après le second badge et annonce qu'aucune transition ne porte cet événement : depuis ouvert, aucune flèche ne porte l'étiquette badge.

Ce blocage n'est pas un incident de la figure, c'est une information sur le modèle. Deux lectures en sont possibles, et il faut choisir : soit un second badge sur un portique déjà déverrouillé est impossible, soit il est possible et ne produit rien. La seconde lecture est la bonne pour un portique réel, et elle se dessine par une flèche qui revient sur son propre cercle.

Machine à étatsincomplet : une lecture peut se bloquer
badgebadgepassageferméouvert

badgebadgepassage

État actif : fermé.

La même séquence que celle qui bloquait plus haut. La faire défiler en entier : la boucle sur « ouvert » est empruntée au deuxième symbole, et l'état ne change pas.
Définition

Un état est une situation du système, décrite assez finement pour que la suite du comportement en dépende seulement, sans consulter le passé. Un événement est ce qui arrive au système depuis l'extérieur : un capteur qui bascule, un message reçu, une commande. Une transition relie un état de départ à un état d'arrivée et porte le nom de l'événement qui la déclenche.

Le double cercle, lui, marque les situations où une séquence peut s'arrêter sans anomalie : le portique au repos, verrouillé. Une séquence qui se termine ailleurs laisse le système en cours de cycle. Le chapitre sur la reconnaissance d'une séquence fait de ce double cercle le cœur du sujet ; ici, il suffit de savoir qu'il désigne une fin de séquence légitime.

Ce dessin est un graphe orienté étiqueté au sens propre : les cercles en sont les sommets, les flèches les arcs, et le vocabulaire des graphes s'applique tel quel à un automate.

Deux conventions de dessin méritent d'être nommées tout de suite, parce qu'elles reviennent dans toutes les figures du module : la flèche d'entrée désigne l'état de départ, et un automate qui ne prévoit pas tous les événements dans tous les états est signalé « incomplet » par la figure elle-même. Les deux portiques ci-dessus le sont : depuis fermé, l'événement passage n'est prévu nulle part.

La même machine à états se retrouve dans le programme d'une carte, où elle remplace les attentes bloquantes : c'est l'objet des machines à états d'une carte Arduino, où le programme retient son état au lieu d'attendre.

Le sas de sécurité

Un sas à deux portes sépare une zone propre d'un atelier. La règle de sécurité tient en une phrase, et elle est absolue : les deux portes ne doivent jamais être ouvertes en même temps. Le système reçoit cinq événements, tous produits par des capteurs ou par le lecteur de badge :

ÉvénementCe qui le produit
badgele lecteur valide un badge et déverrouille la porte A
A-ouvrele capteur de la porte A signale son ouverture
A-fermele capteur de la porte A signale sa fermeture
B-ouvrele capteur de la porte B signale son ouverture
B-fermele capteur de la porte B signale sa fermeture

Les états, eux, portent le nom de la situation physique du sas, jamais une lettre : repos, A déverrouillée, A ouverte, sas fermé, B ouverte. Un état nommé q3 n'aurait rien appris, et surtout n'aurait rien permis de vérifier.

Un premier jet, et la séquence qu'il autorise

Voici le modèle tel qu'il sort d'une première réunion. Chaque événement a été branché là où le bouton existe physiquement : la porte B possède un bouton d'ouverture accessible depuis l'intérieur du sas, donc une transition B-ouvre part de l'état A ouverte.

Machine à étatsincomplet : une lecture peut se bloquer
badgeA-ouvreA-fermeB-ouvreB-fermeB-ouvreB-fermereposA déverrouilléeA ouvertesas ferméB ouvertedeux ouvertes

badgeA-ouvreB-ouvre

État actif : repos.

Dérouler les trois événements un par un et lire le nom de l'état allumé à la fin. Cet état ne devrait pas exister.

Trois événements suffisent : un badge, l'ouverture de A, l'ouverture de B. L'état allumé à l'arrivée est deux ouvertes, et son nom dit exactement ce que la règle de sécurité interdit. Le modèle n'est pas ambigu, il est faux : il autorise une séquence dangereuse, et il l'autorise en trois coups.

Rien dans le texte de la spécification ne l'avait signalé. C'est le déroulé de la séquence sur le dessin qui l'a rendu visible, et c'est la raison pour laquelle un automate se vérifie en le faisant tourner, pas en le relisant.

Le modèle corrigé

La correction ne consiste pas à ajouter une alarme dans l'état deux ouvertes : elle consiste à supprimer l'état, donc les transitions qui y mènent. Un sas correctement conçu verrouille mécaniquement la porte B tant que la porte A n'est pas refermée. L'événement B-ouvre ne peut alors pas se produire depuis A ouverte, et le modèle doit dire cette impossibilité en ne prévoyant aucune transition.

Machine à étatsincomplet : une lecture peut se bloquer
badgeA-ouvreA-fermeB-ouvreB-fermereposA déverrouilléeA ouvertesas ferméB ouverte

badgeA-ouvreB-ouvre

État actif : repos.

La séquence dangereuse du modèle précédent, soumise au modèle corrigé. Avancer jusqu'au bout : la lecture s'interrompt, et la figure dit sur quel symbole.

La même séquence de trois événements ne va plus au bout. Après badge et A-ouvre, l'état actif est A ouverte ; l'événement B-ouvre n'y est prévu nulle part, la figure annonce qu'aucune transition ne porte cet événement et que la séquence s'arrête là. Le sas interdit cette séquence, et c'est ce que le dessin affirme désormais.

Le même modèle s'écrit aussi en tableau, les états en lignes et les événements en colonnes, chaque case portant l'état d'arrivée. La flèche désigne l'état initial et la coche le double cercle.

ÉtatbadgeA-ouvreA-fermeB-ouvreB-ferme
reposA déverrouillée
A déverrouilléeA ouverte
A ouvertesas fermé
sas ferméB ouverte
B ouverterepos

Le tableau apporte ce que le dessin cache : ses cases vides, vingt sur vingt-cinq, chacune étant un événement qu'aucune transition ne traite dans cet état. Sur un diagramme, une flèche absente ne se voit pas, alors qu'une case vide se compte, et c'est là que se lisent les impossibilités affirmées par le modèle.

La séquence nominale, elle, fait le tour complet.

Machine à étatsincomplet : une lecture peut se bloquer
badgeA-ouvreA-fermeB-ouvreB-fermereposA déverrouilléeA ouvertesas ferméB ouverte

badgeA-ouvreA-fermeB-ouvreB-ferme

État actif : repos.

Le cycle complet d'un passage. Le dérouler jusqu'au bout, puis vérifier que l'état d'arrivée est bien celui du double cercle.

Cinq événements, cinq transitions, et le sas revient au repos : la séquence se termine sur le double cercle. Le modèle décrit maintenant un cycle, et un seul.

Ce que le modèle ne prévoit pas, il l'interdit

Un automate ne connaît que ses transitions. Un événement sans transition dans l'état courant arrête la lecture : le modèle affirme qu'il ne peut pas se produire. C'est une affirmation forte, qui doit être vraie dans le système réel, garantie par un verrou mécanique ou par un enclenchement électrique. Quand elle ne l'est pas, il faut prévoir la transition, même pour dire que rien ne se passe, comme la boucle du portique plus haut.

Ce qu'un état résume

Voici la question qui décide de tout : que faut-il retenir du passé pour savoir comment le système réagira ?

Dans le sas, la réponse est courte : la position des deux portes et l'état du verrou. Ni le nombre de passages effectués depuis la mise en service, ni l'identité des porteurs de badge, ni l'heure. Deux histoires différentes qui laissent les portes dans la même position conduisent à la même suite de comportements, donc au même état.

Machine à étatsincomplet : une lecture peut se bloquer
badgeA-ouvreA-fermeB-ouvreB-fermereposA déverrouilléeA ouvertesas ferméB ouverte

badgeA-ouvreA-fermeB-ouvreB-fermebadgeA-ouvreA-ferme

État actif : repos.

Huit événements au lieu de trois. Comparer l'état allumé à la fin avec celui obtenu après la séquence courte « badge A-ouvre A-ferme », saisie dans la même figure.

Après huit événements, l'état actif est sas fermé. Après les trois événements badge A-ouvre A-ferme, il est sas fermé également. Le sas ne se souvient pas d'avoir déjà laissé passer quelqu'un : rien dans son comportement futur n'en dépend, donc rien ne le retient.

Le principe du modèle

Un automate ne mémorise pas son passé, il le résume dans son état présent. Deux séquences d'événements qui mènent au même état sont indiscernables pour la suite : le système se comportera exactement pareil. Choisir les états d'un modèle, c'est décider ce qui mérite d'être retenu.

Ce résumé est ce qui rend le modèle utilisable : un système d'une complexité quelconque se ramène à une poignée de cercles, et l'on peut vérifier exhaustivement ce qu'il autorise. C'est aussi sa limite, parce que le nombre d'états est fixé une fois pour toutes.

Retenir un compte, c'est ajouter des états

Le lecteur de badge du sas déclenche une alarme après trois refus consécutifs. Retenir « combien de refus consécutifs ont eu lieu » demande un état par valeur possible, et il n'y a pas d'autre moyen.

Machine à étatsincomplet : une lecture peut se bloquer
refusrefusrefusvalidévalidérefus, validé0 refus1 refus2 refusalarme

refusrefusvalidérefusrefusrefus

État actif : 0 refus.

Suivre le compteur pendant la séquence, et repérer le symbole qui le remet à zéro. Essayer ensuite « refus refus refus » : l'alarme arrive plus tôt.

Le badge validé au troisième symbole ramène le compteur à 0 refus, et il faut de nouveau trois refus pour atteindre l'alarme. La séquence proposée y parvient au sixième événement.

Trois refus demandent trois états de comptage. Dix refus en demanderaient dix. Compter sans limite fixée d'avance, en revanche, est hors de portée : un automate possède un nombre fini d'états, décidé au moment du dessin. Cette limite n'est pas un détail de mise en œuvre, c'est la frontière du modèle, et le chapitre sur ce qu'un automate ne sait pas faire la démontre et l'exploite.

Quand les états se multiplient

Une cuve chauffée possède deux organes indépendants : une résistance de chauffage, et une vanne de vidange. Chacun est ouvert ou fermé. Le système a donc quatre situations, une par combinaison, et les états d'un automate décrivent toujours une combinaison de conditions, jamais une seule.

Machine à étatsincomplet : une lecture peut se bloquer
C+C-V+V-V+V-C+C-reposchauffe seulevanne seulechauffe et vanne

C+V+C-V-

État actif : repos.

Quatre événements pour faire le tour des quatre situations. Vérifier qu'aucun état n'est atteint deux fois pendant le parcours.

La séquence allume tour à tour chauffe seule, chauffe et vanne, vanne seule, puis revient à repos. Ajouter un troisième organe indépendant, un agitateur par exemple, porterait le compte à huit états, et un quatrième à seize. Cette croissance est la vraie difficulté de la modélisation par états : elle se combat en ne retenant que les conditions dont le comportement dépend réellement, et en découpant un système en plusieurs automates plutôt qu'en un seul.

La figure signale ici encore un automate incomplet : depuis chauffe et vanne, l'événement C+ n'est prévu nulle part, car la résistance est déjà en marche. Prévoir une boucle qui ne change rien, ou laisser la lecture se bloquer, est un choix de modélisation à assumer explicitement.

Exercices type

Machine à étatsincomplet : une lecture peut se bloquer
G+G-D+D-D+G+D-G-aucungauche seuldroit seuldescente

G+D+D-G-

État actif : aucun.

La commande bimanuelle d'une presse. Dérouler la séquence proposée avant de déplier la question, et noter le nom de l'état atteint après les deux premiers événements.
Une presse ne descend que si les deux boutons, gauche et droit, sont enfoncés en même temps. Les quatre événements sont `G+`, `G-`, `D+`, `D-`. Quelle est la séquence la plus courte qui déclenche la descente, et que se passe-t-il si l'opérateur relâche un seul bouton pendant la descente ?

La descente demande deux événements, G+ puis D+, ou D+ puis G+ : ces deux séquences atteignent l'état descente, et c'est exactement l'intention d'une commande bimanuelle, qui interdit de bloquer un bouton avec une cale.

Relâcher un seul bouton produit G- ou D- depuis descente, et l'automate quitte cet état pour droit seul ou gauche seul. La presse remonte donc dès le premier bouton relâché, ce que le dessin garantit : aucune boucle sur descente ne permet d'y rester après un relâchement.

L'automate est incomplet, et volontairement : depuis descente, les événements G+ et D+ ne sont prévus nulle part, puisque les deux boutons y sont déjà enfoncés. Un bouton ne peut pas être enfoncé deux fois de suite sans avoir été relâché, et le modèle affirme cette impossibilité physique.

Machine à étatsincomplet : une lecture peut se bloquer
démarrerniveau-hautpurgerniveau-baspurgervideremplissagepleinevidange

démarrerpurgerniveau-bas

État actif : vide.

Le modèle d'une cuve de rinçage, tel qu'un premier jet l'a produit. Dérouler la séquence proposée, puis chercher ce qu'elle a de gênant avant de déplier la réponse.
Le modèle ci-dessus décrit une cuve de rinçage : elle se remplit, atteint son niveau haut, puis se purge. La transition `remplissage -> vidange : purger` a été ajoutée pour permettre un arrêt d'urgence. Quelle séquence devient possible, et pourquoi pose-t-elle un problème si la vanne de purge ne doit jamais s'ouvrir pendant que la pompe tourne ?

La séquence démarrer purger niveau-bas est autorisée par le modèle : la cuve passe de vide à remplissage, puis directement à vidange, et revient à vide. Elle ouvre la purge alors que rien n'a arrêté la pompe de remplissage, puisque aucun événement d'arrêt n'apparaît entre les deux.

Le défaut est le même que celui du sas : le modèle autorise une séquence que le système physique interdit. Deux corrections sont possibles, et elles ne décrivent pas le même équipement.

  • Si l'arrêt d'urgence doit exister, il faut un événement qui arrête la pompe, et un état intermédiaire qui le retient : remplissage -> arrêt pompe : arrêt, puis arrêt pompe -> vidange : purger. L'état supplémentaire est exactement ce qui empêche la séquence dangereuse.
  • Si la purge ne doit être possible que cuve pleine, il suffit de supprimer la transition ajoutée : l'événement purger pendant le remplissage bloque alors la lecture, ce qui est la bonne façon de dire qu'il ne peut pas se produire.
Machine à étatsincomplet : une lecture peut se bloquer
démarrerniveau-hautpurgerniveau-basarrêtpurgervideremplissagepleinevidangearrêt pompe

démarrerarrêtpurgerniveau-bas

État actif : vide.

La première correction, avec son état supplémentaire. Dérouler la séquence proposée, puis saisir « démarrer purger niveau-bas » : la séquence dangereuse ne passe plus.
Dans le modèle du sas corrigé, combien de séquences différentes mènent à l'état `sas fermé` ? Que retient cet état de la séquence qui l'a produit ?

Les séquences qui mènent à sas fermé sont en nombre illimité : badge A-ouvre A-ferme, puis la même chose précédée d'un cycle complet, de deux cycles complets, et ainsi de suite. Chaque cycle badge A-ouvre A-ferme B-ouvre B-ferme ramène au repos et peut être répété autant de fois que voulu.

L'état sas fermé ne retient rien de tout cela. Il dit une seule chose : les deux portes sont fermées et une personne se trouve dans le sas. C'est la seule information dont dépend la suite, à savoir que le prochain événement utile est l'ouverture de la porte B. Le nombre de passages déjà effectués n'a aucune influence sur le comportement, donc aucun état ne le mémorise.

Un modèle qui devrait compter les passages, par exemple pour bloquer le sas après vingt cycles, aurait besoin de vingt fois plus d'états : un jeu d'états par valeur du compteur.

Vérification

Vérification rapideon peut se reprendre

1.Que représente la petite flèche qui arrive sur un cercle sans venir d'un autre cercle ?

2.Dans le modèle du sas corrigé, que fait la figure quand l'événement B-ouvre survient dans l'état A ouverte ?

3.Un modèle doit-il prévoir une transition pour un événement qui ne produit aucun effet ?

4.Deux séquences d'événements différentes mènent au même état. Que peut-on en conclure ?

5.Combien d'états faut-il pour déclencher une alarme au troisième refus consécutif de badge ?

6.Une machine possède trois organes indépendants, chacun en marche ou à l'arrêt. Combien d'états son automate compte-t-il au maximum ?

La méthode

  1. Lister les événements avant les états : ce sont les entrées du système, capteurs, messages, commandes, et leur liste est courte et vérifiable.
  2. Chercher ce qui doit être retenu du passé pour savoir comment le système réagira, et rien d'autre : c'est la question qui donne les états.
  3. Nommer chaque état par la situation physique qu'il décrit, jamais par une lettre : un nom faux se repère à la lecture, un q3 non.
  4. Tracer les transitions événement par événement, en se demandant pour chaque état si l'événement peut s'y produire, et ce qu'il change.
  5. Dérouler les séquences dangereuses sur le dessin, celles que la spécification interdit, et vérifier qu'elles bloquent ou qu'elles n'atteignent pas l'état redouté.
  6. Décider, pour chaque événement absent d'un état, s'il est réellement impossible ou simplement sans effet : dans le second cas, ajouter la boucle qui le dit.

Synthèse

  • Un état est une situation du système, un événement ce qui lui arrive, une transition le lien entre les deux, étiqueté par l'événement.
  • La flèche d'entrée désigne l'état initial, le double cercle une fin de séquence légitime, et une boucle un événement qui survient sans rien changer.
  • Un événement sans transition dans l'état courant bloque la lecture : le modèle affirme qu'il est impossible, ce qui doit être vrai dans le système réel.
  • Une séquence dangereuse se découvre en faisant tourner le modèle, pas en le relisant : le sas autorisait l'ouverture simultanée des deux portes en trois événements.
  • Un état résume le passé : deux séquences qui mènent au même état sont indiscernables pour la suite du comportement.
  • Retenir un compte demande un état par valeur, et des conditions indépendantes multiplient le nombre d'états ; le nombre d'états étant fixé, ce que le modèle peut retenir l'est aussi.

La suite du module garde ce dessin et change la question posée : reconnaître une séquence demande à l'automate non plus de commander un système, mais de rendre un verdict sur une suite d'événements lue jusqu'au bout.