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

📄 cnf_update_panel.m

📁 hard disk drive servo control tools, it is very helpful
💻 M
📖 第 1 页 / 共 2 页
字号:
function cnf_update_panel(AxeHandle)

% This function refreshes the display of the simulation/controller
% parameters on the simulation panel


ud = get(AxeHandle,'UserData');
FigHandle = ud.Figure;
handles = ud.Handles;
cnfdb = guidata(FigHandle);


Params = struct(...
   'StdUnit','normalized ',...
   'BgColor', [.7 .7 .8],...
   'StdColor',[.6 .7 .8] );   %get(0,'DefaultUIControlBackground')


% clear the control instruments

if ~isempty(ud.Handles2)
    vnames=fieldnames(ud.Handles2);
    for nn=1:length(vnames)
        eval(['delete(ud.Handles2.',char(vnames(nn)),')'] );
    end
end
ud.Handles2=[];
while ud.WM_size>0,
    delete(get(ud.WM_slider(ud.WM_size), 'UserData'));
    delete(ud.WM_slider(ud.WM_size));
    ud.WM_size=ud.WM_size-1;
end


% reconstruct the control instruments
text_Pos = get(ud.Handles.text_SteadyBias, 'Position');
slider_Pos = get(ud.Handles.edit_SteadyBias, 'Position');
Vgap =1.1*slider_Pos(4);
Hgap =0.001;
edit_Pos=slider_Pos;
edit_Pos(1)=edit_Pos(1)+edit_Pos(3)+Hgap;
edit_Pos(3)=edit_Pos(3)*0.7;
Y=slider_Pos(2);

title_Pos = text_Pos;
title_Pos(3) = text_Pos(3)+slider_Pos(3)+edit_Pos(3);

[nx,nc]=size(cnfdb.System.A);
IC = cnfdb.Controller.IC_in;
ord = nx + IC;
FP = cnfdb.Controller.FB_poles;


if (cnfdb.Controller.FB_choice>1) | cnfdb.Controller.IC_in
   
    Y=Y-Vgap;
    title_Pos (2)=Y;
    %   tuning parameters for A+BF
    ud.Handles2.text_Af_para = uicontrol('Parent',FigHandle, ...
        'Unit',Params.StdUnit,...
        'BackgroundColor',Params.StdColor, ...
        'ForegroundColor','b',...
        'FontWeight','bold',...
        'FontSize',10,...
        'Position',title_Pos , ...
        'String','Tunable Parameter(s) of A+BF', ...
        'Style','text', ...
        'HorizontalAlignment','left');
end    

if cnfdb.Controller.FB_choice==2  % H2 control
    % epsilon
    Y=Y-Vgap;
    text_Pos(2)=Y;
    ud.Handles2.text_epsilon = uicontrol('Parent',FigHandle, ...
        'Unit',Params.StdUnit,...
        'BackgroundColor',Params.StdColor, ...
        'Position',text_Pos, ...
        'String','epsilon (for H2 ARE)  ', ...
        'Style','text',...
        'HorizontalAlignment','right');
    
    slider_Pos(2)=Y;
    ud.Handles2.slider_epsilon = uicontrol('Parent',FigHandle, ...
        'Unit',Params.StdUnit,...
        'BackgroundColor',[1 1 1], ...
        'Position',slider_Pos, ...
        'Style','slider', ...
        'Callback',{@callback_slider_edit}, ...
        'HorizontalAlignment','left');
    
    edit_Pos(2)=Y;
    ud.Handles2.edit_epsilon = uicontrol('Parent',FigHandle, ...
        'Unit',Params.StdUnit,...
        'BackgroundColor',[1 1 1], ...
        'Position',edit_Pos, ...
        'Style','edit', ...
        'Callback',{@callback_slider_edit}, ...
        'HorizontalAlignment','center');
    
    set(ud.Handles2.slider_epsilon,'UserData',ud.Handles2.edit_epsilon);
    set(ud.Handles2.edit_epsilon,'UserData',  ud.Handles2.slider_epsilon);
    
    % set the values
    epsilon=FP(1);
    set(ud.Handles2.slider_epsilon, 'Max',2*max(epsilon,1) );
    set(ud.Handles2.slider_epsilon, 'Value',epsilon);
    set(ud.Handles2.edit_epsilon, 'String',  num2str(epsilon,'%0.6g') );
    
