|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
现在用matpower工具算潮流,发现一个问题。执行runpf('case××')算得某一个PV节点的无功出力是24.3,然后我修改generator data数据中的Qmax和Qmin,把Qmax改成了24,然后重新用runpf函数来算,可是得到最后的结果,这个PV节点的无功出力还是24.3。5 m* O3 r/ Y7 A# b# y+ |) J: Q
我查看runpf.m文件,发现里面有关于无功限制的语句,就是当无功越界时,将PV节点转为PQ节点。那么为什么执行不了呢?求教各位朋友~~谢谢~~
7 G6 e; N6 ]4 R7 F! T. N这是runpf.m文件中关于无功越界处理的语句,从234行开始:
- Z6 W6 k. @0 d0 t %% find gens with violated Q constraints/ a5 _5 U2 S, H( B; C; a9 j% Q
mx = find( gen(:, GEN_STATUS) > 0 & gen(:, QG) > gen(:, QMAX) );5 k. E, T4 R3 E
mn = find( gen(:, GEN_STATUS) > 0 & gen(:, QG) < gen(:, QMIN) );
" b* R. r! c4 gif ~isempty(mx) || ~isempty(mn) %% we have some Q limit violations2 m5 @9 H' p7 A! y/ J+ j6 _
if isempty(pv)7 r9 a% P D2 H$ u$ y" m! c8 y
if verbose8 P% N/ g' ?7 s# X9 h: {! o
if ~isempty(mx) ; z+ T9 q! n/ ] b
fprintf('Gen %d (only one left) exceeds upper Q limit : INFEASIBLE PROBLEM\n', mx);4 m$ g. v) X: u7 @& m( K) d
else4 ?) O, w( S) C) I
fprintf('Gen %d (only one left) exceeds lower Q limit : INFEASIBLE PROBLEM\n', mn);
& L6 @8 B0 d' D+ F% R end
) x' {3 n n3 e0 V end4 g! ]" j- m9 d! ~/ P
success = 0;
2 n( V8 d( a) [# E, _ y% C break;
3 z s& o/ i2 L; ] end
$ [4 s: O) P8 q) v2 Q& t6 l
1 U8 p F: k( L+ i) A9 W2 T %% one at a time?5 i+ @" B/ ?" f+ e5 c3 S
if qlim == 2 %% fix largest violation, ignore the rest+ K9 r+ S7 v- E3 T/ J" ]
[junk, k] = max([gen(mx, QG) - gen(mx, QMAX);2 H1 }# d- f) \' w3 a
gen(mn, QMIN) - gen(mn, QG)]);
8 _7 R1 I9 P$ b$ X. I# S- i if k > length(mx)' m, N' ]; W& T9 Q
mn = mn(k-length(mx));
" h" G% g) `- Z. A- w mx = [];4 ~6 C3 z4 i- Q: ] q
else+ d* B! L( a; J6 _! N. }
mx = mx(k);
4 m3 I% A8 v* z- j mn = [];
7 M0 u6 a4 [* _$ s' a/ I end; O1 m& Q2 F o
end
! d$ S% H; d: H4 b0 N. V: q4 [ [& L* y" ]1 W6 K3 U
if verbose && ~isempty(mx)
, o' d# u$ Y( q2 V3 u) b4 S! I' u fprintf('Gen %d at upper Q limit, converting to PQ bus\n', mx);7 z4 b- ^: I$ j z+ i' I
end6 l% b6 j: W% {3 t/ U6 E
if verbose && ~isempty(mn). l! @# y6 Z' C! w
fprintf('Gen %d at lower Q limit, converting to PQ bus\n', mn);8 G/ W: J, Q' T' J
end# J9 \$ A4 \+ P9 \+ M! [. G: i
$ s6 a; F+ {7 X9 U" X9 g& }6 t. H %% save corresponding limit values
5 K" Q. c0 i. r7 G9 Q# l# B# q fixedQg(mx) = gen(mx, QMAX);
2 L- B+ ~. W0 W, e% H' J/ d fixedQg(mn) = gen(mn, QMIN);% j, G p% i4 i7 r
mx = [mx;mn];
8 ?9 g6 Q4 a; Q' x
: v, Q8 ?- L# r& h Z %% convert to PQ bus a! B2 z! K% E! u( X: v. V
gen(mx, QG) = fixedQg(mx); %% set Qg to binding limit
1 d% N% z* Z% n# g) a: j1 n gen(mx, GEN_STATUS) = 0; %% temporarily turn off gen,
; d8 \4 z0 o& b for i = 1:length(mx) %% (one at a time, since
6 u! G' f/ \$ M q4 Y& @8 {+ @1 a; ` bi = gen(mx(i), GEN_BUS); %% they may be at same bus)
4 T1 `# s6 G. ?: K! j4 o bus(bi, [PD,QD]) = ... %% adjust load accordingly,& }8 u1 i6 K; r% E. S
bus(bi, [PD,QD]) - gen(mx(i), [PG,QG]);' ~2 V8 u+ X/ f6 o# I* n
end
( N& L8 H1 ]. T if length(ref) > 1 && any(bus(gen(mx, GEN_BUS), BUS_TYPE) == REF)) S7 q- N5 h. D. h2 N# J- r6 O0 e5 ^
error('Sorry, MATPOWER cannot enforce Q limits for slack buses in systems with multiple slacks.');( w) N" m$ _+ `7 P1 B. p
end; x. c! t+ {: _" ]4 t% o8 g
bus(gen(mx, GEN_BUS), BUS_TYPE) = PQ; %% & set bus type to PQ |