La traduction de cette page n'est pas à jour. Cliquez ici pour voir la dernière version en anglais.
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.
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.
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.
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
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 actiony = x
.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 devientOff
. Double-cliquez sur l’état et modifiez son action eny = 0
.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.
Double-cliquez sur chaque transition et entrez la condition de transition appropriée
x<t0
oux>=t0
. Les conditions apparaissent entre crochets.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.
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.
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
ett0
en tant que données d'entrée ety
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
ety
en tant que données locales .
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 det0
et sélectionnezConstant Data
.Définissez la valeur du seuil
t0
. Dans la colonne Value, cliquez sur l’entrée vide en regard det0
et saisissez la valeur 0.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.
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.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
.
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
.
Enregistrez le modèle Simulink.
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.
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.
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.
Créez un objet chart
r
en utilisant le nom du fichiersfx
qui contient la définition du diagramme en tant que fonction. Spécifiez la valeur initiale des donnéesx
du diagramme sous la forme d’une paire nom-valeur.r = rectify(x=0);
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 vecteurY
est un accumulateur vide.T = 0:0.2:10; X = sin(T); Y = [];
Exécutez l’objet chart en appelant plusieurs fois la fonction
step
. Passez les valeurs individuelles du vecteurX
en tant que donnéesx
du diagramme. Rassemblez les valeurs obtenues dey
dans le vecteurY
. 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
Supprimez l’objet chart
r
de l’espace de travail MATLAB.delete(r)
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 deX
etY
.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")
Les résultats de l’exécution montrent que le redresseur exclue les valeurs d’entrée négatives.