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

📄 printpf.asv

📁 可进行电力系统多节点系统的优化潮流计算
💻 ASV
📖 第 1 页 / 共 3 页
字号:
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.19 2005/01/27 23:04:27 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 argumentsif nargin < 9    mpopt = mpoption;   %% use default options    if nargin < 8        fd = 1;         %% print to stdio by default    endendif isempty(f)    isOPF = 0;      %% have only simple PF dataelse    isOPF = 1;      %% have OPF dataend%% optionsdc              = mpopt(10);        %% use DC formulation?OUT_ALL         = mpopt(32);OUT_ANY         = OUT_ALL == 1;     %% set to true if any pretty output is to be generatedOUT_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;endOUT_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;endOUT_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] = 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] = idx_brch;%% constantj = sqrt(-1);%% internal bus numbere2i = zeros(max(bus(:, BUS_I)), 1);     %% need internal bus numbering for a seconde2i(bus(:, BUS_I)) = [1:size(bus, 1)]';%% sizes of thingsnb = size(bus, 1);      %% number of busesnl = size(branch, 1);   %% number of branchesng = size(gen, 1);      %% number of generators%% zero out some data to make printout consistent for DC caseif dc    bus(:, [QD, BS])            = zeros(nb, 2);    gen(:, [QG, QMAX, QMIN])    = zeros(ng, 3);    branch(:, [BR_R, BR_B])     = zeros(nl, 2);end%% parametersties = find(bus(e2i(branch(:, F_BUS)), BUS_AREA) ~= bus(e2i(branch(:, T_BUS)), BUS_AREA));                        %% area inter-tiestap = ones(nl, 1);                              %% default tap ratio = 1 for linesxfmr = find(branch(:, TAP));                    %% indices of transformerstap(xfmr) = branch(xfmr, TAP);                  %% include transformer tap ratiostap = tap .* exp(-j*pi/180 * branch(:, SHIFT)); %% add phase shiftersnzld = find(bus(:, PD) | bus(:, QD));sorted_areas = sort(bus(:, BUS_AREA));s_areas = sorted_areas([1; find(diff(sorted_areas))+1]);    %% area numbersna = length(s_areas);                           %% number of areasnzsh = 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 branchesnout = 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));endfchg = 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, '\nConverged in %.2f seconds', 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);    endendif OUT_SYS_SUM    fprintf(fd, '\n================================================================================');    fprintf(fd, '\n|     System Summary                                                           |');    fprintf(fd, '\n================================================================================');    fprintf(fd, '\n\nHow many?                How much?              P (MW)            Q (MVAr)');    fprintf(fd, '\n---------------------    -------------------  -------------  -----------------');    fprintf(fd, '\nBuses         %6d     Total Gen Capacity   %7.1f       %7.1f to %.1f', nb, sum(gen(allg, PMAX)), sum(gen(allg, QMIN)), sum(gen(allg, QMAX)));    fprintf(fd, '\nGenerators     %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, '\nLoads          %5d     Load                 %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, '\nBranches       %5d     Losses (I^2 * Z)     %8.2f          %8.2f', nl, sum(real(loss)), sum(imag(loss)) );    fprintf(fd, '\nTransformers   %5d     Branch Charging (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                          Minimum                      Maximum');    fprintf(fd, '\n                 -------------------------  --------------------------------');    [minv, mini] = min(bus(:, VM));    [maxv, maxi] = max(bus(:, VM));    fprintf(fd, '\nVoltage Magnitude %7.3f p.u. @ bus %-4d     %7.3f p.u. @ bus %-4d', minv, bus(mini, BUS_I), maxv, bus(maxi, BUS_I));    [minv, mini] = min(bus(:, VA));    [maxv, maxi] = max(bus(:, VA));    fprintf(fd, '\nVoltage Angle   %8.2f deg   @ bus %-4d   %8.2f deg   @ bus %-4d', minv, bus(mini, BUS_I), maxv, bus(maxi, BUS_I));    if ~dc        [maxv, maxi] = max(real(loss));        fprintf(fd, '\nP Losses (I^2*R)             -              %8.2f MW    @ line %d-%d', maxv, branch(maxi, F_BUS), branch(maxi, T_BUS));        [maxv, maxi] = max(imag(loss));        fprintf(fd, '\nQ Losses (I^2*X)             -              %8.2f MVAr  @ line %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');endif OUT_AREA_SUM    fprintf(fd, '\n================================================================================');    fprintf(fd, '\n|     Area Summary                                                             |');    fprintf(fd, '\n================================================================================');    fprintf(fd, '\nArea  # of      # of Gens        # of Loads         # of    # of   # of   # of');    fprintf(fd, '\n Num  Buses   Total  Online   Total  Fixed  Disp    Shunt   Brchs  Xfmrs   Ties');    fprintf(fd, '\n----  -----   -----  ------   -----  -----  -----   -----   -----  -----  -----');    for i=1:length(s_areas)        a = s_areas(i);        ib = find(bus(:, BUS_AREA) == a);        ig = find(bus(e2i(gen(:, GEN_BUS)), BUS_AREA) == a & ~isload(gen));        igon = find(bus(e2i(gen(:, GEN_BUS)), BUS_AREA) == a & gen(:, GEN_STATUS) > 0 & ~isload(gen));        ildon = find(bus(e2i(gen(:, GEN_BUS)), BUS_AREA) == a & gen(:, GEN_STATUS) > 0 & isload(gen));        inzld = find(bus(:, BUS_AREA) == a & (bus(:, PD) | bus(:, QD)));        inzsh = find(bus(:, BUS_AREA) == a & (bus(:, GS) | bus(:, BS)));        ibrch = find(bus(e2i(branch(:, F_BUS)), BUS_AREA) == a & bus(e2i(branch(:, T_BUS)), BUS_AREA) == a);        in_tie = find(bus(e2i(branch(:, F_BUS)), BUS_AREA) == a & bus(e2i(branch(:, T_BUS)), BUS_AREA) ~= a);        out_tie = find(bus(e2i(branch(:, F_BUS)), BUS_AREA) ~= a & bus(e2i(branch(:, T_BUS)), BUS_AREA) == a);        if length(xfmr)            nxfmr = length(find(bus(e2i(branch(xfmr, F_BUS)), BUS_AREA) == a & bus(e2i(branch(xfmr, T_BUS)), BUS_AREA) == a));        else            nxfmr = 0;        end        fprintf(fd, '\n%3d  %6d   %5d  %5d   %5d  %5d  %5d   %5d   %5d  %5d  %5d', ...            a, length(ib), length(ig), length(igon), ...            length(inzld)+length(ildon), length(inzld), length(ildon), ...            length(inzsh), length(ibrch), nxfmr, length(in_tie)+length(out_tie));    end    fprintf(fd, '\n----  -----   -----  ------   -----  -----  -----   -----   -----  -----  -----');    fprintf(fd, '\nTot: %6d   %5d  %5d   %5d  %5d  %5d   %5d   %5d  %5d  %5d', ...        nb, length(allg), length(ong), length(nzld)+length(onld), ...        length(nzld), length(onld), length(nzsh), nl, length(xfmr), length(ties));    fprintf(fd, '\n');    fprintf(fd, '\nArea      Total Gen Capacity           On-line Gen Capacity         Generation');    fprintf(fd, '\n Num     MW           MVAr            MW           MVAr             MW    MVAr');    fprintf(fd, '\n----   ------  ------------------   ------  ------------------    ------  ------');    for i=1:length(s_areas)        a = s_areas(i);        ig = find(bus(e2i(gen(:, GEN_BUS)), BUS_AREA) == a & ~isload(gen));        igon = find(bus(e2i(gen(:, GEN_BUS)), BUS_AREA) == a & gen(:, GEN_STATUS) > 0 & ~isload(gen));        fprintf(fd, '\n%3d   %7.1f  %7.1f to %-7.1f  %7.1f  %7.1f to %-7.1f   %7.1f %7.1f', ...            a, sum(gen(ig, PMAX)), sum(gen(ig, QMIN)), sum(gen(ig, QMAX)), ...            sum(gen(igon, PMAX)), sum(gen(igon, QMIN)), sum(gen(igon, QMAX)), ...            sum(gen(igon, PG)), sum(gen(igon, QG)) );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -