Code covered by the BSD License  

Highlights from
MIMOtool

image thumbnail

MIMOtool

by

 

12 Nov 2001 (Updated )

Multi Input Multi Output Systems Toolbox

messag.m
function messag(hf,stringa,label,tipo,gruppo)
%MESSAG : creazione delle finestre di messaggio.
%
%         messag(hf,stringa,label,tipo,gruppo)
%
%
% hf      = handle della finestra principale rispetto a cui il
%           messaggio deve essere posizionato.
%
% stringa = (str) identifica il tipo di azione richiesta e,quindi,
%           il testo da visualizzare :
%
%           'nn' : richiesta di una funzionalit non implementata
%
%           'pi' : i parametri inseriti dall'utente sono inconsistenti
%                  o non sono nel range permesso
%
%           'si' : il sistema in memoria  instabile e la funzionalit
%                  richiesta non pu essere disponibile (richiesta
%                  di esecuzione della funzione "sysbal" o "balreal")
%
%           'so' : il sistema in memoria non  osservabile e la funzionalit
%                  richiesta non pu essere disponibile (richiesta
%                  di esecuzione della funzione "balreal")
%
%           'me' : richiesta di visualizzazione di una matrice troppo
%                  grande rispetto alle dimensini della finestra
%                  (dimensione massimavisualizzabile 10x10)
%
%        'noreg' : errore nel caricamento di un controllore non
%                  relativo al modello in esame
%
%        'nsesd' : errore nel salvataggio di una matrice (il
%                  nome della matrice viene identificato dal
%                  terzo parametro di ingresso label)
%                  che dovrebbe risultare SIMMETRICA e SEMIDEFINITA
%                  POSITIVA
%
%         'nsed' : errore nel salvataggio di una matrice (il
%                  nome della matrice viene identificato dal
%                  terzo parametro di ingresso label)
%                  che dovrebbe risultare SIMMETRICA e DEFINITA
%                  POSITIVA
%
%             'n': richiesta di CREAZIONE di un nuovo sistema , quando
%                  quello attuale (se nuovo)  non  stato ancora salvato
%
%             'l': richiesta di CARICAMENTO di un sistema gi presente
%                  nella cartella relativa ai modelli , quando
%                  quello attuale (se nuovo) non  stato ancora salvato
%
%             'e': richiesta di uscita con un nuovo sistema non ancora salvato
%
%             'h': richiesta di ritorno ad home con un nuovo sistema 
%                  non ancora salvato
%
%          'rpl' : richiesta di sostituzione del modello in memoria
%                  con una sua forma bilanciata o ridotta
%
%          'too' : sistema di ordine superiore a 18 nel caso di
%                  richiesta di controllore EIG\ASSIGN
%
%      'no_stde' : sistema n stabilizzabile,n detectabile 
%
%        'no_st' : sistema non stabilizzabile
%
%        'no_de' : sistema non detectabile 
%
%     'no_minph' : sistema non a fase minima 
%
%          'kns' : richiesta di CLOSE o di BACK da una 
%                  finestra di sintesi con un controllore
%                  non ancora salvato
%
%          'kns_m' : richiesta di inizio di nuova sintesi o 
%                  ottimizzazione da un ncomando dei menu 
%                  corrispondenti quando  presente in memoria
%                  un controllore non ancora salvato
%
%          'nnd' : matrice D non nulla 
%
%         'nmra' : matrice A non a rango minimo (non invertibile)
%
%          'anp' : autovalore non permesso (provoca un errore nel
%                  calcolo della pinv usata nella sintesi eig\assign
%                  quando deve essere ricavato l'autovettore relativo
%                  all'autovalore assegnato dall'utente)
%
%          'lqs' : matrice C~=I e/o D~=0 in caso di sintesi LQ-SERVO
%
%          'snp' : simulazione non permessa: la libreria dei blocchi
%                  commands per le simulazioni  dimensionata fino
%                  ad un massimo di 15 uscite del sistema
%
%      'no_norm' : grafico NORM(G(jw)) non disponibile perch il 
%                  sistema  SISO o la sua parte stabile ha norma 0
%
% tipo    = (parametro necessario in caso di stringa='kns_m')
%            stringa indicante il tipo di regolatore
% gruppo  = (parametro necessario in caso di stringa='kns_m')
%            intero che indica il gruppo di comandi da cui proviene
%            la richiesta :
%            richiesta di sintesi output feedback --> gruppo=1
%            richiesta di sintesi state feedback  --> gruppo=2
%            richiesta di ottimizzazione          --> gruppo=3
%            sintesi eig\ssign o lq-servo         --> gruppo=4
%
%
% Massimo Davini 07/05/99 --- revised 18/04/2000

if nargin<5 gruppo=[];end;
if nargin<4 tipo=[];end;
if nargin<3 label='';end;

global stack;

% enlarge text if java machine is running
jsz=stack.general.javasize;

sz(3)=800;
sizetext=jsz/2+.32;
cb_ok=['delete(gcf);'];

pos=get(hf,'position');
posnew=[pos(1)+pos(3)/6,pos(2)+pos(4)/3,2*pos(3)/3,pos(4)/3];

mess(1)=figure('unit','normalized','WindowStyle','modal','visible','off',...
   'position',posnew,'resize','off',...
   'color',[0.6 0.6 0.9],'NumberTitle','off','menubar','none',...
   'CloseRequestFcn',cb_ok); 

mess(2)=uicontrol('style','push','unit','normalized','position',[0.1 0.1 0.2 0.2],...
   'fontunits','normalized','fontsize',0.4+jsz,'fontweight','bold',...
   'Horizontalalignment','center','visible','off');

mess(3)=uicontrol('style','push','unit','normalized','position',[0.7 0.1 0.2 0.2],...
   'fontunits','normalized','fontsize',0.4+jsz,'fontweight','bold',...
   'Horizontalalignment','center','string','NO','visible','off');

mess(4)=uicontrol('style','frame','units','normalized','position',[0.1 0.45 0.8 0.45],...
   'backgroundcolor',[1 1 1],'visible','off');

mess(5)=uicontrol('style','text','ForegroundColor',[1 0 0],'BackgroundColor',[1 1 1],...
   'Horizontalalignment','center','visible','off');

mess(6)=uicontrol('style','push','unit','normalized','position',[0.4 0.1 0.2 0.2],...
   'fontunits','normalized','fontsize',0.4+jsz,'fontweight','bold',...
   'Horizontalalignment','center','string','CANCEL','visible','off',...
   'callback',cb_ok);

set(gcf,'visible','on');

switch stringa
case {'nn','me','too','lqs','snp','no_stde','nmra','no_st',...
         'no_de','no_minph','nnd','no_norm'}
   
   set(mess(1),'Name',' INFORMATION :');   
   
   if strcmp(stringa,'nn')
     str1=sprintf('Functionality NOT yet\nIMPLEMENTED !');
   elseif strcmp(stringa,'me') 
     str1=sprintf('The selected matrix exceeds the\ndimensions of the window !');
   elseif strcmp(stringa,'too') 
     str1=sprintf('The order of the system\nis too large !');
   elseif strcmp(stringa,'lqs') 
     str1=sprintf('The system %s hasn''t\nC=I and/or D=0',stack.general.model);
   elseif strcmp(stringa,'snp') 
     str1=sprintf('The number of the system outputs\nis too large (max 15) !');
   elseif strcmp(stringa,'no_stde')   
     str1=sprintf('The system is not stabilizable\nand not detectable !');
   elseif strcmp(stringa,'nmra')   
     str1=sprintf('The dynamic matrix A has not\nmaximum rank !');
   elseif strcmp(stringa,'no_st')
     str1=sprintf('The system %s\nis not stabilizable !',stack.general.model);
   elseif strcmp(stringa,'no_de')
     str1=sprintf('The system %s\nis not detectable !',stack.general.model);
   elseif strcmp(stringa,'no_minph')
     str1=sprintf('The system %s\nis not minimum phase !',stack.general.model);
   elseif strcmp(stringa,'nnd')
     str1=sprintf('The matrix D of the system\n%s is not null !',stack.general.model);
   elseif strcmp(stringa,'no_norm')
     str1=sprintf('The plot could not be performed because either the system is SISO or its stable part has zero norm !');
   end;
   
   if strcmp(stringa,'lqs')
        pos_frame=[0.1 0.34 0.8 0.62]; pos_str=[0.11 0.64 0.78 0.3];
   elseif strcmp(stringa,'no_norm')
        pos_frame=[0.1 0.38 0.8 0.54]; pos_str=[0.15 0.43 0.7 0.46];
        sizetext=jsz*0.8+.1;
   else pos_frame=[0.1 0.45 0.8 0.45]; pos_str=[0.11 0.47 0.78 0.36];
   end;
      
   set(mess(2),'visible','on','string','OK','fontsize',0.4+jsz,'callback',cb_ok);
   set(mess(4),'units','normalized','position',pos_frame,'visible','on');
   
   set(mess(5),'string',str1,'unit','normalized','position',pos_str,...
      'fontunits','normalized','fontsize',sizetext,'fontweight','bold',...
      'backgroundcolor',[1 1 1]);
   set(mess(5),'visible','on');
   
   if strcmp(stringa,'lqs')
      mess(7)=uicontrol('style','text','ForegroundColor',[0 0 1],...
         'fontunits','normalized','fontsize',sizetext,...
         'BackgroundColor',[1 1 1],'Horizontalalignment','center',...
         'unit','normalized','position',[0.11 0.36 0.78 0.3],...
         'string',sprintf('To set C=I and D=0, you can use the Tools\nmenu in the Modeling section'));
   end;
   
case {'pi','anp','noreg','nsesd','nsed','si','so'}
   
   set(mess(1),'Name',' ERROR :');

   if strcmp(stringa,'pi') 
     str1=sprintf('Parameters INCONSISTENT\nor NOT VALID !');
   elseif strcmp(stringa,'anp') 
     str1=sprintf('Eigenvalue not allowed\n( prevented convergence in "pinv" )');
   elseif strcmp(stringa,'noreg')   
      str1=sprintf('The controller is not relative\nto the model %s !',stack.general.model);
   elseif strcmp(stringa,'nsesd')   
      str1=sprintf('The matrix %s must be symmetrix \nand positive semidefinite !',label);
   elseif strcmp(stringa,'nsed')   
      str1=sprintf('The matrix %s must be symmetrix \nand positive definite !',label);
   elseif strcmp(stringa,'si')   
      str1=sprintf('The system must be\nSTABLE !');
   elseif strcmp(stringa,'so')   
      str1=sprintf('The system must be\nOBSERVABLE !');
   end;
   
   pos_frame=[0.1 0.45 0.8 0.45];
   pos_str=[0.11 0.47 0.78 0.36];
   
   set(mess(2),'visible','on','string','OK','fontsize',0.4+jsz,'callback',cb_ok);
   set(mess(4),'units','normalized','position',pos_frame,'visible','on');
   
   set(mess(5),'string',str1,'unit','normalized','position',pos_str,...
         'fontunits','normalized','fontsize',sizetext,'fontweight','bold');
   set(mess(5),'visible','on');
   
case {'n','l','e','h','rpl','kns','kns_m'}
   
   set(mess(1),'Name',' QUESTION :'); 
   
   if strcmp(stringa,'kns')|strcmp(stringa,'kns_m')
        str=sprintf('Do you want to save the computed \ncontroller for %s ?',stack.general.model);
   else str=sprintf('Do you want to save the NEW\nmodel %s ?',stack.general.model);
   end;
   
   set(mess(5),'string',str,'unit','normalized',...
        'position',[0.11 0.47 0.78 0.36],'fontunits','normalized',...
        'fontsize',sizetext,'fontweight','bold');
   set(mess(2),'string','YES');
   set(mess(2:6),'visible','on');
   
   switch stringa
   case 'n'
     set(mess(2),'callback',[cb_ok,'save_m;if stack.general.M_flag==0 pause(0.2);new0;end;']);
     set(mess(3),'callback',[cb_ok,'stack.general.M_flag=0;new0;']);
   case 'l'
     set(mess(2),'callback',[cb_ok,'save_m;if stack.general.M_flag==0 pause(0.2);load_m;end;']);
     set(mess(3),'callback',[cb_ok,'stack.general.M_flag=0;load_m;']);
   case 'e'
     set(mess(2),'callback',[cb_ok,'save_m;if stack.general.M_flag==0 pause(0.2);esci;end;']);
     set(mess(3),'callback',[cb_ok,'stack.general.M_flag=0;esci;']);
   case 'h'
     set(mess(2),'callback',[cb_ok,'save_m;pause(0.2);if stack.general.M_flag==0 gohome;end;']);
     set(mess(3),'callback',[cb_ok,'stack.general.M_flag=0;gohome;']);
   case 'rpl'
     set(mess(2),'callback',[cb_ok,'save_m;if stack.general.M_flag==0 pause(0.2);replace;end;']);
     set(mess(3),'callback',[cb_ok,'stack.general.M_flag=0;replace;']);
   case 'kns'
     a=findobj('tag','eva','string','CLOSE');
     if isempty(a) a=findobj('tag','BottBC');end;
     if strcmp(label,'close') cc=get(a(1),'userdata');
     else                     cc=get(a(2),'userdata');end;
     set(mess(2),'callback',[cb_ok,sprintf('save_k;if stack.general.K_flag==0 pause(0.2);%s;end;',cc)]);
     set(mess(3),'callback',[cb_ok,sprintf('stack.general.K_flag=0;%s;',cc)]);
  case 'kns_m'
     
     ist0=['delete(findobj(''tag'',''grafico''));delete(findobj(''tag'',''eva''));',...
      'delete(findobj(''tag'',''textgrafico''));',...
      'for i=2:33 set(findobj(''tag'',sprintf(''eval_%u'',i)),''enable'',''off'');end;'];

     if gruppo==1     , funzione=sprintf('o_feed0(''%s'');',tipo);
     elseif gruppo==2 , funzione=sprintf('optim0(''%s'');',tipo);
     elseif gruppo==3 , funzione=sprintf('s_feed0(''%s'');',tipo);
     elseif gruppo==4 ,
        if strcmp(tipo,'eig \ assign'), funzione='ea_0;';
        elseif strcmp(tipo,'lqs'), funzione='lqs_0;';
        end;
     end;
     set(mess(2),'callback',[cb_ok,'save_k;if stack.general.K_flag==0 pause(0.2);',ist0,funzione,'end;']);
     set(mess(3),'callback',[cb_ok,'stack.general.K_flag=0;',ist0,funzione]);  
  end;
   
end;

set(gcf,'color',[0.6 0.6 0.9]);drawnow;  

Contact us