📄 cnf_update_panel.m
字号:
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 + -