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

📄 pid_tuner.m

📁 很优良的PID控制器设计仿真程序与模型,经过严格检验
💻 M
📖 第 1 页 / 共 4 页
字号:
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 + -