www.pudn.com > hhu_pfcp.rar > printpf.m


function printpf(baseMVA, bus, gen, branch, f, success, et, fd, mpopt)
%PRINTPF   Prints power flow results.
%   printpf(baseMVA, bus, gen, branch, f, success, et, fd, mpopt) prints
%   powerflow results to fd (a file descriptor which defaults to STDOUT).
%   mpopt is a MATPOWER options vector (see 'help mpoption' for details).
%   Uses default options if this parameter is not given. The objective
%   function value is given in f and the elapsed time (seconds to compute
%   opf) in et.

%   MATPOWER
%   $Id: printpf.m,v 1.27 2007/06/26 16:16:17 ray Exp $
%   by Ray Zimmerman, PSERC Cornell
%   Copyright (c) 1996-2004 by Power System Engineering Research Center (PSERC)
%   See http://www.pserc.cornell.edu/matpower/ for more info.

%%----- initialization -----
%% default arguments
if nargin < 9
    mpopt = mpoption;   %% use default options
    if nargin < 8
        fd = 1;         %% print to stdio by default
    end
end
if isempty(f)
    isOPF = 0;      %% have only simple PF data
else
    isOPF = 1;      %% have OPF data
end

%% options
dc              = mpopt(10);        %% use DC formulation?
OUT_ALL         = mpopt(32);
OUT_ANY         = OUT_ALL == 1;     %% set to true if any pretty output is to be generated
OUT_SYS_SUM     = OUT_ALL == 1 | (OUT_ALL == -1 & mpopt(33));
OUT_AREA_SUM    = OUT_ALL == 1 | (OUT_ALL == -1 & mpopt(34));
OUT_BUS         = OUT_ALL == 1 | (OUT_ALL == -1 & mpopt(35));
OUT_BRANCH      = OUT_ALL == 1 | (OUT_ALL == -1 & mpopt(36));
OUT_GEN         = OUT_ALL == 1 | (OUT_ALL == -1 & mpopt(37));
OUT_ANY         = OUT_ANY | (OUT_ALL == -1 & (OUT_SYS_SUM | OUT_AREA_SUM | OUT_BUS | OUT_BRANCH | OUT_GEN));
if OUT_ALL == -1
    OUT_ALL_LIM = mpopt(38);
elseif OUT_ALL == 1
    OUT_ALL_LIM = 2;
else
    OUT_ALL_LIM = 0;
end
OUT_ANY         = OUT_ANY | OUT_ALL_LIM >= 1;
if OUT_ALL_LIM == -1
    OUT_V_LIM       = mpopt(39);
    OUT_LINE_LIM    = mpopt(40);
    OUT_PG_LIM      = mpopt(41);
    OUT_QG_LIM      = mpopt(42);
else
    OUT_V_LIM       = OUT_ALL_LIM;
    OUT_LINE_LIM    = OUT_ALL_LIM;
    OUT_PG_LIM      = OUT_ALL_LIM;
    OUT_QG_LIM      = OUT_ALL_LIM;
end
OUT_ANY         = OUT_ANY | (OUT_ALL_LIM == -1 & (OUT_V_LIM | OUT_LINE_LIM | OUT_PG_LIM | OUT_QG_LIM));
OUT_RAW         = mpopt(43);

%% define named indices into bus, gen, branch matrices
[PQ, PV, REF, NONE, BUS_I, BUS_TYPE, PD, QD, GS, BS, BUS_AREA, VM, ...
    VA, BASE_KV, ZONE, VMAX, VMIN, LAM_P, LAM_Q, MU_VMAX, MU_VMIN] = idx_bus;
[GEN_BUS, PG, QG, QMAX, QMIN, VG, MBASE, GEN_STATUS, PMAX, PMIN, ...
    MU_PMAX, MU_PMIN, MU_QMAX, MU_QMIN, PC1, PC2, QC1MIN, QC1MAX, ...
    QC2MIN, QC2MAX, RAMP_AGC, RAMP_10, RAMP_30, RAMP_Q, APF] = idx_gen;
