马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
现在用matpower工具算潮流,发现一个问题。执行runpf('case××')算得某一个PV节点的无功出力是24.3,然后我修改generator data数据中的Qmax和Qmin,把Qmax改成了24,然后重新用runpf函数来算,可是得到最后的结果,这个PV节点的无功出力还是24.3。' V7 i+ a+ m9 H6 u8 p
我查看runpf.m文件,发现里面有关于无功限制的语句,就是当无功越界时,将PV节点转为PQ节点。那么为什么执行不了呢?求教各位朋友~~谢谢~~: C. ^$ {% g' n8 t: z, V$ f# ?8 ~
这是runpf.m文件中关于无功越界处理的语句,从234行开始:! M( w0 n- ^# [
%% find gens with violated Q constraints+ [7 U! l' l" q
mx = find( gen(:, GEN_STATUS) > 0 & gen(:, QG) > gen(:, QMAX) );
5 k3 i4 A# P6 |, F( L# K( `% b1 ^* l mn = find( gen(:, GEN_STATUS) > 0 & gen(:, QG) < gen(:, QMIN) );& K+ I3 g; o5 n) e1 f( p1 A5 E" _0 r
if ~isempty(mx) || ~isempty(mn) %% we have some Q limit violations" z$ X, `# E9 u- O9 D5 \- y7 |
if isempty(pv)
) Q- B, G1 d! K" P7 A4 j0 j if verbose
# I' K/ d9 b1 x if ~isempty(mx) N- s0 L ]7 z j, C! y. p
fprintf('Gen %d (only one left) exceeds upper Q limit : INFEASIBLE PROBLEM\n', mx);
6 F0 \( {3 ]% J else# W/ z U- F5 [1 v+ O
fprintf('Gen %d (only one left) exceeds lower Q limit : INFEASIBLE PROBLEM\n', mn);
0 [1 b, n7 Y% n end
* C, }0 r0 c4 }/ ?* f6 d. p0 R end
8 Q) d9 [9 w! @$ j success = 0;" _, [0 g! C- ~
break;
6 r& D% d' y. u; t7 _ end
1 h2 D }8 d. E; ]. b6 V
) `# o$ q0 S) F( p. a; E; m3 { %% one at a time?
9 T/ D$ M- W) @, X if qlim == 2 %% fix largest violation, ignore the rest
" f# s2 F* S" }& @- \ [junk, k] = max([gen(mx, QG) - gen(mx, QMAX);3 x2 J& G& { D9 i6 E- h$ L
gen(mn, QMIN) - gen(mn, QG)]);0 F# \, j. h5 R
if k > length(mx)" B5 G; }. D: A. A% L& U
mn = mn(k-length(mx));
+ g7 g; v% t* Y( S# z mx = [];& y4 ^4 G0 C6 _% F: D6 Z
else% Z0 u; K7 D% o( V' g# w% e3 t/ i
mx = mx(k);; z" V2 b% p( w5 O" y
mn = [];) G' C* w7 e9 O
end. W/ U7 A0 v% l! c% U' E' E8 R
end
4 ^. T5 u" }) ]6 U
4 R: H: {% L! B8 B% { if verbose && ~isempty(mx)/ Y6 }& t; R/ J
fprintf('Gen %d at upper Q limit, converting to PQ bus\n', mx);6 B% V3 U+ G2 s* `; s
end: [1 z" s- q4 z1 w# o: x4 L* l
if verbose && ~isempty(mn); G A' G y9 A
fprintf('Gen %d at lower Q limit, converting to PQ bus\n', mn);
: @7 w2 [2 Q: x! x4 |( O" C end
6 ~4 }& `$ q! K$ D + `6 |5 Q9 R3 N( H; w
%% save corresponding limit values0 \" m/ |: C/ r, i" v( Y
fixedQg(mx) = gen(mx, QMAX);
9 i, l+ P8 h2 |4 R: V- \, L1 y6 ] fixedQg(mn) = gen(mn, QMIN);
G0 J: p& Q: v; B7 g4 T mx = [mx;mn];
) D8 g' P, K) {& k4 V3 v, r
$ K5 z* k, h& n2 n %% convert to PQ bus
9 _& w; \" h& W1 U gen(mx, QG) = fixedQg(mx); %% set Qg to binding limit
/ R: r8 t% @9 Q8 v4 N+ y4 ` gen(mx, GEN_STATUS) = 0; %% temporarily turn off gen,5 `8 l# d' [+ w" d: T# E7 D" |4 t
for i = 1:length(mx) %% (one at a time, since( O: H+ k& j' O& l% Q3 }1 z1 F
bi = gen(mx(i), GEN_BUS); %% they may be at same bus)4 v% R+ N& h3 \* l6 p: j. V* R- q$ C
bus(bi, [PD,QD]) = ... %% adjust load accordingly,
8 }' l5 B& }+ m& n bus(bi, [PD,QD]) - gen(mx(i), [PG,QG]);
5 G. K* z* x; E) Y, | end
& c6 C" u* v1 i7 h: R. n. a if length(ref) > 1 && any(bus(gen(mx, GEN_BUS), BUS_TYPE) == REF)" ~' D1 b9 Y! D: ~
error('Sorry, MATPOWER cannot enforce Q limits for slack buses in systems with multiple slacks.');+ o3 C# a8 e$ U) [+ o: j$ @
end
( i5 W! ]* G2 N% G' o% }5 A bus(gen(mx, GEN_BUS), BUS_TYPE) = PQ; %% & set bus type to PQ |