?? cnf_set.m
字號:
function cnf_set(Action,AxesHandle)
%
% Copyright: HDD servo group at
% The Department of Electrical and Computer Engineering
% National University of Singapore
%
ud=get(AxesHandle,'UserData');
FigHandle=ud.Figure;
% first save the parameters on the simulation panel
cnfdb=guidata(FigHandle);
handles=ud.Handles2;
FP = cnfdb.Controller.FB_poles;
switch cnfdb.Controller.FB_choice
case 2 % H2 control
FP(1)=get(handles.slider_epsilon,'Value');
case 3 % pole placement
FP(2)=get(handles.slider_Zeta,'Value');
FP(3)=get(handles.slider_Omega,'Value');
if cnfdb.Controller.IC_in
FP(4)=get(handles.slider_Omega2,'Value');
end
end
if cnfdb.Controller.IC_in
FP(5)=get(handles.slider_int_gain,'Value');
end
cnfdb.Controller.FB_poles=FP;
% Observer parameter : observer is existent: type 1=full, 2=reduced
if cnfdb.Controller.OV_type>0 & cnfdb.Controller.OV_choice>1
OP = cnfdb.Controller.OV_poles;
switch cnfdb.Controller.OV_choice
case 2 % H2
OP(1)=get(handles.slider_OV_epsilon,'Value');
case 3 % Butterworth
OP(2)=get(handles.slider_OV_omega,'Value');
end
cnfdb.Controller.OV_poles = OP;
end
% CNF nonlinear parameters
if cnfdb.Controller.ctrl_type > 0
cnfdb.Controller.CNF_Beta=get(handles.slider_Beta,'Value');
cnfdb.Controller.CNF_Alpha=get(handles.slider_Alpha,'Value');
W=cnfdb.Controller.CNF_W;
for nn=1:ud.WM_size,
W(nn) = get(ud.WM_slider(nn),'Value');
end
cnfdb.Controller.CNF_W = W; % only store the vector of diagonal elements
end
guidata(FigHandle,cnfdb);
% now comes the major work
switch Action
case 'sys'
% define the plant model
set_system_model(FigHandle);
case 'con'
% design the controller
set_controller(FigHandle);
end
uiwait;
cnf_update_panel(AxesHandle);
%
% Here users define their models for the plants to be controlled
%
function set_system_model(FigHandle)
cnfdb=guidata(FigHandle);
Params = struct(...
'hBorder', 0.01,...
'vBorder', 0.01,...
'ButtonW', 0.10,...
'ButtonH', 0.05,...
'EditW', 0.38,...
'EditH', 0.035,...
'TextH', 0.035,...
'TextW', 0.1,...
'TextWL', 0.35,...
'StdUnit','normalized ',...
'StdColor',[.7 .7 .8]); %get(0,'DefaultUIControlBackground')
% Widget database
ud = struct('Parent',FigHandle,...
'Figure',[],...
'Handles',[]);
ThisFig = figure(...
'Units',Params.StdUnit, ...
'Position',[0.0, 0.02, 1, 0.92],...
'Color',Params.StdColor, ...
'MenuBar','none', ...
'Visible','off',...
'IntegerHandle','off',...
'Name',xlate('Plant Model Setup'), ...
'NumberTitle','off', ...
'Resize','on',...
'WindowStyle','modal');
ud.Figure = ThisFig;
% Center wrt the main window
% centerfig(ThisFig);
top=1;
frmBorder=0.01;
frmWid = 0.96;
frmHt = 0.30;
frmLft = (1-frmWid)/2;
frmBtm = top-2*frmBorder-frmHt;
frmPos = [frmLft frmBtm frmWid frmHt];
ud.SysDiagramHandle = axes( ...
'Parent',ThisFig, ...
'Position',frmPos,...
'Color','w', ...
'XColor',[.5 .5 .75], ...
'YColor',[.5 .5 .75], ...
'XLim',[0 10], ...
'XTick',[], ...
'YLim',[0 3], ...
'YTick',[], ...
'Box','on', ...
'Visible','on');
% draw the block diagram of the system model
cnf_diagram(ud.SysDiagramHandle,'Sys');
set(0,'Units','pixels')
sz = get(0,'Screensize');
if sz(3) <=800 % [1 1 800 600]
smallfont=1;
frmPos1 = [0.42 0.68 0.54 0.28];
else
frmPos1 = [0.45 0.70 0.5 0.25];
smallfont=0;
end
set(0,'Units','normalized');
% add the equation to the block diagram
EquationHandle = axes( ...
'Parent',ThisFig, ...
'Position',frmPos1,...
'Color',[.7 .7 .75], ...
'XLim',[0 10], ...
'XTick',[], ...
'YLim',[0 3], ...
'YTick',[], ...
'Box','on', ...
'Visible','on');
%[x,map]=imread('cnf_model.jpg');
[x,map]=imread('cnf_model.bmp');
image(x);
colormap(map);
set(EquationHandle, 'Visible','off');
%
TextH = Params.TextH;
TextW = Params.TextW*0.6;
TextWL = Params.TextWL;
EditH = Params.EditH;
EditW = Params.EditW;
X0 = Params.hBorder*2;
Y0 = top -frmHt-Params.vBorder*2-EditH/2;
Vgap = EditH+Params.vBorder;
Y=Y0;
frmWid = 1- 2*X0;
frmHt = 0.57;
frmLft = X0;
frmBot = Y-frmHt;
uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'ForegroundColor','w',...
'BackgroundColor',Params.StdColor, ...
'Position',[frmLft frmBot frmWid frmHt], ...
'Style','frame');
X0 = X0 + Params.hBorder*2;
X = X0 + TextW;
Y = Y-Vgap;
uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextWL TextH], ...
'ForegroundColor','b',...
'FontSize',10,...
'String','Reference Title', ...
'Style','text',...
'HorizontalAlignment','left');
Y=Y-Vgap;
ud.Handles.edit_Name = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'HorizontalAlignment','left');
% For nonlinear zero dynamics
Y=Y-Vgap;
ud.Handles.check_QD=uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextWL TextH], ...
'ForegroundColor','b',...
'FontSize',10,...
'String','Nonlinear Zero Dynamics: dq/dt = f(q, l(x),h)', ...
'Style','Checkbox', ...
'HorizontalAlignment','left');
Y=Y-Vgap;
if smallfont>0
fcn_text='f(q,l(x),h)=';
else
fcn_text='f(q, l(x),h) =';
end
uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextW TextH], ...
'String', fcn_text, ...
'Style','text');
% 'FontName', 'FixedWidth', ...
% 'FontAngle', 'italic', ...
ud.Handles.edit_QD_Fcn = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'HorizontalAlignment','left');
Y=Y-Vgap;
uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextW TextH], ...
'String','q(0) =', ...
'Style','text');
ud.Handles.edit_Q0 = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'HorizontalAlignment','left');
% Nominal Linear Plant
Y=Y-Vgap;
uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextWL TextH], ...
'ForegroundColor','b',...
'FontSize',10,...
'String','Nominal Linear Plant', ...
'Style','text', ...
'HorizontalAlignment','left');
Y=Y-Vgap;
uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextW TextH], ...
'String','A =', ...
'Style','text');
ud.Handles.edit_A = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'HorizontalAlignment','left');
Y=Y-Vgap;
uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextW TextH], ...
'String','B =', ...
'Style','text');
ud.Handles.edit_B = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'HorizontalAlignment','left');
Y=Y-Vgap;
uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextW TextH], ...
'String','C1 =', ...
'Style','text');
ud.Handles.edit_C1 = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'HorizontalAlignment','left');
Y=Y-Vgap;
uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextW TextH], ...
'String','C2 =', ...
'Style','text');
ud.Handles.edit_C2 = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'HorizontalAlignment','left');
Y=Y-Vgap;
uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextW TextH], ...
'String','D2 =', ...
'Style','text');
ud.Handles.edit_D2 = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'HorizontalAlignment','left');
% initial state of x
Y=Y-Vgap;
uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextW TextH], ...
'String','x(0) =', ...
'Style','text', ...
'HorizontalAlignment','center');
ud.Handles.edit_x0 = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'Callback',{@edit_x0_Callback}, ...
'HorizontalAlignment','left');
% the second column of the window
X0 = X0 + frmWid/2 ;
X = X0 + TextW;
Y = Y0-Vgap*3;
% For control saturation
Y=Y-Vgap;
ud.Handles.check_CS=uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextWL TextH], ...
'ForegroundColor','b',...
'FontSize',10,...
'String','Saturation Level', ...
'Style','Checkbox', ...
'HorizontalAlignment','left');
Y=Y-Vgap;
uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextW TextH], ...
'String','Um =', ...
'Style','text');
ud.Handles.edit_Umax = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'HorizontalAlignment','left');
% disturbances
Y=Y-Vgap;
ud.Handles.check_DT=uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextWL TextH], ...
'ForegroundColor','b',...
'FontSize',10,...
'String','External Disturbance', ...
'Style','Checkbox', ...
'HorizontalAlignment','left');
Y=Y-Vgap;
uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextW TextH], ...
'String','E =', ...
'Style','text');
ud.Handles.edit_E = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'HorizontalAlignment','left');
Y=Y-Vgap;
uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextW TextH], ...
'String','w(t) =', ...
'Style','text');
ud.Handles.edit_w = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'Tag','t', ...
'Callback',{@edit_NF_Callback, gco}, ...
'HorizontalAlignment','left');
% For resonance modes
Y=Y-Vgap;
ud.Handles.check_RM=uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextWL TextH], ...
'FontSize',10,...
'String','Resonant Modes (LTI Model)', ...
'Style','Checkbox', ...
'HorizontalAlignment','left');
Y=Y-Vgap;
uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextW TextH], ...
'String','RM =', ...
'Style','text');
ud.Handles.edit_RM = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'Callback',{@edit_RM_Callback,gco}, ...
'HorizontalAlignment','left');
% For Nonlinear part
Y=Y-Vgap;
ud.Handles.check_NL=uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextWL TextH], ...
'ForegroundColor','b',...
'FontSize',10,...
'String','Static Nonlinearity in Input Channel', ...
'Style','Checkbox', ...
'HorizontalAlignment','left');
Y=Y-Vgap;
uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',Params.StdColor, ...
'Position',[X0,Y, TextW TextH], ...
'String','g(y) =', ...
'Style','text', ...
'HorizontalAlignment','center');
% Y=Y-Vgap;
ud.Handles.edit_NF = uicontrol('Parent',ThisFig, ...
'Unit',Params.StdUnit,...
'BackgroundColor',[1 1 1], ...
'Position',[X Y EditW EditH], ...
'Style','edit', ...
'Tag','y', ...
'Callback',{@edit_NF_Callback,gco}, ...
'HorizontalAlignment','left');
% Fill the initial system data
handles=ud.Handles;
set(handles.edit_Name,'String', cnfdb.System.Name);
if isempty(cnfdb.Entry.A)
set(handles.edit_A,'String', matrix2str(cnfdb.System.A));
else
set(handles.edit_A,'String', cnfdb.Entry.A);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -