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

📄 cnf_set.m

📁 hard disk drive servo control tools, it is very helpful
💻 M
📖 第 1 页 / 共 4 页
字号:
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], ...
   'ForegroundColor','b',...
   '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);

⌨️ 快捷键说明

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