|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
现在用matpower工具算潮流,发现一个问题。执行runpf('case××')算得某一个PV节点的无功出力是24.3,然后我修改generator data数据中的Qmax和Qmin,把Qmax改成了24,然后重新用runpf函数来算,可是得到最后的结果,这个PV节点的无功出力还是24.3。
8 G1 R& f, a+ u9 u. G( a! v我查看runpf.m文件,发现里面有关于无功限制的语句,就是当无功越界时,将PV节点转为PQ节点。那么为什么执行不了呢?求教各位朋友~~谢谢~~
, K( A9 h# j. w& z. J( p这是runpf.m文件中关于无功越界处理的语句,从234行开始:, W3 y3 u' u2 ~# e0 {/ L9 T9 y3 [
%% find gens with violated Q constraints
8 R3 m5 F6 p5 Z2 T0 D( K mx = find( gen(:, GEN_STATUS) > 0 & gen(:, QG) > gen(:, QMAX) );
# i! b/ J2 u/ `0 [1 | z" B mn = find( gen(:, GEN_STATUS) > 0 & gen(:, QG) < gen(:, QMIN) );
% x% e+ t) n4 u* n j4 Vif ~isempty(mx) || ~isempty(mn) %% we have some Q limit violations
( s& S' g5 F/ t! x- q& S9 F/ ` if isempty(pv)( z8 m+ _! U8 z7 f
if verbose" E- H7 f7 ?1 B. A0 D! k1 T- C
if ~isempty(mx)
, q6 h% U) y8 L fprintf('Gen %d (only one left) exceeds upper Q limit : INFEASIBLE PROBLEM\n', mx);7 H. O6 W1 J6 Z2 u- l& Y/ E
else
# ?$ C0 \- E. {1 q; W: D; b fprintf('Gen %d (only one left) exceeds lower Q limit : INFEASIBLE PROBLEM\n', mn);
7 y3 Z" K5 `) S! ?% A* m% t end$ ]9 L/ y: {' S. J0 a' b; E8 b% @0 l
end# s C4 t0 q2 A
success = 0;* L- T7 v* k3 m" r7 Y1 `' H
break;1 Q6 c. H6 T" W5 _, ~
end! v8 {/ b7 Y6 {: t
* ^8 u; l4 h2 Q B8 r %% one at a time?
! O5 j: T4 D' i8 X7 |& o. \6 c' S if qlim == 2 %% fix largest violation, ignore the rest4 {8 l) J3 T8 r1 K* X' V5 r
[junk, k] = max([gen(mx, QG) - gen(mx, QMAX);, W1 n" z0 E- y7 k& \
gen(mn, QMIN) - gen(mn, QG)]);7 I* @1 E5 `: ~6 @
if k > length(mx)
( [; m( X, W/ j3 Z/ }4 U- T5 L) A mn = mn(k-length(mx));
4 G$ H' x# D ?7 w j! N mx = [];
# S4 e- S9 ], S% l2 O else
m6 f7 V1 M8 _( O/ g& Y mx = mx(k);! O. R1 w( b) T" E0 V
mn = [];
L' s! G2 @) E6 B2 E1 p! Z end5 m( D0 j& X+ F4 Y# P0 n9 @. r4 I2 F
end" ~9 d5 I& z0 p9 x7 Q0 `: f; }
5 T4 r. ^! o0 [: U0 t
if verbose && ~isempty(mx)
7 ~: L) E( A! y. a; T3 E. J fprintf('Gen %d at upper Q limit, converting to PQ bus\n', mx);5 F/ g6 h: s& `+ v
end
5 ~2 z: \3 L) L9 F+ e" q! f if verbose && ~isempty(mn)* p4 B3 O7 u$ e
fprintf('Gen %d at lower Q limit, converting to PQ bus\n', mn);
' q! e+ g( l# w" h3 i, o9 ?' x end
" z2 [0 j8 h8 @4 {5 e( w; f
8 s+ n7 F2 ^ `" F! j. T %% save corresponding limit values6 P; N) d* r6 |: D
fixedQg(mx) = gen(mx, QMAX);. _' G2 H9 w- J0 R+ h& n
fixedQg(mn) = gen(mn, QMIN);
, f; c9 K9 [# H4 u+ F; ]7 V mx = [mx;mn];
" z) Q/ \0 l3 m% v + K* W1 i: Y3 q0 x! Y" i7 {3 H
%% convert to PQ bus
( i: e8 E7 o; U' ~4 q& Y0 z: F gen(mx, QG) = fixedQg(mx); %% set Qg to binding limit4 t: l- q5 X$ Q5 p! |* l L) F
gen(mx, GEN_STATUS) = 0; %% temporarily turn off gen,
! l5 ` L- `* n. d# E for i = 1:length(mx) %% (one at a time, since: W9 b, X) \- A; O
bi = gen(mx(i), GEN_BUS); %% they may be at same bus)# V/ h2 ]" }5 E" b t( w
bus(bi, [PD,QD]) = ... %% adjust load accordingly,6 ]0 Y+ U2 P9 y
bus(bi, [PD,QD]) - gen(mx(i), [PG,QG]);. r; T+ W" v$ Q; B
end
+ g9 c4 G: K5 P$ @ if length(ref) > 1 && any(bus(gen(mx, GEN_BUS), BUS_TYPE) == REF)5 q6 {# f0 j q
error('Sorry, MATPOWER cannot enforce Q limits for slack buses in systems with multiple slacks.');
+ j7 Z) P3 k3 h0 z5 H end
; U6 T' s3 x: E+ [: c' d bus(gen(mx, GEN_BUS), BUS_TYPE) = PQ; %% & set bus type to PQ |