[F_BUS, T_BUS, BR_R, BR_X, BR_B, RATE_A, RATE_B, RATE_C, ...
    TAP, SHIFT, BR_STATUS, PF, QF, PT, QT, MU_SF, MU_ST, ...
    ANGMIN, ANGMAX, MU_ANGMIN, MU_ANGMAX] = idx_brch;

%% constant
j = sqrt(-1);

%% internal bus number
e2i = zeros(max(bus(:, BUS_I)), 1);     %% need internal bus numbering for a second
e2i(bus(:, BUS_I)) = [1:size(bus, 1)]';

%% sizes of things
nb = size(bus, 1);      %% number of buses
nl = size(branch, 1);   %% number of branches
ng = size(gen, 1);      %% number of generators

%% zero out some data to make printout consistent for DC case
if dc
    bus(:, [QD, BS])            = zeros(nb, 2);
    gen(:, [QG, QMAX, QMIN])    = zeros(ng, 3);
    branch(:, [BR_R, BR_B])     = zeros(nl, 2);
end

%% parameters
ties = find(bus(e2i(branch(:, F_BUS)), BUS_AREA) ~= bus(e2i(branch(:, T_BUS)), BUS_AREA));
                        %% area inter-ties
tap = ones(nl, 1);                              %% default tap ratio = 1 for lines
xfmr = find(branch(:, TAP));                    %% indices of transformers
tap(xfmr) = branch(xfmr, TAP);                  %% include transformer tap ratios
tap = tap .* exp(j*pi/180 * branch(:, SHIFT)); %% add phase shifters
nzld = find(bus(:, PD) | bus(:, QD));
sorted_areas = sort(bus(:, BUS_AREA));
s_areas = sorted_areas([1; find(diff(sorted_areas))+1]);    %% area numbers
na = length(s_areas);                           %% number of areas
nzsh = find(bus(:, GS) | bus(:, BS));
allg = find( ~isload(gen) );
ong  = find( gen(:, GEN_STATUS) > 0 & ~isload(gen) );
onld = find( gen(:, GEN_STATUS) > 0 &  isload(gen) );
V = bus(:, VM) .* exp(sqrt(-1) * pi/180 * bus(:, VA));
out = find(branch(:, BR_STATUS) == 0);          %% out-of-service branches
nout = length(out);
if dc
    loss = zeros(nl,1);
else
    loss = baseMVA * abs(V(e2i(branch(:, F_BUS))) ./ tap - V(e2i(branch(:, T_BUS)))) .^ 2 ./ ...
                (branch(:, BR_R) - j * branch(:, BR_X));
end
fchg = abs(V(e2i(branch(:, F_BUS))) ./ tap) .^ 2 .* branch(:, BR_B) * baseMVA / 2;
tchg = abs(V(e2i(branch(:, T_BUS)))       ) .^ 2 .* branch(:, BR_B) * baseMVA / 2;
loss(out) = zeros(nout, 1);
fchg(out) = zeros(nout, 1);
tchg(out) = zeros(nout, 1);

%%----- print the stuff -----
if OUT_ANY
    %% convergence & elapsed time
    if success
                     fprintf(fd, '\n****潮流计算时间 %.2f 秒***', et);
    else
        fprintf(fd, '\nDid not converge (%.2f seconds)\n', et);
    end
    
    %% objective function value
    if isOPF
        fprintf(fd, '\nObjective Function Value = %.2f $/hr', f);
    end
end
if OUT_SYS_SUM
   %% fprintf(fd, '\n================================================================================');
   %% fprintf(fd, '\n|     系统概况                                                           |');
   %% fprintf(fd, '\n================================================================================');
   %% fprintf(fd, '\n\n基本情况                How much?              P (MW)            Q (MVAr)');
   %% fprintf(fd, '\n---------------------    -------------------  -------------  -----------------');
   %% fprintf(fd, '\n母线           %6d     总容量   %7.1f       %7.1f to %.1f', nb, sum(gen(allg, PMAX)), sum(gen(allg, QMIN)), sum(gen(allg, QMAX)));
   %% fprintf(fd, '\n发电机         %5d     On-line Capacity     %7.1f       %7.1f to %.1f', length(allg), sum(gen(ong, PMAX)), sum(gen(ong, QMIN)), sum(gen(ong, QMAX)));
    %%fprintf(fd, '\nCommitted Gens %5d     Generation (actual)  %7.1f           %7.1f', length(ong), sum(gen(ong, PG)), sum(gen(ong, QG)));
   %% fprintf(fd, '\n负荷           %5d     负荷                 %7.1f           %7.1f', length(nzld)+length(onld), sum(bus(nzld, PD))-sum(gen(onld, PG)), sum(bus(nzld, QD))-sum(gen(onld, QG)));
    %%fprintf(fd, '\n  Fixed        %5d       Fixed              %7.1f           %7.1f', length(nzld), sum(bus(nzld, PD)), sum(bus(nzld, QD)));
    %%fprintf(fd, '\n  Dispatchable %5d       Dispatchable       %7.1f of %-7.1f%7.1f', length(onld), -sum(gen(onld, PG)), -sum(gen(onld, PMIN)), -sum(gen(onld, QG)));
    %%fprintf(fd, '\nShunts         %5d     Shunt (inj)          %7.1f           %7.1f', length(nzsh), ...
      %%  -sum(bus(nzsh, VM) .^ 2 .* bus(nzsh, GS)), sum(bus(nzsh, VM) .^ 2 .* bus(nzsh, BS)) );
    %%fprintf(fd, '\n支路           %5d     线路损耗 (I^2 * Z)     %8.2f          %8.2f', nl, sum(real(loss)), sum(imag(loss)) );
    %%fprintf(fd, '\n变压器         %5d     支路充电功率 (inj)       -            %7.1f', length(xfmr), sum(fchg) + sum(tchg) );
    %%fprintf(fd, '\nInter-ties     %5d     Total Inter-tie Flow %7.1f           %7.1f', length(ties), sum(abs(branch(ties, PF)-branch(ties, PT))) / 2, sum(abs(branch(ties, QF)-branch(ties, QT))) / 2);
    %%fprintf(fd, '\nAreas          %5d', length(s_areas));
    
    
    fprintf(fd, '\n================================================================================');
    fprintf(fd, '\n|                      所  进  行 计 算 系 统 概 况                             |');
    fprintf(fd, '\n================================================================================');
    %%fprintf(fd, '\n\n基本情况                How much?              P (MW)            Q (MVAr)');
   %% fprintf(fd, '\n---------------------    -------------------  -------------  -----------------');
    fprintf(fd, '\n节点           %6d 个             其中含发电机节点         %5d 个 ', nb,length(allg));
    %%fprintf(fd, '\    On-line Capacity     %7.1f       %7.1f to %.1f', , sum(gen(ong, PMAX)), sum(gen(ong, QMIN)), sum(gen(ong, QMAX)));
    %%fprintf(fd, '\nCommitted Gens %5d     Generation (actual)  %7.1f           %7.1f', length(ong), sum(gen(ong, PG)), sum(gen(ong, QG)));
   %% fprintf(fd, '\n负荷           %5d     负荷                 %7.1f           %7.1f', length(nzld)+length(onld), sum(bus(nzld, PD))-sum(gen(onld, PG)), sum(bus(nzld, QD))-sum(gen(onld, QG)));
    %%fprintf(fd, '\n  Fixed        %5d       Fixed              %7.1f           %7.1f', length(nzld), sum(bus(nzld, PD)), sum(bus(nzld, QD)));
    %%fprintf(fd, '\n  Dispatchable %5d       Dispatchable       %7.1f of %-7.1f%7.1f', length(onld), -sum(gen(onld, PG)), -sum(gen(onld, PMIN)), -sum(gen(onld, QG)));
    %%fprintf(fd, '\nShunts         %5d     Shunt (inj)          %7.1f           %7.1f', length(nzsh), ...
      %%  -sum(bus(nzsh, VM) .^ 2 .* bus(nzsh, GS)), sum(bus(nzsh, VM) .^ 2 .* bus(nzsh, BS)) );
    fprintf(fd,' \n支路           %5d条              其中变压器支路           %5d条', nl, length(xfmr));
   %% fprintf(fd, '\n     支路充电功率 (inj)       -            %7.1f', , sum(fchg) + sum(tchg) );
    %%fprintf(fd, '\nInter-ties     %5d     Total Inter-tie Flow %7.1f           %7.1f', length(ties), sum(abs(branch(ties, PF)-branch(ties, PT))) / 2, sum(abs(branch(ties, QF)-branch(ties, QT))) / 2);
    %%fprintf(fd, '\nAreas          %5d', length(s_areas));
    
   
        
    fprintf(fd, '\n');
    fprintf(fd, '\n                          最小值                      最大值');
    fprintf(fd, '\n                 -------------------------  --------------------------------');
    [minv, mini] = min(bus(:, VM));
    [maxv, maxi] = max(bus(:, VM));
    fprintf(fd, '\n电压幅值   %7.3f p.u. @ 节点 %-4d     %7.3f p.u. @ 节点 %-4d', minv, bus(mini, BUS_I), maxv, bus(maxi, BUS_I));
    [minv, mini] = min(bus(:, VA));
    [maxv, maxi] = max(bus(:, VA));
    fprintf(fd, '\n电压相角   %8.2f deg  @节点 %-4d   %8.2f deg   @  节点 %-4d', minv, bus(mini, BUS_I), maxv, bus(maxi, BUS_I));
    if ~dc
        [maxv, maxi] = max(real(loss));
        fprintf(fd, '\n有功损耗 (I^2*R)             -              %8.2f MW    @ 线路 %d-%d', maxv, branch(maxi, F_BUS), branch(maxi, T_BUS));
        [maxv, maxi] = max(imag(loss));
        fprintf(fd, '\n无功损耗 (I^2*X)             -              %8.2f MVAr  @ 线路 %d-%d', maxv, branch(maxi, F_BUS), branch(maxi, T_BUS));
    end
    if isOPF
        [minv, mini] = min(bus(:, LAM_P));
        [maxv, maxi] = max(bus(:, LAM_P));
        fprintf(fd, '\nLambda P        %8.2f $/MWh @ bus %-4d   %8.2f $/MWh @ bus %-4d', minv, bus(mini, BUS_I), maxv, bus(maxi, BUS_I));
        [minv, mini] = min(bus(:, LAM_Q));
        [maxv, maxi] = max(bus(:, LAM_Q));
        fprintf(fd, '\nLambda Q        %8.2f $/MWh @ bus %-4d   %8.2f $/MWh @ bus %-4d', minv, bus(mini, BUS_I), maxv, bus(maxi, BUS_I));
    end
    fprintf(fd, '\n');