end  % of H2 control

if cnfdb.Controller.FB_choice==3  %  pole placement
    
    % damping
    Y=Y-Vgap;
    text_Pos(2)=Y;
    ud.Handles2.text_zeta = uicontrol('Parent',FigHandle, ...
        'Unit',Params.StdUnit,...
        'BackgroundColor',Params.StdColor, ...
        'Position',text_Pos, ...
        'String','damping ratio  ', ...
        'Style','text',...
        'HorizontalAlignment','right');
    
    slider_Pos(2)=Y;
    ud.Handles2.slider_Zeta = uicontrol('Parent',FigHandle, ...
        'Unit',Params.StdUnit,...
        'BackgroundColor',[1 1 1], ...
        'Position',slider_Pos, ...
        'Style','slider', ...
        'Callback',{@callback_slider_edit}, ...
        'HorizontalAlignment','left');
    
    edit_Pos(2)=Y;
    ud.Handles2.edit_Zeta = uicontrol('Parent',FigHandle, ...
        'Unit',Params.StdUnit,...
        'BackgroundColor',[1 1 1], ...
        'Position',edit_Pos, ...
        'Style','edit', ...
        'Callback',{@callback_slider_edit}, ...
        'HorizontalAlignment','center');
    
    set(ud.Handles2.slider_Zeta,'UserData',ud.Handles2.edit_Zeta);
    set(ud.Handles2.edit_Zeta,'UserData',  ud.Handles2.slider_Zeta);
    
    % natural frequency
    Y=Y-Vgap;
    text_Pos(2)=Y;
    ud.Handles2.text_Omega = uicontrol('Parent',FigHandle, ...
        'Unit',Params.StdUnit,...
        'BackgroundColor',Params.StdColor, ...
        'Position',text_Pos, ...
        'String','natural frequency  ', ...
        'Style','text',...
        'HorizontalAlignment','right');
    slider_Pos(2)=Y;
    ud.Handles2.slider_Omega = uicontrol('Parent',FigHandle, ...
        'Unit',Params.StdUnit,...
        'BackgroundColor',[1 1 1], ...
        'Position',slider_Pos, ...
        'Style','slider', ...
        'Max',1000*pi, ...
        'Callback',{@callback_slider_edit}, ...
        'HorizontalAlignment','left');
    
    edit_Pos(2)=Y;
    ud.Handles2.edit_Omega = uicontrol('Parent',FigHandle, ...
        'Unit',Params.StdUnit,...
        'BackgroundColor',[1 1 1], ...
        'Position',edit_Pos, ...
        'Style','edit', ...
        'Callback',{@callback_slider_edit}, ...
        'HorizontalAlignment','center');
    
    set(ud.Handles2.slider_Omega,'UserData',ud.Handles2.edit_Omega);
    set(ud.Handles2.edit_Omega,'UserData',ud.Handles2.slider_Omega);
    
    % set the values
    zeta=FP(2);
    set(ud.Handles2.slider_Zeta,'Max',max(zeta,1) );
    set(ud.Handles2.slider_Zeta,'Value',zeta);
    set(ud.Handles2.edit_Zeta, 'String',  num2str(zeta,'%0.6g') );
    omega=FP(3);
    set(ud.Handles2.slider_Omega,'Max',  max(2*omega,0.2*pi) );
    set(ud.Handles2.slider_Omega,'Value', omega);
    set(ud.Handles2.edit_Omega, 'String',  num2str(omega,'%0.6g') );
    
    
    %  integration pole
    if cnfdb.Controller.IC_in
        Y=Y-Vgap;
        text_Pos(2)=Y;
        ud.Handles2.text_Omega2 = uicontrol('Parent',FigHandle, ...
            'Unit',Params.StdUnit,...
            'BackgroundColor',Params.StdColor, ...
            'Position',text_Pos, ...
            'String','integration pole  ', ...
            'Style','text',...
            'HorizontalAlignment','right');
        
        slider_Pos(2)=Y;
        ud.Handles2.slider_Omega2 = uicontrol('Parent',FigHandle, ...
            'Unit',Params.StdUnit,...
            'BackgroundColor',[1 1 1], ...
            'Position',slider_Pos, ...
            'Style','slider', ...
            'Max',1000*pi, ...
            'Callback',{@callback_slider_edit}, ...
            'HorizontalAlignment','left');
        
        edit_Pos(2)=Y;
        ud.Handles2.edit_Omega2 = uicontrol('Parent',FigHandle, ...
            'Unit',Params.StdUnit,...
            'BackgroundColor',[1 1 1], ...
            'Position',edit_Pos, ...
            'Style','edit', ...
            'Tag','negative', ...
            'Callback',{@callback_slider_edit}, ...
            'HorizontalAlignment','center');
        
        set(ud.Handles2.slider_Omega2,'UserData',ud.Handles2.edit_Omega2);
        set(ud.Handles2.edit_Omega2,'UserData',ud.Handles2.slider_Omega2);
        
        % set the value
        if  length(FP)>=4
            omega2=FP(4);
        else
            omega2=-0.01;
        end    
        set(ud.Handles2.slider_Omega2, 'Min',  -max(2*abs(omega2),1) );
        set(ud.Handles2.slider_Omega2, 'Max',  0 );
        set(ud.Handles2.slider_Omega2, 'Value', -abs(omega2) );
        set(ud.Handles2.edit_Omega2, 'String',  num2str(-abs(omega2),'%0.6g') );
        
    end
    
end          


%  integration weighting
if cnfdb.Controller.IC_in
    Y=Y-Vgap;
    text_Pos(2)=Y;
    ud.Handles2.text_int_gain = uicontrol('Parent',FigHandle, ...
        'Unit',Params.StdUnit,...
        'BackgroundColor',Params.StdColor, ...
        'Position',text_Pos, ...
        'String','integration gain  ', ...
        'Style','text',...
        'HorizontalAlignment','right');
    
    slider_Pos(2)=Y;
    ud.Handles2.slider_int_gain = uicontrol('Parent',FigHandle, ...
        'Unit',Params.StdUnit,...
        'BackgroundColor',[1 1 1], ...
        'Position',slider_Pos, ...
        'Style','slider', ...
        'Max', 1, ...
        'Callback',{@callback_slider_edit}, ...
        'HorizontalAlignment','left');
    
    edit_Pos(2)=Y;
    ud.Handles2.edit_int_gain = uicontrol('Parent',FigHandle, ...
        'Unit',Params.StdUnit,...
        'BackgroundColor',[1 1 1], ...
        'Position',edit_Pos, ...
        'Style','edit', ...
        'Tag','any', ...
        'Callback',{@callback_slider_edit}, ...
        'HorizontalAlignment','center');
    
    set(ud.Handles2.slider_int_gain,'UserData',ud.Handles2.edit_int_gain);
    set(ud.Handles2.edit_int_gain,'UserData',ud.Handles2.slider_int_gain);
    
    % set the value
    if  length(FP)>=5
        int_gain=FP(5);
    else
        int_gain=1;
    end    
    set(ud.Handles2.slider_int_gain, 'Min',  min(int_gain,-1) );
    set(ud.Handles2.slider_int_gain, 'Max',  max(int_gain,1) );
    set(ud.Handles2.slider_int_gain, 'Value', int_gain );
    set(ud.Handles2.edit_int_gain, 'String',  num2str(int_gain,'%0.6g') );
    
end


% Observer parameter
if cnfdb.Controller.OV_type>0  & cnfdb.Controller.OV_choice>1  % observer is existent: 1=full, 2=reduced
    
    Y=Y-Vgap;
    title_Pos (2)=Y;
    %   tuning parameters for observer
    ud.Handles2.text_observer = uicontrol('Parent',FigHandle, ...
        'Unit',Params.StdUnit,...
        'BackgroundColor',Params.StdColor, ...
        'ForegroundColor','b',...
        'FontWeight','bold',...
        'FontSize',10,...
        'Position',title_Pos , ...
        'String','Tunable Observer Parameter', ...
        'Style','text', ...
        'HorizontalAlignment','left');

    switch cnfdb.Controller.OV_choice
        case 2  %  H2 type
        % H2 epsilon
        Y=Y-Vgap;
        text_Pos(2)=Y;
        ud.Handles2.text_OV_epsilon = uicontrol('Parent',FigHandle, ...
            'Unit',Params.StdUnit,...
            'BackgroundColor',Params.StdColor, ...
            'Position',text_Pos, ...
            'String','epsilon (for H2 ARE)  ', ...
            'Style','text',...
            'HorizontalAlignment','right');
        
        slider_Pos(2)=Y;
        ud.Handles2.slider_OV_epsilon = uicontrol('Parent',FigHandle, ...
            'Unit',Params.StdUnit,...
            'BackgroundColor',[1 1 1], ...
            'Position',slider_Pos, ...
            'Style','slider', ...
            'Callback',{@callback_slider_edit}, ...
            'HorizontalAlignment','left');
        
        edit_Pos(2)=Y;
        ud.Handles2.edit_OV_epsilon = uicontrol('Parent',FigHandle, ...
            'Unit',Params.StdUnit,...
            'BackgroundColor',[1 1 1], ...
            'Position',edit_Pos, ...
            'Style','edit', ...
            'Callback',{@callback_slider_edit}, ...
            'HorizontalAlignment','center');
        
        set(ud.Handles2.slider_OV_epsilon,'UserData',ud.Handles2.edit_OV_epsilon);
        set(ud.Handles2.edit_OV_epsilon,'UserData',  ud.Handles2.slider_OV_epsilon);
        
        % set the values
        epsilon=cnfdb.Controller.OV_poles(1);
        set(ud.Handles2.slider_OV_epsilon, 'Max',2*max(epsilon,1) );
        set(ud.Handles2.slider_OV_epsilon, 'Value',epsilon);
        set(ud.Handles2.edit_OV_epsilon, 'String',  num2str(epsilon,'%0.6g') );
            
        case 3  % butterworth type    
        % butterworth bandwidth omega
        Y=Y-Vgap;
        text_Pos(2)=Y;
        ud.Handles2.text_OV_omega = uicontrol('Parent',FigHandle, ...
            'Unit',Params.StdUnit,...
            'BackgroundColor',Params.StdColor, ...
            'Position',text_Pos, ...
            'String','bandwidth  ', ...
            'Style','text',...
            'HorizontalAlignment','right');
        
        slider_Pos(2)=Y;
        ud.Handles2.slider_OV_omega = uicontrol('Parent',FigHandle, ...
            'Unit',Params.StdUnit,...
            'BackgroundColor',[1 1 1], ...
            'Position',slider_Pos, ...
            'Style','slider', ...
            'Callback',{@callback_slider_edit}, ...
            'HorizontalAlignment','left');
        
        edit_Pos(2)=Y;
        ud.Handles2.edit_OV_omega = uicontrol('Parent',FigHandle, ...
            'Unit',Params.StdUnit,...
            'BackgroundColor',[1 1 1], ...
            'Position',edit_Pos, ...
            'Style','edit', ...
            'Callback',{@callback_slider_edit}, ...
            'HorizontalAlignment','center');
        
        set(ud.Handles2.slider_OV_omega,'UserData',ud.Handles2.edit_OV_omega);
        set(ud.Handles2.edit_OV_omega,'UserData',  ud.Handles2.slider_OV_omega);
        
        % set the values
        omega=cnfdb.Controller.OV_poles(2);
        set(ud.Handles2.slider_OV_omega, 'Max',2*max(omega,1) );
        set(ud.Handles2.slider_OV_omega, 'Value',omega);
        set(ud.Handles2.edit_OV_omega, 'String',  num2str(omega,'%0.6g') );
end  % switch

end

% CNF nonlinear feedback parameters
if cnfdb.Controller.ctrl_type>0
    
    Y=Y-Vgap;
    title_Pos(2)=Y;
%     ud.Handles2.text_Rho = uicontrol('Parent',FigHandle, ...
%         'Unit',Params.StdUnit,...
%         'BackgroundColor',Params.StdColor, ...
%         'ForegroundColor','b',...
%         'Position',title_Pos, ...
%         'String','Tuning parameters of nonlinear function rho', ...
%         'Style','text', ...
%         'HorizontalAlignment','left');
    
pos=get(handles.axes_Panel,'Position');

⌨️ 快捷键说明

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