📄 pid_tuner.m
字号:
function varargout = pid_tuner(varargin)
% PID_TUNER M-file for the GUI of a PID type controller designer
% This is part of the PID toolbox, where a rich group of PID tuning
% formula are embeded in the interface. One may select the controller
% tuning algorithm and the controller can be designed and the closed-
% loop system under the controller can be simulated.
% Copyright (c) 2003
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @pid_tuner_OpeningFcn, ...
'gui_OutputFcn', @pid_tuner_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin & isstr(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
function h_btnPlant_Callback(hObject, eventdata, handles)uu=get(handles.h_btnPlant,'UserData');
if length(uu)==0
plant_model4pid;
set([handles.h_btnFOLPD,handles.h_btnModify],'Enable','on');
else
uu
end
function h_btnModify_Callback(hObject, eventdata, handles)
plant_model4pid;
set(handles.h_txtFOLPD,'String','');
set(handles.h_btnFOLPD,'Enable','on');
function h_btnFOLPD_Callback(hObject, eventdata, handles)
key=get(handles.h_lstFOLPD,'Value');
try
G=get(handles.h_btnPlant,'Userdata');
L0=G.ioDelay; G.ioDelay=0;
switch key
case 1
[K,L,T]=getfod(G,1);
case 2
[K,L,T]=getfod(G);
case 3
ff=msgbox({'Optimization process is going on. Please wait ...'},'Optimizing ...');
Gr=opt_app(G,0,1,1);
L=Gr.ioDelay;
K=Gr.num{1}(end)/Gr.den{1}(end);
T=Gr.den{1}(1)/Gr.den{1}(2);
pause(0.0001);
delete(ff);
end
L=L+L0;
set(handles.h_btnFOLPD,'UserData',{K,L,T});
str={'FOLPD model parameters:'; [' K=',num2str(K),', L=',num2str(L)]; [' T=',num2str(T)]};
set(handles.h_txtFOLPD,'String',str);
set([handles.h_btnDesign,handles.h_btnSimulation,handles.h_btnDisplay],'Enable','on');
catch
errordlg({'FOLPD model failed'; lasterr},'Error');
end
function h_btnDesign_Callback(hObject, eventdata, handles) key1=get(handles.h_lstPIPID,'Value');
key2=get(handles.h_lstApply,'Value');
key3=get(handles.h_lstAlgorithm,'Value');
xx=get(handles.h_btnFOLPD,'UserData');
vars=[];
G=get(handles.h_btnPlant,'Userdata');
switch length(xx)
case 0
errordlg({'FOLPD model is not available,';'press ''Get FOLPD Model'' to get it.'},'Error')
case 2
case 3
K=xx{1}; L=xx{2}; T=xx{3};
end
switch key1
case 1
switch key2
case 1
switch key3
case 1
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_zn_tune(key1,key2,vars);
case 2
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_hv_tune(key1,key2,vars);
case 3
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_ah_tune(key1,key2,vars);
case 4
vars=[K L T 2];
[Kp,Ti,Td,key,lb]=pid_ah_tune(key1,key2,vars);
case 5
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_cc_tune(key1,key2,vars);
case 6
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_wf_tune(key1,key2,vars);
case 7
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_ml_tune(key1,key2,vars);
case 8
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_mcm_tune(key1,key2,vars);
case 9
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_cl_tune(key1,key2,vars);
end
case 2
switch key3
case 1
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_ml_tune(key1,key2,vars);
case 2
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_sh_tune(G,key1,key2,vars);
case 3
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_hu_tune(key1,key2,vars);
case 4
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_hv_tune(key1,key2,vars);
case 5
vars=[K L T 2];
[Kp,Ti,Td,key,lb]=pid_ml_tune(key1,key2,vars);
case 6
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_za_tune(G,key1,key2,vars);
case 7
vars=[K L T 3];
[Kp,Ti,Td,key,lb]=pid_ml_tune(key1,key2,vars);
case 8
vars=[K L T 2];
[Kp,Ti,Td,key,lb]=pid_za_tune(G,key1,key2,vars);
case 9
vars=[K L T 3];
[Kp,Ti,Td,key,lb]=pid_za_tune(G,key1,key2,vars);
case 10
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_chr_tune(key1,key2,vars);
case 11
vars=[K L T 2];
[Kp,Ti,Td,key,lb]=pid_chr_tune(key1,key2,vars);
case 12
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_sc_tune(key1,key2,vars);
end
case 3
switch key3
case 1
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_ro_tune(key1,key2,vars);
case 2
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_hu_tune(key1,key2,vars);
case 3
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_za_tune(G,key1,key2,vars);
case 4
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_kl_tune(key1,key2,vars);
case 5
vars=[K L T 2];
[Kp,Ti,Td,key,lb]=pid_ro_tune(key1,key2,vars);
case 6
vars=[K L T 2];
[Kp,Ti,Td,key,lb]=pid_za_tune(G,key1,key2,vars);
case 7
vars=[K L T 3];
[Kp,Ti,Td,key,lb]=pid_za_tune(G,key1,key2,vars);
case 8
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_chr_tune(key1,key2,vars);
case 9
vars=[K L T 2];
[Kp,Ti,Td,key,lb]=pid_chr_tune(key1,key2,vars);
case 10
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_sc_tune(key1,key2,vars);
case 11
vars=[K L T 2];
[Kp,Ti,Td,key,lb]=pid_sc_tune(key1,key2,vars);
case 12
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_han_tune(key1,key2,vars);
end
case 4
switch key3
case 1
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_ha_tune(key1,key2,vars);
case 2
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_go_tune(key1,key2,vars);
case 3
vars=[K L T 2];
[Kp,Ti,Td,key,lb]=pid_go_tune(key1,key2,vars);
case 4
set([handles.h_txtLam,handles.h_edtLam],'Visible','on');
lam=get(handles.h_edtLam,'String');
lambda=str2num(lam);
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_ch_tune(lambda,key1,key2,vars);
case 5
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_as_tune(key1,key2,vars);
case 6
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_sch_tune(key1,key2,vars);
case 7
vars=[K L T 2];
[Kp,Ti,Td,key,lb]=pid_sch_tune(key1,key2,vars);
case 8
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_mca_tune(key1,key2,vars);
case 9
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_le_tune(G,key1,key2,vars);
case 10
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_kl_tune(key1,key2,vars);
case 11
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_han_tune(key1,key2,vars);
case 12
vars=[K L T 2];
[Kp,Ti,Td,key,lb]=pid_han_tune(key1,key2,vars);
case 13
vars=[K L T 3];
[Kp,Ti,Td,key,lb]=pid_han_tune(key1,key2,vars);
case 14
vars=[K L T 4];
[Kp,Ti,Td,key,lb]=pid_han_tune(key1,key2,vars);
case 15
vars=[K L T 5];
[Kp,Ti,Td,key,lb]=pid_han_tune(key1,key2,vars);
case 16
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_ho_tune(key1,key2,vars);
case 17
vars=[K L T 2];
[Kp,Ti,Td,key,lb]=pid_ho_tune(key1,key2,vars);
case 18
vars=[K L T 3];
[Kp,Ti,Td,key,lb]=pid_ho_tune(key1,key2,vars);
case 19
lambda=1;
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_ta_tune(lambda,G,key1,key2,vars);
case 20
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_vl_tune(G,key1,key2,vars);
case 21
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_fw_tune(G,key1,key2,vars);
case 22
vars=[K L T 2];
[Kp,Ti,Td,key,lb]=pid_vl_tune(G,key1,key2,vars);
case 23
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_sm_tune(key1,key2,vars);
case 24
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_co_tune(key1,key2,vars);
case 25
vars=[K L T 1];
[Kp,Ti,Td,key,lb]=pid_cw_tune(key1,key2,vars);
case 26
vars=[K L T 2];
[Kp,Ti,Td,key,lb]=pid_co_tune(key1,key2,vars);
case 27
vars=[K L T 3];
[Kp,Ti,Td,key,lb]=pid_co_tune(key1,key2,vars);
case 28
vars=[K L T 4];
[Kp,Ti,Td,key,lb]=pid_co_tune(key1,key2,vars);
case 29
vars=[K L T 5];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -