📄 fm_opffig.m
字号:
function fig = fm_opffig(varargin)
% FM_OPFFIG create GUI for Optimal Power Flow settings
%
% HDL = FM_OPFFIG
%
%see OPF structure for settings
%
%Author: Federico Milano
%Date: 11-Nov-2002
%Updte: 08-Feb-2003
%Version: 1.0.2
%
%E-mail: fmilano@thunderbox.uwaterloo.ca
%Web-site: http://thunderbox.uwaterloo.ca/~fmilano
%
% Copyright (C) 2002-2006 Federico Milano
global Settings Path OPF Theme Fig
if nargin
switch varargin{1}
case 'vlimits'
a = fm_input({'Vmax','Vmin'},'Voltage Limits',1, ...
{num2str(OPF.vmax),num2str(OPF.vmin)},'off');
if ~isempty(a)
try
OPF.vmax = str2num(a{1});
catch
fm_disp('Maximum voltage limit couldn''t be changed')
OPF.vmax = 1.2;
end
try
OPF.vmin = str2num(a{2});
catch
OPF.vmin = 0.8;
fm_disp('Minimum voltage limit couldn''t be changed')
end
end
if isempty(OPF.vmax)
fm_disp('Maximum voltage limit couldn''t be changed')
OPF.vmax = 1.2;
end
if isempty(OPF.vmin)
fm_disp('Minimum voltage limit couldn''t be changed')
OPF.vmax = 0.8;
end
case 'flows'
OPF.enflow = ~OPF.enflow;
hdl = findobj(Fig.opf,'Tag','PopupMenu2');
if OPF.enflow,
set(gcbo,'Checked','on')
set(hdl,'Enable','on');
else
set(gcbo,'Checked','off')
set(hdl,'Enable','off');
end
case 'voltages'
OPF.envolt = ~OPF.envolt;
if OPF.envolt,
set(gcbo,'Checked','on')
else
set(gcbo,'Checked','off')
end
case 'reactive'
OPF.enreac = ~OPF.enreac;
if OPF.enreac,
set(gcbo,'Checked','on')
else
set(gcbo,'Checked','off')
end
case 'tiebreak'
OPF.tiebreak = ~OPF.tiebreak;
if OPF.tiebreak,
set(gcbo,'Checked','on')
else
set(gcbo,'Checked','off')
end
case 'omega'
lasterr('');
hdl_omeg = findobj(Fig.opf,'Tag','EditText1');
s_omega = get(hdl_omeg,'String');
try, eval(['OPFomega = ',s_omega,';'])
catch, fm_disp(lasterr,2), set(hdl_omeg,'String',OPF.omega_s), return, end
if max(OPFomega) > 1 | min(OPFomega) < 0
fm_disp('The weighting factor must be within the range [0,1].',2)
set(hdl_omeg,'String',OPF.omega_s), return
end
[ao,bo] = size(OPFomega);
if ao > 1 & bo > 1
fm_disp('The weighting factor must be a vector.',2)
set(hdl_omeg,'String',OPF.omega_s), return
end
OPF.omega = OPFomega;
OPF.omega_s = s_omega;
fm_disp(['Parameter "OPF.omega" set to "',OPF.omega_s,'".'],1)
case 'lmin'
lasterr('');
hdl_lmin = findobj(Fig.opf,'Tag','EditText2');
s_lmin = get(hdl_lmin,'String');
try
eval(['OPFlmin = ',s_lmin,';'])
catch
fm_disp(lasterr,2),
set(hdl_lmin,'String',OPF.lmin_s)
return
end
if max(OPFlmin) > OPF.lmax
fm_disp('Lambda_min must be less than Lambda_max.',2)
set(hdl_lmin,'String',OPF.lmin_s), return,
end
[al,bl] = size(OPFlmin);
if al > 1 | bl > 1
fm_disp('The loading parameter must be a scalar.',2)
set(hdl_lmin,'String',OPF.lmin_s)
return
end
OPF.lmin = OPFlmin;
OPF.lmin_s = s_lmin;
fm_disp(['Parameter "OPF.lmin" set to "',OPF.lmin_s,'".'],1)
end
return
end
if Fig.opf, figure(Fig.opf), return, end
rs = 0.4344/0.5;
dy = (0.5-0.4344)/0.5;
df = 1+1.35*(0.5-0.4344);
flussi = {'Currents';
'Active Powers';
'Apparent Powers'};
metodi = {'Newton Direction';
'Mehrotra Predictor/Corrector'};
tipi = {'Single OPF';
'Pareto Set';
'Dayly Forecast';
'ATC (by CPF)';
'ATC (by sensitivity analysis)'};
guess = {'Flat Start',
'Actual Power Flow Solution'};
h0 = figure('Units','normalized', ...
'Color',Theme.color02, ...
'Colormap',[], ...
'CreateFcn', 'Fig.opf = gcf;', ...
'DeleteFcn', 'Fig.opf = 0;', ...
'MenuBar','none', ...
'Name','PSAT-OPF', ...
'NumberTitle','off', ...
'PaperPosition',[18 180 576 432], ...
'PaperUnits','points', ...
'Position',sizefig(0.5686,0.5), ...
'Resize','on', ...
'ToolBar','none', ...
'FileName','fm_opffig');
fm_set colormap
% Menu File
h1 = uimenu('Parent',h0, ...
'Label','File', ...
'Tag','MenuFile');
h2 = uimenu('Parent',h1, ...
'Callback','close(gcf)', ...
'Label','Exit', ...
'Tag','NetSett', ...
'Accelerator','x');
% Menu Edit
h1 = uimenu('Parent',h0, ...
'Label','Edit', ...
'Tag','MenuEdit');
h2 = uimenu('Parent',h1, ...
'Callback','fm_setting', ...
'Label','General Settings', ...
'Tag','ToolSett', ...
'Accelerator','s');
% Menu Run
h1 = uimenu('Parent',h0, ...
'Label','Run', ...
'Tag','MenuRun');
h2 = uimenu('Parent',h1, ...
'Callback','fm_set opf', ...
'Label','Run OPF', ...
'Tag','ToolOPFSett', ...
'Accelerator','z');
% Menu Options
h1 = uimenu('Parent',h0, ...
'Label','Options', ...
'Tag','MenuOpt');
h2 = uimenu('Parent',h1, ...
'Callback','fm_opffig flows', ...
'Label','Enable Flow limits', ...
'Tag','Opt1');
if OPF.enflow,
set(h2,'Checked','on'),
else,
set(h2,'Checked','off'),
end
h2 = uimenu('Parent',h1, ...
'Callback','fm_opffig voltages', ...
'Label','Enable Voltage Limits', ...
'Tag','Opt2');
if OPF.envolt,
set(h2,'Checked','on'),
else,
set(h2,'Checked','off'),
end
h2 = uimenu('Parent',h1, ...
'Callback','fm_opffig reactive', ...
'Label','Enable Reactive Limits', ...
'Tag','Opt3');
if OPF.enreac,
set(h2,'Checked','on'),
else,
set(h2,'Checked','off'),
end
h2 = uimenu('Parent',h1, ...
'Callback','fm_opffig tiebreak', ...
'Label','Enforce Tiebreaking', ...
'Tag','Opt3');
if OPF.tiebreak,
set(h2,'Checked','on'),
else,
set(h2,'Checked','off'),
end
h2 = uimenu('Parent',h1, ...
'Callback','fm_opffig vlimits', ...
'Label','Set Voltage Limits', ...
'Tag','Opt4');
%a = fm_input({'Vmax','Vmin'},'OPF settings',1,{num2str(OPF.vmax),num2str(OPF.vmin)},'off')
h1 = uicontrol('Parent',h0, ...
'Units', 'normalized', ...
'BackgroundColor',Theme.color02, ...
'ForegroundColor',Theme.color03, ...
'Position',[0.025 0.275*rs 0.95 0.675*df], ...
'Style','frame', ...
'Tag','Frame1');
% Popup Menus
h1 = uicontrol('Parent',h0, ...
'Units', 'normalized', ...
'BackgroundColor',Theme.color04, ...
'Callback', 'OPF.method = get(gcbo,''Value'');', ...
'FontName', Theme.font01, ...
'ForegroundColor',Theme.color05, ...
'Position',[0.608 0.79*rs+dy 0.342 0.06*rs], ...
'String',metodi, ...
'Style','popupmenu', ...
'Tag','PopupMenu1', ...
'Value',OPF.method);
h1 = uicontrol('Parent',h0, ...
'Units', 'normalized', ...
'BackgroundColor',Theme.color04, ...
'Callback', 'OPF.flow = get(gcbo,''Value'');', ...
'ForegroundColor',Theme.color05, ...
'FontName', Theme.font01, ...
'Position',[0.608 0.64*rs+dy 0.342 0.06*rs], ...
'String',flussi, ...
'Style','popupmenu', ...
'Tag','PopupMenu2', ...
'Value',OPF.flow);
if OPF.enflow
set(h1,'Enable','on')
else
set(h1,'Enable','off')
end
h1 = uicontrol('Parent',h0, ...
'Units', 'normalized', ...
'BackgroundColor',Theme.color02, ...
'HorizontalAlignment','left', ...
'Position',[0.608 0.71*rs+dy 0.3 0.05*rs], ...
'String','Flow Limits', ...
'Style','text', ...
'Tag','StaticText11');
h1 = uicontrol('Parent',h0, ...
'Units', 'normalized', ...
'BackgroundColor',Theme.color02, ...
'HorizontalAlignment','left', ...
'Position',[0.608 0.86*rs+dy 0.3 0.05*rs], ...
'String','Solving Method', ...
'Style','text', ...
'Tag','StaticText12');
h1 = uicontrol('Parent',h0, ...
'Units', 'normalized', ...
'BackgroundColor',Theme.color04, ...
'Callback', 'OPF.type = get(gcbo,''Value'');', ...
'ForegroundColor',Theme.color05, ...
'FontName', Theme.font01, ...
'Position',[0.608 0.49*rs+dy 0.342 0.06*rs], ...
'String',tipi, ...
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -