马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
现在用matpower工具算潮流,发现一个问题。执行runpf('case××')算得某一个PV节点的无功出力是24.3,然后我修改generator data数据中的Qmax和Qmin,把Qmax改成了24,然后重新用runpf函数来算,可是得到最后的结果,这个PV节点的无功出力还是24.3。; L& \+ k; M' ]" p1 L! G
我查看runpf.m文件,发现里面有关于无功限制的语句,就是当无功越界时,将PV节点转为PQ节点。那么为什么执行不了呢?求教各位朋友~~谢谢~~/ M3 q, }. T7 {
这是runpf.m文件中关于无功越界处理的语句,从234行开始:
( p* ?. {$ X( P %% find gens with violated Q constraints# n! x1 c3 Y: C+ C! h) A
mx = find( gen(:, GEN_STATUS) > 0 & gen(:, QG) > gen(:, QMAX) );, m. U4 V# L6 K2 g/ y/ Z
mn = find( gen(:, GEN_STATUS) > 0 & gen(:, QG) < gen(:, QMIN) );5 O" @$ B, b: Y- _, D
if ~isempty(mx) || ~isempty(mn) %% we have some Q limit violations- x% b. t4 q5 w) _, u) d( P" N
if isempty(pv)
1 `' s& y9 R, r: [. F* j1 T5 `5 ~8 R if verbose
# d0 g0 t8 L! C. E if ~isempty(mx)
' s( D% T3 e7 s, R+ q fprintf('Gen %d (only one left) exceeds upper Q limit : INFEASIBLE PROBLEM\n', mx);# {" v3 `4 M9 ]6 B- [6 C
else
8 V9 T* X r- E- n7 d5 y! J fprintf('Gen %d (only one left) exceeds lower Q limit : INFEASIBLE PROBLEM\n', mn);- f0 h3 _3 G$ }. Z
end
# _7 |* r& H2 v, a2 a3 n2 C end( @. e9 v! o- i+ O: n
success = 0;0 V5 q& c: G/ ? g3 | j2 ^
break;
3 r2 y3 o4 h+ G end% l$ T- \6 v w4 s7 K( e
$ h8 a8 l% Y* N/ q% b4 Z: B+ V %% one at a time?- g: c+ Y, D5 g* y
if qlim == 2 %% fix largest violation, ignore the rest, l8 K% ]* {1 w( ]
[junk, k] = max([gen(mx, QG) - gen(mx, QMAX);* ~: c, z! I: O6 q7 ?8 R
gen(mn, QMIN) - gen(mn, QG)]);
9 r) n' p t2 P( Y$ v0 l: v6 H if k > length(mx)* @. E- ?$ g9 J, n
mn = mn(k-length(mx));
, M8 m: a8 C8 w6 U+ Q mx = [];0 v1 _& H4 k: e1 X1 ?
else2 _4 c5 a/ }- ~( v6 h
mx = mx(k);! ?; O' F: \. G0 N
mn = [];3 a+ k. ?5 M2 X4 b5 Z- n6 Z% S, ^9 a
end; H5 N( f1 l; L5 v2 `0 l
end: O) h/ X* k+ ~+ X8 u4 e
5 r: }( @* l# G
if verbose && ~isempty(mx)
# Y) w; e i5 B/ d4 `8 V- c fprintf('Gen %d at upper Q limit, converting to PQ bus\n', mx);
) G5 P3 u9 b4 S6 ^3 W1 m# P: y$ c7 } end
$ g& r* u' j0 d% L- E if verbose && ~isempty(mn)2 l$ S5 z) ~4 Z+ k
fprintf('Gen %d at lower Q limit, converting to PQ bus\n', mn);
0 P8 u0 Y0 i( O& l8 d4 l- ` I end
3 e+ m: }6 l+ J) x, s7 A% Y . F5 _ {6 ~! \( Z: A3 A
%% save corresponding limit values# a1 Y7 O1 i: F& x5 f+ @
fixedQg(mx) = gen(mx, QMAX);
; k4 k) t7 b8 D/ E1 h fixedQg(mn) = gen(mn, QMIN);
. T. ]! m) T: K( s# i mx = [mx;mn];
% O) J- V7 A1 `( B0 _ : I3 ^# g2 b- E# c* Z/ v5 M
%% convert to PQ bus9 _; B( J$ t, ^
gen(mx, QG) = fixedQg(mx); %% set Qg to binding limit
8 f1 |# N7 s$ U) _! M- C$ _ gen(mx, GEN_STATUS) = 0; %% temporarily turn off gen,- _0 P5 R w" [, O' m* m" s
for i = 1:length(mx) %% (one at a time, since
6 J& L4 A. t, Y bi = gen(mx(i), GEN_BUS); %% they may be at same bus)
) R2 `) A+ @* |. r" V" b, l, h* c9 P bus(bi, [PD,QD]) = ... %% adjust load accordingly,9 H9 G3 C" s, w9 X
bus(bi, [PD,QD]) - gen(mx(i), [PG,QG]);
. g/ w& C$ S- ]: X( n% T end# o$ s# T7 C L. h' f6 d2 `
if length(ref) > 1 && any(bus(gen(mx, GEN_BUS), BUS_TYPE) == REF)- G/ z. U8 o6 ^9 B0 f" E6 N2 X
error('Sorry, MATPOWER cannot enforce Q limits for slack buses in systems with multiple slacks.');6 `' Y+ I9 O& s! G$ A
end, h: t6 U1 V% W; f9 W4 k
bus(gen(mx, GEN_BUS), BUS_TYPE) = PQ; %% & set bus type to PQ |