📄 fm_stat.m
字号:
function fig = fm_stat(varargin)
% FM_STAT create GUI for power flow reports
%
% HDL = FM_STAT(VARARGIN)
%
%Author: Federico Milano
%Date: 11-Nov-2002
%Update: 24-Aug-2003
%Version: 2.0.0
%
%E-mail: fmilano@thunderbox.uwaterloo.ca
%Web-site: http://thunderbox.uwaterloo.ca/~fmilano
%
% Copyright (C) 2002-2006 Federico Milano
global Bus DAE Varname Settings Fig Path OPF Theme Snapshot
global Syn Exc Oxl File
if nargin & ischar(varargin{1})
switch varargin{1}
case 'report'
if OPF.init == 1 | OPF.init == 2
fm_opfrep
else
fm_report
end
case 'toplist'
value = get(gcbo,'Value');
set(gcbo,'Value',value(end))
set(get(gcf,'UserData'), ...
'Value',value(end), ...
'ListboxTop',get(gcbo,'ListboxTop'));
case 'checkabs'
hdl = findobj(Fig.stat,'Tag','CheckABS');
switch get(gcbo,'Checked')
case 'on'
set(gcbo,'Checked','off')
Settings.absvalues = 'off';
set(hdl,'Value',0);
case 'off'
set(gcbo,'Checked','on')
Settings.absvalues = 'on';
set(hdl,'Value',1);
end
case 'shunt'
hdl = findobj(Fig.stat,'Tag','CheckSHUNT');
switch get(gcbo,'Checked')
case 'on'
set(gcbo,'Checked','off')
Settings.shuntvalues = 'off';
set(hdl,'Value',0);
case 'off'
set(gcbo,'Checked','on')
Settings.shuntvalues = 'on';
set(hdl,'Value',1);
end
case 'violation'
hdl = findobj(Fig.stat,'Tag','CheckVIOL');
switch get(gcbo,'Checked')
case 'on'
set(gcbo,'Checked','off')
Settings.violations = 'off';
set(hdl,'Value',0);
case 'off'
set(gcbo,'Checked','on')
Settings.violations = 'on';
set(hdl,'Value',1);
end
case 'abscheck'
hdl = findobj(Fig.stat,'Tag','absvalues');
switch get(gcbo,'Value')
case 1
Settings.absvalues = 'on';
set(hdl,'Checked','on');
case 0
Settings.absvalues = 'off';
set(hdl,'Checked','off');
end
case 'shuntcheck'
hdl = findobj(Fig.stat,'Tag','shuntvalues');
switch get(gcbo,'Value')
case 1
Settings.shuntvalues = 'on';
set(hdl,'Checked','on');
case 0
Settings.shuntvalues = 'off';
set(hdl,'Checked','off');
end
case 'violcheck'
hdl = findobj(Fig.stat,'Tag','violations');
switch get(gcbo,'Value')
case 1
Settings.violations = 'on';
set(hdl,'Checked','on');
case 0
Settings.violations = 'off';
set(hdl,'Checked','off');
end
case 'sort'
hdl = findobj(gcf,'Tag','PushSort');
switch get(hdl,'UserData')
case 'az'
busn = min(150,Bus.n);
[a,ordbus] = sort(Varname.bus(1:busn));
[a,ordbus] = sort(Bus.con(ordbus,1));
h = get(gcf,'UserData');
for i = 1:length(h)
String = get(h(i),'String');
set(h(i),'String',String(ordbus))
end
set(hdl,'UserData','1n','CData',fm_mat('stat_sort12'))
case '1n'
busn = min(150,Bus.n);
[a,ordbus] = sort(Varname.bus(1:busn));
h = get(gcf,'UserData');
for i = 1:length(h)
String = get(h(i),'String');
set(h(i),'String',String(ordbus))
end
set(hdl,'UserData','az','CData',fm_mat('stat_sortaz'))
end
case 'kvpu'
hdl = findobj(gcf,'Tag','PushVoltage');
switch get(hdl,'UserData')
case 'pu'
set(findobj(Fig.stat,'Tag','ListboxV'),'String',setvar(DAE.V.*Bus.con(:,2)));
set(hdl,'UserData','kv','CData',fm_mat('stat_kv'))
case 'kv'
set(findobj(Fig.stat,'Tag','ListboxV'),'String',setvar(DAE.V));
set(hdl,'UserData','pu','CData',fm_mat('stat_pu'))
end
case 'plotv'
hdl = findobj(gcf,'Tag','PushVoltage');
figure
switch get(hdl,'UserData')
case 'pu'
bar(DAE.V)
ylabel('V [p.u.]')
case 'kv'
bar(DAE.V.*Bus.con(:,2))
ylabel('V [kV]')
end
title('Voltage Magnitude Profile')
xlabel('Bus #')
case 'raddeg'
hdl = findobj(gcf,'Tag','PushAngle');
switch get(hdl,'UserData')
case 'deg'
set(findobj(Fig.stat,'Tag','ListboxAng'),'String',setvar(DAE.a));
set(hdl,'UserData','rad','CData',fm_mat('stat_rad'))
case 'rad'
set(findobj(Fig.stat,'Tag','ListboxAng'),'String',setvar(DAE.a*180/pi));
set(hdl,'UserData','deg','CData',fm_mat('stat_deg'))
end
case 'plota'
hdl = findobj(gcf,'Tag','PushAngle');
figure
switch get(hdl,'UserData')
case 'rad'
bar(DAE.a)
ylabel('\theta [rad]')
case 'deg'
bar(DAE.a*180/pi)
ylabel('\theta [deg]')
end
title('Voltage Phase Profile')
xlabel('Bus #')
case 'realpower'
hdl1 = findobj(gcf,'Tag','PushPGL');
switch get(hdl1,'UserData')
case 'I', set(hdl1,'UserData','L')
case 'G', set(hdl1,'UserData','I')
case 'L', set(hdl1,'UserData','G')
end
hdl2 = findobj(gcf,'Tag','PushP');
switch get(hdl2,'UserData')
case 'mw'
set(hdl2,'UserData','pu','CData',fm_mat('stat_pu'))
fm_stat pgl
case 'pu'
set(hdl2,'UserData','mw','CData',fm_mat('stat_mw'))
fm_stat pgl
end
case 'pgl'
hdl1 = findobj(gcf,'Tag','PushPGL');
hdl2 = findobj(gcf,'Tag','PushP');
switch get(hdl2,'UserData')
case 'pu', mva = 1;
case 'mw', mva = Settings.mva;
end
switch get(hdl1,'UserData')
case 'I'
set(findobj(Fig.stat,'Tag','ListboxP'),'String',setvar(Bus.Pg*mva));
set(hdl1,'UserData','G','CData',fm_mat('stat_pqg'))
case 'G'
set(findobj(Fig.stat,'Tag','ListboxP'),'String',setvar(Bus.Pl*mva));
set(hdl1,'UserData','L','CData',fm_mat('stat_pql'))
case 'L'
set(findobj(Fig.stat,'Tag','ListboxP'),'String',setvar((Bus.Pg-Bus.Pl)*mva));
set(hdl1,'UserData','I','CData',fm_mat('stat_pqi'))
end
case 'qgl'
hdl1 = findobj(gcf,'Tag','PushQGL');
hdl2 = findobj(gcf,'Tag','PushQ');
switch get(hdl2,'UserData')
case 'pu', mva = 1;
case 'mvar', mva = Settings.mva;
end
switch get(hdl1,'UserData')
case 'I'
set(findobj(Fig.stat,'Tag','ListboxQ'),'String',setvar(Bus.Qg*mva));
set(hdl1,'UserData','G','CData',fm_mat('stat_pqg'))
case 'G'
set(findobj(Fig.stat,'Tag','ListboxQ'),'String',setvar(Bus.Ql*mva));
set(hdl1,'UserData','L','CData',fm_mat('stat_pql'))
case 'L'
set(findobj(Fig.stat,'Tag','ListboxQ'),'String',setvar((Bus.Qg-Bus.Ql)*mva));
set(hdl1,'UserData','I','CData',fm_mat('stat_pqi'))
end
case 'plotp'
switch get(findobj(Fig.stat,'Tag','PushP'),'UserData')
case 'pu', mva = 1; unit = 'p.u.';
case 'mw', mva = Settings.mva; unit = 'MW';
end
switch get(findobj(Fig.stat,'Tag','PushPGL'),'UserData')
case 'I', pgl = Bus.Pg-Bus.Pl; tag = 'P_G - P_L';
case 'G', pgl = Bus.Pg; tag = 'P_G';
case 'L', pgl = Bus.Pl; tag = 'P_L';
end
figure
bar(pgl*mva)
ylabel([tag,' [',unit,']'])
title('Real Power Profile')
xlabel('Bus #')
case 'reactivepower'
hdl1 = findobj(gcf,'Tag','PushQGL');
switch get(hdl1,'UserData')
case 'I', set(hdl1,'UserData','L')
case 'G', set(hdl1,'UserData','I')
case 'L', set(hdl1,'UserData','G')
end
hdl2 = findobj(gcf,'Tag','PushQ');
switch get(hdl2,'UserData')
case 'mvar'
set(hdl2,'UserData','pu','CData',fm_mat('stat_pu'))
fm_stat qgl
case 'pu'
set(hdl2,'UserData','mvar','CData',fm_mat('stat_mvar'))
fm_stat qgl
end
case 'plotq'
switch get(findobj(Fig.stat,'Tag','PushQ'),'UserData')
case 'pu', mva = 1; unit = 'p.u.';
case 'mvar', mva = Settings.mva; unit = 'MVar';
end
switch get(findobj(Fig.stat,'Tag','PushQGL'),'UserData')
case 'I', qgl = Bus.Qg-Bus.Ql; tag = 'Q_G - Q_L';
case 'G', qgl = Bus.Qg; tag = 'Q_G';
case 'L', qgl = Bus.Ql; tag = 'Q_L';
end
figure
bar(qgl*mva)
ylabel([tag,' [',unit,']'])
title('Reactive Power Profile')
xlabel('Bus #')
end
return
end
% check for data file
if isempty(File.data)
fm_disp('Set a data file for viewing static report.',2)
return
end
% check for initial power flow solution
if ~Settings.init
fm_disp('Solve base case power flow...')
Settings.show = 0;
fm_set('lf')
Settings.show = 1;
if ~Settings.init, return, end
end
if Fig.stat > 0
figure(Fig.stat)
set(findobj(Fig.stat,'Tag','ListboxBus'),'String',setbus);
if strcmp(get(findobj(Fig.stat,'Tag','PushAngle'),'UserData'),'rad')
set(findobj(Fig.stat,'Tag','ListboxAng'),'String',setvar(DAE.a));
else
set(findobj(Fig.stat,'Tag','ListboxAng'),'String',setvar(DAE.a*180/pi));
end
if strcmp(get(findobj(Fig.stat,'Tag','PushVoltage'),'UserData'),'pu')
set(findobj(Fig.stat,'Tag','ListboxV'),'String',setvar(DAE.V));
else
set(findobj(Fig.stat,'Tag','ListboxV'),'String',setvar(DAE.V.*Bus.con(:,2)));
end
switch get(findobj(Fig.stat,'Tag','PushP'),'UserData')
case 'pu', mva = 1;
case 'mw', mva = Settings.mva;
end
switch get(findobj(Fig.stat,'Tag','PushPGL'),'UserData')
case 'I', pgl = Bus.Pg-Bus.Pl;
case 'G', pgl = Bus.Pg;
case 'L', pgl = Bus.Pl;
end
set(findobj(Fig.stat,'Tag','ListboxP'),'String',setvar(pgl*mva));
switch get(findobj(Fig.stat,'Tag','PushQ'),'UserData')
case 'pu', mva = 1;
case 'mvar', mva = Settings.mva;
end
switch get(findobj(Fig.stat,'Tag','PushQGL'),'UserData')
case 'I', qgl = Bus.Qg-Bus.Ql;
case 'G', qgl = Bus.Qg;
case 'L', qgl = Bus.Ql;
end
set(findobj(Fig.stat,'Tag','ListboxQ'),'String',setvar(qgl*mva));
set(findobj(Fig.stat,'Tag','ListboxState'),'String',setx);
if nargin > 0,
set(findobj(Fig.stat,'Tag','ListboxServ'),'String',varargin{1});
elseif OPF.init
set(findobj(Fig.stat,'Tag','ListboxServ'),'String',OPF.report);
else,
set(findobj(Fig.stat,'Tag','ListboxServ'),'String',[]);
end
return
end
if Bus.n > 150,
fm_disp(['Only the first 150 buses are reported in the Static', ...
' Report GUI'])
end
if DAE.n > 100,
fm_disp(['Only the first 100 state variables are reported in the Static', ...
' Report GUI'])
end
h0 = figure('Color',Theme.color01, ...
'Units', 'normalized', ...
'Colormap',[], ...
'CreateFcn','Fig.stat = gcf;', ...
'DeleteFcn','Fig.stat = 0;', ...
'FileName','fm_stat', ...
'MenuBar','none', ...
'Name','Static Report', ...
'NumberTitle','off', ...
'PaperPosition',[18 180 576 432], ...
'PaperUnits','points', ...
'Position',sizefig(0.6984,0.6377), ...
'Resize','on', ...
'ToolBar','none');
% Menu File
h1 = uimenu('Parent',h0, ...
'Label','File', ...
'Tag','MenuFile');
h2 = uimenu('Parent',h1, ...
'Callback','fm_stat report', ...
'Label','Create report', ...
'Tag','OTV', ...
'Accelerator','r');
h2 = uimenu('Parent',h1, ...
'Callback','close(gcf)', ...
'Label','Exit', ...
'Tag','NetSett', ...
'Accelerator','x', ...
'Separator','on');
% Menu View
h1 = uimenu('Parent',h0, ...
'Label','View', ...
'Tag','MenuView');
h2 = uimenu('Parent',h1, ...
'Callback','fm_stat plotv', ...
'Label','Voltage Profile', ...
'Tag','v_prof', ...
'Accelerator','v');
h2 = uimenu('Parent',h1, ...
'Callback','fm_stat plota', ...
'Label','Angle Profile', ...
'Tag','a_prof', ...
'Accelerator','a');
h2 = uimenu('Parent',h1, ...
'Callback','fm_stat plotp', ...
'Label','Real Power Profile', ...
'Tag','v_prof', ...
'Accelerator','p');
h2 = uimenu('Parent',h1, ...
'Callback','fm_stat plotq', ...
'Label','Reactive Power Profile', ...
'Tag','a_prof', ...
'Accelerator','q');
% Menu Preferences
h1 = uimenu('Parent',h0, ...
'Label','Preferences', ...
'Tag','MenuPref');
h2 = uimenu('Parent',h1, ...
'Callback','fm_stat kvpu', ...
'Label','Switch voltage units', ...
'Tag','tvopt', ...
'Accelerator','k');
h2 = uimenu('Parent',h1, ...
'Callback','fm_stat raddeg', ...
'Label','Switch radiant/degree', ...
'Tag','tvopt', ...
'Accelerator','d');
h2 = uimenu('Parent',h1, ...
'Callback','fm_stat realpower', ...
'Label','Switch real power units', ...
'Tag','tvopt', ...
'Accelerator','w');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -