2. Simulation avec Stateflow de Matlab
Principes d'électrotechnique : cours et exercices corrigés : IUT : licence : master :
écoles ...... Commande backstepping/DTC adaptative appliquée à la machine ...
Part of the document
Simulation des Automatismes
Automatique et Temps Réel
Un automatisme doit être capable de réagir aux évènements qui modifient le
contexte de façon appropriée à n'importe quel moment.
L'univers physique à l'extérieur de l'automate est asynchrone par nature,
l'occurrence d'un évènement est imprévisible.
Le cerveau de l'automate doit rester disponible pour réagir dès
l'apparition d'un évènement en appliquant la réponse appropriée. On parlera
de systèmes réactifs, et de temps réel.
A la différence de l'automate précedent, l'ordre d'arrivée des évènements
n'est pas nécessairement connu.
Simulation avec Stateflow de Matlab
L
e module Simulink de Matlab permet de simuler les systèmes, continus,
discrets, non linéaires, ... en relation avec la mémoire de travail de
Matlab (workspace).
Ce formalisme graphique représente le schéma-bloc du système à simuler. On
pioche les blocs dans l'une des bibliothèques (libraries), on les agence et
les relie selon la structure du système à représenter.
S
tateflow fait partie de Simulink, il permet d'y ajouter des blocs contenant
des graphes à nombre d'états fini, avec des étapes, des actions, des
transitions, des réceptivités, mais également avec des évènements comme
dans le GRAFCET.
L
a simulation du schéma- bloc utilise Visual C++, c'est à dire que les
modèles une fois définis sont traduits en C++ et compilés, ce qui donne
l'exécutable utilisé pour la simulation.
On lance Stateflow depuis Simulink, dans la bibliothèque Additions à
Simulink, ou par la commande :
>> stateflow de l'interpréteur Matlab.
Matlab ouvre une fenêtre Simulink nommée untitled, avec un bloc unique
nommé également untitled dans lequel on va pouvoir définir des graphes. Il
faut d'abord renommer ce bloc, par exemple 'cours', puis cliquer dessus
pour éditer le graphe à l'intérieur du bloc. La sauvegarde du projet créera
un fichier cours.mdl dont l'exécution rechargera le bloc simulé ; on pourra
également taper :
>> cours dans la fenêtre Matlab pour ce faire.
Le bloc édité, la commande Parse du menu Tools permet de détecter les
erreurs dans la définition du graphe, la commande Start de Simulation lance
la compilation, l'édition de liens, et l'exécution.
Définition et Simulation d'un graphe
On passe rapidement en revue certains composants des graphes de Stateflow
et on utilisera comme illustration le processus chimique donné en exemple à
la fin du cours précédent.
La fenêtre d'édition Stateflow fournit d'abord des étapes, (states), les
sommets du graphe, représentés en bleu (vert si sélectionnés) : dans ces
étapes, on inscrit un texte, comportant un nom, ou label, et des actions
exécutables à l'entrée (entry , abbrév. En), durant l'activité (during, ou
du) et à la sortie (exit, ou ex).
Les states sont interconnectés par un réseau d'arcs, ou transitions,
étiquetés également avec des conditions ou des évènements qui provoqueront
les transitions.
Il existe un arc particulier (default) permettant de déterminer les étapes
initialement actives.
Il existe également des jonctions ou disjonctions permettant d'éclater un
arc en plusieurs arcs (hyperarc).
On peut regrouper les étapes dans des superétapes (superstates) pour
réaliser des groupes conditionnels (OR exclusive states, un groupe et un
seul actif à un instant donné) ou simultanés (AND states, groupes activés
simultanément).
Les états exclusifs sont symbolisés en traits pleins, les états simultanés
en pointillés.
Il est utile de pouvoir définir des données afin de communiquer avec le
workspace Matlab, ou avec un schéma-bloc défini sous Simulink et incluant
le graphe. On distingue les types de données suivants :
local, Input from Simulink, Output to Simulink, Constant, Workspace, et
Event.
Toute donnée doit être définie avant utilisation avec son type et son
domaine, en utilisant la commande Explore de Tools, ou Add, (raccourcis :
Ctrl d pour Add Data, Ctrl e pour Add Event)
Ces éléments permettent de réaliser des systèmes divers dont les quelques
illustrations suivantes :
Syntaxe du contenu d'une étape :
nom/
entry : ev1
during : qa = 2 ;
exit : qb+= 0.1 ;
on event ev2 : qc = 0
Syntaxe d'une transition :
Switch_off[c1]{elec_off}/light_off
Event [condition]'condition action}/transition action
Illustration de l'utilisation de Stateflow pour la commande du processus
chimique
La page suivante présente une copie d'écran de l'application stockée dans
cocacola.mdl, qu'on exécute donc en tapant cocacola dans la fenêtre MATLAB.
Le schéma bloc en bas à gauche inclut le modèle (les équations) du
processus chimique (bloc Processus), le bloc de commande cocac où le graphe
de l'automatisme séquenciel est est défini sous stateflow ainsi que 4
Scopes pour la visualisation des grandeurs physiques simulées.
Les blocs Processus et cocac ont été dilatés et on en voit le contenu sur
l'écran :
. Un système d'équations différentielles non linéaires pour Processus,
dont il faudrait dilater encore certains blocs,
. Un graphe constitué de 6 sous graphes (superstates) actifs simultanément
pour cocac (AND superstates dans la terminologie de Stateflow)
Equations du processus
On a nommé comme suit les variables définissant l'état, les entrées, et les
sorties du processus :
. haut, ou h, la hauteur dans la cuve
. pH, le pH dans la cuve
. T, la température
. w, le poids de liquide produit et évacué
. qa, le débit d'admission du produit A, de pH : pHA
. qb, idem produit B, de pH pHB
. qc, le débit d'évacuation
. u, la puissance électrique de chauffage dépensée dans la cuve
L'équation donnant l'évolution du niveau dans la cuve est :
[pic]
Exercice :
retrouver de même sur le schéma bloc de Processus, les équations adoptées
pour le pH, la température T, le poids w du mélange produit :
[pic]
[pic]
[pic]
L'affichage des variables h, pH, T et w dans quatre Scopes a été adapté
(voir menus supérieurs de Scope), par exemple l'échelle de pH est limitée
de pH 7 à pH 9. Qu'en est il pour T, h et w ?
La durée de la simulation a été ajustée dans le menu Simulation Parameters.
Définition, Interconnexion, Compilation, Simulation du graphe Stateflow
et du modèle
On a pu définir des états, des super états, des actions, des transitions,
des conditions sur les variables d'état, des évènements, etc ... de
diverses façons dans le graphe présenté.
Syntaxe d'un état : par exemple
p2/
en : qb=1
ex : qb=0
A l'entrée dans p2, qb est mis à 1 (on remplit avec B) et à la sortie, qb
est remis à 0 (on ferme la vanne B). Ces opérations apparaissent dans la
fenêtre MATLAB sauf si on termine par ;
Syntaxe d'une transition : par exemple
[pH < pHC]/pok entre p2 et p1 ou entre p1 et p1, ou ailleurs
pok entre reglph et Temp
Dans le second cas, pok déclaré comme un événement est testé. Si pok s'est
produit (a été distribué : broadcast), la transition peut avoir lieu.
Dans le premier cas, la condition entre crochets pH inférieur à pHC
constante provoque l'action de créer l'événement pok.
Données, évènements
pH est défini (Menu Explore) comme Input from Simulink
pHC comme Constant
pok est un Event
tl une variable de type local, etc ...
On peut voir l'ensemble des données avec Explore de Tools
On spécifie les types et domaines de validité des données dans Explore, ou
avec Add Data, et Add Event (Ctrld, Ctrl e).
Superstates (super états):
On peut donc regrouper les états , c'est fait 6 fois ici, où 14 états sont
dans 6 superstates de type AND, c'est à dire qu'ils peuvent être actifs
simultanément (voir la simulation) :
. superviseur : gère et synchronise l'ordre de mise en route des 4 tâches
de contrôle
. contrôle de niveau : deux tâches réalisant une commande de type tout ou
rien :
[pic] et [pic]
. contrôle du pH dans la cuve (sur le même principe de commande
. contrôle de température
. remplissage pesage du mélange produit
. la 6ième tâche simule une arrivée périodique de bouteilles à remplir, on
a programmé pour cela une horloge qui crée un événement périodiquement (t
est une variable réservée qui donne l'instant actuel de la simulation
Gestion de la mise à jour de l'état du graphe
Dans la fenêtre Stateflow, le menu Propriétés permet de choisir la règle de
mise à jour du graphe, soit Inherited (Stateflow décide) Sampled (préciser
une période de rafraîchissement du graphe), ou Continuous (le plus lent)