end
disp('  ')
disp('  ')

disp('                             ****按任意键继续,显示节点潮流计算结果****            ')
pause

        
%% bus data
if OUT_BUS
    fprintf(fd, '\n================================================================================');
    fprintf(fd, '\n|                  节     点     潮     流    计    算   结    果               |');
    fprintf(fd, '\n================================================================================');
    fprintf(fd, '\n 节 点      电 压           发 电 机             负 荷        ');
    if isOPF, fprintf(fd, '  Lambda($/MVA-hr)'); end
    fprintf(fd, '\n  #   Mag(pu) Ang(deg)   P (MW)   Q (MVAr)   P (MW)   Q (MVAr)');
    if isOPF, fprintf(fd, '     P        Q   '); end
    fprintf(fd, '\n----- ------- --------  --------  --------  --------  --------');
    if isOPF, fprintf(fd, '  -------  -------'); end
    for i = 1:nb
        fprintf(fd, '\n%5d%7.3f%9.3f', bus(i, [BUS_I, VM, VA]));
        g  = find(gen(:, GEN_STATUS) > 0 & gen(:, GEN_BUS) == bus(i, BUS_I) & ...
                    ~isload(gen));
        ld = find(gen(:, GEN_STATUS) > 0 & gen(:, GEN_BUS) == bus(i, BUS_I) & ...
                    isload(gen));
        if ~isempty(g)
            fprintf(fd, '%10.2f%10.2f', sum(gen(g, PG)), sum(gen(g, QG)));
        else
            fprintf(fd, '       -         -  ');
        end
        if bus(i, PD) | bus(i, QD) | ~isempty(ld)
            if ~isempty(ld)
                fprintf(fd, '%10.2f*%9.2f*', bus(i, PD) - sum(gen(ld, PG)), ...
                                             bus(i, QD) - sum(gen(ld, QG)));
            else
                fprintf(fd, '%10.2f%10.2f ', bus(i, [PD, QD]));
            end
        else
            fprintf(fd, '       -         -   ');
        end
        if isOPF
            fprintf(fd, '%9.3f', bus(i, LAM_P));
            if abs(bus(i, LAM_Q)) > 1e-6
                fprintf(fd, '%8.3f', bus(i, LAM_Q));
            else
                fprintf(fd, '     -');
            end
        end
    end
    fprintf(fd, '\n                        --------  --------  --------  --------');
    fprintf(fd, '\n               合计: %9.2f %9.2f %9.2f %9.2f', ...
        sum(gen(ong, PG)), sum(gen(ong, QG)), ...
        sum(bus(nzld, PD)) - sum(gen(onld, PG)), ...
        sum(bus(nzld, QD)) - sum(gen(onld, QG)));
    fprintf(fd, '\n');
