Aller au contenu

Exemples

Tous les exemples sont dans StateCharts.Examples. Chacun est couvert par un scénario de la suite de vérification.

TrafficLight — feu tricolore

Diagramme de TrafficLight

Le pseudo-état initial mène à red (4 s), puis green (3 s), yellow (1 s), et retour à red. Les transitions sont des événements temporels after(delay).

  • color.y (bloc Actions.SetInteger relié aux sorties do) : 1 = rouge, 2 = jaune, 3 = vert ;
  • cycles : nombre d'entrées dans red, compté sur l'impulsion red.entry. Il vaut 1 dès t = 0 ;
  • green.entry, red.exit, goGreen.effect : impulsions de 0,1 s à 4 s.

Chronogramme de TrafficLight : color.y, états actifs, impulsions red.entry et goGreen.effect

Thermostat — régulation tout-ou-rien d'une pièce

Modèle Thermostat : le bloc controller (cadre stm) pilote le radiateur de la pièce

Une pièce (capacité thermique, pertes vers l'extérieur à 5 °C) chauffée par un radiateur de 500 W. Le régulateur est une machine à états utilisée comme bloc, ThermostatChart (hérite de StateCharts.Chart) : entrée T, sortie heating.

  • off → on : transition de complétion avec la garde [T < TLow] (19 °C) ;
  • on → off : événement de changement when(T > THigh) (21 °C) ;
  • heating est la sortie do de on.

Diagramme de ThermostatChart

La pièce part de 15 °C : la machine entre dans off et le quitte aussitôt pour on, au même instant. La température oscille ensuite entre 19 et 21 °C. À tracer : room.T (en °C) et controller.heating ; ouvrir controller (clic droit → Open Class) pour voir le diagramme.

Température de la pièce entre 19 et 21 °C et commande du chauffage

Toggle — bouton poussoir

Diagramme de Toggle

Un bouton (button, appuyé 0,2 s chaque seconde à partir de 0,5 s) allume puis éteint une lampe à chaque appui. Les deux transitions ont un déclencheur signal : elles franchissent au front montant de leur entrée signal, si bien que le bouton maintenu n'éteint pas la lampe aussitôt.

  • on.do : la lampe ;
  • on.entry, on.exit : impulsions à l'allumage et à l'extinction ;
  • switchOn.effect, switchOff.effect : impulsions à chaque franchissement ;
  • presses : nombre de franchissements.

Chronogramme de Toggle : bouton, état on, impulsions entry, exit et effets

Sorting — tri de pièces

Diagramme de Sorting

Une pièce arrive chaque seconde (événement signal sur arrival). Le pseudo-état de choix choice l'envoie vers heavy ou light selon son poids, puis la machine revient dans idle après 0,5 s (after(0.5 s)). Après quatre pièces, l'arrivée suivante mène à l'état final done.

Les trois transitions qui partent du choix montrent les priorités : finish [count >= 4] (1), toHeavy [weight > 5] (2), toLight sans garde (3 : la branche « sinon »).

Chronogramme de Sorting

AutomaticDoor — porte automatique

Diagramme d'AutomaticDoor : trois transitions partent de closing

Un état avec trois transitions sortantes. La porte s'ouvre sur appel (closed → opening), passe à open quand elle est entièrement ouverte (when(door.y >= 1)), puis à closing après 5 s. La position de la porte est l'intégrale de la vitesse donnée par les sorties do de opening et closing (blocs motor et door).

Depuis closing, trois transitions partent de trois côtés différents :

  1. reopenObstacle (priorité 1, côté bas) : garde [obstacle.y], un obstacle rouvre la porte ;
  2. reopenCall (priorité 2, côté gauche) : événement signal, un appel pendant la fermeture rouvre la porte ;
  3. closedReached (priorité 3, côté haut) : événement when(door.y <= 0), la porte est fermée.

Scénario : appels à 1 s, 14 s et 30 s, obstacle à 23 s. La première fermeture (9 s) va jusqu'au bout ; la deuxième (22 s) est interrompue par l'obstacle, la troisième (29 s) par l'appel ; la dernière (36 s) se termine à 39 s. À tracer : door.y et les sorties do des états.

Position de la porte, appels, obstacle et états actifs