📄 cback.m
字号:
uimenu(DYN_MENU(9),...
'Label',' Upp&er and lower bounds ','Callback',['IMENU=4920;','imcmenu']);
DYN_MENU(10)=uimenu(DYN_MENU(7),...
'Label',' Normallized integrated sensitivity function ');
uimenu(DYN_MENU(10),...
'Label',' &Upper bound ','Callback',['IMENU=4930;','imcmenu']);
uimenu(DYN_MENU(10),...
'Label',' &Lower bound ','Callback',['IMENU=4940;','imcmenu']);
uimenu(DYN_MENU(10),...
'Label',' Upp&er and lower bounds ','Callback',['IMENU=4950;','imcmenu']);
DYN_MENU(11)=uimenu(DYN_MENU(7),...
'Label',' Partial sensitivity function (PSF) ');
uimenu(DYN_MENU(11),...
'Label',' &Upper bound ','Callback',['IMENU=4830;','imcmenu']);
uimenu(DYN_MENU(11),...
'Label',' &Lower bound ','Callback',['IMENU=4840;','imcmenu']);
uimenu(DYN_MENU(11),...
'Label',' Upp&er and lower bounds ','Callback',['IMENU=4850;','imcmenu']);
DYN_MENU(12)=uimenu(MAIN_MENU(4),...
'Label',' &Help ','Callback','sayhelp(4900)');
DYN_MENU(13)=uimenu(MAIN_MENU(8),...
'Label','&IMC controller','Callback',['IMENU=7440;','imcmenu']);
DYN_MENU(14)=uimenu(MAIN_MENU(8),...
'Label','&Realizable PID controller','Callback',['IMENU=7450;','imcmenu']);
DYN_MENU(15)=uimenu(MAIN_MENU(8),...
'Label','&1st order lag PID controller','Callback',['IMENU=7460;','imcmenu']);
DYN_MENU(16)=uimenu(MAIN_MENU(8),...
'Label','&2nd order lag PID controller','Callback',['IMENU=7470;','imcmenu']);
DYN_MENU(17)=uimenu(MAIN_MENU(8),...
'Label','&Floating Integral controller','Callback',['IMENU=7480;','imcmenu']);
DYN_MENU(18)=uimenu(MAIN_MENU(8),...
'Label','PI &lag controller','Callback',['IMENU=7490;','imcmenu']);
DYN_MENU(19)=uimenu(MAIN_MENU(8),...
'Label','&PI &controller','Callback',['IMENU=7500;','imcmenu']);
set(MAIN_MENU(8),'Label',' Outer loop &IMC cascade with inner loop');
MAIN_MENU(10)=uimenu(MAIN_MENU(5),...
'Label',' &Step Responses for Cascade with');
uimenu(MAIN_MENU(10),...
'Label','outer loop IMC controller','Callback',['IMENU=5200;','imcmenu']);
uimenu(MAIN_MENU(10),...
'Label','outer loop PID controller','Callback',['IMENU=5300;','imcmenu']);
MAIN_MENU(12)=uimenu(MAIN_MENU(7),...
'Label',' Outer loop &PID cascade with inner loop');
uimenu(MAIN_MENU(12),...
'Label','&IMC controller','Callback',['IMENU=7440;','imcmenu']);
uimenu(MAIN_MENU(12),...
'Label','&Realizable PID controller','Callback',['IMENU=8450;','imcmenu']);
uimenu(MAIN_MENU(12),...
'Label','&1st order lag PID controller','Callback',['IMENU=8460;','imcmenu']);
uimenu(MAIN_MENU(12),...
'Label','&2nd order lag PID controller','Callback',['IMENU=8470;','imcmenu']);
uimenu(MAIN_MENU(12),...
'Label','&Floating Integral controller','Callback',['IMENU=8480;','imcmenu']);
uimenu(MAIN_MENU(12),...
'Label','PI &lag controller','Callback',['IMENU=8490;','imcmenu']);
uimenu(MAIN_MENU(12),...
'Label','&PI &controller','Callback',['IMENU=8500;','imcmenu']);
end
case 3 % Number of input
if ~isempty(Xpnummt{1,1})
switch questdlg('System contains data, proceed ?');
case {'No','Cancel'}
set(MAIN_MENU(16),'Value',maxcol);
return
end
end
maxcol=get(MAIN_MENU(16),'Value');
if get(MAIN_MENU(17),'Value')
maxrow=maxcol;
set(MAIN_MENU(14),'Value',maxrow);
set(MAIN_MENU(14),'Enable','off');
else
maxrow=get(MAIN_MENU(14),'Value');
set(MAIN_MENU(14),'Value',maxrow);
set(MAIN_MENU(14),'Enable','on');
end
chn_sys_dim; % change system dimension
JMENU=2; cback;
case 4 % Input = Output ?
if get(MAIN_MENU(17),'Value')
maxrow=get(MAIN_MENU(16),'Value');
set(MAIN_MENU(14),'Value',maxrow);
set(MAIN_MENU(14),'Enable','off');
else
maxrow=get(MAIN_MENU(14),'Value');
set(MAIN_MENU(14),'Value',maxrow);
set(MAIN_MENU(14),'Enable','on');
end
chn_sys_dim; % change system dimension
JMENU=2; cback;
case 5 % Number of TF terms
temp=get(MAIN_MENU(18),'Value');
if temp~=n_of_TF
n_of_TF=temp;
if n_of_TF==2;
Xpnums(:,:,2,:)={'Numerator'}; Xpdens(:,:,2,:)={'Denominator'};
Xpdeads(:,:,2,:)={'Deadtime'};Xunidn(:,:,2,:)={[0]};
Xuniddt(:,:,2,:)={[0]};Xpnummt(:,:,2,:)={[]};Xpdenmt(:,:,2,:)={[]};
Xpdeadmt(:,:,2,:)={[]};Xpnum(:,:,2,:)={''};Xpden(:,:,2,:)={''};
Xpdead(:,:,2,:)={''}; Xunidd(:,:,2,:)={[0]};
Xmnums(:,:,2,:)={'Numerator'}; Xmdens(:,:,2,:)={'Denominator'};
Xmdeads(:,:,2,:)={'Deadtime'};Xmnummt(:,:,2,:)={[]};
Xmdeadmt(:,:,2,:)={[]};Xmunidn(:,:,2,:)={[0]};Xmunidd(:,:,2,:)={[0]};
Xmuniddt(:,:,2,:)={[0]};Xmnum(:,:,2,:)={''};Xmden(:,:,2,:)={''};
Xmdead(:,:,2,:)={''}; Xmdenmt(:,:,2,:)={[]};
else
Xpnums(:,:,2,:)=[]; Xpdens(:,:,2,:)=[];
Xpdeads(:,:,2,:)=[];Xunidn(:,:,2,:)=[];
Xuniddt(:,:,2,:)=[];Xpnummt(:,:,2,:)=[];Xpdenmt(:,:,2,:)=[];
Xpdeadmt(:,:,2,:)=[];Xpnum(:,:,2,:)=[];Xpden(:,:,2,:)=[];
Xpdead(:,:,2,:)=[]; Xunidd(:,:,2,:)=[];
Xmnums(:,:,2,:)=[]; Xmdens(:,:,2,:)=[];
Xmdeads(:,:,2,:)=[];Xmnummt(:,:,2,:)=[];
Xmdeadmt(:,:,2,:)=[];Xmunidn(:,:,2,:)=[];Xmunidd(:,:,2,:)=[];
Xmuniddt(:,:,2,:)=[];Xmnum(:,:,2,:)=[];Xmden(:,:,2,:)=[];
Xmdead(:,:,2,:)=[]; Xmdenmt(:,:,2,:)=[];
end
end
case 6
d_through_p=get(MAIN_MENU(19),'Value');
if exist('diag_handle') & all(ishandle(diag_handle))
delete(diag_handle);
end
JMENU=2; cback;
case (5 + 2600) % Saturation Upper bound
temp=get(gcbo,'String');
if any(isletter(temp))
errordlg('Bound must be number');
else
temp1=str2num(temp);
if length(temp1)~=maxcol
errordlg('Bound must match the number of inputs.');
else
satubs=temp;
Satub=temp1;
end
end
case (10 + 2600) % Saturation Lower bound
temp=get(gcbo,'String');
if any(isletter(temp))
errordlg('Bound must be number.');
else
temp1=str2num(temp);
if length(temp1)~=maxcol
errordlg('Bound must match the number of inputs.');
else
satlbs=temp;
Satlb=temp1;
end
end
case (15 + 2600) % OK
if any(Satub<Satlb)
errordlg('Bound(s) is/are not feasible.');
else
close
end
%Single loop 1 degree of freedom tuning
%---------------------------------------
case {4100,4120,4130}
switch JMENU
case 4100
fun='imc1com';
Mp=Mp(1);
qf={'1'};
qd=qf;
temp=p{1,1};
temp1=m{1,1};
if n_of_TF>1
[mq]=mq_gen(Xmnummt,Xmdenmt,Xmdeadmt,qnummt{1},...
qdenmt{1},order{1},y);
else
[mq]=mq_gen(Xmnummt{1,1},Xmdenmt{1,1},Xmdeadmt{1,1},qnummt{1},...
qdenmt{1},order{1},y);
end
case 4120
fun='imc2com';
temp=p{1,1};
temp1=m{1,1};
if n_of_TF>1
[mq]=mq_gen(Xmnummt,Xmdenmt,Xmdeadmt,qfnummt{1},...
qfdenmt{1},F_order{1},y);
else
[mq]=mq_gen(Xmnummt{1,1},Xmdenmt{1,1},Xmdeadmt{1,1},qfnummt{1},...
qfdenmt{1},F_order{1},y);
end
case 4130
fun='Usercas';
temp=strvcat(p{1,1,1},p{1,1,2});
temp1=strvcat(m{1,1,1},m{1,1,2});
if n_of_TF >1
[mq]=mq_gen(Xmnummt(1,1,:,2),Xmdenmt(1,1,:,2),Xmdeadmt(1,1,:,2),...
qfnummt{1},qfdenmt{1},F_order{1},y);
else
[mq]=mq_gen(Xmnummt{1,1,1,2},Xmdenmt{1,1,1,2},Xmdeadmt{1,1,1,2},...
qfnummt{1},qfdenmt{1},F_order{1},y);
end
end
[Emin]=noise_amp_e(qnummt{1,1},qdenmt{1,1},order{1,1},Na,y);
fprintf('Emin for noise amplification is %.3f \n',Emin);
if isempty(vub) | isempty(vlb) | vub==vlb
Epsilon{1,1}(1)=Emin;
else
if Epsilon{1,1}(1)==0
Epsilon{1,1}(1)=Emin;
end
Epsilon{1,1}
x=(vub+vlb)/2;
[Epsilon{1,1},decade,Omega,x]=findone(Epsilon{1,1},fun,decade,Acc,Na,vub,vlb,numpdec,x,y,...
[],temp,temp1,q{1,1},qf{1,1},qd{1,1},pd{1,1},Mp(1),Mp2(1),10000,Tcanc,mq,F_order{1});
end
JMENU=4700; cback;
case 4110
fun='imc2pseudo';
fprintf('\n Emin_Dist. for noise amplification: %g ',Emin2);
if isempty(vub) | isempty(vlb) | vub==vlb
Epsilon{1,1}(2)=Emin2;
return
end
x=(vub+vlb)/2;
if Epsilon{1,1}(2) <=0
Epsilon{1,1}(2)=Emin2;
end
if cascade
if n_of_TF>1
[mq]=mq_gen(Xmnummt(1,1,:,2),Xmdenmt(1,1,:,2),Xmdeadmt(1,1,:,2),...
qfnummt{1},qfdenmt{1},F_order{1},y);
else
[mq]=mq_gen(Xmnummt{1,1,1,2},Xmdenmt{1,1,1,2},Xmdeadmt{1,1,1,2},...
qfnummt{1},qfdenmt{1},F_order{1},y);
end
[Epsilon{1,1},decade,x,qd{1,1},err]=findTwo(Epsilon{1,1},fun,decade,Acc,Na,vub,vlb,numpdec,...
x,y,p{1,1,2},m{1,1,2},q{1,1},qf{1,1},qd{1,1},pd{1,1},Mp(2),Mp2(2),inf,Tcanc,mq,F_order{1});
else
if n_of_TF>1
[mq]=mq_gen(Xmnummt,Xmdenmt,Xmdeadmt,qfnummt{1},...
qfdenmt{1},F_order{1},y);
else
[mq]=mq_gen(Xmnummt{1,1},Xmdenmt{1,1},Xmdeadmt{1,1},qfnummt{1},...
qfdenmt{1},F_order{1},y);
end
[Epsilon{1,1},decade,x,qd{1,1},err]=findTwo(Epsilon{1,1},fun,decade,Acc,Na,vub,vlb,numpdec,...
x,y,p{1,1},m{1,1},q{1,1},qf{1,1},qd{1,1},pd{1,1},Mp(2),Mp2(2),inf,Tcanc,mq,F_order{1});
end
if ~err
JMENU=4830; cback;
end
case 4400
xn=str2num(xns);
if length(xn)~=p_umax
errordlg('Number of uncertainty parameters do not match !');
return
end
close;
if n_of_TF>1
[mq]=mq_gen(Xmnummt,Xmdenmt,Xmdeadmt,qnummt{1},...
qdenmt{1},order{1},y);
else
[mq]=mq_gen(Xmnummt{1,1},Xmdenmt{1,1},Xmdeadmt{1,1},qnummt{1},...
qdenmt{1},order{1},y);
end
[Epsilon{1,1},decade,x,vub,vlb]=findunc(Epsilon{1,1},fun,decade,Acc,Na,vub,vlb,numpdec,x,...
y,0,p{1,1},m{1,1},q{1,1},qd{1,1},Mp,10000,Tcanc,xn,mq);
temp='The new uncertainty limitss for the specified filter time';
temp=strvcat(temp,'constant has been calculated and assigned to the system');
msgbox(temp)
case 4500
% Tuning for lower bound saturation
handle=get(gcf,'Child');
e_step=str2num(get(handle(2),'String'));
close;
Epsilon{1,1}(1)=msf_adj(Xpnummt{1,1},Xpdenmt{1,1},Xpdeadmt{1,1},Xmnummt{1,1},Xmdenmt{1,1},...
Xmdeadmt{1,1},Xpdnummt{1,1},Xpddenmt{1,1},qnummt{1,1},qdenmt{1,1},...
order{1,1},x,y,Epsilon{1,1}(1),satubs,satlbs,d_through_p,qnums{1,1},qdens{1,1},e_step);
case 4600
% PID controller
% ------------------
switch get(MAIN_MENU(15),'Value')
case 1 % 1Df
pid1df_sim(0,Xpnummt,Xpdenmt,Xpdeadmt,Xmnummt,Xmdenmt,Xmdeadmt,Xpdnummt,Xpddenmt,...
qnummt{1,1},qdenmt{1,1},order{1,1},x,y,Epsilon{1,1}(1),satubs,satlbs,d_through_p,n_of_TF);
view_pid;
case 2 % 2Df
[d_through_p]=pid2df_sim(0,Xpnummt,Xpdenmt,Xpdeadmt,Xmnummt,Xmdenmt,Xmdeadmt,...
Xpdnummt{1,1},Xpddenmt{1,1},qnummt{1,1},qdenmt{1,1},qfnummt{1,1},...
qfdenmt{1,1},order{1,1},F_order{1,1},x,y,Epsilon{1,1},satubs,satlbs,m{1,1},...
qf{1,1},qd{1,1},Tcanc,d_through_p,n_of_TF);
set(MAIN_MENU(19),'Value',d_through_p); JMENU=6; cback;
view_pid;
case 3
pid_cascade(0,Xpnummt,Xpdenmt,Xpdeadmt,Xmnummt,Xmdenmt,Xmdeadmt,...
Xpdnummt{1,1},Xpddenmt{1,1},qnummt{1,1},qdenmt{1,1},qfnummt{1,1},...
qfdenmt{1,1},order{1,1},F_order{1,1},x,y,Epsilon{1,1},satubs,satlbs,m,...
qf{1,1},qd{1,1},Tcanc,d_through_p,n_of_TF);
if exist('diag_handle') & all(ishandle(diag_handle))
delete(diag_handle);
end
diag_handle=showCascade2(main_fig,maxrow,maxcol,Xpnummt,Xpdnummt,...
Xmnummt,qnummt,qfnummt);
view_pid;
end
case 4650
pid_cascade2(0,Xpnummt,Xpdenmt,Xpdeadmt,Xmnummt,Xmdenmt,Xmdeadmt,...
Xpdnummt{1,1},Xpddenmt{1,1},qnummt{1,1},qdenmt{1,1},qfnummt{1,1},...
qfdenmt{1,1},order{1,1},F_order{1,1},x,y,Epsilon{1,1},satubs,satlbs,m,...
qf{1,1},qd{1,1},Tcanc,d_through_p,n_of_TF);
if exist('diag_handle') & all(ishandle(diag_handle))
delete(diag_handle);
end
diag_handle=showCascade3(main_fig,maxrow,maxcol,Xpnummt,Xpdnummt,...
Xmnummt,qnummt,qfnummt);
view_pid;
case 5100
if n_of_TF > 1
errordlg('MSF simulation does not support transfer function having 2 terms');
return
end
switch get(MAIN_MENU(15),'Value')
case 1 % 1Df
msf1df_sim(1,Xpnummt{1,1},Xpdenmt{1,1},Xpdeadmt{1,1},Xmnummt{1,1},Xmdenmt{1,1},...
Xmdeadmt{1,1},Xpdnummt{1,1},Xpddenmt{1,1},qnummt{1,1},qdenmt{1,1},...
order{1,1},x,y,Epsilon{1,1}(1),satubs,satlbs,d_through_p,qnums{1,1},qdens{1,1});
case 2 % 2Df
[d_through_p]=msf2df_sim(1,Xpnummt{1,1},Xpdenmt{1,1},Xpdeadmt{1,1},Xmnummt{1,1},Xmdenmt{1,1},...
Xmdeadmt{1,1},Xpdnummt{1,1},Xpddenmt{1,1},qnummt{1,1},qdenmt{1,1},qfnummt{1,1},...
qfdenmt{1,1},order{1,1},F_order{1,1},x,y,Epsilon{1,1},satubs,satlbs,m{1,1},...
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -