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

📄 printpf.m

📁 关于电力系统的计算程序!最新的改进法计算潮流程序!用matlab实现的! 适用于电力行业的相关从业人员!
💻 M
📖 第 1 页 / 共 2 页
字号:
function printpf(baseMVA, bus, gen, branch, f, success, et, fd, mpopt)
%PRINTOPF   Prints optimal 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 Version 2.0
%   by Ray Zimmerman, PSERC Cornell    12/24/97
%   Copyright (c) 1996, 1997 by Power System Engineering Research Center (PSERC)
%   See http://www.pserc.cornell.edu/ 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
OUT_ALL			= mpopt(32);
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));
if OUT_ALL == -1
	OUT_ALL_LIM	= mpopt(38);
elseif OUT_ALL == 1
	OUT_ALL_LIM	= 2;
else
	OUT_ALL_LIM = 0;
end
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_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;

%% 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)]';

%% parameters
nb = size(bus, 1);		%% number of buses
nl = size(branch, 1);	%% number of branches
ng = size(gen, 1);		%% number of generators
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));
areas = sorted_areas([1; find(diff(sorted_areas))+1]);	%% area numbers
na = length(areas);		%% number of areas
on = find(gen(:, GEN_STATUS));
V = bus(:, VM) .* exp(sqrt(-1) * pi/180 * bus(:, VA));
loss = baseMVA * abs(V(e2i(branch(:, F_BUS))) ./ tap - V(e2i(branch(:, T_BUS)))) .^ 2 ./ ...
				(branch(:, BR_R) - j * branch(:, BR_X));
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;

%%----- print the stuff -----
if success
	if OUT_SYS_SUM
		fprintf(fd, '\n================================================================================');
		fprintf(fd, '\n|     System Summary                                                           |');
		fprintf(fd, '\n================================================================================');
		%% convergence & elapsed time
		fprintf(fd, '\nConverged in %.2f seconds', et);

		%% objective function value
		if isOPF
			fprintf(fd, '\nObjective Function Value = %.2f $/hr', f);
		end
		fprintf(fd, '\n\nHow many?                  How much?              P (MW)       Q (MVAR)');
		fprintf(fd, '\n---------------------      --------------------  --------  -----------------');
		fprintf(fd, '\nBuses          %5d       Total Gen Capacity    %7.1f  %7.1f to +%.1f', nb, sum(gen(:, PMAX)), sum(gen(:, QMIN)), sum(gen(:, QMAX)));
		fprintf(fd, '\nGenerators     %5d       On-line Capacity      %7.1f  %7.1f to +%.1f', ng, sum(gen(on, PMAX)), sum(gen(on, QMIN)), sum(gen(on, QMAX)));
		fprintf(fd, '\nCommited Gens  %5d       Generation (current)  %7.1f      %7.1f', length(on), sum(gen(on, PG)), sum(gen(on, QG)));
		fprintf(fd, '\nLoads          %5d       Load                  %7.1f      %7.1f', length(nzld), sum(bus(nzld, PD)), sum(bus(nzld, QD)));
		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, '\nAreas          %5d       Shunt (inj)           %7.1f      %7.1f', length(areas), ...
			-sum(bus(:, VM) .^ 2 .* bus(:, GS)), sum(bus(:, VM) .^ 2 .* bus(:, BS))	);
		fprintf(fd, '\nInter-ties     %5d       Total Inter-tie Flow  %7.1f      %7.1f', length(ties), sum(abs(branch(ties, PF)-branch(ties, PT))), sum(abs(branch(ties, QF)-branch(ties, QT))));
		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, mini, maxv, maxi);
		[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, mini, maxv, maxi);
		[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));
		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, mini, maxv, maxi);
			[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, mini, maxv, maxi);
		end
		fprintf(fd, '\n');
	end
	
	if OUT_AREA_SUM
		fprintf(fd, '\n================================================================================');
		fprintf(fd, '\n|     Area Summary                                                             |');
		fprintf(fd, '\n================================================================================');
		fprintf(fd, '\nArea  # of   # of   Gens   # of   # of   # of   # of    Total Gen    On-line');
		fprintf(fd, '\n Num  Buses  Gens  Online  Loads  Brchs  Xfmrs  Ties     Capacity    Capacity');
		fprintf(fd, '\n----  -----  ----  ------  -----  -----  -----  ----   -----------  -----------');
		for i=1:length(areas)
			a = areas(i);
			ib = find(bus(:, BUS_AREA) == a);
			ig = find(bus(e2i(gen(:, GEN_BUS)), BUS_AREA) == a);
			igon = find(bus(e2i(gen(:, GEN_BUS)), BUS_AREA) == a & gen(:, GEN_STATUS));
			inzld = find(bus(:, BUS_AREA) == a & (bus(:, PD) | bus(:, QD)));
			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   %5d %5d  %5d  %5d  %5d  %5d %5d    %7.1f MW   %7.1f MW', ...
				a, length(ib), length(ig), length(igon), length(inzld), length(ibrch), nxfmr, ...
				length(in_tie)+length(out_tie), sum(gen(ig, PMAX)), sum(gen(igon, PMAX)));
		end
		fprintf(fd, '\n----  -----  ----  ------  -----  -----  -----  ----   -----------  -----------');
		fprintf(fd, '\nTot:  %5d %5d  %5d  %5d  %5d  %5d %5d    %7.1f MW   %7.1f MW', ...
			nb, ng, length(on), length(nzld), nl, length(xfmr), ...
			length(ties), sum(gen(:, PMAX)), sum(gen(on, PMAX)));
		fprintf(fd, '\n');
		fprintf(fd, '\nArea   Generation       Load          Losses       Net Export    Brnch   Shunt');
		fprintf(fd, '\n Num   MW    MVAR     MW    MVAR     MW    MVAR    MW     MVAR   Chrgng   MVAR');
		fprintf(fd, '\n---- ------ ------  ------ ------  ------ ------  ------ ------  ------  ------');
		for i=1:length(areas)
			a = areas(i);
			ib = find(bus(:, BUS_AREA) == a);
			ig = find(bus(e2i(gen(:, GEN_BUS)), BUS_AREA) == a);
			igon = find(bus(e2i(gen(:, GEN_BUS)), BUS_AREA) == a & gen(:, GEN_STATUS));
			inzld = find(bus(:, BUS_AREA) == a & (bus(:, PD) | bus(:, QD)));
			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);
			fprintf(fd, '\n%3d %7.1f%7.1f %7.1f%7.1f%7.2f %7.2f %7.1f%7.1f %7.1f %7.1f', ...
				a, sum(gen(igon, PG)), sum(gen(igon, QG)), sum(bus(inzld, PD)), sum(bus(inzld, QD)), ...
				sum(real(loss(ibrch))) + sum(real(loss([in_tie; out_tie]))) / 2, ...
				sum(imag(loss(ibrch))) + sum(imag(loss([in_tie; out_tie]))) / 2, ...
				sum(branch(in_tie, PT))+sum(branch(out_tie, PF)), ...
				sum(branch(in_tie, QT))+sum(branch(out_tie, QF)), ...
				sum(fchg(ibrch)) + sum(tchg(ibrch)) + sum(fchg(out_tie)) + sum(tchg(in_tie)), ...
				sum(bus(ib, VM) .^ 2 .* bus(ib, BS))	);
		end
		fprintf(fd, '\n---- ------ ------  ------ ------  ------ ------  ------ ------  ------  ------');
		fprintf(fd, '\nTot:%7.1f%7.1f %7.1f%7.1f%7.2f %7.2f %7s%7s %7.1f %7.1f', ...
			sum(gen(on, PG)), sum(gen(on, QG)), sum(bus(nzld, PD)), sum(bus(nzld, QD)), ...
			sum(real(loss)), sum(imag(loss)), '-  ', '-  ', ...
			sum(fchg) + sum(tchg), sum(bus(:, VM) .^ 2 .* bus(:, BS))	);
		fprintf(fd, '\n');
	end
	
	%% generator data
	if OUT_GEN
		if isOPF
			genlamP = bus(e2i(gen(:, GEN_BUS)), LAM_P);
			genlamQ = bus(e2i(gen(:, GEN_BUS)), LAM_Q);
		end
		fprintf(fd, '\n================================================================================');
		fprintf(fd, '\n|     Generator Data                                                           |');
		fprintf(fd, '\n================================================================================');
		fprintf(fd, '\nGen  Bus     Pg        Qg   ');
		if isOPF, fprintf(fd, '   Lambda ($/MVA-hr)'); end
		fprintf(fd, '\n #    #     (MW)     (MVAR) ');
		if isOPF, fprintf(fd, '     P         Q    '); end
		fprintf(fd, '\n---  ---  --------  --------');
		if isOPF, fprintf(fd, '  --------  --------'); end
		for i = 1:ng
			if gen(i, PG)
				fprintf(fd, '\n%3d%5d%9.2f%10.2f%10.2f%10.2f', i, gen(i, GEN_BUS), gen(i, PG), gen(i, QG));
				if isOPF, fprintf(fd, '%10.2f%10.2f', genlamP(i), genlamQ(i)); end
			else
				fprintf(fd, '\n%3d%5d      -         -', i, gen(i, GEN_BUS));
				if isOPF, fprintf(fd, '         -         -'); end
			end
		end
		fprintf(fd, '\n          --------  --------');
		fprintf(fd, '\n  Total:%9.2f%10.2f', sum(gen(:, PG)), sum(gen(:, QG)));
		fprintf(fd, '\n');
	end
			

⌨️ 快捷键说明

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