Académique Documents
Professionnel Documents
Culture Documents
MODELISATION MULTI-PHYSIQUE J2
Diagrammes d'états avec Stateflow
Le chronomètre
Le chronomètre 1/16
1. Présentation
L’objectif de cette activité est de simuler le comportement d’un chronomètre qui pourrait
être utilisé par un entraîneur souhaitant mesurer les performances de son athlète.
Les fonctionnalités basiques de ce chronomètre sont représentées dans le diagramme des
cas d’utilisation suivant :
Le chronomètre 2/16
Le diagramme de bloc interne suivant montre les interconnexions entre certains éléments
du chronomètre. Nous allons reproduire cette architecture dans Simulink.
2. Fonctionnalités de base
Dans cette partie, nous allons poursuivre la construction du modèle du chronomètre dans
Simulink en utilisant un chart (diagramme d’état) StateFlow pour modéliser le
comportement de la carte à micro-processeur tel que défini dans le diagramme d'états
SysML ci-dessous.
Un fichier ChronoBase.slx est fourni. La procédure ayant servi à créer les premiers
élément du fichier (bouton et affichage de Dashboard, chart,… ) est décrite en annexe 4.
Nous allons définir le diagramme d’états décrivant le comportement du système grâce à
l’environnement Stateflow.
1. Ouvir le fichier ChronoBase.slx puis ouvrir le « chart » en double-cliquant dessus.
On accède alors à tous les éléments pouvant composer un diagramme d’états.
2. Nous allons régler le Stop time (durée de la simulation) sur « inf », choisir un Solver
à pas fixes (fixed-step) plutôt qu’à pas variables et imposer un sample time de
0,001 sec. Ainsi, les « ticks » qui vont cadencer l’évolution de la machine à états
auront lieu toutes les millisecondes, ce qui est suffisant pour un chronomètre précis
Le chronomètre 3/16
au centième de seconde et a fortiori pour notre première version du chronomètre
qui comptera uniquement des secondes.
Pour cela, cliquer sur « VariableStepAuto » en bas à droite de la fenêtre puis sur
l’engrenage et modifier les valeurs comme sur la capture.
Le chronomètre 4/16
Les transitions sont réalisées en approchant la souris du bord d’un état jusqu’à ce
que le pointeur se transforme en croix (+). Il faut alors cliquer, se déplacer jusqu’à
l’état suivant puis relâcher. La transition se spécifie en double cliquant dessus.
L’appui sur le bouton A sera détecté en testant une variable d’entrée (input variable)
nommée « boutonA » à laquelle on connectera la valeur du bloc « constante »
modifiée par l’appui sur le bouton poussoir. Un bloc intermédiaire nommé « Edge
detector » permet de générer une impulsion d’une largeur d’un « tick » lors d’un
appui sur le bouton. Cela permet de ne prendre en compte qu’un seul appui et ainsi
éviter de sauter d’un état à l’autre tant que le bouton n’a pas été relâché.
La condition de garde [boutonA] est équivalente à [boutonA==1]
La variable « compteur » sera une variable locale (local variable).
La variable « affichage » est déjà définie en variable de sortie (output variable).
Toutes ces variables seront déclarées lors de l’exécution de la simulation.
4. Avant de lancer la simulation, il faut synchroniser l’écoulement du temps avec le
temps réel car, sinon, la simulation sera trop rapide pour interagir avec elle. Pour
cela, cliquer sur la petite flèche noire sous le bouton « Run » puis « Simulation
Pacing » → dans la nouvelle fenêtre, cliquer dans la case « Enabling pacing… » et
enfin, fermer cette fenêtre.
Le chronomètre 5/16
6. Cliquer sur le lien et, dans la nouvelle fenêtre, définir le type des variables tels que
sur la capture.
7. Remonter dans l’arborescence du modèle en cliquant sur la flèche
9. Ouvrir le diagramme d’états dans une nouvelle fenêtre afin de suivre l’évolution de
la machine à états tout en manipulant les boutons et en suivant l’évolution de
l’affichage. Pour cela, effectuer un clic droit sur le « chart » → Open in New
Window.
Le chronomètre 6/16
10. Lancer la simulation et cliquer sur les boutons (A et B) afin de démarrer le
chronomètre, de l’arrêter et de le remettre à zéro.
A compléter
Le chronomètre 7/16
12. Ajouter le ou les états ainsi que les transitions nécessaires afin que le chronomètre
adopte le comportement suivant :
- Lorsque le chronomètre est lancé, il est possible de suspendre l’affichage en
appuyant sur le bouton B afin de lire un temps intermédiaire. Le chronomètre
bascule dans l'état « Split » continue à tourner en tâche de fond mais la valeur
du temps intermédiaire reste fixe sur l’écran d’affichage.
- Dans cet état « Split », si on rappuie sur B, le chrono tourne toujours et
l’affichage recommence à s’incrémenter en partant de la valeur courante du
compteur.
- Dans l’état « Split », si on appuie sur A, le chrono s’arrête mais l’affichage
reste sur le temps intermédiaire. Si on appuie ensuite sur B, l’affichage montre
la valeur du temps final. Si on rappuie sur B, l’affichage est réinitialisé à 0.
14. Ajouter 3 nouveaux afficheurs (display) au modèle Simulink et les connecter aux
trois nouvelles sorties, un pour les minutes, un pour les secondes et un pour les
centièmes de seconde
Le chronomètre 8/16
ANNEXE 1 - L’interface de Simulink/Sateflow (d’après
Philippe Hautcoeur)
Le chronomètre 9/16
ANNEXE 2 – Description des principales fonctionnalités
de StateFlow
La palette d’outils nécessaire à la construction d’un diagramme d’état par un « glissé /
déposé » est la suivante. Elle comporte plusieurs objets dont certains sont graphiques:
Le chronomètre 10/16
Ce qui s’interprète de la façon suivante :
◦ à l’occurrence de l’événement la transition est évaluée ;
◦ Si la condition est vraie alors la transition est valide et si l’action sur condition
existe, elle est exécutée ;
◦ l’action sur transition, si elle existe, est aussi réalisée avant l’entrée dans l’état
pointé par la transition ;
◦ parfois, une condition seule permet de valider la transition. Elle sera alors
évaluée à chaque pas de calcul afin de savoir si la transition doit être réalisée ;
◦ il est également possible de réaliser une transition externe réflexive, auquel cas,
à chaque transition, on sort de l’état pour y entrer à nouveau.
Le chronomètre 11/16
◦ plusieurs événements peuvent être pris en compte dans le chart en les faisant
« entrer » à l’aide d’un objet de type « multiplexeur » (« mux »)
• La jonction :
◦ c’est un pseudo-état permettant par exemple de factoriser des expressions
booléennes associées à des conditions ;
◦ elle permet également de réaliser des structures algorithmiques. Par exemple,
la structure suivante :
Le chronomètre 12/16
Si u>0 alors S=1000 sinon S=0
• Les opérateurs temporels : at, every, before, temporalCount et surtout after qui
permet de réaliser une transition après un certain temps (exprimé en secondes =
sec, en millisecondes = msec, en microsecondes = usec ou en nombre de ticks).
Le chronomètre 13/16
ANNEXE 3 - Correspondance entre le diagramme d’état
SysML et StateFlow (d’après Philippe Hautcoeur)
Le chronomètre 14/16
Le chronomètre 15/16
ANNEXE 4 – Conception de base du fichier chronobase
1. Ouvrir Matlab, lancer Simulink puis créer un nouveau fichier (new blank model)
3. Double-cliquer sur le premier bouton pour ouvrir la fenêtre de ses paramètres puis
cliquer sur la constante à côté et enfin, dans la fenêtre, connecter le bouton à la
constante. Ceci permettra de faire passer la valeur du bloc constante (qui portera
mal son nom dans ce cas...) de 0 à 1 lorsqu’on cliquera sur le bouton puis de 1 à 0
lorsqu’on le relâchera.
Le chronomètre 16/16