📄 nefgui.m
字号:
function nefgui(action, p1);
%NEFGUI GUI-Tool to manage Nefcon settings.
% NEFGUI is the main control window to all NEFCON settings.
%
% NEFGUI;
%
% See also NEFGUI_O, NEFGUI_E, NEFGUI_I and NEFCON.
% Author: Andreas Nuernberger, TU Braunschweig, August 1996; a.nuernberger@tu-bs.de
% contact: Ludger Merz, DASA-Airbus GmbH, Hamburg; ludger.merz@airbus.de
% Globals: described in nefmat
global NEFCON_PROT NEFCON_STAT NEFCON_UIH NEFCON_RULE NEFCON_OPT NEFCON_IFM NEFCON_EFM NEFCON_EFMN
global NEFCON_RATE NEFCON_FERR NEFCON_FIS NEFCON_NUMIN
global NEFCON_RBT NEFCON_RBND NEFCON_RBT1 NEFCON_RBND1 NEFCON_OBT NEFCON_OBND
global NEFCON_CYC
global NEFCON_STOP
global NEFCON_NOISE
%true if forward or backward button is pressed
global NEFCON_BTN
%actual cycle
global NEFCON_ACTCYC
global NEFCON_SYSNAME
global NEFCON_SYS
global NEFCON_SHANDLE
%settings of last simulation (for continue)
global NEFCON_X0 NEFCON_TIME NEFCON_YS
global NEFCON_STATEX
%actual input/output intervall and gain information
global NEFCON_INT NEFCON_GAIN
NEFCON_UIH = findobj('Tag', 'NEFCONGUI');
if nargin < 1
if NEFCON_UIH == []
action = 'initialize';
else
action = '';
end;
end;
% Information for all objects
statdColor=220/255*[1 1 1];
stateColor=[1 1 1];
yellow = [1 1 0];
bckfrmColor=230/255*[1 1 1];
frmColor=192/255*[1 1 1];
bckColor=230/255*[1 1 1];
btnColor=192/255*[1 1 1];
popupColor=192/255*[1 1 1];
editColor=255/255*[1 1 1];
blockColor=[0.7 0.7 1];
lineColor=[0 0 0];
if strcmp(computer,'PCWIN')
% used for buttons (always grey)
blockColor = btnColor;
end
%create controls
if strcmp(action, 'initialize') & NEFCON_UIH == [],
nefdef;
border=6;
spacing=8;
%Calculate Windowsize
figPos=get(0,'DefaultFigurePosition');
figPos(4) = 0.63 * figPos(3);
maxRight=figPos(3);
maxTop=figPos(4);
% uicontrol sizes
% btnWid = 110;
% btnHt = 23;
btnWid = maxRight/6;
btnHt = maxRight/25;
% calculate normalized units for resizeable window
Nborder = border/maxRight;
Nspacing= spacing/maxRight;
NbtnWid = btnWid/maxRight;
NbtnHt = btnHt/maxTop;
% userdata
localdata = [];
% open new window
h = figure( ...
'Name','Nefcon Control', ...
'NumberTitle','off', ...
'Color',bckColor, ...
'Visible','on', ...
'UserData',localdata, ...
'Units','pixels', ...
'DefaultAxesXColor','black', ...
'DefaultAxesYColor','black', ...
'MenuBar','none', ...
'Resize','on', ...
'Position',figPos, ...
'Nextplot','new', ...
'Tag','NEFCONGUI' ...
);
figPos=get(h,'position');
% create axes for line drawing etc.
hax=axes('Position', [0,0,1,1], ...
'Units', 'normalized', ...
'XLim', [0 1], 'yLim', [0 1], ...
'Visible','off');
% ---------------------------------------------
% create menus
% ---------------------------------------------
labelStr=menulabel('&File ');
fileHndl=uimenu(h,'Label',labelStr);
[labelStr,accelStr]=menulabel('&New System ^n');
uimenu(fileHndl,'Label',labelStr, ...
'Separator','off', ...
'Accelerator',accelStr, ...
'Interruptible', 'no', ...
'Callback','nefgui (''new'')');
[labelStr,accelStr]=menulabel('&Save settings ^s');
uimenu(fileHndl,'Label',labelStr, ...
'Separator','off', ...
'Accelerator',accelStr, ...
'Interruptible', 'no', ...
'Callback','nefgui (''save'')');
[labelStr,accelStr]=menulabel('&Load settings ^l');
uimenu(fileHndl,'Label',labelStr, ...
'Separator','off', ...
'Accelerator',accelStr, ...
'Interruptible', 'no', ...
'Callback','nefgui (''load'')');
[labelStr,accelStr]=menulabel('Save &fismatrix ^f');
uimenu(fileHndl,'Label',labelStr, ...
'Separator','on', ...
'Accelerator',accelStr, ...
'Interruptible', 'no', ...
'Callback','nefgui (''savef'')');
[labelStr,accelStr]=menulabel('Load fis&matrix ^m');
uimenu(fileHndl,'Label',labelStr, ...
'Separator','off', ...
'Accelerator',accelStr, ...
'Interruptible', 'no', ...
'Callback','nefgui (''loadf'')');
[labelStr,accelStr]=menulabel('Sho&w Loops ^w');
uimenu(fileHndl,'Label',labelStr, ...
'Separator','on', ...
'Accelerator',accelStr, ...
'Callback','nefgui (''shwlps'')');
[labelStr,accelStr]=menulabel('&Close window ^w');
uimenu(fileHndl,'Label',labelStr, ...
'Separator','on', ...
'Accelerator',accelStr, ...
'Interruptible', 'yes', ...
'Callback','nefgui (''close'')');
labelStr=menulabel('&Edit ');
editHndl=uimenu(h, 'Label',labelStr, 'Tag','editmenu');
[labelStr,accelStr]=menulabel('&Input ^i');
uimenu(editHndl,'Label',labelStr, ...
'Separator','off', ...
'Accelerator',accelStr, ...
'Callback','nefgui_i');
[labelStr,accelStr]=menulabel('&Error ^e');
uimenu(editHndl,'Label',labelStr, ...
'Separator','off', ...
'Accelerator',accelStr, ...
'Callback','nefgui_e');
[labelStr,accelStr]=menulabel('&Learning System ^l');
uimenu(editHndl,'Label',labelStr, ...
'Separator','off', ...
'Accelerator',accelStr, ...
'Callback','nefgui_o');
[labelStr,accelStr]=menulabel('&Fuzzy Controller ^f');
uimenu(editHndl,'Label',labelStr, ...
'Separator','off', ...
'Accelerator',accelStr, ...
'Callback', ['global NEFCON_FIS;',...
'if NEFCON_FIS~=[], fuzzy(NEFCON_FIS);',...
'else, nefgui(''status'', ''ERROR: Fismatrix is empty'');',...
'end;',...
]);
% build window menu
labelStr=menulabel('&Window ');
uimenu(h, 'Label', labelStr, ...
'Callback', winmenu('callback'), 'Tag', 'winmenu');
winmenu(h); % Initialize the submenu
% build help menu
labelStr=menulabel('&Help ');
helpHndl=uimenu(h, 'Label',labelStr, 'Tag','helpmenu');
[labelStr,accelStr]=menulabel('&Help ^h');
uimenu(helpHndl,'Label',labelStr, ...
'Separator','off', ...
'Accelerator',accelStr, ...
'Callback','hthelp(''nefcon.htm#nefcontr'')');
% ---------------------------------------------
% button frame
% ---------------------------------------------
% The button frame
topFrmHndl=uicontrol(h, ...
'Style','frame', ...
'Units','normalized', ...
'Position',[0 2.5*Nspacing+2*NbtnHt 1 NbtnHt+Nspacing], ...
'BackgroundColor',frmColor);
% create close button
closeb = uicontrol(h, ...
'Style', 'push', ...
'String', 'Close', ...
'Units','normalized', ...
'Position', [1-Nspacing-NbtnWid 3*Nspacing+2*NbtnHt NbtnWid NbtnHt], ...
'CallBack', 'nefgui(''close'')');
% create help button
closeb = uicontrol(h, ...
'Style', 'push', ...
'String', 'Help', ...
'Units','normalized', ...
'Position', [1-2*(Nspacing+NbtnWid) 3*Nspacing+2*NbtnHt NbtnWid NbtnHt], ...
'CallBack', 'hthelp(''nefcon.htm#nefcontr'')');
% create reset button
resetb = uicontrol(h, ...
'Style', 'push', ...
'String', 'Reset', ...
'Units','normalized', ...
'Position', [1-3*(Nspacing+NbtnWid) 3*Nspacing+2*NbtnHt NbtnWid NbtnHt], ...
'CallBack', 'nefgui(''reset'')');
% create create button
resetb = uicontrol(h, ...
'Style', 'push', ...
'String', 'Create', ...
'Units','normalized', ...
'Position', [0+Nspacing 3*Nspacing+2*NbtnHt NbtnWid NbtnHt], ...
'Tag', 'create', ...
'CallBack', 'nefgui_c;');
% ---------------------------------------------
% the status frame
% ---------------------------------------------
% The STATUS frame
topFrmHndl=uicontrol(h, ...
'Style','frame', ...
'Units','normalized', ...
'Position',[0 0 1 2*NbtnHt+2*Nspacing], ...
'BackgroundColor',frmColor);
% The STATUS text window
statTxtH=uicontrol(h, ...
'Style','text', ...
'BackgroundColor',frmColor, ...
'HorizontalAlignment','left', ...
'Position',[Nspacing Nspacing+NbtnHt 1-2*Nspacing-3*NbtnHt NbtnHt], ...
'Units','normalized', ...
'Tag','stattxt', ...
'String','Status:');
stattext = ['Stopped '; ...
'Init '; ...
'Rule P1 '; ...
'Rule P2 '; ...
'Optimize '; ...
'Control '];
stwidth = (1-1*Nspacing)/6;
NEFCON_SHANDLE = [];
for i=1:6
if i == 1
statTxtH=uicontrol(h, ...
'Style','text', ...
'BackgroundColor',statdColor, ...
'HorizontalAlignment','center', ...
'Position',[Nspacing+(i-1)*stwidth Nspacing stwidth*0.95 NbtnHt*0.8], ...
'Units','normalized', ...
'Tag','status', ...
'String',deblank(stattext(i,:)));
else
statTxtH=uicontrol(h, ...
'Style','checkbox', ...
'BackgroundColor',statdColor, ...
'HorizontalAlignment','center', ...
'Position',[Nspacing+(i-1)*stwidth Nspacing stwidth*0.95 NbtnHt*0.8], ...
'Units','normalized', ...
'Tag','status', ...
'CallBack', ['nefgui(''statl'',', int2str(i), ');'], ...
'String',deblank(stattext(i,:)));
end
NEFCON_SHANDLE = [NEFCON_SHANDLE statTxtH];
end
% create backward button
bckb = uicontrol(h, ...
'Style', 'push', ...
'String', '<', ...
'Units','normalized', ...
'Position', [1-2*Nspacing-2*NbtnHt 1*Nspacing+NbtnHt NbtnHt NbtnHt], ...
'CallBack', ['global NEFCON_STAT NEFCON_RSTATE NEFCON_BTN;' ...
'NEFCON_STAT = NEFCON_STAT - 1;'...
'NEFCON_BTN = 1;' ...
'NEFCON_RSTATE = 0;' ...
'nefgui(''status'');'],...
'Tag','bckb');
% create forward button
forwb = uicontrol(h, ...
'Style', 'push', ...
'String', '>', ...
'Units','normalized', ...
'Position', [1-1*Nspacing-1*NbtnHt 1*Nspacing+NbtnHt NbtnHt NbtnHt], ...
'CallBack', ['global NEFCON_STAT NEFCON_RSTATE NEFCON_BTN;' ...
'NEFCON_STAT = NEFCON_STAT + 1;'...
'NEFCON_BTN = 1;' ...
'NEFCON_RSTATE = 0;' ...
'nefgui(''status'');'],...
'Tag','forwb');
% ---------------------------------------------
% simulation settings frame
% ---------------------------------------------
left = Nspacing;
bottom = 5*Nspacing+3*NbtnHt;
width = 1-2*Nspacing;
height = 3*NbtnHt+0*Nspacing;
right = left+width;
top = bottom+height-2*Nspacing;
% The current settings frame
topFrmHndl=uicontrol(h, ...
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -