📄 imctune.m
字号:
%
% IMC-Tune
%
% Generalized (SISO & MIMO) IMC tuning and MSF & PID equivalent
% New graphical interface
%
% Developed at
% Case Western Reserve University
% by Tom Kumsaen, Jiawen Dong & Coleman B. Brosilow
% based on IMC-Tune-2 by Karel Stryczek
%
% 2001
%
%-------------------------------------------------------------
if exist('main_fig') & ishandle(main_fig)
temp=get(main_fig,'Name');
if ~isempty(findstr(temp,'Internal Model'))
figure(main_fig);
return
end
end
echo off
clear
% Variables to control gui
%-------------------------------------------------------------
IMENU=0;
JMENU=0;
NAMEFILE='untitled.mat';
cwdir=pwd;
if exist('data')~=7
switch questdlg('The data subdirectiry named "data" does not exist, create it?');
case 'Yes'
mkdir(cwdir,'data');
datadir=[pwd '\data\'];
otherwise
datadir=[pwd];
end
else
datadir=[pwd '\data\'];
end
DYN_MENU=zeros(1,14);
newsession;
% Initial screen and menu
%-------------------------------------------------------------
temp=['Internal Model Control Tuning - [' datadir NAMEFILE ']'];
main_fig=crfig(5,25,680,500,temp,'k','none','on');
set(main_fig,'DeleteFcn','IMENU=1000; imcmenu;');
set(main_fig,'HandleVisibility','off');
MAIN_MENU=zeros(1,19);
MAIN_MENU(1)=uimenu('Parent',main_fig,...
'Label',' &File ');
uimenu(MAIN_MENU(1),...
'Label',' &New ','Callback',['IMENU=1100;','imcmenu']);
uimenu(MAIN_MENU(1),...
'Label',' &Load ','Callback',['IMENU=1200;','imcmenu']);
uimenu(MAIN_MENU(1),...
'Label',' &Save ','Callback',['IMENU=1300;','imcmenu']);
uimenu(MAIN_MENU(1),...
'Label',' Save &As ','Callback',['IMENU=1400;','imcmenu']);
uimenu(MAIN_MENU(1),...
'Label',' E&xit ','Callback','close(main_fig)');
MAIN_MENU(2)=uimenu('Parent',main_fig,...
'Label',' &Edit ');
uimenu(MAIN_MENU(2),...
'Label',' Saturation &bounds ','Callback',['IMENU=2600;','imcmenu']);
uimenu(MAIN_MENU(2),...
'Label',' &Default variables ','Callback',['IMENU=2700;','imcmenu']);
MAIN_MENU(13)=uimenu(MAIN_MENU(2),...
'Label','&System Edit special ','Callback',['IMENU=2710;','imcmenu']);
uimenu(MAIN_MENU(2),...
'Label',' &Help ','Callback','sayhelp(2900)');
uimenu('Parent',main_fig,...
'Label',' &View ','Callback',['IMENU=3100;','imcmenu']);
MAIN_MENU(4)=uimenu('Parent',main_fig,...
'Label',' &Compute');
DYN_MENU(1)=uimenu(MAIN_MENU(4),...
'Label',' &Tuning ','Callback',['IMENU=4100;','imcmenu']);
DYN_MENU(14)=uimenu(MAIN_MENU(4),...
'Label',' &Noise amplification filter ','Callback',['IMENU=4200;','imcmenu']);
DYN_MENU(2)=uimenu(MAIN_MENU(4),...
'Label',' &Model state Feedback(MSF) K, Ksp ','Callback',['IMENU=4300;','imcmenu']);
DYN_MENU(3)=uimenu(MAIN_MENU(4),...
'Label',' Find uncertainty & bounds ','Callback',['IMENU=4400;','imcmenu']);
DYN_MENU(4)=uimenu(MAIN_MENU(4),...
'Label',' Tuning for lower bound &saturation (MSF) ','Callback',['IMENU=4500;','imcmenu']);
DYN_MENU(5)=uimenu(MAIN_MENU(4),...
'Label',' &PID Controller ','Callback',['IMENU=4600;','imcmenu']);
DYN_MENU(6)=uimenu(MAIN_MENU(4),...
'Label',' Frequency response ');
DYN_MENU(7)=uimenu(DYN_MENU(6),...
'Label',' TF between setpoint and output ');
uimenu(DYN_MENU(7),...
'Label',' &Upper bound ','Callback',['IMENU=4700;','imcmenu']);
uimenu(DYN_MENU(7),...
'Label',' &Lower bound ','Callback',['IMENU=4710;','imcmenu']);
uimenu(DYN_MENU(7),...
'Label',' Upp&er and lower bounds ','Callback',['IMENU=4720;','imcmenu']);
DYN_MENU(8)=uimenu(DYN_MENU(6),...
'Label',' TF between disturbance and output');
uimenu(DYN_MENU(8),...
'Label',' &Upper bound ','Callback',['IMENU=4800;','imcmenu']);
uimenu(DYN_MENU(8),...
'Label',' &Lower bound ','Callback',['IMENU=4810;','imcmenu']);
uimenu(DYN_MENU(8),...
'Label',' Upp&er and lower bounds ','Callback',['IMENU=4820;','imcmenu']);
DYN_MENU(9)=uimenu(MAIN_MENU(4),...
'Label',' &Help ','Callback','sayhelp(4900)');
MAIN_MENU(5)=uimenu('Parent',main_fig,...
'Label',' &Results && Simulations ');
uimenu(MAIN_MENU(5),...
'Label',' &PID Controller ','Callback',['view_pid']);
MAIN_MENU(3)=uimenu(MAIN_MENU(5),...
'Label',' MSF gain &K, Ksp ','Callback',['IMENU=4300;','imcmenu']);
MAIN_MENU(6)=uimenu(MAIN_MENU(5),...
'Label',' IMC && MSF step responses','Callback',['IMENU=5100;','imcmenu']);
MAIN_MENU(10)=uimenu(MAIN_MENU(5),...
'Label',' IMC && PID step responses','Callback',['IMENU=5200;','imcmenu']);
MAIN_MENU(7)=uimenu('Parent',main_fig,...
'Label',' &Simulink diagrams');
uimenu(MAIN_MENU(7),...
'Label',' &IMC diagram ','Callback',['IMENU=7100;','imcmenu']);
% uimenu(MAIN_MENU(7),...
% 'Label',' &Renew IMC diagram','Callback',['IMENU=7150;','imcmenu']);
MAIN_MENU(11)=uimenu(MAIN_MENU(7),...
'Label',' &MSF diagram ','Callback',['IMENU=7200;','imcmenu']);
% uimenu(MAIN_MENU(7),...
% 'Label',' &Renew MSF diagram','Callback',['IMENU=7300;','imcmenu']);
MAIN_MENU(8)=uimenu(MAIN_MENU(7),...
'Label',' &PID diagrams ');
DYN_MENU(10)=uimenu(MAIN_MENU(8),...
'Label','&IMC diagram','Callback',['IMENU=7400;','imcmenu']);
DYN_MENU(11)=uimenu(MAIN_MENU(8),...
'Label','&Realizable PID diagram','Callback',['IMENU=7410;','imcmenu']);
DYN_MENU(12)=uimenu(MAIN_MENU(8),...
'Label','&1st order lag PID diagram','Callback',['IMENU=7420;','imcmenu']);
DYN_MENU(13)=uimenu(MAIN_MENU(8),...
'Label','&2nd order lag PID diagram','Callback',['IMENU=7430;','imcmenu']);
%uimenu(MAIN_MENU(7),...
% 'Label',' &Restore default PID diagram','Callback',['IMENU=7510;','imcmenu']);
MAIN_MENU(9)=uimenu('Parent',main_fig,...
'Label',' &Help ');
uimenu(MAIN_MENU(9),...
'Label',' &About IMC-tune ','Callback',['IMENU=6100;','imctune_help']);
uimenu(MAIN_MENU(9),...
'Label',' &Help file ','Callback',['IMENU=6200;','imctune_help']);
uicontrol('Parent',main_fig, ...
'Style','frame',...
'Position',[2 2 345 125]);
%uicontrol('Parent',main_fig, ...
% 'Style','frame',...
%'Position',[337 2 343 125]);
uicontrol('Parent',main_fig, ...
'Style','text',...
'Position',[10 95 220 25],...
'FontWeight','bold',...
'HorizontalAlignment','left',...
'String','System Structure:');
%uicontrol('Parent',main_fig, ...
% 'Style','text',...
% 'Position',[350 95 220 25],...
% 'FontWeight','bold',...
% 'HorizontalAlignment','left',...
% 'String','Tuning parameters:');
MAIN_MENU(17)=uicontrol('Parent',main_fig, ...
'Style','checkbox',...
'Position',[20 5 130 25],...
'HorizontalAlignment','Left',...
'Value',1,...
'Enable','off',...
'String','# Inputs = # Outputs',...
'Callback','JMENU=4; cback;');
uicontrol('Parent',main_fig, ...
'Style','text',...
'Position',[10 35 90 25],...
'HorizontalAlignment','Right',...
'String','Number of Outputs');
%uicontrol('Parent',main_fig, ...
% 'Style','text',...
% 'Position',[350 35 100 25],...
% 'HorizontalAlignment','Right',...
% 'String','Peak Height , MP2');
MAIN_MENU(14)=uicontrol('Parent',main_fig, ...
'Position',[110 35 36 25], ...
'Backgroundcolor','w',...
'Foregroundcolor','k',...
'String','1|2|3|4|5', ...
'Style','popupmenu', ...
'Tag','PopupMenu1', ...
'Value',maxrow,...
'Enable','off',...
'Callback','JMENU=1; cback;');
uicontrol('Parent',main_fig, ...
'Style','text',...
'Position',[10 65 90 25],...
'HorizontalAlignment','Right',...
'String','Number of Inputs');
%uicontrol('Parent',main_fig, ...
% 'Style','text',...
% 'Position',[350 65 100 25],...
% 'HorizontalAlignment','Right',...
% 'String','Maximum Peak , MP');
MAIN_MENU(16)=uicontrol('Parent',main_fig, ...
'Position',[110 65 36 25], ...
'Backgroundcolor','w',...
'Foregroundcolor','k',...
'String','1|2|3|4|5', ...
'Style','popupmenu', ...
'Tag','PopupMenu1', ...
'Value',maxcol,...
'Callback','JMENU=3; cback;');
MAIN_MENU(15)=uicontrol('Parent',main_fig, ...
'Position',[165 65 160 25], ...
'Backgroundcolor','w',...
'Foregroundcolor','k',...
'String','One-degree of freedom IMC|Two-degree of freedom IMC|IMC cascade system', ...
'Style','popupmenu', ...
'Tag','PopupMenu1', ...
'Value',degree_freedom,...
'Callback','JMENU=2; cback;');
temp='For example; p(s)=(1+3exp(-2s))/(s+1)';
MAIN_MENU(18)=uicontrol('Parent',main_fig, ...
'Position',[165 35 160 25], ...
'Backgroundcolor','w',...
'Foregroundcolor','k',...
'String','Single term transfer function|2 term transfer function', ...
'Style','popupmenu', ...
'Tag','PopupMenu1', ...
'Value',n_of_TF,...
'Enable','on',...
'TooltipString',temp,...
'Callback','JMENU=5; cback;');
MAIN_MENU(19)=uicontrol('Parent',main_fig, ...
'Style','checkbox',...
'Position',[165 5 180 25],...
'HorizontalAlignment','Left',...
'Value',d_through_p,...
'String','Disturb through the process',...
'Callback','JMENU=6; cback;');
if exist('diag_handle') & ishandle(diag_handle)
delete(diag_handle);
end
diag_handle=show1dfdiag(main_fig,maxrow,maxcol,p,pd,m,...
q,d_through_p,input_delay);
findfigs
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -