La traduction de cette page n'est pas à jour. Cliquez ici pour voir la dernière version en anglais.
Modéliser des machines à états finis
Stateflow® est un environnement de programmation graphique qui repose sur des machines à états finis. Stateflow vous permet de tester et débugger votre design, d’envisager divers scénarios de simulation et de générer du code à partir de votre machine à états.
Les machines à états finis sont des représentations de systèmes dynamiques qui passent d’un mode de fonctionnement (état) à un autre. Les machines à états :
servent de point de départ optimisé d’un processus complexe de design de software.
permettent de se concentrer sur les modes de fonctionnement et les conditions requises pour passer d’un mode au suivant.
facilitent le design de modèles clairs et concis, même lorsque le niveau de complexité des modèles augmente.
Le design des systèmes de contrôle repose largement sur des machines à états pour gérer une logique complexe. Les applications comprennent le design aéronautique, automobile et de systèmes de contrôle robotique.
Exemple de diagramme Stateflow
Dans un diagramme Stateflow, vous combinez des états, des transitions et des données pour implémenter une machine à états finis. Ce diagramme Stateflow présente un modèle simplifié de la logique du changement de vitesses dans un système de transmission automatique à quatre vitesses d’une voiture. Le diagramme représente chaque position de vitesse par un état sous forme d’un rectangle : first
, second
, third
ou fourth
. Comme les vitesses qu’ils représentent, ces états sont exclusifs : un seul état est actif à la fois.
La flèche à gauche du diagramme représente la transition par défaut et indique le premier état à devenir actif. Lorsque vous exécutez le diagramme, cet état est mis en surbrillance sur le schéma. Les autres flèches indiquent les transitions possibles entre les états. Pour définir la dynamique de la machine à états, vous associez chaque transition à une condition booléenne ou à un événement déclencheur. Par exemple, ce diagramme surveille la vitesse de la voiture et change de vitesse lorsque la vitesse franchit un seuil défini. Pendant la simulation, l’élément mis en surbrillance dans le diagramme change au fur et à mesure que les différents états deviennent actifs.
Ce diagramme propose un design simple qui ne tient pas compte de facteurs importants comme le régime et le couple du moteur. Vous pouvez créer un modèle plus complet et réaliste en liant ce diagramme Stateflow à d’autres composants dans MATLAB® ou Simulink®. Les exemples suivants décrivent trois approches possibles.
Exécuter le diagramme en tant qu'objet MATLAB
Cet exemple présente une version modifiée d’un système de transmission automatique qui intègre une hiérarchie d’états, une logique temporelle et des événements en entrée.
Hiérarchie : le diagramme consiste en un super-état
gear_logic
qui englobe le diagramme de transmission automatique à quatre vitesses de l’exemple précédent. Ce super-état contrôle la vitesse et l’accélération de la voiture. Pendant l’exécution,gear_logic
est toujours actif.Logique temporelle : dans l’état
gear_logic
, l’actionon every(0.25,sec)
détermine la vitesse de la voiture. L’opérateurevery
crée un temporisateur MATLAB qui exécute le diagramme et met à jour ses donnéesspeed
toutes les 0,25 secondes.Événements d’entrée : Les événements en entrée
SpeedUp
,Cruise
etSlowDown
réinitialisent la valeur des données du diagrammedelta
. Ces données déterminent si le véhicule accélère ou maintient sa vitesse à chaque étape d’exécution.
Vous pouvez exécuter ce diagramme en tant qu’objet dans MATLAB, directement via la fenêtre de commande ou en utilisant un script. Vous pouvez également programmer une application MATLAB qui contrôle l’état du diagramme via une interface utilisateur graphique. Par exemple, cette interface utilisateur transmet un événement d’entrée au diagramme lorsque vous cliquez sur un bouton. Dans le diagramme, la fonction widgets
de MATLAB contrôle les valeurs des jauges et les voyants sur l’interface. Pour exécuter l’exemple, dans la barre d’outils de l'application Designer, cliquez sur Run. L’exécution de l’exemple se poursuit jusqu’à la fermeture de la fenêtre de l’interface utilisateur.
Dans l’onglet State Chart de l’éditeur Stateflow, vous pouvez également cliquer sur Run. Pour contrôler la vitesse de la voiture, utilisez les boutons SpeedUp, SlowDown et Cruise du volet Symbols. Pour arrêter l’exemple, cliquez sur Stop.
Pour plus d’informations sur l’exécution des diagrammes Stateflow en tant qu’objets MATLAB, consultez Execution in MATLAB.
Simuler un diagramme comme un bloc Simulink avec des événements locaux
Cet exemple présente un design plus complexe d’un système de transmission automatique. Le diagramme Stateflow apparaît sous forme de bloc dans un modèle Simulink. Les autres blocs du modèle représentent des composants automobiles connexes. Le diagramme s’interface avec les autres blocs en partageant des données via des connexions d’entrée et de sortie. Pour ouvrir le diagramme, cliquez sur la flèche située dans le coin inférieur gauche du bloc shift_logic
.
Ce diagramme combine la hiérarchie des états, le parallélisme, les données de l’état actif, les événements locaux et la logique temporelle.
Hiérarchie : l’état
gear_state
contient une version modifiée du diagramme de la transmission automatique à quatre vitesses. L’étatselection_state
contient des sous-états qui représentent les modes de fonctionnement en régime permanent, en montée et en descente. Lorsque les circonstances exigent de passer à une vitesse supérieure ou inférieure, ces états deviennent actifs.Parallélisme : Les états parallèles
gear_state
etselection_state
apparaissent sous forme de rectangles avec une bordure en pointillés. Ces états fonctionnent simultanément, même si les sous-états qui les composent sont activés et désactivés.Données de l’état actif : la valeur de sortie
gear
reflète le choix des vitesses pendant la simulation. Le diagramme génère cette valeur à partir du sous-état actif dansgear_state
.Événements locaux : au lieu des conditions booléennes, ce diagramme utilise les événements locaux
UP
etDOWN
pour déclencher les changements de vitesse. Ces événements sont déclenchés par les commandessend
deselection_state
lorsque la vitesse de la voiture sort de la plage de fonctionnement du rapport sélectionné. La fonction Simulinkcalc_th
détermine les valeurs limites de la plage de fonctionnement en fonction du rapport sélectionné et du régime moteur.Logique temporelle : pour éviter une succession rapide de changements de vitesse,
selection_state
utilise l’opérateur de logique temporelleafter
pour retarder la diffusion des événementsUP
etDOWN
. L’état ne diffuse l’un de ces événements que si un changement de vitesse est nécessaire pendant une durée supérieure à un délaiTWAIT
prédéterminé.
Pour exécuter une simulation du modèle :
Double-cliquez sur le bloc User Inputs. Dans la boîte de dialogue Signal Editor, sélectionnez un profil prédéfini de freinage/accélération dans la liste Active Scenario. Le profil par défaut est
Passing Maneuver
.Cliquez sur Run. Dans l’éditeur Stateflow, l'animation du diagramme met en évidence les états actifs pendant la simulation. Pour ralentir l’animation, dans l’onglet Debug, sélectionnez
Slow
dans la liste déroulante Animation Speed.Dans les blocs Scope, examinez les résultats de la simulation. Chaque scope affiche un tracé de ses signaux d’entrée pendant la simulation.
Simuler un diagramme comme un bloc Simulink avec des conditions temporelles
Cet exemple fournit une autre alternative de modélisation du système de transmission d’une voiture. Le diagramme Stateflow apparaît sous forme de bloc dans un modèle Simulink. Les autres blocs du modèle représentent des composants automobiles connexes. Le diagramme s’interface avec les autres blocs en partageant des données via des connexions d’entrée et de sortie. Pour ouvrir le diagramme, cliquez sur la flèche située dans le coin inférieur gauche du bloc Gear_logic
.
Ce diagramme combine la hiérarchie des états, les données de l’état actif et la logique temporelle.
Hiérarchie : ce modèle place le diagramme de la transmission automatique à quatre vitesses dans un super-état
gear
. Ce super-état surveille les vitesses du véhicule et du moteur et déclenche les changements de vitesse. Les actions énumérées dans le coin supérieur gauche de l’état « gear » déterminent les seuils de fonctionnement du rapport sélectionné et les valeurs des conditions booléennesup
etdown
. Le libelléen,du
indique que les actions d’état sont exécutées lorsque l’état devient actif pour la première fois (en
=entry
) et à chaque pas de temps suivant tant que l’état est actif (du
=during
).Données de l’état actif : la valeur de sortie
gear
reflète le choix des vitesses pendant la simulation. Le diagramme génère cette valeur à partir du sous-état actif dansgear
.Logique temporelle : Pour éviter une succession rapide de changements de vitesse, les conditions booléennes
up
etdown
utilisent l’opérateur de logique temporelleduration
pour contrôler la transition entre les vitesses. Les conditions sont valables lorsque la vitesse de la voiture reste plus longtemps en dehors de la plage de fonctionnement du rapport sélectionné que la durée prédéterminéeTWAIT
(mesurée en secondes).
Pour exécuter une simulation du modèle :
Double-cliquez sur le bloc User Inputs. Dans la boîte de dialogue Signal Editor, sélectionnez un profil prédéfini de freinage/accélération dans la liste Active Scenario. Le profil par défaut est
Passing Maneuver
.Cliquez sur Run. Dans l’éditeur Stateflow, l'animation du diagramme met en évidence les états actifs pendant la simulation. Pour ralentir l’animation, dans l’onglet Debug, sélectionnez
Slow
dans la liste déroulante Animation Speed.Dans le bloc Scope, examinez les résultats de la simulation. Le scope affiche un tracé du rapport sélectionné pendant la simulation.