Matlab, Simulink et Stateflow

Cette page ressource explique comment concevoir et tester un système logique combinatoire dans Simulink, puis comment remplacer les portes logiques par un diagramme d'état tracé dans Stateflow ce qui permet de programmer rapidement des systèmes séquentiels de complexité quelconque.

Sommaire de cette page

Création d'un logigramme de base

Remplacement du logigramme par un diagramme d'état

Réalisation d'un séquenceur pour commander les feux tricolores

Réalisation d'un compteur/décompteur

 

Stateflow est un outil graphique interactif intégré à Simulink pour modéliser et simuler des machines d’état fini, systèmes qui réagissent à des événements, dits systèmes réactifs. Ces systèmes passent d’un état à un autre en réponse à des événements et des conditions.

Une machine à états finis est une machine qui ne fonctionne que dans un nombre finis d’états, ou modes opératoires et permet de modéliser des processus dynamiques.

La description comportementale de tels systèmes est définie dans un diagramme d'état, faisant apparaître les différents états du système ainsi que les transitions permettant de passer d'un état à l'autre. Le logiciel Stateflow permet de dessiner ces diagrammes d'état.

 

Création d'un logigramme de base

Voyons en détail comment créer et tester dans Simulink un petit logigramme.

Ouvrir Matlab en utilisant son icône :


Icône de Matlab


Chargement de Matlab 2010

Ouvrir Simulink à partir de Matlab :

Dans Simulink, créer un nouveau modèle :

Puis dessiner dans ce modèle le logigramme en utilisant :


Schéma bloc dans Simulink

Télécharger cet exemple 1

Lancer la simulation durant un temps infini dans Simulink (en entrant inf comme temps de fin), double cliquer sur les interrupteurs pour modifier leur position, et observer l'état logique de la sortie dans le bloc "Display".

Remarques :


Exemple de logigramme utilisant 3 portes logiques

Les blocs peuvent être renommés et redimensionnés à loisir, et en cliquant droit sur chacun des blocs puis sur Foreground Color ou sur Background Color il est possible de colorer rapidement le diagramme ce qui facilite considérablement sa lecture :


Les blocs et les liaisons ont été colorés

Télécharger cet exemple 3

En cas de schéma bloc complexe, il est possible de le structurer en sous-système en encapsulant un ensemble de blocs dans un seul bloc possédant des entrées et des sortie :

 

Remplacement du logigramme par un diagramme d'état

 

Dans l'arborescence des bibliothèques de Simulink le diagramme d'état est disponible à l'emplassement suivant :

Stateflow > Chart

Dans Simulink on garde les valeurs constantes (blocs Constant), les interrupteurs (blocs Manual Switch) et l'afficheur (bloc Display). On supprimes les portes logiques et on les remplace par un unique diagramme d'état (bloc Chart).


Schéma bloc dans Simulink

Télécharger cet exemple 2

Configuration du diagramme d'état :


Configuration du diagramme d'état dans l'explorateur de modèle

 

Tracé du diagramme d'état pour un système combinatoire dans Stateflow :


Les 2 actions principales à connaître dans Stateflow

Pour ajouter une transition entre deux états dans Stateflow il suffit de cliquer sur des bords de chacun des rectangles d'état.


Diagramme d'état d'un porte logique ET dans Stateflow

Les opérateurs logiques utilisables dans les transitions du diagramme d'état tracé dans Stateflow sont les suivants :

opérateur logique
symbole dans Stateflow
ET
&
OU
|
OU-Exclusif
^
NON
!

 

Réalisation d'un séquenceur

Voyons ici un exemple de séquenceur permettant de commander automatiquement des feux tricolores.

Le schéma bloc dans Simulink utilise 1 diagramme d'état et 3 LEDs. Dans l'arborescence des bibliothèques de Simulink les LEDs sont disponibles à l'emplassement suivant :

Gauges Blockset > Global Majic ActiveX Library > LEDs > Generic LED


Le diagramme d'état possède 3 sorties et aucune entrée

Les couleurs "allumée" et "éteinte" des LEDs sont configurables dans l'onglet Styles des paramètres des LEDs (clic droit sur la LED + Control Display Properties).

Le diagramme d'état contient 3 états (nommés ici e1 e2 et e3) allumant chacun 1 feu et éteignant les 2 autres. Pour passer automatiquement d'un état à l'autre au bout d'un certain temps on utilise la transition after :


Diagramme d'état séquentiel des feux tricolores dans Stateflow

Télécharger cet exemple 4

 

Remarque : en cochant l'option Output State Activity dans les propriétés d'un état dans l'explorateur de modèle on crée automatiquement une sortie booléenne dans le diagramme d'état qui vaudra 1 lorsque l'état est actif. Exemple :

On crée un état nommé a :

Dans les propriétés du diagramme d'état :

1 - on sélectionne l'état nommé a

2 - on coche Output State Activity

3 - on clique sur Apply pour valider

4 - la conséquence est la création automatique d'une nouvelle sortie nommée a et de type booléen :

Et dans Simulink on retrouve la sortie a sur le diagramme d'état :

 

 

Réalisation d'un compteur

Grâce au diagramme d'état il est possible de programmer n'importe quel système séquentiel. Voyons un nouvel exemple : un compteur/décompteur.

Notre compteur doit avoir 3 entrées :

Le schéma bloc contient le diagramme d'état avec ces 3 entrées et 3 interrupteurs permettant d'agir sur ces entrées :


Schéma bloc du compteur/décompteur dans Simulink

Télécharger cet exemple 5

Remarque : l'afficheur 7 segments permettant de visualiser la valeur numérique n en sortie du compteur est disponible dans la librairie suivante :

Gauges Blockset > Global Majic ActiveX Library > Numeric Displays > Generic Numeric LED

Et les ampoules permettant de visualiser facilement l'état logique des entrées sont disponibles dans :

Gauges Blockset > Global Majic ActiveX Library > On Off Gauges > Light Bulb

Dans la configuration du modèle du diagramme d'état 4 données ont été ajoutées, toutes de type double. Trois d'entre elles sont des entrées (h, r et c), et la quatrième est une sortie (n, la valeur numérique en sortie du compteur) :

Et voici le diagramme d'état décrivant le comportement du compteur en fonction de l'état logique appliqué sur les entrées :


Diagramme d'état du compteur/décompteur dans Stateflow

Explications et commentaires de ce diagramme d'état du compteur :