马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
现在用matpower工具算潮流,发现一个问题。执行runpf('case××')算得某一个PV节点的无功出力是24.3,然后我修改generator data数据中的Qmax和Qmin,把Qmax改成了24,然后重新用runpf函数来算,可是得到最后的结果,这个PV节点的无功出力还是24.3。
( k8 o0 s6 B% M# N/ ?我查看runpf.m文件,发现里面有关于无功限制的语句,就是当无功越界时,将PV节点转为PQ节点。那么为什么执行不了呢?求教各位朋友~~谢谢~~! W# q" k# Y& k, f3 G& f. C' p3 @
这是runpf.m文件中关于无功越界处理的语句,从234行开始:1 y+ w# u% c/ I8 k$ F1 i
%% find gens with violated Q constraints
) ^& |, _# C+ k o& N mx = find( gen(:, GEN_STATUS) > 0 & gen(:, QG) > gen(:, QMAX) );$ g% Y4 W* C" r
mn = find( gen(:, GEN_STATUS) > 0 & gen(:, QG) < gen(:, QMIN) );8 N+ T* z/ }# |9 d- M4 `, j8 ]
if ~isempty(mx) || ~isempty(mn) %% we have some Q limit violations2 X7 Y7 K* o# S; l4 ]* V+ Q
if isempty(pv)
3 b/ v }: |- l2 ~2 M/ h( e( f; v. m1 n if verbose8 K' I3 t9 J8 M, o E; S! i# m! ~
if ~isempty(mx) 0 |1 q0 h: O% L+ m
fprintf('Gen %d (only one left) exceeds upper Q limit : INFEASIBLE PROBLEM\n', mx);
4 N6 M9 z4 D6 j- p( |6 C6 F, i' ~ else
7 B( u7 X4 E9 w2 A& K fprintf('Gen %d (only one left) exceeds lower Q limit : INFEASIBLE PROBLEM\n', mn);2 R1 A& ?% ]8 H& d% a k3 N3 W
end g3 P# Q+ b6 d, G0 M
end
" O; A- I2 U! n8 j# Z! j, c success = 0;* S* P$ K, J3 r0 Y8 r7 ^
break;, N) G) Q( P8 y
end
& R; ^9 }" S! x9 b1 T) L' L7 s' t! _) R# v
%% one at a time?) D+ H, g2 b5 x; E- t! z" t
if qlim == 2 %% fix largest violation, ignore the rest
4 a. Y9 o! R$ x/ J0 r; T6 Z3 x [junk, k] = max([gen(mx, QG) - gen(mx, QMAX);/ J" l( |6 u. F
gen(mn, QMIN) - gen(mn, QG)]);
6 q9 y. ^ C3 Z5 a: w+ ` if k > length(mx)
' ^) V7 V: J7 S: f7 F$ E' U0 U mn = mn(k-length(mx));0 s2 A1 h0 ?$ _' g
mx = [];
# u: j( N3 X+ A8 r( V% m$ ]1 Y8 B else
4 E$ S* A" z/ k7 g6 C2 a- v t mx = mx(k);
( ~$ ^# W% ~2 \. {; s) Q mn = [];* O( z+ g$ L$ H2 B' f& s% [# r
end7 M& [: c8 V. s G
end
9 w2 O9 D0 W! R- h/ i6 q0 X" s9 X. ~' O2 t4 @+ p/ Z% L# Q
if verbose && ~isempty(mx)
6 I' q5 `2 C( n8 q$ T( _7 ^* d fprintf('Gen %d at upper Q limit, converting to PQ bus\n', mx);: \2 j0 e4 W* d
end
- W2 f9 e- L) t, T3 J1 K5 I. Y, x if verbose && ~isempty(mn)
% J. t. X0 G/ G. v fprintf('Gen %d at lower Q limit, converting to PQ bus\n', mn);
) P4 I! ~# S/ S3 @% \ |7 _+ h end8 l+ ]8 @ T' k9 q0 k* w3 \
1 p" ~ m+ m0 [- } %% save corresponding limit values* U8 G8 @$ b8 |' r- J, k+ U D
fixedQg(mx) = gen(mx, QMAX);
# v# g+ ?% I' I, a. V fixedQg(mn) = gen(mn, QMIN);
% z9 G) s4 C5 h! L mx = [mx;mn];
" F- ^6 Y$ Q9 q
: Y- t8 n4 i7 z i' z% g %% convert to PQ bus
+ T; Q- t: G: }/ ~1 | gen(mx, QG) = fixedQg(mx); %% set Qg to binding limit
- j' p: U* i" g, B" x6 d gen(mx, GEN_STATUS) = 0; %% temporarily turn off gen,& v1 R" s6 e; v: J& L
for i = 1:length(mx) %% (one at a time, since" u3 t. Y: y$ T9 P" R2 l$ d
bi = gen(mx(i), GEN_BUS); %% they may be at same bus)
# I+ m$ k6 q. F* z. o3 J bus(bi, [PD,QD]) = ... %% adjust load accordingly,! O0 P7 [) A8 ~ \
bus(bi, [PD,QD]) - gen(mx(i), [PG,QG]);
: \/ K" f6 G0 p( [ end
$ g/ s' Q U5 a. ?) l/ V9 h if length(ref) > 1 && any(bus(gen(mx, GEN_BUS), BUS_TYPE) == REF)
/ b5 _ A8 H) Z- _# _) D* w& } error('Sorry, MATPOWER cannot enforce Q limits for slack buses in systems with multiple slacks.');
& N8 _8 e* E# k end
, h7 W+ {& G9 J& r bus(gen(mx, GEN_BUS), BUS_TYPE) = PQ; %% & set bus type to PQ |