Change the path name in mixed and pid demos: SCI -> get_absolute_path(name_function)
[scilab.git] / scilab / modules / cacsd / demos / mixed.dem
1 //
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) ????-2008 - INRIA
4 //
5 // This file is distributed under the same license as the Scilab package.
6 //
7
8 function demo_mixed()
9   mode(-1)
10   lines(0);
11   //display the diagram
12   x=[5,10,20,40,50,70,80,90];xmin=-10;xmax=100;
13   y=[22,28,30,32];ymin=12;ymax=40;
14
15   xx=[xmin,xmin,x([1 2 2 7 4 6 3 4 5 6 3 3 5 5]);xmax,xmax,x([3,2,7,7,5,8,3,4,5,6,4,4,6,6])];
16   yy=[ymin,ymax,y([3,1,1,1,3,3,2,2,2,2,2,4,2,4]);ymin,ymax,y([3,3,1,3,3,3,4,4,4,4,2,4,2,4])];
17     
18   scf(100001);clf();show_window();
19   plot2d(xx,yy,ones(1,16),'022');
20   xstring(28,30,'K');xstring(56,30,'Plant');xstring(12,28.80,'-');
21   xtitle('PLANT   and   CONTROLLER')
22   mode(2)
23
24   path=get_absolute_file_path('mixed.dem');
25   messagebox(['Mixed Sensitivity Controller Design';
26            'file: '+path+'mixed.dem'],"modal");
27   mode(1)
28   s=poly(0,'s');
29   str='[(s-1)/((s-1)^2*(s+2))]';
30   rep=x_dialog('Nominal plant?',str)
31   if rep==[] then return,end
32   Plant=evstr(rep);Plant=syslin('c',Plant);
33    //Nominal Plant
34   P22=tf2ss(Plant);    //...in state-space form
35   [ny,nu,nx]=size(P22);
36   [Pms,r]=augment(P22);
37   txt=['W1 (sensitivity function S)';'W2 (K*S)';'W3 (complementary sensitivity T)'];
38   default=['s';'1';'1'];
39   while %t
40     rep=x_mdialog('Set weighting functions',txt,default);
41     if rep==[] then return;end
42     W1=evstr(rep(1));W2=evstr(rep(2));W3=evstr(rep(3));
43     default=rep;
44     Pms=sysdiag(W1,W2,W3,eye(P22))*Pms;
45     gms=['gamma min= ';'gamma max= ';'# iterations'];
46     vals=['0.01';'1000';'50'];
47     reps=x_mdialog('Set interval for gamma and #iterations',gms,vals);
48     if reps==[] then return;end
49     mumin=1/evstr(reps(2))^2;
50     mumax=1/evstr(reps(1))^2;
51     iter=evstr(reps(3));
52     [K,mu]=h_inf(Pms,r,mumin,mumax,iter);
53     if K~=[] then break;end
54   end
55
56   disp(spec(h_cl(Pms,r,K)),'closed loop eigenvalues')    //Check internal stability
57   [Ssens,Rsens,Tsens]=sensi(P22,K);  //Sensitivity functions
58   messagebox('Singular values plot',"modal");
59   fcts=['S function';'R (=K*S) function';'T function'];
60   www=x_mdialog('Select sensitivity function',fcts,['Yes';'No';'Yes']);
61   if www==[] then return,end
62   
63   ww1=part(www(1),1)=='Y';
64   if ww1 then
65     scf(100002);clf();show_window();
66     gainplot(Ssens);
67     xtitle('S = Sensitivity function');
68   end
69
70   ww2=part(www(2),1)=='Y';
71   if ww2 then
72     scf(100003);clf();show_window();
73     gainplot(Rsens);
74     xtitle('R (=G*S) Sensitivity function');
75   end
76
77   ww3=part(www(3),1)=='Y';
78   if ww3 then
79     scf(100004);clf();show_window();
80     gainplot(Tsens);
81     xtitle('T = Complementary Sensitivity function');
82   end
83
84 endfunction
85
86 demo_mixed();
87 clear demo_mixed;