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

📄 fm_stat.m

📁 这是一个很适合研究和学习用的电力系统仿真软件
💻 M
📖 第 1 页 / 共 2 页
字号:
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 + -