Main Content

Créer et exécuter un diagramme Stateflow

Un diagramme Stateflow® est une représentation graphique d’une machine à états finis composée d’états, de transitions et de données. Vous pouvez créer un diagramme Stateflow pour définir comment un algorithme MATLAB® ou un modèle Simulink® doit réagir aux signaux externes en entrée, aux événements et aux conditions temporelles. Pour plus d’informations, veuillez consulter Modéliser des machines à états finis.

Par exemple, ce diagramme Stateflow présente la logique sous-jacente d’un redresseur demi-onde. Le diagramme contient deux états : On et Off. À l’état On, le signal de sortie du diagramme y est égal à l’entrée x. À l’état Off, le signal de sortie est mis à zéro. Lorsque le signal d’entrée dépasse un certain seuil t0, le diagramme change d’état. Les actions de chaque état mettent à jour la valeur de y à chaque pas de temps de la simulation.

Stateflow chart with two states.

Cet exemple montre comment créer ce diagramme Stateflow pour une simulation dans Simulink et une exécution dans MATLAB.

Créer le diagramme Stateflow

Ouvrir l’éditeur Stateflow

L’éditeur Stateflow est un environnement graphique qui permet de concevoir des diagrammes de transition d’état, des diagrammes de flux, des tableaux de transition d’état et des tableaux de vérité. Avant d’ouvrir l’éditeur Stateflow, choisissez le mode d’exécution du diagramme qui répond le mieux à vos besoins.

  • Pour modéliser la logique conditionnelle, événementielle et temporelle des algorithmes Simulink périodiques ou continus, utilisez la fonction sfnew pour créer un diagramme Stateflow que vous pouvez simuler en tant que bloc dans un modèle Simulink. À l’invite de commande de MATLAB, saisissez :

    sfnew rectify     % create chart for simulation in a Simulink model

    Simulink crée un modèle appelé rectify qui contient un bloc Chart Stateflow vide. Pour ouvrir l’éditeur Stateflow, double-cliquez sur le bloc du diagramme.

  • Pour concevoir une machine à états et une logique de synchronisation réutilisables pour les applications MATLAB, utilisez la fonction edit pour créer un diagramme Stateflow autonome que vous pouvez exécuter en tant qu'objet MATLAB. À l’invite de commande de MATLAB, saisissez :

    edit rectify.sfx  % create chart for execution as a MATLAB object

    Si le fichier rectify.sfx n’existe pas, l’éditeur Stateflow crée un diagramme vide nommé rectify.

Les principaux composants de l’éditeur Stateflow sont le canevas du diagramme, la palette d’objets et le volet Symbols.

  • Le canevas du diagramme est une zone de dessin dans laquelle vous créez un diagramme en combinant des états, des transitions et d’autres éléments graphiques.

  • À gauche du canevas, la palette d’objets affiche un ensemble d’outils permettant d’ajouter des éléments graphiques à votre diagramme.

  • À droite du canevas, dans le volet Symbols, vous ajoutez de nouvelles données, de nouveaux événements et de nouveaux messages au diagramme et vous résolvez tous les symboles non définis ou inutilisés.

Default view of the Stateflow Editor.

Conseil

Une fois votre diagramme Stateflow créé, vous pouvez copier son contenu dans un autre graphique avec un mode d’exécution différent. Par exemple, vous pouvez créer un diagramme à exécuter dans MATLAB et copier son contenu dans un diagramme à simuler dans Simulink.

Ajouter des états et des transitions

  1. Dans la palette d’objets, cliquez sur l’icône State et déplacez le pointeur sur le canevas du diagramme. Un état avec sa transition par défaut apparaît. Pour placer l’état, cliquez sur un emplacement dans le canevas. À l’invite de texte, saisissez le nom de l’état On et son action y = x.

    Chart with one state, On.

  2. Ajoutez un autre état. Faites un clic droit et faites glisser l’état On. Des repères graphiques bleus facilitent l’alignement de vos états horizontalement ou verticalement. Le nom du nouvel état devient Off. Double-cliquez sur l’état et modifiez son action en y = 0.

    Chart with two states, On and Off.

  3. Réalignez les deux états et définissez l’espace entre les deux. Les repères de transition bleus indiquent plusieurs façons de relier les états. Pour ajouter des transitions, cliquez sur le repère approprié.

    Pour ajouter une transition, vous pouvez également cliquer sur le bord d’un état et le faire glisser vers le bord de l’autre état.

    Chart with the two states joined by transitions.

  4. Double-cliquez sur chaque transition et entrez la condition de transition appropriée x<t0 ou x>=t0. Les conditions apparaissent entre crochets.

    Chart with transition conditions.

  5. Arrangez le diagramme :

    • Pour plus de clarté, déplacez chaque libellé de transition afin de le positionner de manière pratique au-dessus ou en dessous de la transition correspondante.

    • Pour aligner et redimensionner les éléments graphiques de votre diagramme, cliquez sur Auto Arrange dans l’onglet Format ou appuyez sur Ctrl+Maj+A.

    • Pour redimensionner le diagramme en fonction du canevas, appuyez sur la barre d’espace ou cliquez sur l’icône Fit To View .

Résoudre les symboles non définis

Pour exécuter votre diagramme, vous devez définir chaque symbole que vous utilisez dans ce dernier et préciser sa portée (par exemple, données d’entrée, données de sortie ou données locales). Dans le volet Symbols, les symboles non définis sont signalés par un badge d’erreur rouge . La colonne Type affiche la portée (scope) suggérée pour chaque symbole non défini en fonction de son utilisation dans le diagramme.

  1. Ouvrez le volet Symbols.

    • Si vous créez un diagramme dans un modèle Simulink, sélectionnez Symbols Pane dans l’onglet Modeling, sous Design Data.

    • Si vous créez un diagramme autonome à exécuter dans MATLAB, sélectionnez Add Data > Symbols Pane dans l’onglet State Chart.

  2. Dans le volet Symbols, cliquez sur Resolve Undefined Symbols .

    • Si vous créez un diagramme dans un modèle Simulink, l’éditeur Stateflow résout les symboles x et t0 en tant que données d'entrée et y en tant que données de sortie .

    • Si vous créez un diagramme autonome à exécuter dans MATLAB, l’éditeur Stateflow résout t0, x et y en tant que données locales .

    Before and after views of the Symbols pane resolving the undefined symbols t0, x, and y.

  3. Comme le seuil t0 ne change pas pendant la simulation, basculez sa portée (scope) sur données constantes. Dans la colonne Type, cliquez sur l’icône de type de données en regard de t0 et sélectionnez Constant Data.

  4. Définissez la valeur du seuil t0. Dans la colonne Value, cliquez sur l’entrée vide en regard de t0 et saisissez la valeur 0.

  5. Enregistrez votre diagramme Stateflow.

Votre diagramme est désormais prêt pour une simulation dans Simulink ou son exécution dans MATLAB.

Simuler le diagramme en tant que bloc Simulink

Pour simuler le diagramme dans un modèle Simulink, connectez le bloc diagramme aux autres blocs du modèle à travers les ports d’entrée et de sortie. Si vous voulez exécuter le diagramme à partir de la fenêtre de commande MATLAB, veuillez consulter Exécuter le diagramme en tant qu'objet MATLAB.

  1. Pour revenir à l’éditeur Simulink, sur la barre de l’explorateur en haut de la trame, cliquez sur le nom du modèle Simulink : rectify. Si la barre de l’explorateur n’est pas visible, cliquez sur l’icône Hide/Show Explorer Bar en haut de la palette d’objets.

  2. Ajoutez une source au modèle :

    • Ajoutez un bloc Sine Wave (Simulink) à partir de la bibliothèque des sources de Simulink.

    • Double-cliquez sur le bloc Sine Wave et définissez le Sample time à 0,2.

    • Connectez la sortie du bloc Sine Wave à l’entrée du diagramme Stateflow.

    • Nommez le signal x.

  3. Ajoutez un récepteur au modèle :

    • Ajoutez un bloc Scope (Simulink) avec deux ports d’entrée à partir de la bibliothèque des récepteurs de Simulink.

    • Connectez la sortie du bloc Sine Wave à la première entrée du bloc Scope.

    • Connectez la sortie du diagramme Stateflow à la deuxième entrée du bloc Scope.

    • Nommez le signal y.

  4. Enregistrez le modèle Simulink.

    In a Simulink model, a Sine Wave block creates an input signal for the chart. A Scope block plots the input and output of the chart.

  5. Pour simuler le modèle, cliquez sur Run. Pendant la simulation, l’éditeur Stateflow met en évidence les états actifs et les transitions avec une animation du diagramme.

  6. Après la simulation du modèle, double-cliquez sur le bloc Scope. La fenêtre scope affiche la représentation graphique des signaux d’entrée et de sortie des diagrammes.

    Scope block showing the input and output of the chart.

    Les résultats de la simulation montrent que le redresseur filtre les valeurs d’entrée négatives.

Exécuter le diagramme en tant qu'objet MATLAB

Pour exécuter le diagramme dans la fenêtre de commande MATLAB, créez un objet chart et appelez sa fonction step. Si vous voulez simuler le diagramme dans un modèle Simulink, veuillez consulter Simuler le diagramme en tant que bloc Simulink.

  1. Créez un objet chart r en utilisant le nom du fichier sfx qui contient la définition du diagramme en tant que fonction. Spécifiez la valeur initiale des données x du diagramme sous la forme d’une paire nom-valeur.

    r = rectify(x=0);
  2. Initialisez les données d’entrée et de sortie pour exécuter le diagramme. Le vecteur X contient les valeurs d’entrée d’une onde sinusoïdale. Le vecteur Y est un accumulateur vide.

    T = 0:0.2:10;
    X = sin(T);
    Y = [];
  3. Exécutez l’objet chart en appelant plusieurs fois la fonction step. Passez les valeurs individuelles du vecteur X en tant que données x du diagramme. Rassemblez les valeurs obtenues de y dans le vecteur Y. Pendant l’exécution, l’éditeur Stateflow met en évidence les états actifs et les transitions par une animation du diagramme.

    for i = 1:51
        step(r,x=X(i));
        Y(i) = r.y;
    end
  4. Supprimez l’objet chart r de l’espace de travail MATLAB.

    delete(r)
  5. Examinez les résultats de l’exécution du diagramme. Par exemple, vous pouvez appeler la fonction stairs pour créer un graphique en escalier qui compare les valeurs de X et Y.

    ax1 = subplot(2,1,1);
    stairs(ax1,T,X,color="#0072BD")
    title(ax1,"x")
    
    ax2 = subplot(2,1,2);
    stairs(ax2,T,Y,color="#D95319")
    title(ax2,"y")

    MATLAB figure showing the input and output of the chart.

    Les résultats de l’exécution montrent que le redresseur exclue les valeurs d’entrée négatives.

Sujets associés