⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sys_design.m

📁 很优良的PID控制器设计仿真程序与模型,经过严格检验
💻 M
📖 第 1 页 / 共 3 页
字号:
         'BackgroundColor',0.8*[1,1,1],'CallBack','sys_design(2,3);');
      ud2(7)=nTask; set(g_state,'UserData',ud2);   
   else, figure(g_state); end
else
   ud2=get(gcf,'UserData'); nTask=ud2(7); 
   switch arg1
   case 1
      extra_funs(4,1,'Value',1,2); set(ud2(3:4),'Visible','off');
   case 2
      extra_funs(4,1,'Value',2,1); set(ud2(3:4),'Visible','on');
   case 3, clab_help(9+nTask)
   case 4, [a,b,c,d]=ssdata(g1); nA=size(a); Q=eval(get(ud2(6),'String'));
      if nTask==2
         nQ=size(Q); if sum(nQ==nA)==2, K_fdbk=lqr2(a,b,Q,1); end
      elseif nTask==3
         if length(Q)==nA(1), K_fdbk=acker(a,b,Q); end
      end
      if get(ud2(1),'Value')==1, L_vec=zeros(size(b));
      else   
         P=eval(get(ud2(4),'String'));
         if nA(1)==length(P), L_vec=acker(a',c',P)'; end
      end
      Gc_Sys=ss(a-b*K_fdbk-L_vec*c-L_vec*d*K_fdbk,b,-K_fdbk,1);
      H_Sys=ss(a-L_vec*c,L_vec,K_fdbk,0); shw_controller(Gc_Sys,H_Sys);
      display_str(0.05,0.28,'State Feedback Vector');
      display_str(0.08,0.13,mat2str(K_fdbk,5));
   end   
end

%------------------------------------------------------------------------
%model_follow function implements the model following compensator design.
%------------------------------------------------------------------------
function model_follow(nTask,arg1)

uu0=get(findobj('Tag','CtrlLABMain'),'UserData'); g1=get(uu0{1}(1),'UserData');
[G_num,G_den,Td]=tfdata(g1{2},'v');
ii=find(abs(G_num)>1e-8); G_num=G_num(ii(1):end);
n_ord=length(G_den)-length(G_num); nn=n_ord;
g4=get(uu0{1}(4),'UserData'); Td=g4{1}; nPade=g4{2};
if nargin==1
   g_model=findobj('Tag','CtrlLABModelFollow');
   if length(g_model)==0 
      g_model=figure('Units','normalized','Position',[0.18625 0.248 0.45 0.333],...
         'NumberTitle','off','Name','Model Following Control Design','Tag','CtrlLABModelFollow',...
         'MenuBar','none','Color',0.8*[1,1,1],'Resize','off');
      extra_funs(1);
      aWMats(1)=uicontrol('Style','PushButton','String','Design',...
         'Units','normalized','Position',[0.80,0.84,0.18,0.12],'CallBack','sys_design(4,4);');
      aWMats(2)=uicontrol('Style','PushButton','String','Cancel',...
         'Units','normalized','Position',[0.80,0.7,0.18,0.12],'CallBack','delete(gcf);');
      aWMats(3)=uicontrol('Style','PushButton','String','Help',...
         'Units','normalized','Position',[0.80,0.54,0.18,0.12],'CallBack','clab_help(25);');
      [xL,cWMats(1)]=display_str(0.1,0.83,'Order of Standard Model:',[0,0,0],'on',9);
      [xL,cWMats(9)]=display_str(0.1,0.70,'Expected Natrual Freq \omega_n',[0,0,0],'on',9);
      cWMats(2)=uicontrol('Style','Edit','String',num2str(nn),...
         'Units','normalized','Position',[0.53,0.78,0.10,0.08],...
         'HorizontalAlignment','left','BackgroundColor',[1,1,1]);
      [v,d]=version; v1=eval(v(1)); v2=eval(v(3)); v3=eval(v(5));
      if v2==2 & v3==0, strRadio='ToggleButton'; else, strRadio='RadioButton'; end 
      cWMats(3)=uicontrol('Style',strRadio,'String','ITAE Type I','Value',1,...
         'Units','normalized','Position',[0.12,0.40,0.30,0.07],...
         'HorizontalAlignment','left','BackgroundColor',0.8*[1,1,1],...
         'CallBack','extra_funs(4,3,''Value'',3,4:5);');
      cWMats(4)=uicontrol('Style',strRadio,'String','ITAE Type II','Value',0,...
         'Units','normalized','Position',[0.12,0.29,0.30,0.07],...
         'HorizontalAlignment','left','BackgroundColor',0.8*[1,1,1],'CallBack','sys_design(4,1);');
      cWMats(5)=uicontrol('Style',strRadio,'String','Butterworth Model','Value',0,...
         'Units','normalized','Position',[0.12,0.18,0.35,0.07],...
         'HorizontalAlignment','left','BackgroundColor',0.8*[1,1,1],...
         'CallBack','extra_funs(4,3,''Value'',5,3:4);');
      cWMats(6)=uicontrol('Style','Edit','String','10',...
         'Units','normalized','Position',[0.49,0.65,0.10,0.08],...
         'HorizontalAlignment','left','BackgroundColor',0.8*[1,1,1]);
      cWMats(7)=extra_funs(10,[0.10,0.13],[0.58,0.55]);
      cWMats(8)=uicontrol('Style','Text','String','Standard Model Selection',...
         'Units','normalized','Position',[0.12,0.52,0.4,0.06],...
         'HorizontalAlignment','left','BackgroundColor',0.8*[1,1,1]);
      cWMats(10)=uicontrol('Style','Text','String','Transfer Function to follow',...
         'Units','normalized','Position',[0.05,0.90,0.50,0.06],...
         'HorizontalAlignment','left','BackgroundColor',0.8*[1,1,1],'Visible','off');
      cWMats(11)=uicontrol('Style','Edit','String',mat2str(1),...
         'Units','normalized','Position',[0.08 0.60 0.5 0.09],...
         'HorizontalAlignment','left','BackgroundColor',0.8*[1,1,1],'Visible','off');
      cWMats(12)=uicontrol('Style','Edit','String',mat2str([1,1]),...
         'Units','normalized','Position',[0.08,0.30,0.5,0.09],...
         'HorizontalAlignment','left','BackgroundColor',0.8*[1,1,1],'Visible','off');
      [xL,cWMats(13)]=display_str(0.05,0.72,'Numerator Array',[0,0,0],'off',9);
      [xL,cWMats(14)]=display_str(0.05,0.42,'Denominator Array',[0,0,0],'off',9);
      bWMats(1)=extra_funs(10,[0.62,0.13],[0.97,0.42]);
      bWMats(2)=uicontrol('Style','Text','String','Reference Model',...
         'Units','normalized','Position',[0.64,0.40,0.25,0.06],...
         'HorizontalAlignment','left','BackgroundColor',0.8*[1,1,1]);
      bWMats(3)=uicontrol('Style',strRadio,'String','Standard','Value',1,...
         'Units','normalized','Position',[0.64,0.30,0.25,0.06],...
         'BackgroundColor',0.8*[1,1,1],'CallBack','sys_design(4,2);');
      bWMats(4)=uicontrol('Style',strRadio,'String','User Specified','Value',0,...
         'Units','normalized','Position',[0.64,0.20,0.31,0.06],...
         'BackgroundColor',0.8*[1,1,1],'CallBack','sys_design(4,3);');
      set(gcf,'UserData',{aWMats,bWMats,cWMats});
   else, figure(g_model); end   
else
   u_c=get(gcf,'UserData');
   switch arg1
   case 1
      extra_funs(4,3,'Value',4,[3,5]); nn=eval(get(u_c{3}(2),'String'));
      if n_ord>nn-1, set(u_c{3}(2),'String',int2str(n_ord+1)); end
   case 2, extra_funs(4,2,'Value',3,4); extra_funs(4,3,'Visible',[1:9],[10:14]);
   case 3, extra_funs(4,2,'Value',4,3); extra_funs(4,3,'Visible',[10:14],[1:9]);
   case 4, 
      [nn,dd]=tfdata(G_Sys,'v');
      if Td>0, [nP,dP]=pade(Td,nPade); nn=conv(nn,nP); dd=conv(dd,dP); end
      if get(u_c{2}(3),'Value')==1
         n=eval(get(u_c{3}(2),'String')); wn=eval(get(u_c{3}(6),'String'));
         bStdModel=extra_funs(5,3,'Value',3:5); [mf_num,mf_den]=std_tf(bStdModel,wn,n); 
      else, Gc=get_tf(1); [mf_num,mf_den]=tfdata(Gc,'v'); end,
      nn=mf_num; dd=mf_den-[zeros(1,length(mf_den)-length(mf_num)),mf_num];
      Gc_Sys=tf(nn,dd)*inv(G_Sys); shw_controller(Gc_Sys);
   end  
end   

%--------------------------------------------------------------------
%lqgltr_design implements the LQG and LQG/LTR controller design tasks
%
%   lqgltr_design(nTask,arg1)
%where nTask=5 for LQG and 6 for LQG/LTR
%--------------------------------------------------------------------
function lqgltr_design(nTask,arg1)
uu0=get(findobj('Tag','CtrlLABMain'),'UserData');
g1=get(uu0{1}(1),'UserData'); G_Sys=tf(g1{2}); 
if nargin==1
   n=length(G_Sys.den{1})-1; g_lqgltr=findobj('Tag','CtrlLABLQGLTR');
   if length(g_lqgltr)==0
      g_lqgltr=figure('Units','normalized','Position',[0.24625 0.267 0.4 0.333],...
         'NumberTitle','off','Name','LQG/LTR Control Design','Tag','CtrlLABLQGLTR',...
         'MenuBar','none','Color',0.8*[1,1,1],'Resize','off');
      extra_funs(1); display_str(0.05,0.75,'Optimal Control Weighting Matrix Q',[0,0,0],'on',9);
      tmpQMat='diag(['; for i=1:n, tmpQMat=[tmpQMat, '1, ']; end
      tmpQMat=[tmpQMat(1:end-2), '])'];  
      aWMats(2)=uicontrol('Style','Edit','String',tmpQMat,...
         'Units','normalized','Position',[0.08 0.58 0.6 0.1],...
         'HorizontalAlignment','left','BackgroundColor',[1,1,1]);
      [xL,aWMats(5)]=display_str(0.05,0.43,'the Value of \Xi',[0,0,0],'on',9);
      aWMats(3)=uicontrol('Style','Edit','String','1e-3',...
         'Units','normalized','Position',[0.3 0.39 0.2 0.1],...
         'HorizontalAlignment','left','BackgroundColor',[1,1,1]);
      [xL,aWMats(6)]=display_str(0.05,0.25,'the Value of \Theta',[0,0,0],'on',9);
      aWMats(7)=uicontrol('Style','Edit','String','1e-6',...
         'Units','normalized','Position',[0.3 0.22 0.2 0.1],...
         'HorizontalAlignment','left','BackgroundColor',[1,1,1]);
      if nTask==6
         tmpqVec='[1,1e5,1e10,1e15]';
         [xL,aWMats(4)]=display_str(0.05,0.95,'Recovery Gain Vector q',[0,0,0],'on',9);
         aWMats(1)=uicontrol('Style','Edit','String',tmpqVec,...
            'Units','normalized','Position',[0.08 0.80 0.6 0.1],...
            'HorizontalAlignment','left','BackgroundColor',[1,1,1]);
      end
      extra_funs(10,[0.56,0.10],[0.98,0.42]);
      uicontrol('Style','Text','String',' Problem Specifications',...
         'Units','normalized','Position',[0.59,0.39,0.35,0.06],'BackgroundColor',0.8*[1,1,1]);
      [v,d]=version; v1=eval(v(1)); v2=eval(v(3)); v3=eval(v(5));
      if v2==2 & v3==0, strRadio='ToggleButton'; else, strRadio='RadioButton'; end 
      aWMats(8)=uicontrol('Style',strRadio,'String','Regulator Problem','Value',1,...
         'Units','normalized','Position',[0.59,0.28,0.32,0.06],...
         'BackgroundColor',0.8*[1,1,1],'CallBack','extra_funs(4,1,''Value'',8,9);');
      aWMats(9)=uicontrol('Style',strRadio,'String','Controllor Problem','Value',0,...
         'Units','normalized','Position',[0.59,0.18,0.31,0.06],...
         'BackgroundColor',0.8*[1,1,1],'CallBack','extra_funs(4,1,''Value'',9,8);');
      uicontrol('Style','PushButton','String','Design',...
         'Units','normalized','Position',[0.80,0.84,0.18,0.12],'CallBack','sys_design(5,1);');
      uicontrol('Style','PushButton','String','Cancel',...
         'Units','normalized','Position',[0.80,0.70,0.18,0.12],'CallBack','delete(gcf);');
      uicontrol('Style','PushButton','String','Help',...
         'Units','normalized','Position',[0.80,0.56,0.18,0.12],'CallBack','sys_design(5,2);');
      aWMats(10)=nTask;
      set(g_lqgltr,'UserData',aWMats);
   else, figure(g_lqgltr); end
