Haute Ecole d’IngØniØrie et de Gestion du canton de Vaud () |
DØpartement des technologies industrielles TIN) Fili?re Microtechniques Fili?re Syst?mes industriels Fili?re GØnie Ølectrique |
Introduction au logiciel MATLAB |
in s t i t u t d ' utomatisation in d u s t r i e l l e Prof. Michel ETIQUE, fØvrier2008, Yverdon-les-Bains |
1 Introduction 4
2 MØthode de travail 7
2.1 Edition et sauvegarde des chiers MATLAB . . . . . . . . . . . . . 7
2.1.1 Editeur intØgrØ MATLAB . . . . . . . . . . . . . . . . . . 7
2.2 Aide en ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 CrØation de chiers de commandes et de fonctions utilisateur . . . 8
2.3.1 Fichiers de commande ("script les") . . . . . . . . . . . . 8
2.3.2 Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4 Sauvegarde de donnØes sur disque . . . . . . . . . . . . . . . . . . 9
3 Les bases de MATLAB 11
3.1 CrØation et calcul de vecteurs et matrices . . . . . . . . . . . . . . 11
3.1.1 Vecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.1.2 Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.1.3 Construction de matrices, vecteurs et tableaux particuli?rs 13
3.1.4 Nombres complexes . . . . . . . . . . . . . . . . . . . . . . 14
3.2 OpØrations sur les tableaux . . . . . . . . . . . . . . . . . . . . . 14
3.3 ReprØsentation graphique 2D . . . . . . . . . . . . . . . . . . . . 15
4 Analyse de syst?mes dynamiques linØaires l’aide de la bo te
outils control systems 19
4.1 Introduction de fonctions de transfert . . . . . . . . . . . . . . . . 19
4.1.1 Introduction sous forme polyn miale . . . . . . . . . . . . 19
4.1.2 Introduction sous forme de zØros, p les et gain ("forme
d’Evans") . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.2 Introduction de mod?les d’Øtat . . . . . . . . . . . . . . . . . . . . 21
4.3 Passage d’un mod?le l’autre . . . . . . . . . . . . . . . . . . . . 21
4.4 Construction de schØmas fonctionnels . . . . . . . . . . . . . . . . 22
4.4.1 Fonctions series, cloop . . . . . . . . . . . . . . . . . . . . 22
4.4.2 Fonction feedback . . . . . . . . . . . . . . . . . . . . . . . 24
4.5 Calcul et tracØ de rØponses de syst?mes dynamiques linØaires . . . 26
4.5.1 RØponse temporelle . . . . . . . . . . . . . . . . . . . . . . 26
4.5.2 RØponse frØquentielle . . . . . . . . . . . . . . . . . . . . . 30
4.6 Analyse des propriØtØs des syst?mes . . . . . . . . . . . . . . . . . 30
4.7 Calcul a chage des marges de gain et de phase . . . . . . . . . . 30
4.8 TracØ du lieu des p les (ou lieu d’Evans) . . . . . . . . . . . . . . 31
4.9 Divers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5 Les structures de contr le du "langage" MATLAB 32
6 Simulation de syst?mes dynamiques linØaires et non-linØaires
avec la bo te outils Simulink 33
6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
6.2 Exemple introductif : simulation d’un syst?me dynamique linØaire 35
6.2.1 ModØlisation . . . . . . . . . . . . . . . . . . . . . . . . . . 36
6.2.2 Construction du schØma . . . . . . . . . . . . . . . . . . . 37
6.2.3 Initialisation des param?tres . . . . . . . . . . . . . . . . . 41
6.2.4 Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6.2.5 Sauvegarde des signaux puis traitement dans l’espace de
travail MATLAB . . . . . . . . . . . . . . . . . . . . . . . . 45
6.2.6 Lancement de la simulation partir de MATLAB . . . . . 48
6.3 La biblioth?que standard . . . . . . . . . . . . . . . . . . . . . . . 50
6.3.1 Sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.3.2 Sinks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.3.3 Discrete . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
6.3.4 Linear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.3.5 Nonlinear . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
6.3.6 Connections . . . . . . . . . . . . . . . . . . . . . . . . . . 58
6.4 Les S-functions de Simulink (version provisoire) . . . . . . . . . . . 59
6.4.2 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
6.4.3 Autres fonctionnalitØs de Simulink . . . . . . . . . . . . . . 62
Le prØsent document a pour but de fournir les bases nØcessaires l’utilisation du logiciel MATLAB, dans le cadre des cours, des exercices et du laboratoire de rØgulation automatique, pour lequel les bo tes outils Control System et Simulink sont employØes. Il ne prØsente donc ce logiciel que sous l’angle de son utilisation en rØgulation automatique.
Le logiciel MATLAB (MATrix LABoratory) est spØcialisØ dans le domaine du calcul matriciel numØrique. Tous les objets dØ nis dans MATLAB le sont donc au moyen de vecteurs et de matrices/tableaux de nombres. Un ensemble important d’opØrateurs et de fonctions MATLAB de base facilitent leur manipulation et des opØrations comme par exemple le produit et l’inversion matricielles (inv), la transposition (’) ou encore le calcul des valeurs propres (eig) font partie de la biblioth?que standard. D’autres fonctions servant la crØation et la manipulation de matrices et de tableaux (diag, iplr, ipud, rot90, rand, ones, zeros, linspace, logspace) sont Øgalement disponibles en nombre.
L’environnement MATLAB se prØsente sous la forme d’un espace de travail (Workspace), oø un interprØteur de commandes exØcute des opØrations et fonctions MATLAB. Les sources de celles-ci sont disponibles, Øcrites en "langage" MATLAB, voire en C ou en Fortran. L’utilisateur peut sa guise les modi er, mais en s’en inspirant, il peut surtout crØer et rajouter ses propres fonctions.
Des fonctions propres au traitement de donnØes (expØrimentales, telles que celles obtenues au laboratoire), comme min, max, mean, cumsum, sort, std, di , ainsi que celles relatives l’interpolation (poly t, interp1) sont autant d’outils tr?s pratiques pour l’ingØnieur analysant un probl?me pratique ou thØorique.
L’interface graphique de MATLAB est sans conteste l’un des points forts du logiciel et facilite le tracØ de courbes et l’obtention de graphiques 2D ou 3D de grande qualitØ (plot, stairs, stem, hist, mesh, surf, plot3). Le module Handle Graphics o re la possibilitØ de contr ler intØgralement cette interface, permettant ainsi l’utilisateur de mettre en forme tous ØlØments d’un graphique, de crØer ses propres menus (uimenu) ainsi que des objets graphiques tels que sliders (ascenseurs), boutons, menu surgissants (uicontrol) avec une facilitØ dØconcertante.
Le "langage" MATLAB contient un minimum de structures de programmation (structure itØrative, structure conditionnelle, sous-routine) mais reste tr?s rudimentaire. L’avantage est qu’il est tr?s simple et tr?s rapide programmer, o rant une grande tolØrance (syntaxe simple, pas de dØ nition de types, etc), ce qui permet un gain apprØciable en temps de mise au point. L’ingØnieur peut par ce moyen Œtre plus e cace dans l’analyse d’un probl?me, en concentrant ses e orts sur celui-ci et non pas sur l’outil servant le rØsoudre. En revanche, MATLAB ne convient pas la programmation d’applications d’une certaine ampleur. Dans ce dernier cas, il est possible, sous certaines conditions, de programmer l’application en C et de l’exØcuter partir l’espace de travail MATLAB.
et bien d’autres encore. Ces bo tes outils sont simplement constituØes d’un ensemble de fonctions spØcialisØes programmØes partir des fonctions de base de MATLAB, permettant par exemple la synth?se de ltres, le calcul de FFTs, la simulation d’algorithmes ous ou encore le calcul de rØponses harmoniques.
Simulink n’est rien d’autre qu’une bo te outils de MATLAB permettant au moyen d’une interface graphique ØvoluØe la construction rapide et aisØe ainsi que la simulation de schØmas fonctionnels complexes, contenant des syst?mes linØaires, non linØaires voire non-stationnaires, y compris des opØrateurs logiques, des outils mathØmatiques d’analyse, etc.
Dans le cadre de la rØgulation automatique, MATLAB constitue avant tout un tr?s puissant outil d’analyse des syst?mes dynamiques linØaires, dont on peut tr?s facilement obtenir les propriØtØs, comme les p les et zØros (tf2zp, roots) ou le gain statique (dcgain) et tracer les rØponses de tous types, la rØponse impulsionnelle (impulse), indicielle (step), un signal quelconque (lsim), ou harmonique (bode, nyquist). MATLAB se prŒte aussi bien l’analyse des syst?mes analogiques ou numØriques (dcgain et ddcgain, step et dstep, impulse et dimpulse, bode et dbode, lsim et dlsim), sans qu’il soit cependant possible d’Øtudier des syst?mes mixtes analogiques-numØriques (il faut pour cela faire usage de la bo te outils Simulink. A noter que SysQuake permet d’analyser des syst?mes mixtes analogiques numØriques). Di Ørentes commandes permettent de construire et d’analyser des syst?mes linØaires de structure complexe, formØs de multiples blocs connectØs tant t en sØrie, parall?le ou Øtant contre-rØactionnØs (series, cloop, feedback, parallel, append, connect, blkbuild).
e suis Pour le traitement aisØ de syst?mes non-linØaires, de mŒme que pour
Incontestablement, MATLAB est un formidable outil pour l’ingØnieur, y compris pour celui traitant des probl?mes pratiques. Avec sa bo te outils Simulink, il est une rØfØrence au niveau mondial, non seulement dans les universitØs et instituts de recherche, mais aussi dans le milieu industriel.
2.1.1 Editeur intØgrØ MATLAB
Dans un premier temps, on peut se contenter d’introduire ses commandes une une au niveau de l’espace de travail oø elles sont interprØtØes directement. Cependant, par la suite, il est beaucoup plus pratique d’Øcrire sa sØquence de commandes compl?te au moyen d’un Øditeur, puis de sauver le tout dans un chier avec l’extension .M. Cette sØquence pourra alors Œtre exØcutØe dans MATLAB par simple introduction du nom du chier. MATLAB poss?de un Øditeur intØgrØ que l’on appelle sØlectionnant File-New-M- le.
De cette fa on, l’utilisateur peut rajouter ses propres fonctions et se crØer rapidement et facilement toute une panoplie d’outils (par exemple, "synth?se automatique d’un rØgulateur PID par la mØthode de Bode"). Les sources de MATLAB Øtant disponibles pour la plupart, ce n’est pas un probl?me que de modi er sa guise l’une ou l’autre des routines, par exemple dans de but d’obtenir un tracØ particulier du lieu de Bode.
En plus de l’aide de Windows, une aide en ligne est disponible pour chaque commande de MATLAB. Il su t d’introduire :
help nom_de_commande
2.3 CrØation de chiers de commandes et de fonctions uti-
2.3.1 Fichiers de commande ("script les")
2.3.2 Fonctions
De nouvelles fonctions peuvent Œtre ajoutØes MATLAB par l’utilisateur. Il su t de crØer un chier de nom
nom_de_fonction.M
contenant les commandes exØcuter et dont l’entŒte a le format :
function [liste des arguments de sortie] = nom_de_fonction(liste des arguments d’entrØe)
Exemple La fonction suivante convertit la grandeur d’entrØe x en dØbibels et la retourne dans y.
function [ y ] = lin2db (x) y = 20?log10 (x ) ;
Le chier correspondant est sauvegardØ sous le nom lin2db.m, dans un rØpertoire gurant dans le chemin de recherche de MATLAB.
Contrairement aux chiers de commande, les variables intervenant dans les fonctions sont locales.
Les commentaires documentant les fonctions peuvent Œtre insØrØs en les faisant prØcØder du symbole %.
DØtail pratique intØressant, les premi?res lignes d’un chier
nom_de_ chier.m
prØcØdØes du symbole % sont a chØes lorsque l’on tape :
help nom_de_ chier
Ceci permet de fournir une aide en ligne pour chaque fonction utilisateur nouvellement crØØe. Pour la fonction lin2db, on documentera par exemple comme suit :
function [ y ] = lin2db (x)
%function [ y ] = lin2db ( x ) %conversion en dB y = 20?log10 (x ) ;
En tapant help lin2db, on obtiendra alors :
Les variables dØ nies dans l’espace de travail MATLAB peuvent Œtre sauvegardØes dans des chiers ASCII par la commande :
save chemin\nom_de_fichier . dat nom_de_variable ?a s c i i
save chemin\nom_de_fichier nom_de_variable
La fenŒtre graphique peut Œtre soit imprimØe directement, soit sauvØe dans un chier, lequel peut Œtre intØgrØ dans un document (menu importation d’image) ou imprimØ ultØrieurement. Signalons, parmi les di Ørents formats de chiers disponibles, le format PostScript qui fournit une qualitØ irrØprochable. Par exemple, le sauvetage de la fenŒtre graphique courante s’e ectue par :
print chemin\nom_de_fichier . eps ?deps
pour le format PostScript et par
print chemin\nom_de_fichier .wmf ?dmeta
pour le format Windows Meta File. Auparavant, il faut prendre garde ce que la fenŒtre graphique courante soit bien celle que l’on souhaite imprimer en tapant
figure ( numero_de_la_fenetre_a_imprimer )
Attention : la commande print est tr?s rudimentaire et ne donne aucun message en cas d’Øchec ou si le chier existe dØj !
La copie de la fenŒtre graphique est Øgalement possible par l’intermØdiaire du clipboard, ce qui permet par exemple de sauver la fenŒtre dans Word ou PowerPoint (choisir le format EMF plut t que le bitmap).
3.1.1 Vecteurs
Un vecteur-ligne est introduit de la fa on suivante :
v =[5 ,2 ,13 ,4] | |
Le vecteur v s’a che alors | l’Øcran : |
v=5 2 13 4 |
Si l’introduction est terminØe par un point-virgule, on Øvite l’a chage du vecteur v. Un vecteur-colonne peut Œtre introduit en rempla ant les virgules par des points-virgules ou des retours de chariot. L’acc?s aux composantes d’un vecteur s’e ectue directement par des commandes du genre :
v (3) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ce qui donne | l’Øcran : | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ans = 13 Remarque Dans MATLAB, les indices des vecteurs et matrices doivent Œtre des entiers positifs. L’indice zØro n’est donc pas plus admis que les indices nØgatifs. 3.1.2 Matrices Une matrice peut Œtre construite de di Ørentes mani?res : m=[5 ,2 ,13 ,4;6 ,8 ,3 ,10;0 ,1 ,20 ,9] et l’a chage devient : m = 5 2 13 4 6 8 3 10 0 1 20 9 ou encore, ayant dØ ni prØalablement les vecteurs-ligne v1, v2 et v3 : v1 =[5 ,2 ,13 ,4]; v2 =[6 ,8 ,3 ,10]; v3 =[0 ,1 ,20 ,9]; m=[v1 ; v2 ; v3 ] L’acc?s un ØlØment de la matrice s’e ectue par : m(2 ,4) et l’on obtient : ans = 10 Le remplacement de 2 par : (deux points) permet d’obtenir toute la colonne 4 : m( : , 4 ) et l’Øcran a che le vecteur-colonne : ans = 4 10 9 De mŒme, l’a chage d’une sous-matrice s’obtient par : m(2:3 ,2:4) et l’Øcran a che : ans = 8 3 10 1 20 9 L’acc?s aux colonnes 2 et 4 de la matrice m se rØalise comme suit : m( : , [ 2 , 4 ] ) ce qui produit : ans = 2 4 8 10 1 9 Parmi les opØrations matricielles qui ont une certaine importance pratique, signalons l’opØrateur de transposition m’ donnant dans le cas de l’exemple ans = 5 6 0 2 8 1 13 3 20 4 10 9 et la fonction eig qui calcule les valeurs propres d’une matrice. Soit la matrice carrØe 4×4 formØe de composantes alØatoires (ici utilisation de la fonction rand)
Les valeurs propres (eigenvalues) sont : eig (A) ans = 1.4095 ?0.0763 3.1.3 Construction de matrices, vecteurs et tableaux particuli?rs Les routines ones et zeros permettent de construire des matrices dont tous les ØlØments sont Øgaux 1 respectivement 0. Voir Øgalement eye (matrice identitØ), diag (matrice diagonale), linspace (vecteur dont les composantes sont espacØes linØairement entre deux limites) et logspace (vecteur dont les composantes sont espacØes logarithmiquement entre deux limites). Exemple GØnØration d’un vecteur de pulsations de 100 composantes rØparties logarithmiquement entre 0.01 = 10?2 et : omega = logspace ( ?2 ,1 ,100); R i ( t ) 3.1.4 Nombres complexes Les vecteurs et matrices peuvent avoir des composantes complexes. Les nombres complexes sont introduits comme suit : x = a + j ?b ; ou x = a + i ?b ; L’unitØ de l’axe imaginaire est donc indi Øremment i ou j. Des fonctions sont prØvues pour le calcul de la partie rØelle (real(x)), de la partie imaginaire (imag(x)), du module (abs(x)), de l’argument (angle(x)) et du conjuguØ complexe (conj(x)). Exemple Soit calculer la rØponse frØquentielle d’un ltre passe-bas d’ordre 1 pour ? variant entre . Le code suivant e ectue le calcul de G(j · ?) ainsi que de ses module AG et phase AG %vecteur de pulsations comprises entre 10^?2 et 10 rad/s omega = logspace ( ?2 ,1 ,100); R = 100e3 ; %resistance C = 10e?6; %capacite AG = abs(G) ; %Gain de G en fonction de la pulsation phiG = angle (G)?180/ pi ;%phase de G en fonction de la pulsation 3.2 OpØrations sur les tableauxOn rappelle le slogan publicitaire de MATLAB, "live is to short to spend time with for loops", pour mentionner qu’e ectivement, la majeure partie des opØrations peuvent s’e ectuer sans boucles de type for. Par exemple, le calcul du sinus cardinal de l’angle ? pour les valeurs de suivantes theta = linspace(?4?pi ,4? pi , 10 0) ; soit 100 valeurs espacØes linØairement entre ?4·? et +4·?, se fait avantageusement dans MATLAB par sinc = sin ( theta )./ theta ; oø le point prØcØdant l’opØrateur de division indique qu’il ne s’agit pas d’une opØration matricielle, mais d’une opØration ØlØment par ØlØment sur deux tableaux. Il faut donc bien faire la distinction entre par exemple le produit matriciel A?B et le produit, ØlØment par ØlØment de deux tableaux : A.?B Remarque Ici, la fonction linspace a ØtØ utilisØe, une variante Øtant d’Øcrire theta = ?4?pi :8? pi /(100 ?1): 4?pi ; 3.3 ReprØsentation graphique 2DPlusieurs types de reprØsentations graphiques 2D sont disponibles :
Il est de plus recommandØ de consulter la documentation MATLAB (ou l’aide en ligne) pour les commandes axis, hold, et subplot, title, xlabel, ylabel, grid, gtext ainsi que gure. Cette derni?re instruction permet de spØci er le numØro de la fenŒtre graphique dans laquelle le tracØ doit Œtre e ectuØ. L’exØcuter juste avant l’une des instructions de tra age active directement la fenŒtre graphique qui appara t alors l’Øcran. Exemple La suite des instructions ci-dessous calcule et trace le sinus, le sinus carrØ ainsi que le sinus cardinal de l’angle ? dØ ni l’aide de l’instruction linspace : theta=linspace(?4?pi,4?pi,100); sinc = sin(theta)./theta; sinus_2 = sin(theta).^2; figure(1),plot(theta ,sin(theta),theta ,sinus_2, ’?.’,theta ,sinc , ’x’) m = [sin(theta)’,sinus_2’,sinc ’]; figure(2),plot(theta ,m) Le rØsultat est le suivant : ( 3.1.4 page 14) peut Œtre fait, outre par la fonction bode, par la suite d’instructions : figure subplot(211) semilogx(omega,20?log10(AG)) grid xlabel(’\omega [rad/s] ’) ylabel(’A(\omega)’) subplot(212) semilogx(omega,phiG) grid xlabel(’\omega [rad/s] ’) ylabel(’\phi(\omega)’) Le rØsultat est le suivant : 4 Analyse de syst?mes dynamiques linØaires l’aide de la bo te outils control systems4.1 Introduction de fonctions de transfert4.1.1 Introduction sous forme polyn miale L’introduction de fonctions de transfert s’e ectue en deux temps, les numØrateur et dØnominateur devant Œtre donnØs sØparØment. Le principe est simple : les numØrateur et dØnominateur apparaissent sous forme de vecteurs-ligne, les composantes desquels Øtant les coe cients des puissances dØcroissantes de s (syst?mes analogiques) ou de z (syst?mes numØriques). Soit par exemple la fonction de transfert Son introduction dans MATLAB se fait par les commandes : numG=36?[10 ,1]; denG =[0.1 ,2 ,1]; Le coe cient de s0 (ou z0 pour les syst?mes numØriques), qu’il soit nul ou non, doit toujours Œtre donnØ. Ainsi, la fonction de transfert de l’intØgrateur est introduite sous la forme : numG=2.71828?[1]; denG=[1 ,0]; Les noms donnØs aux numØrateurs et dØnominateurs sont libres. On aura toutefois intØrŒt Œtre organisØ et rigoureux dans les notations employØes ; par exemple, en se rØfØrant au schØma fonctionnel universel, en rØgulation de correspondance (v(t) = 0), + - on ne saura que trop recommander l’emploi d’une notation semblable la suivante, numGc=2?[1 ,20]; denGc =[1 ,0]; numGa1=1e ?3?[1 ,10]; denGa1 =[1 ,2 ,0.11]; numGa2=36?[1 ,0.1]; denGa2 =[1 ,20 ,10]; pour les fonctions de transfert Notons qu’ partir de la version 5.0 de MATLAB, il existe des objets fonction de transfert, que l’on peut introduire comme suit (cas de l’exemple ci-dessus) : denGc =[1 ,0]; Gc=t f (numGc, denGc) numGa1=1e ?2?[1 ,10]; denGa1 =[1 ,2 ,0.11]; Ga1=t f (numGa1, denGa1) numGa2=36?[1 ,0.1]; denGa2 =[1 ,20 ,10]; Ga2=t f (numGa2, denGa2) On peut alors calculer sans autre : Go=Gc?Ga1?Ga2; Gw=Go/(1+Go) ; Gv=Ga2/(1+Gc?Ga1?Ga2 ) ; 4.1.2 Introduction sous forme de zØros, p les et gain ("forme d’Evans") Il est Øgalement possible d’introduire une fonction de transfert par le biais de ses zØros, p les et de son facteur d’Evans k. Les zØros et p les doivent appara tre sous forme de vecteurs-colonne. Soit par exemple la fonction de transfert : La suite de commandes nØcessaires est simplement : zG=[?3+j ?7,?3? j ? 7 ] ’ ; sG=[0,?10,?5+ j ?3,?5? j ? 3 ] ’ ; kG=5.32; G = zpk (zG, sG ,kG) ; Il va sans dire que l’on privilØgiera cette forme lorsque les numØrateur et dØnominateur de la fonction de transfert du syst?me G(s) ou G(z) ne sont pas directement disponibles sous forme de polyn mes. 4.2 Introduction de mod?les d’ØtatSi un syst?me est connu sous la forme de ses Øquations d’Øtat (linØaires), il su t d’indiquer MATLAB les quatre matrices A, B, C, et D, par exemple :
MATLAB place alors les zØros et les p les dans les vecteurs-colonne zG et sG, respectivement, et le facteur d’Evans dans la variable kG. Les noms zG, sG et kG sont arbitraires. On acc?de ces valeurs par exemple en tapant leur nom : sG MATLAB a che : sG= ?19.4868 ?0.5132 Toute une catØgorie de routines permettent de passer d’un mod?le l’autre :
4.4 Construction de schØmas fonctionnels4.4.1 Fonctions series, cloop Prenons pour exemple le schØma fonctionnel universel, dont on souhaite obtenir les fonctions de transfert en boucle ouverte Go(s) et en boucle fermØe Gw(s). Pour ce faire, faut procØder par Øtapes, comme l’indique la gure ci-apr?s : + - 1. Calcul de Ga(s) par la mise en sØrie de Ga1et Ga2. On fait usage de la fonction series : [numGa, denGa]= s e r i e s (numGa1, denGa1 ,numGa2, denGa2 ) ; 2. Calcul de Go(s) par la mise en sØrie de Gc et Ga. On proc?de de mŒme : [numGo, denGo]= s e r i e s (numGc, denGc ,numGa, denGa ) ; 3. Calcul de Gw(s) par fermeture de la boucle (retour unitaire). On fait usage de la fonction cloop comme suit : [numGw,denGw]= cloop (numGo, denGo ) ; 4. La rØponse indicielle en boucle fermØe peut alors Œtre calculØe et tracØe par : step (numGw,denGw) Step Response On peut au passage calculer le gain statique (gain DC) de Gw(s). dcgain (numGw,denGw) bode (numGo, denGo) Bode Diagrams 6. Finalement, on peut a cher la con guration p le-zØro de Gw(s) : pzmap(numGw,denGw) 4.4.2 Fonction feedback La fonction feedback est utile pour calculer la fonction de transfert Øquivalente de syst?mes ayant pour schØma fonctionnel la gure ci-dessous, soit : [numGv, denGv]=feedback (numGa, denGa ,numGc, denGc , signe ) ; - G 1 Si le param?tre signe n’est pas spØci Ø ou vaut ?1, la fonction de transfert Gc(s) est en contre-rØaction, alors qu’elle est rØactionnØe pour une valeur de signe Øgale 1. L’exemple ci-dessous calcule le fonction de transfert en rØgulation de maintien du syst?me asservi prØcØdemment traitØ. [numG1, denG1 ] = s e r i e s (numGc, denGc ,numGa1, denGa1 ) ; [numGv, denGv ] = feedback (numGa2, denGa2 ,numG1, denG1 ) ; Step Response 4.5 Calcul et tracØ de rØponses de syst?mes dynamiques linØaires4.5.1 RØponse temporelle Lorsque qu’aucun argument de sortie n’est spØci Ø (lhs, left handside argument), le calcul et le tracØ des rØponses sont simultanØs. Les fonctions impulse, step, lsim, et pour les syst?mes numØriques, dimpulse, dstep, dlsim sont disponibles. Leur signi cation sont donnØes sur les tables 4.5.1 page suivante et 4.5.1 page 28. Le tracØ correspondant est directement obtenu en tapant les commandes telles que donnØes dans les tableaux ci-dessus. Les param?tres t, n, et w sont des optionnels et MATLAB les dØtermine luimŒme par dØfaut. Si l’on souhaite les xer, on peut par exemple le faire selon les indications du tableau 4.5.1 page 28. Lors du calcul de la rØponse harmonique de syst?mes numØriques, il convient de spØci er la pØriode d’Øchantillonnage h. Syst?mes analogiques Syst?mes discrets
y est un vecteur-colonne contenant la rØponse cherchØe et t un vecteur-ligne contenant les instants auxquels elle a ØtØ calculØe. x est une matrice contenant l’Øvolution du vecteur d’Øtat syst?me dynamique. La gure suivante montre le calcul prØalable des rØponses impulsionnelle et indicielle avant leur tracØ l’aide de la fonction plot. [ys,x,t] = step(numGw,denGw); [yi] = impulse(numGw,denGw,t); figure plot(t ,[yi ,ys]) title(’RØponses impulsionnelle et indicielle en boucle fermØe’) xlabel(’t [s] ’) Syst?mes analogiques RØponse Exemple
Tab. 1
Tab. 2
Tab. 3 De mŒme, l’exemple suivant montre le tracØ de la rØponse d’un syst?me asservi une rampe de consigne, en faisant notamment usage de la fonction lsim. wr = t ’; yr = lsim(numGw,denGw,wr,t); figure subplot(211),plot(t,yr) title(’Consigne et grandeur rØglØe ’) subplot(212),plot(t,wr?yr) title(’Erreur’) xlabel(’t [s] ’) subplot(111) 4.5.2 RØponse frØquentielle Les fonctions bode, nyquist, nychols, et pour les syst?mes numØriques, dbode, dnyquist, dnychols sont disponibles. Leur signi cation est la suivante : Syst?mes analogiques Syst?mes discrets bode(numG,denG,w) dbode(numH,denH,h,w) Si les rØsultats des calculs doivent Œtre sauvegardØs en vue d’un traitement ultØrieur, on indique Øgalement des arguments de sortie : Syst?mes analogiques Syst?mes discrets [A,phi,w]=bode(numG,denG,w) [A,phi,w]=dbode(numH,denH,h,w) A et phi sont des vecteurs-colonne contenant respectivement le gain et la phase et w un vecteur-ligne contenant les pulsations correspondantes. | Gain statique d’un syst?me analogique. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ddcgain(num,den) | Gain statique d’un syst?me numØrique. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
damp(den) | Taux d’amortissement ?, pulsation propre non-amortie ?n et p les d’un syst?me analogique ayant den pour dØnominateur | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ddamp(den) | Taux d’amortissement ?, pulsation propre non-amortie ?net p les d’un syst?me discret ayant den pour dØnominateur. |
[Am,phi_m]=margin(numGo,denGo)Marges de phase et de gain d’un syst?me analogique.
Si les arguments de sortie ne sont pas spØci Øs, trace le lieu de Bode et montre graphiquement la valeur des marges
rlocus(num,den,k) | Trace le lieu des p les de la fonction de transfert. | k est une option ; c’est un vecteur-ligne contenant les di Ørentes valeurs du facteur d’Evans pour lesquelles le lieu doit Œtre tracØ. |
sgrid zgrid | A che les courbes Øquiamortissement des plan de s et de z respectivement. | A exØcuter immØdiatement apr?s rlocus |
pzmap(num,den) | Graphe la con guration p les-zØros de la fonction de transfert. | |
[k,p]=rloc nd(num,den) | TracØ interactif du lieu des p les. | A exØcuter directement apr?s rlocus et sgrid ; une croix est alors a chØe, que l’on peut dØplacer avec la souris sur un point particulier du lieu. En cliquant , on obtient alors dans k le facteur d’Evans correspondant et dans p l’expression du p le. |
minreal(num,den) | Force la compensation p le-zØro. | |
printsys(num,den,’s’) printsys(num,den,’z’) | A che les fonctions de transfert comme fractions ratrionnelles en s ou en z |
Les structures de contr le usuelles sont disponibles :
for variable=expression statements end %le pas vaut par defaut 1 y(i)=sin(2*pi*10*(i-1)*delta_t) ; end plot(y) | |
while expression statements end | delta_t=0.01 ; i=0 ; while i<21 i=i+1 ; y(i)=sin(2*pi*10*(i-1)*delta_t) ; end |
if expression statements elseif expression statements else statements end | delta_t=0.01 ; i=0 ; if i<21, i=i+1 ; y(i)=sin(2*pi*10*(i-1)*delta_t) ; end |
La bo te outils Simulink est un complØment extrŒmement puissant MATLAB. Les contributions de Simulink sont principalement :
1. La construction conviviale de schØmas fonctionnels, faite la souris ;
2. La simulation de syst?mes linØaires et surtout non-linØaires, ainsi que de syst?mes non-stationnaires ;
3. La simulation de syst?mes mixtes analogiques et numØriques.
Fig. 2 Librairie standard de Simulink.
Pour la construction de schØmas, le gain de temps se situe au-del de 10 100, car il Øvite l’utilisation extrŒmement fastidieuse des fonctions MATLAB blkbuild et connect.
Si certains reprochent MATLAB un certain caract?re rØbarbatif, Simulink, en plus d’o rir de nouveaux outils tr?s puissants, y remØdie compl?tement en o rant une interface utilisateur extrŒmement conviviale. Les deux logiciels restent toutefois compl?tement liØs l’un l’autre, Simulink n’Øtant du point de vue hiØrarchique qu’une bo te outils de MATLAB.
L’interface utilisateur de Simulink est l’outil permettant d’introduire directement les schØmas fonctionnels de syst?mes dynamiques. Bien que thØoriquement son usage ne soit pas indispensable, on peut dire qu’il est utilisØ dans 90% des cas de probl?mes rØsoudre. On y acc?de partir l’espace de travail MATLAB par la commande :
>>simulink
Une nouvelle fenŒtre, appelØe simulink appara t. Elle n’est en fait qu’une biblioth?que de blocs fonctionnels standards, rØunis ici en sept groupes, fournis avec le logiciel. La gure 2 page prØcØdente montre ces groupes.
On remarque notamment les biblioth?ques Linear et Nonlinear contenant chacune une collection de blocs linØaires et non-linØaires respectivement.
Fid?le la philosophie de MATLAB, Simulink est ouvert et l’utilisateur peut rajouter ses propres blocs, qu’il peut organiser en une ou plusieurs biblioth?ques ([2, et p.4.11 et p.3-19 et ss). Dans ce sens, les possibilitØs sont quasi illimitØes.
Bien que cela ne paraisse pas impØratif au premier abord, il se rØv?le assez t t indispensable de bien conna tre MATLAB pour utiliser Simulink de mani?re cohØrente et organisØe, i.e. professionnellement. Dans tous les cas, on a intØrŒt utiliser Simulink en forte connection avec MATLAB ; il faut savoir que tous les blocs Simulink peuvent Œtre paramØtrØs de mani?re symbolique. Ceci permet de dØ nir les param?tres dans l’espace de travail MATLAB, soit manuellement, soit en exØcutant un chier de type script. Dans ce cas, plusieurs chiers de paramØtrisation peuvent Œtre crØØs et lancØs dans MATLAB avant le dØbut de la simulation. La documentation desdits chiers permet de rationaliser et d’organiser le grand nombre de simulations que l’on peut faire. C’est dans ce genre de situation que les compØtences en programmation (organisation, dØcomposition et analyse du probl?me, structuration) de l’utilisateur peuvent s’avØrer dØterminantes.
La combinaison de Simulink et d’un syst?me d’acquisition en temps rØel est possible mais tr?s dØlicate et limitØe en rapiditØ, notamment cause de la lenteur et de la complexitØ de Windows. Un travail allant dans cette direction a ØtØ e ectuØ dans le cadre de l’institut d’Automatisation industrielle de la
La programmation graphique, i.e. l’introduction directe de schØmas fonctionnels, est un outil fantastique o ert par Simulink. Cependant, les limites de ce genre de programmation sont rapidement atteintes lorsque le syst?me est relativement complexe, auquel cas il sera plus facile de programmer Simulink "en texte" de mani?re classique, i.e. en crØant des fonctions S (S-function), plut t que d’interconnecter les blocs par de nombreuses lignes crØØes la souris. Les fonctions S ont un format un peu particulier, propre Simulink, mais s’Øcrivent presque aussi simplement que les fonctions MATLAB ; elles consistent programmer les Øquations di Ørentielles du syst?me simuler.
On se propose d’illustrer l’utilisation de Simulink par l’exemple classique d’un moteur courant continu excitation sØparØe constante exploitØ en boucle ouverte ( gure 3 page suivante).
On admettra que le syst?me est parfaitement linØaire, en faisant les hypoth?ses simpli catrices suivantes, ceci pour simpli er l’exemple et se concentrer sur l’essentiel de cette Øtude, i.e. le logiciel MATLAB/Simulink : on ne prend pas en compte l’e et des perturbations ; le frottement sur l’arbre moteur est purement visqueux ; le moteur courant continu Øtant compensØ, l’e et de rØaction d’induit est nØgligeable.
Plusieurs dØmarches sont possibles pour la construction et l’organisation du schØma, de mŒme que pour la simulation. On propose ici une fa on de faire relativement laborieuse par rapport la simplicitØ de l’exemple, calquØe sur des
i a ( t ) T e m ( t )
1 1
1
R a
K
Fig. 4 SchØma fonctionnel correspondant au schØma technologique de la gure 3.
probl?mes concrets d’une certaine envergure, pour lesquels la mØthodologie employØe est dØterminante. Comme on le verra, le lien avec MATLAB est sous-jacent.
6.2.1 ModØlisation
Les mod?les en t et en s du syst?me sont (les conditions initiales Øtant supposØes identiquement nulles) :
Apr?s mise en Øquations, le schØma fonctionnel dØtaillØ est celui de la gure 4.
Fig. 5 Biblioth?que d’ØlØments dynamiques linØaires.
6.2.2 Construction du schØma
Pour introduire le schØma fonctionnel de la gure 4 page prØcØdente dans Simulink, il faut commencer par appeler Simulink partir l’espace de travail de MATLAB, comme dØj fait prØcØdemment.
SØlectionnant le premier de ces blocs l’aide de la souris dont le bouton gauche est maintenu pressØ, on am?ne le bloc dans la fenŒtre de travail en dØpla ant la souris. Comme le gain et la fonction de transfert apparaissent chacun deux fois dans le schØma fonctionnel, l’opØration est rØpØtØe en consØquence. La fenŒtre de travail Untitled a maintenant l’allure de la gure 6 page suivante.
Pour faciliter la schØmatique, le bloc Gain 1 peut Œtre changØ de sens en le sØlectionnant (le sØlectionner avec la souris) et en choisissant Flip Horizontal dans le menu Options. On peut aussi faire usage des fonctionnalitØs o ertes par le bouton droit de la souris.
Il faut alors rØaliser les interconnections, toujours la souris, en en maintenant le bouton gauche pressØ, la souris pointant sur la ?che symbolisant l’entrØe ou la sortie du bloc connecter (le curseur prend la forme d’une ne croix, alors qu’il a l’allure d’une croix en trait Øpais dans le cas aucune entrØe ou sortie ne sont sØlectionnØes). Le bouton gauche Øtant toujours pressØ, on am?ne la souris sur la ?che du port relier. On obtient alors facilement le schØma de la gure 7.
Les Øquations du moteur courant continu montrent que la FEM est contrerØactionnØe. Double-cliquer alors sur le bloc Sum et changer la liste des signes de ++ en +-. A titre de documentation, il vaut Øgalement la peine de renommer ces blocs, en cliquant sur les textes les accompagnant et les rempla ant par des dØsignations plus parlantes, comme par exemple induit, constante de couple, charge mØcanique et constante de FEM ( gure 8 page 40). Tant qu’ faire, pourquoi ne pas aussi nommer les signaux, en cliquant l’endroit oø le commentaire doit appara tre (ne pas cliquer l’un des blocs ou l’une des connections) et en tapant le texte. L’utilisation d’accents est aux risques et pØrils de l’utilisateur d’un logiciel d’origine amØricaine !
numGa1 = 1/Ra; denGa1 = [ La/Ra, | 1 ] ; |
les valeurs numØriques de Ra et La Øtant supposØes connues dans l’espace de commande MATLAB.
Il reste spØci er le signal d’entrØe (la tension d’induit ua(t)) et les signaux intØressants visualiser ainsi que les moyens pour le faire. On propose pour cet exemple que ua(t) ait la forme d’un saut unitØ, que l’on visualise en plus de la vitesse angulaire ?(t) l’aide d’un oscilloscope.
Pour gØnØrer la tension d’induit ua(t), on ouvre le groupe Sources de la fenŒtre simulink et l’on am?ne le bloc Step Input dans la fenŒtre de travail, en le connectant au comparateur. Pour visualiser les signaux, on ouvre le groupe Sinks de la fenŒtre simulink et l’on am?ne Øgalement le bloc Scope. Comme l’on souhaite a cher deux signaux simultanØment, il faut aller chercher dans le groupe Connections un
(a) (b)
(c)
Fig. 6 Construction du schØma fonctionnel 6(c) du moteur DC de la gure 4 page 36 l’aide des biblioth?ques Continuous (6(a)) et Math operations 6(b).
Fig. 7
Fig. 8
Fig. 9 multiplexeur (bloc Mux).
Il est encore nØcessaire de paramØtrer ces nouveaux blocs. En double cliquant successivement sur chacun d’eux, on peut spØci er que :
le saut-unitØ s’e ectue d?s l’instant zØro, son amplitude Øtant 1 ; l’Øchelle horizontale de l’oscilloscope est 0.08 (selon 6.2.4 page 43 ) ; le multiplexeur a deux entrØes (ua(t) et ?(t)).
Apr?s avoir connectØ ces blocs, on obtient le schØma suivant de la gure 10 page suivante.
6.2.3 Initialisation des param?tres
Pour initialiser les param?tres, on propose de crØer un chier MATLAB de type script , i.e. un chier batch contenant la suite des commandes nØcessaires. Pro tant de la connaissance que l’on a de MATLAB, on obtient rapidement le chier d’initialisation baptisØ ini_01.m ci-dessous :
%/?
% 0 18/03/96 MEE Creation
% 21/05/97 MEE Mise a jour notation KT et KE
% 29/11/01 MEE Mise a jour
% (Modifications)
????????????????????????????????????????????????????????????????????????????
%?/
% Initialisation
% Parametres d’un moteur DC
Ra = 1.84; | %resistance de l’induit | ||||
La = 0.00077; | %inductance de l’induit | ||||
KT = 0.9; | %constante de couple | ||||
KE = KT; | %constante de FEM | ||||
Rf = 0.001; | %coefficient de frottement visqueux (Nms/rad) | ||||
J = 0.0061; | %Moment d’inertie total numGa1 = 1/Ra; denGa1 = [La/Ra,1]; numGa2 = 1/Rf; denGa2 = [J/Rf,1];
On peut vØri er que MATLAB conna t dØsormais toutes les variables (vues par les blocs Simulink comme des param?tres) nØcessaires la simulation en tapant who ( gure 11 page 43). Fig. 10 Fig. 11 Listage par la commande who des variables dØ nies dans l’espace de commande MATLAB. 6.2.4 Simulation On peut maintenant revenir la fenŒtre Simulink ex_01 (si elle n’est plus ouverte, simplement taper son nom dans MATLAB) et entrer dans le menu Simulation, option Parameters, ou plusieurs choix importants doivent Œtre faits ( 12 page suivante). Il s’agit de dØterminer tout d’abord la mØthode d’intØgration numØrique des Øquations di Ørentielles. On choisira par dØfaut Runge-Kutta 45. L’instant de dØpart de la simulation ainsi que celui auquel elle se termine sont xØs notamment en fonction de la durØe de la simulation dØsirØe. Le pas d’intØgration maximum est ajuster avec prØcaution, puisqu’il a une in uence dØterminante sur la prØcision et le temps de calcul. On voit qu’il est nØcessaire, avant de dØmarrer la simulation, de se faire une idØe de la rapiditØ des phØnom?nes. Dans le cas de l’exemple traitØ, la constante de temps mØcanique Tm et Ølectrique Te nous indiquent qu’avec un pas d’intØgration maximum de l’ordre de 0.001[s], la prØcision xØe par le param?tre tolØrance devrait Œtre atteinte facilement. Grosso modo, le pas maximum devrait avoir une valeur de l’ordre de la durØe d’un milli?me de la durØe de simulation. En double-cliquant sur l’oscilloscope, on peut encore ajuster sont ses Øchelles horizontale et verticale, que l’on choisira ici 0. respectivement. Fig. 12 Fig. 13 Fig. 14 Il reste maintenant lancer la simulation, en choisissant l’option Start du menu Simulation. Si l’on bascule (Alt Tab) sur l’oscilloscope, l’a chage est alors normalement conforme la gure 14. Au besoin, on peut appuyer sur le bouton zoom (symbole jumelles). 6.2.5 Sauvegarde des signaux puis traitement dans l’espace de travail MATLAB Il vaut Øgalement la peine de sauvegarder dans une variable MATLAB les signaux intØressants pour e ectuer un traitement ultØrieur dans MATLAB. On choisit ua(t), le couple ØlectromagnØtique Tem(t) et la vitesse angulaire ?(t). En e ectuant cette sauvegarde, il ne faut pas omettre l’information temps t, que l’on peut obtenir en allant chercher le bloc Clock dans le groupe Sources de la biblioth?que. Les trois informations sauver sont de prØfØrence multiplexØes, i.e. rØunies en un signal de type vecteur, l’aide d’un nouveau bloc Mux, du groupe Connections, que l’on paramØtrise trois entrØes. En n, le signal issu de ce multiplexeur est transmis un bloc assurant la liaison avec l’espace de travail MATLAB, le bloc To Workspace, que l’on trouve dans le groupe Sinks. Ce dernier Fig. 15 bloc a pour param?tres ( gure 15) le nom de la variable MATLAB dans laquelle les rØsultats seront sauvØs, ainsi qu’une indication relative au nombre maximum de pas de calcul sauver. Si la durØe du pas et faible et que celle de la simulation est grande, on con oit que le nombre de donnØes sauver soit prohibitif et provoque une saturation de l’espace mØmoire. Pour l’Øviter en partie, on peut en option spØci er au bloc To Workspace de ne sauver qu’ intervalles rØguliers, de durØe plus grande que le pas d’intØgration. Le schØma se prØsente alors comme suit, sauvØ dans le chier ( gure 16 page ci-contre) Le chier MATLAB cal_01.m suivant en extrait les informations et trace les trois courbes ua(t), ?(t) et Tem(t), ainsi que la puissance mØcanique Pmec(t) apr?s avoir calculØ celle-ci ( gure 17 page 48). %/? %???????????????????????????????????????????????????????????????????????????? % CAL_01.M %???????????????????????????????????????????????????????????????????????????? % Fichier script contenant la suite des commandes % necessaires a l’interpretation de la variable % mesures produite par ex_02.m % %???????????????????????????????????????????????????????????????????????????? %???????????????????????????????????????????????????????????????????????????? % Version Date Auteur Motif % 0 18/03/96 MEE Creation % (Modifications) % Extraction du temps t et des 3 signaux ua, omega et Tem t = mesures(: ,1); ua = mesures(: ,2); omega = mesures(: ,3); Tem = mesures(: ,4); % Calcul de la puissance mecanique instantanØe Fig. 16 Fig. 17 Pmec = Tem .? omega; % Affichage sur un ecran form d’un colonne de 4 graphiques figure(gcf) subplot(411), plot(t,ua) xlabel(’t [s] ’) ylabel(’u_a(t)’) title(’MESURES’) subplot(412), plot(t,omega) xlabel(’t [s] ’) ylabel(’\omega(t)’) subplot(413), plot(t,Tem) xlabel(’t [s] ’) ylabel(’T_{em}(t)’) subplot(414), plot(t,Pmec) xlabel(’t [s] ’) ylabel(’P_{mec}(t)’) subplot(111) 6.2.6 Lancement de la simulation partir de MATLAB Les simulations e ectuØes peuvent Œtre lancØes partir de l’espace de travail MATLAB, sans mŒme ouvrir la fenŒtre du schØma de simulation. La ligne de commande est la suivante : [ t , x , y ] = sim ( ’ex_01 ’ , tfinal , options , u ) ; Dans notre cas : ini_01 [ t , x , y ] = sim ( ’exemp_01 ’ , 0 . 0 8 , [ ] ) ; t, x et y seront la n de la simulation des vecteurs-colonne contenant respectivement les instants de simulation, le vecteur d’Øtat correspondant et les sorties ces instants. Ces derni?res doivent Œtre explicitement connectØes des blocs de type Outport, groupe Connections ; t nal est l’instant auquel la simulation prend n ; x0 est optionnel et reprØsente le vecteur d’Øtat (colonne) initial, i.e. les conditions initiales ; Il est important de rØaliser que cette commande peut Œtre intØgrØe sans autre tout chier MATLAB, qu’il soit de type script ou function. Pour des informations plus dØtaillØes, on consultera le 4-104 de [2]. 6.3 La biblioth?que standard6.3.1 Sources Cette biblioth?que ( gure 18 page ci-contre) contient des ØlØments gØnØrateurs de signaux tels que saut unitØ, sinuso de, chiers de points, variable MATLAB, bruit, sØquences, le temps courant de la simulation (horloge), etc, sans oublier le gØnØrateur de signal lui-mŒme. Sans parler du fait que l’on peut soitmŒme crØer son propre gØnØrateur de signal, on note ici qu’il y a vraiment intØrŒt paramØtrer ces blocs dans l’aide de variables dØ nies proprement dans MATLAB. Fig. 18 6.3.2 Sinks Cette biblioth?que ( gure 19 page suivante) contient des ØlØments rØcepteurs de signaux tels que chiers, variable MATLAB ainsi que l’oscilloscope. S’agissant de ce dernier, il est considØrer plut t comme un gadget permettant de vØri er le bon fonctionnement de la simulation. La combinaison de l’oscilloscope avec un multiplexeur analogique (biblioth?que Connections) permet de grouper plusieurs signaux sur une seule ligne de crØer ainsi un oscilloscope multi-traces. La prØsence d’un grand nombre d’oscilloscopes dans un mŒme schØma ralentit considØrablement la simulation, comme d’ailleurs la sauvegarde systØmatique des signaux dans des variables MATLAB. A titre illustratif, si un schØma de simulation fournit les signaux de tension u(t) et de courant i(t), il vaut mieux sauver ces deux signaux dans l’espace de travail MATLAB intervalles rØguliers et calculer la puissance instantanØe p(t) = u(t) · i(t) lorsque la simulation a pris n, plut t que de faire ce calcul dans le schØma de simulation (comme fait au 6.2.5 page 45 ). Dans ce dernier cas, on augmente inutilement la quantitØ de calculs faire en cours de simulation, et de plus on ajoute une non-linØaritØ au schØma. Globalement, la perte de temps peut Œtre considØrable. D’une mani?re plus gØnØrale, il faut rØserver Simulink la simulation de la partie dynamique des syst?mes et lui Øpargner les autres calculs. En langage de reprØsentation des syst?mes dans l’espace d’Øtat, ceci revient limiter le schØma de simulation l’Øquation d’Øtat di Ørentielle,. i.e. , et omettre l’Øquation d’observation ~y = h(~x) + i(~u) Fig. 19 Fig. 20 6.3.3 Discrete Cette biblioth?que ( gure 20) contient des ØlØments discrets linØaires (dicrØtisation du temps exclusivement), tels que gains, syst?mes dynamiques linØaires (transmittance isomorphe, Øquations d’Øtat), ØlØment de maintien, etc. L’intØgrateur limitØ, curieusement prØsent dans cette biblioth?que, est en fait un ØlØment non-linØaire. Fig. 21 6.3.4 Linear Cette biblioth?que ( gure 21) contient des ØlØments analogiques e ectuant tous des opØrations linØaires sur les signaux, tels que gains, sommateurs, syst?mes dynamiques linØaires reprØsentØs par leur fonction de transfert ou leurs Øquations d’Øtat. Fig. 22 6.3.5 Nonlinear un e et de jeu (backlash) ; la quanti cation de l’amplitude apportØe par un convertisseur A/D ou D/A (Quantizer) ; un e et de seuil ou de zone morte (Dead zone) ; un e et de limitation de la variation par rapport au temps (Rate limiter) ; une non-linØaritØ de type valeur absolue (Abs) ; un ØlØment e ectuant le produit de deux signaux (Product) ; des opØrations logiques simples ou complexes (AND, Combinatorial logic) ; un ØlØment crØant un retard pur (Transport delay) ; un ØlØment dont la caractØristique statique est disponible dans une table (look up table) ; etc. L aussi, il est vivement conseillØ de paramØtrer ces blocs au moyen de variables dØ nies dans MATLAB. Cette liste non-exhaustive, bien qu’o rant dØj de nombreuses possibilitØs, ne doit pas faire oublier les possibilitØs fantastiques o ertes par les blocs MATLAB Fcn ; S-Function. Le premier de ces blocs permet d’appeler une fonction MATLAB standard ou dØ nies par l’utilisateur (linØaire ou non). Celle-ci peut Œtre multivariable. Le second o re les mŒmes possibilitØs que le premier, ceci pr?s qu’il s’agit d’une fonction directement exØcutable par le noyau de calcul de Simulink : aucune conversion prØalable n’est nØcessaire, la fonction S fournissant Simulink les informations demandØes, celles-ci Øtant spØci Øes par les param?tres d’appel. Cette fonction S peut donc Œtre un autre schØma Simulink, voire Œtre Øcrite explicitement par l’utilisateur dans un chier respectant les conventions d’appels (simples) de Simulink. Dans ce dernier cas, la fonction peut Œtre programmØe soit en langage MATLAB ou mŒme directement en langage C. Fig. 23 6.3.6 Connections Cette biblioth?que ( gure 23) contient essentiellement des ØlØments permettant de grouper plusieurs signaux sur une mŒme ligne (Mux) et celui faisant l’opØration inverse (Demux). 6.4 Les S-functions de Simulink (version provisoire)La bo te outils Simulink de MATLAB est avant tout un ensemble de routines de rØsolution numØrique des Øquations di Ørentielles (ou aux di Ørences dans le cas discret) rØgissant le comportement de syst?mes dynamiques. Parmi celles-ci, on note par exemple ode45 (Runge-Kutta d’ordre 4 ou 5). Ces routines peuvent traiter des chiers dØcrivant le syst?me simuler condition que celui-ci ait un format dØ ni : il doit appara tre comme Øtant une S-function. Il n’en va pas autrement lorsque l’utilisateur, plut t que de dØcrire son syst?me par son mod?le d’Øtat, pro te de l’Øditeur de schØma de Simulink pour construire directement le schØma fonctionnel du syst?me la souris : en arri?re-plan, l’Øditeur de Simulink transforme en fait le schØma en une S-function compatible avec les routines de rØsolution numØrique. Si l’on conna t le format d’une S-function, il est donc possible de se passer de l’Øditeur de schØma de Simulink et d’Øcrire directement un chier MATLAB satisfaisant le format prØcitØ, i.e d’Øcrire une S-function. Dans certains cas, il est plus rapide d’implanter les Øquations de la dynamique sous forme texte plut t que graphique. Outre le mod?le d’Øtat du syst?me, le chier de la S-function devra implanter le protocole d’Øchange de donnØes entre la routine de rØsolution numØrique et la S-function. Or, ce dernier est relativement simple ; dans les grandes lignes, on dira que la routine de rØsolution interroge la S-function en a ectant des valeurs aux arguments (signaux d’entrØe et Øventuellement param?tres). Par exemple, [ t , x , y ] = sim ( ’S_si_02_02 ’ , tf , options , ut ) ; Les options de simulation prennent la forme d’une structure et se xent l’aide de la fonction simset : options = simset ( ’ Solver ’ , ’ ode45 ’ , ’ I n i t i a l S t a t e ’ , x0 ) ; Dans cet exemple, la mØthode de rØsolution numØrique est ode45 et les conditions initiales de simulation sont condensØes dans le vecteur d’Øtat x0. La S-function peut Œtre Øcrite en langage MATLAB, C, ou Fortran. La forme de la fonction "S" est tr?s gØnØrale et s’adapte aussi bien des syst?mes continus, discrets, voir hybrides. Il en rØsulte que n’importe quel syst?me dynamique peut Œtre dØcrit par une "S-Function". Le bloc "S-Function" est disponible parmi les blocs de la librairie "UserDe ned Functions". (a) SchØma Simulink contenant un (b) ParamØtrisation du bloc Sbloc S-function. function : le chier contenant la S-function est si_02_02.m et a ØtØ programmØ par l’utilisateur. Voir par exemple le listing 1. Fig. 24 SchØma Simulink implantant un bloc appelant une S-function. 6.4.1 Conventions d’appel des S-functions Informations diverses quant la nature du syst?me Si le noyau de calcul appelle la fonction si_02_02 en posant ag=0, il attend en retour sys qui doit alors Œtre un vecteur contenant respectivement le nombre d’Øtats analogiques, d’Øtats discrets, de sorties, d’entrØes, de racines discontinues ainsi qu’une indication si la matrice D est non nulle. De plus, il attend dans x0 le vecteur d’Øtat initial (i.e. conditions initiales). Equation de sortie Si le noyau de calcul appelle la fonction si_02_02 en posant ag=3, il attend en retour sys qui doit alors correspondre la sortie du syst?me. Equation d’Øtat di Ørentielle Si le noyau de calcul appelle la fonction si_02_02 en posant ag=1, il attend en retour sys qui doit alors correspondre la derivØe du vecteur d’Øtat. 6.4.2 Exemple Listing 1 Exemple de code MATLAB d’une S-function function [sys,x0,str ,ts] = si_02_02(t,x,u,flag ,param) switch flag , %%%%%%%%%%%%%%%%%% % Initialization % %%%%%%%%%%%%%%%%%% case 0, [sys,x0,str ,ts]=mdlInitializeSizes(param); %%%%%%%%%%%%%%% % Derivatives % %%%%%%%%%%%%%%% case 1, sys=mdlDerivatives(t,x,u,param); %%%%%%%%%%% % Outputs % %%%%%%%%%%% case 3, sys=mdlOutputs(t,x,u); %%%%%%%%%%%%%%%%%%% % Unhandled flags % %%%%%%%%%%%%%%%%%%% case { 2, 4, 9 }, sys = []; %%%%%%%%%%%%%%%%%%%% % Unexpected flags % %%%%%%%%%%%%%%%%%%%% otherwise error([ ’Unhandled flag = ’,num2str(flag)]); end % end csfunc % %============================================================================= % mdlInitializeSizes % Return the sizes , initial conditions, and sample times for the S?function. %============================================================================= % function [sys,x0,str ,ts]=mdlInitializeSizes(param) sizes = simsizes; sizes.NumContStates = 3; sizes.NumDiscStates = 0; sizes.NumOutputs = 1; sizes.NumInputs = 1; sizes.DirFeedthrough = 0; sizes.NumSampleTimes = 1; sys = simsizes(sizes); x0 = param(8:10)’; str = []; ts = [0 0]; % end mdlInitializeSizes % %============================================================================= % mdlDerivatives % Return the derivatives for the continuous states. %============================================================================= % function sys=mdlDerivatives(t,x,u,param) % Extraction des parametres Jn = param(1); Rf = param(2); La = param(3); Ra = param(4); KT = param(5); Ke = param(6); alpha = param(7); temp = alpha+sin(x(3)); xdot(1) = ?Ra/La?x(1) ? Ke/La?x(2) + 1/La?u; xdot(2) = KT/Jn/temp?x(1) ? Rf/Jn/temp?x(2); xdot(3) = x(2); sys = xdot; % end mdlDerivatives % %============================================================================= % mdlOutputs % Return the block outputs. %============================================================================= % function sys=mdlOutputs(t,x,u) sys = x(2); % end mdlOutputs 6.4.3 Autres fonctionnalitØs de Simulink Signalons que d’autres outils que les mØthodes de rØsolution numØrique sont disponibles avec Simulink. En particulier, la routine linmod(’si_02_02’,x0) permet de d’extraire un mod?le d’Øtat du syst?me linØarisØ autour du point de fonctionnement spØci Ø. |