Description comportementale en SysML : le diagramme d'état
Fondamental :
Objectif : Décrire les différents états pris par le système pour un scénario d'utilisation donné.
Le diagramme d'état (stm : state machine diagram) est un diagramme normalisé SysML qui permet de décrire la succession des différents états pris par un système et les transitions qui déclenchent le passage d'un état à un autre. |
Exemple : Cas de l'ouvre-portail FAAC
Notion d'état
Un état est une période de la vie du système. Pendant cette période, le système peut être actif ou non : il peut accomplir une ou plusieurs tâches (actions et/ou activités) ou simplement attendre un l’occurrence d'un évènement pour évoluer vers un autre état.
Chaque état est dessiné sous la forme d'un rectangle aux coins arrondis, contenant son nom, ainsi que les actions et/ou activités qui lui sont associées.
Dans un diagramme d'état, à un instant donné, un seul état est actif.
Remarque : Etat initial et état final
Il existe deux états particuliers :
|
Activité et actions associées à un état
A un état, on peut principalement rattacher :
Les actions sont instantanées et ne peuvent pas être interrompues. On peut également les retrouver dans les effets associés aux transitions. A contrario, une activité peut prendre du temps et peut être interrompue. On distingue ainsi les activités finies, à durée limitée dans le temps (ex : sortie de la tige d'un vérin) et les activités sans fin (ex : rotation d'un moteur). |
Remarque :
Un état peut très bien ne contenir ni action, ni activité. Il sert alors à attendre le déclenchement de la transition suivante. On parle d'état d'attente.
Transition
Une transition représente le passage instantané d'un état vers un autre. Une transition ne peut donc pas avoir de durée. On appelle état source l'état de départ d'une transition et état destination l'état cible. Une transition est généralement déclenchée par un évènement, auquel peuvent être associés une condition de garde et/ou un effet. |
Remarque : Condition de garde
La condition de garde est une expression booléenne (ou fonction logique) faisant intervenir des entrées et/ou des variables internes. Elle se note entre crochets. Elle conditionne le passage d'un état à un autre.
Il ne faut pas confondre évènement et condition de garde :
Un évènement est parfaitement daté dans le temps et possède une durée nulle. Il correspond par exemple à un passage d'une variable de 0 à 1 (front montant). Exemple : appui sur un bouton poussoir, capteur fin de course atteint, etc.
Une condition de garde n'est pas datée, elle peut être vraie ou fausse à l'instant où l’évènement déclencheur de la transition survient. Exemple : [présence d'obstacle=1], [Température >30°C], etc.
Remarque : Evènements
Il existe deux types d'évènements particuliers couramment rencontrés dans les diagrammes d'état :
l'évènement temporel : il permet soit de réaliser une temporisation : after(durée), soit de déclencher la transition à un instant donné : at(temps absolu).
l'évènement de changement : une valeur a changé de telle sorte que la transition soit franchie : when(a=b)
Attention, l'évènement de changement ci-dessus se produit à l'instant précis où la variable a prend la valeur b. Ne pas confondre avec la condition de garde [a=b].
Fondamental : Conditions de franchissement d'une transition :
|
Attention :
Dans le cas d'une transition sans évènement explicite (cas 3 et 4) , si l'état précédent possède une activité, celle-ci doit nécessairement être de type finie sous peine de rester bloqué dans l'état.
Dans le cas d'une transition sans évènement explicite mais avec condition de garde (cas 3), la condition de garde n'est évaluée qu'une seule fois lors de l’évènement délencheur (fin de l'activité ou entrée dans l'état s'il n'y a pas d'activité). Si à cet instant la condition de garde est fausse, on se retrouve bloqué dans l'état. Une solution peut être d'utiliser des transitions réflexives.
Autres types de transitions couramment rencontrées :
|
Transition conditionnelle : plusieurs transitions peuvent quitter un même état et une seule d'entre elles doit être déclenchée. Les évènements et/ou les conditions de garde doivent donc être exclusives.
Il est également possible d'utiliser une condition particulière, notée [else], sur un des segments en aval d'un point de décision. Ce segment n'est franchissable que si les conditions des autres segments sont toutes fausses.
Exemple : Cas de l'ouvre-portail FAAC
Etat sous machine, état composite et état orthogonal
Etat sous machine
Lorsque le comportement à décrire risque d'être peu lisible car trop complexe, ou fait apparaître des parties "séparables" de l'ensemble, il est alors possible d'extraire ces parties pour en faire des sous-graphes séparés, hiérarchiquement inférieurs au graphe principal. On englobe ces sous-graphes dans un état appelé "état sous machine" . |
Etat composite
Un état composite, aussi appelé super-état, est un état composé d'une seule région contenant plusieurs sous-états internes. Il possède un état initial, et à l'intérieur d'un état composite, un seul état à la fois est actif. L'activation d'un état composite entraîne l'activation du pseudo état initial. La désactivation de l'état composite entraîne la désactivation de l'état actif. La transition de sortie de l'état composite peut être déclenchée quel que soit le sous-état actif à l'intérieur. Tous les sous-états d'un état composite ne sont donc pas nécessairement activés avant d'en sortir. |
Etat orthogonal
Un état orthogonal est un état composite constitué de plusieurs régions pouvant évoluer simultanément. Graphiquement, les différentes régions sont séparées par des pointillés. Chaque région contient son propre graphe d'état pouvant lui-même posséder un état initial et un état final.
Entrée dans un état orthogonal : lorsqu'une transition reliée au bord de l'état composite est franchie, chaque région se retrouve dans son état initial et évolue indépendamment des autres : les régions sont alors en concurrence.
Sortie d'un état orthogonal : elle se fait conformément à la règle de sortie de l'état composite énoncée précédemment. Mais cette règle de sortie peut être gênante pour certaines séquences où on a besoin d'un comportement synchrone (= atteinte de tous les états finaux pour mettre fin à l'état global). Dans ce cas il faut adjoindre un pseudo état «join» (union), en sortie.
Conditionner une transition par l'activité de l'état d'un autre graphe d'état
L'état composite orthogonal A est composé des sous-états composites B et C.
B et C s'activent simultanément, et évoluent indépendamment, en parallèle. Au départ, les états B1 et C1 sont actifs.
Lorsque C se trouve à l'état C2, pour repasser de l'état C2 à l'état C1, il faut que l’évènement ev4 survienne, et qu'à cet instant l'état B3 soit actif. Cette transition est donc conditionnée par l'activité de l'état B3 de l'autre sous-graphe.