Vous êtes sur la page 1sur 3

Le principe de cette application est de trouver les paramtres optimaux d'un correcteur PID inclus

dans une boucle d'asservissement.


Cette boucle d'asservissement est reprsente sur la figure suivante:
Le bloc PID de xcos est paramtr en utilisant des variables symboliues !P" I et D#. C'est variables
symboliues sont pralablement dfinis dans le contexte de $cos !il faut ue les variables
symboliues utilises dans $cos existent avant toute utilisation dans un bloc#.
Le signal ue l'on va c%erc%er & optimiser est export vers 'cilab au moyen du bloc ( )o
*or+space ,. -n exporte la sortie de la boucle d'asservissement ainsi ue la consigne ue l'on
fournit & la boucle d'asservissement !la sortie du bloc ( 'uare *ave .enerator ,#.
/ous c%erc%erons ensuite & minimiser le carr de la diffrence de ces deux signaux.
0vec les paramtres initiaux fournis & $cos" on obtient le grap%iue suivant:
Le signal vert correspond & la consigne et le signal noire & la sortie de la boucle d'asservissement.
/ous lan1ons ensuite l'optimisation:
exec test2automatic.sce3
Ce script va:
c%arger le diagramme:
import$cosDiagram!'automatic2test.xcos'#3
lancer une premire simulation pour visualiser le comportement initial:
44 -n redfinit le contexte du sc%ma $cos:
5scicos2context 6 783
5scicos2context.9: 6 9:3
5scicos2context.m 6 m3
5scicos2context.;: 6 ;:3
5scicos2context.P 6 Pfact<x:!=#3
5scicos2context.I 6 Ifact<x:!>#3
44 -n lance la simulation en mode batc% en autorisant $cos & affic%er les diagrammes
Info 6 scicos2simulate!scs2m"list!#"5scicos2context#3
-n dfinit la fonction ob?ectif:
function 'y 6 f2pid!x#
5scicos2context.9: 6 9:3
5scicos2context.m 6 m3
5scicos2context.;: 6 ;:3
5scicos2context.P 6 x!=#<Pfact3
5scicos2context.I 6 x!>#<Ifact3
Info 6 scicos2simulate!scs2m"list!#"5scicos2context"flag6'n9'#3
y2error 6 mean!abs!!bloc+2output!'values'#!:"=# @ bloc+2output!'values'#!:">####3
y2diff 6 mean!abs!diff!bloc+2output!'values'#!:">####3
y 6 :.A<y2error B :.A<=<y2diff3
endfunction
Cette fonction ob?ectif correspond & un compromis entre l'erreur entre les deux signaux
!consigne et sortie de la boucle d'asservissement# et la ( drive , de la sortie de la boucle
d'asservissement !y2diff#.
-n dfinit un 9rapper afin de pouvoir utiliser la fonction ob?ectif avec la fonction optim de
'cilab:
function 7f"df"ind8 6 my2optim2pid!x"ind#
f 6 f2pid!x#3
df 6 derivative!f2pid"x"%6%2step"order6C#3
endfunction
Dans ce 9rapper" on calcule la drive de la fonction ob?ectif via des diffrences finies !en
utilisant la fonction 'derivative' de 'cilab#.
-n lance ensuite l'optimisation:
7f2opt" x2opt8 6 optim!my2optim2pid"'b'"Lo9er"Dpper"
x:"algo6'n'"
'ar'"EaxFvalGunc"EaxFvalGunc"=e@H"=e@H"7=e@H3=e@H8#3
Pour finir" on lance une dernire simulation avec les paramtres trouvs par optim:
5scicos2context.9: 6 9:3 ...
5scicos2context.m 6 m3 ...
5scicos2context.;: 6 ;:3 ...
5scicos2context.P 6 x2opt!=#<Pfact3
5scicos2context.I 6 x2opt!>#<Ifact3
Info 6 scicos2simulate!scs2m"Info"5scicos2context#3
La solution trouve est reprsente sur la figure suivante:
Le signal vert correspond & la consigne et le signal noire & la sortie de la boucle d'asservissement.

Vous aimerez peut-être aussi