Main Content

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.

Stateflow chart with states labeled first, second, third, and fourth. The chart transitions between the states when the speed is higher or lower than a specified amount.

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.

Chart animation showing states and transitions activating.

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’action on every(0.25,sec) détermine la vitesse de la voiture. L’opérateur every crée un temporisateur MATLAB qui exécute le diagramme et met à jour ses données speed toutes les 0,25 secondes.

  • Événements d’entrée : Les événements en entrée SpeedUp, Cruise et SlowDown réinitialisent la valeur des données du diagramme delta. 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 Exécution dans 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 d’é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’état selection_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 et selection_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 d’é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 dans gear_state.

  • Événements locaux : au lieu des conditions booléennes, ce diagramme utilise les événements locaux UP et DOWN pour déclencher les changements de vitesse. Ces événements sont déclenchés par les commandes send de selection_state lorsque la vitesse de la voiture sort de la plage de fonctionnement du rapport sélectionné. La fonction Simulink calc_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 temporelle after pour retarder la diffusion des événements UP et DOWN. 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élai TWAIT prédéterminé.

Pour exécuter une simulation du modèle :

  1. 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.

  2. 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.

  3. 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 d’é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éennes up et down. 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 d’é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 dans gear.

  • Logique temporelle : Pour éviter une succession rapide de changements de vitesse, les conditions booléennes up et down utilisent l’opérateur de logique temporelle duration 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ée TWAIT (mesurée en secondes).

Pour exécuter une simulation du modèle :

  1. 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.

  2. 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.

  3. Dans le bloc Scope, examinez les résultats de la simulation. Le scope affiche un tracé du rapport sélectionné pendant la simulation.

Étapes suivantes