end
 fprintf(fd, '\n');
%
disp('                             ****按任意键继续显示,支路潮流计算结果****            ')
pause

if OUT_BRANCH
    fprintf(fd, '\n================================================================================');
    fprintf(fd, '\n|                         支   路   潮   流  结   果                           |');
    fprintf(fd, '\n================================================================================');
    fprintf(fd, '\n支路   首节点  末节点      首节点功率       末节点功率         线路损耗 (I^2 * Z)  ');
    fprintf(fd, '\n  #     Bus    Bus    P (MW)   Q (MVAr)   P (MW)   Q (MVAr)   P (MW)   Q (MVAr)');
    fprintf(fd, '\n-----  -----  -----  --------  --------  --------  --------  --------  --------');
    fprintf(fd, '\n%4d%7d%7d%10.2f%10.2f%10.2f%10.2f%10.3f%10.2f', ...
            [   [1:nl]', branch(:, [F_BUS, T_BUS]), ...
                branch(:, [PF, QF]), branch(:, [PT, QT]), ...
                real(loss), imag(loss) ...
            ]');
    fprintf(fd, '\n                                                             --------  --------');
    fprintf(fd, '\n                                                    合计:%10.3f%10.2f', ...
            sum(real(loss)), sum(imag(loss)));
    fprintf(fd, '\n');
end
  disp('  ')
disp('  ')  
disp('                       ****本次潮流计算已经结束,请进行选择****            ')
disp('              --------------------------   ')
disp('                              [1].继 续 进 行 潮 流 计 算                                                                         '   )
%disp('|参考文献: H. Wang, C. E. Murillo-Sánchez, R. D. Zimmerman, R. J. Thomas, “On Computational Issues of                  |')
%disp('| Market-Based Optimal Power Flow”, IEEE Transactions on Power Systems, Vol. 22, No. 3,Aug. 2007, pp. 1185-1193.    \   |')
disp('              --------------------------   ')


disp('                              [2].退 出 潮 流 计 算 程 序   ')
%%disp('        参考文献:  W. F. Tinney and C. E. Hart, “Power Flow Solution by Newton’s Method”, IEEE Transactions on')
%%disp (' Power Apparatus and Systems, Vol. PAS-86, No. 11, Nov. 1967, pp. 1449-1460. ')
disp('              --------------------------   ')
disp('  ')
disp('  ')

choice = input('  *** \输入您的选择[1--2之间]*** :       ');
disp('  ')
disp('  ')


switch choice
    case 1
     hhu_runpf
    case 2
     disp('     ****  谢谢使用Power Flow Calculation Packages,使用过程中有问题,联系e-mail:hhusgq@hhu.edu.cn ****            ');
end