else
   aWMats=get(gcf,'UserData');
   switch arg1
   case 1
      robust_design(7,1);
   case 2   
      if aWMats(8)==5, clab_help(16);
      else, clab_help(17); end
   end   
end   

%-------------------------------------------------------------------------
%robust_design function administrates LQG, LQG/LTR and H-norm based robust 
%controller design facilities.
%
%  robust_design(nTask,arg1,arg2)
%where nTask is as described as above.
%-------------------------------------------------------------------------
function robust_design(nTask,arg1,arg2)

uu0=get(findobj('Tag','CtrlLABMain'),'UserData'); g1=get(uu0{1}(1),'UserData');
G_Sys=tf(g1{2}); [G_num,G_den]=tfdata(G_Sys,'v');
n_ord=length(G_den)-length(G_num); nn=n_ord;
g4=get(uu0{1}(4),'UserData'); Td=g4{1}; nPade=g4{2};  
switch nargin
case 1
   g_hinf=findobj('Tag','CtrlLABHinf');
   if length(g_hinf)==0 
      g_hinf=figure('Units','normalized','Position',[0.18625 0.248 0.45 0.417],...
         'NumberTitle','off','Name','Robust Control Design','Tag','CtrlLABHinf',...
         'MenuBar','none','Color',0.8*[1,1,1],'Resize','off');
      extra_funs(1);
      [xL,bWMats(1)]=display_str(0.05,0.94,'Weighting Transfer Function W_1(s)',[0,0,0],'on',9);
      aWMats(1)=uicontrol('Style','Edit','String',mat2str([0.5,0.5]),...
         'Units','normalized','Position',[0.08 0.82 0.4 0.07],...
         'HorizontalAlignment','left','BackgroundColor',[1,1,1]);
      aWMats(2)=uicontrol('Style','Edit','String',mat2str([0.5,1]),...
         'Units','normalized','Position',[0.08,0.74,0.4,0.07],...
         'HorizontalAlignment','left','BackgroundColor',[1,1,1]);
      [xL,bWMats(2)]=display_str(0.05,0.70,'Weighting Transfer Function W_2(s)',[0,0,0],'on',9);
      aWMats(3)=uicontrol('Style','Edit','String',mat2str([0.5,1]),...
         'Units','normalized','Position',[0.08 0.58 0.4 0.07],...
         'HorizontalAlignment','left','BackgroundColor',[1,1,1]);
      aWMats(4)=uicontrol('Style','Edit','String',mat2str([0.5,0.5]),...
         'Units','normalized','Position',[0.08,0.50,0.4,0.07],...
         'HorizontalAlignment','left','BackgroundColor',[1,1,1]);
      [xL,bWMats(3)]=display_str(0.05,0.46,'Weighting Transfer Function W_3(s)',[0,0,0],'on',9);
      aWMats(5)=uicontrol('Style','Edit','String',mat2str([0.5,0.5]),...
         'Units','normalized','Position',[0.08 0.34 0.4 0.07],...
         'HorizontalAlignment','left','BackgroundColor',[1,1,1]);
      aWMats(6)=uicontrol('Style','Edit','String',mat2str([0.5,1]),...

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -