Main Content

Définir le comportement des diagrammes au moyen d’actions

Les actions d’état et de transition sont des instructions que vous écrivez dans un état ou suite à une transition pour définir le comportement d’un diagramme Stateflow® pendant la simulation. Pour plus d’informations, veuillez consulter Modéliser des machines à états finis.

Exemple d’actions d’état et de transition

Les actions présentées dans ce diagramme définissent une machine à états qui vérifie de manière empirique une instance de la conjecture de Collatz. Pour une entrée numérique donnée $u$, le diagramme calcule la séquence de Hailstone $n_0 = u,$ $n_1,$ $n_2,$ $n_3,$ … en itérant cette règle :

  • Si $n_i$ est pair, alors $n_{i+1} = n_i / 2$.

  • Si $n_i$ est impair, alors $n_{i+1} = 3n_i+1$.

Selon la conjecture de Collatz, tout nombre entier positif possède une séquence de Hailstone qui finit par atteindre le chiffre 1.

Le diagramme comprend trois états. Au début de la simulation, l’état Init initialise les données du diagramme :

  • La donnée locale n est définie à la valeur de l’entrée u.

  • La donnée locale n2 est définie comme étant le reste de la division de n par deux.

  • La donnée de sortie y est définie à false.

Suivant de la parité de l’entrée, le diagramme bascule sur l’état Even ou Odd. Comme l’activité de l’état bascule entre les états Even et Odd, le diagramme calcule les nombres de la séquence de Hailstone. Lorsque la séquence atteint la valeur 1, la donnée de sortie y devient true et déclenche un bloc Stop Simulation (Simulink) dans le modèle Simulink®.

Types d’actions d’état

Les actions d’état définissent l’action d’un diagramme Stateflow lorsqu’un état est actif. Les types d’actions d’état les plus courants sont les actions entry, during et exit.

Type d’action d’étatAbréviationDescription
entryenL’action se produit à un pas de temps où l’état devient actif.
duringduL’action se produit à un pas de temps où l’état est déjà actif et le diagramme ne transitionne pas hors de cet état.
exitexL’action se produit à un pas de temps où le diagramme transitionne hors de l’état.

Vous pouvez spécifier le type d’une action d’état au moyen de son mot-clé complet (entry, during, exit) ou de son abréviation (en, du, ex). Vous pouvez également combiner des types d’actions d’état à l’aide de virgules. Par exemple, une action de type combiné entry,during se produit à un pas de temps où l’état devient actif et à chaque pas de temps suivant tant que l’état reste actif.

Le tableau suivant indique le résultat de chaque action d’état dans le diagramme de Hailstone.

ÉtatActionRésultat
Init

entry:
 n2 = rem(n,2);
 y = false;

Lorsque Init devient actif au début de la simulation, détermine la parité de n et définit y à false.

exit:
 y = isequal(n,1);

Lors de la sortie d’Init après un pas de temps, détermine si n est égal à 1.
Even

entry,during:
 n = n/2;
 n2 = rem(n,2);

Calcule le nombre suivant de la séquence de Hailstone (n / 2) et met sa parité à jour à :

  • Le pas de temps lorsque Even devient actif pour la première fois.

  • Chaque pas de temps ultérieur où Even est actif.

Odd

entry,during:
 n = 3*(n-y)+1;
 n2 = rem(n,2);

Calcule le nombre suivant de la séquence de Hailstone (3n+1) et met sa parité à jour à :

  • Le pas de temps lorsque Odd devient actif pour la première fois.

  • Chaque pas de temps ultérieur où Odd est actif.

y est égal à zéro pendant la majeure partie de la simulation. Lors du dernier pas de temps, où n = 1, y est égal à 1 de sorte que cette action ne modifie pas n ou n2 avant l’arrêt de la simulation.

Types d’actions de transition

Les actions de transition définissent l’action d’un diagramme Stateflow lorsqu’il quitte un état actif. Les types d’actions de transition les plus courants sont les conditions et les actions conditionnelles. Pour spécifier les actions de transition, utilisez un libellé avec la syntaxe suivante :

[condition]{conditional_action}

condition est une expression booléenne qui détermine si la transition se produit. Sans indication, la condition est implicitement évaluée comme étant vraie.

conditional_action est une instruction qui s’exécute lorsque la condition qui garantie la transition est définie comme étant vraie. L’action conditionnelle intervient après la condition mais avant les actions d’état exit ou entry.

Le tableau suivant indique le résultat de chaque action de transition dans le diagramme de Hailstone.

TransitionActionType d’actionRésultat
Transition par défaut vers Init

n = u

Action conditionnelleAu début de la simulation, affecte la donnée d’entrée u à la donnée locale n.
Transition de Init vers Even

n2 == 0

ConditionLorsque n est pair, la transition se produit. Le chiffre 1 à la source de cette transition indique qu’elle est évaluée avant la transition vers Odd.
Transition de Init vers Odd AucuneLorsque n est impair, la transition se produit. Le chiffre 2 à la source de cette transition indique qu’elle est évaluée après la transition vers Even.
Transition de Odd vers Even

n2 == 0

ConditionLorsque n est pair, la transition se produit.
Transition de Even vers Odd

n2 ~= 0

ConditionLorsque n est impair, la transition se produit.

y = isequal(n,1)

Action conditionnelleLorsque la transition se produit, détermine si n est égal à 1.

Examiner le comportement des diagrammes

Supposons que vous souhaitez calculer la séquence de Hailstone commençant par la valeur 9.

  1. Dans le bloc Constant (Simulink), saisissez la valeur 9.

  2. Dans l’onglet Simulation, cliquez sur Run .

    Le diagramme répond avec les actions suivantes :

    • À t = 0, la transition par défaut vers Init se produit.

      • L’action de transition définit la valeur de n à 9.

      • L’état Init devient actif.

      • Les actions entry dans Init définissent n2 à 1 et y à false.

    • Au pas de temps t = 1, la condition n2 == 0 est fausse donc le diagramme prépare la transition vers Odd.

      • L’action exit dans Init définit y à false.

      • L’état Init devient inactif.

      • L’état Odd devient actif.

      • Les actions entry dans Odd définissent n à 28 et n2 à 0.

    • Au pas de temps t = 2, la condition n2 == 0 est vraie donc le diagramme prépare la transition vers Even.

      • L’état Odd devient inactif.

      • L’état Even devient actif.

      • Les actions entry dans Even définissent n à 14 et n2 à 0.

    • Au pas de temps t = 3, la condition n2 ~= 0 est fausse donc le diagramme ne prépare pas la transition.

      • L’état Even reste actif.

      • Les actions during dans Even définissent n à 7 et n2 à 1.

    • Au pas de temps t = 4, la condition n2 ~= 0 est vraie donc le diagramme prépare la transition vers Odd.

      • L’action de transition définit y à false.

      • L’état Even devient inactif.

      • L’état Odd devient actif.

      • Les actions entry dans Odd définissent n à 22 et n2 à 0.

    • Le diagramme continue de calculer la séquence de Hailstone jusqu’à ce qu'il arrive à une valeur de n = 1 au pas de temps t = 19.

    • Au pas de temps t = 20, le diagramme prépare la transition de Even vers Odd.

      • Avant que l’état Even devienne inactif, l’action de transition définit y à true.

      • L’état Odd devient actif.

      • Les actions entry dans Odd ne modifient ni n ni n2.

      • Le bloc Stop Simulation (Simulink) connecté au signal de sortie y interrompt la simulation.

  3. Dans l’onglet Simulation, sous Review Results, cliquez sur Data Inspector .

  4. Pour afficher les valeurs de la séquence de Hailstone, dans Simulation Data Inspector, sélectionnez le signal enregistré n.

Simulation Data Inspector showing the output of the chart.

La séquence de Hailstone atteint une valeur de 1 après 19 itérations.

Sujets associés