马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
现在用matpower工具算潮流,发现一个问题。执行runpf('case××')算得某一个PV节点的无功出力是24.3,然后我修改generator data数据中的Qmax和Qmin,把Qmax改成了24,然后重新用runpf函数来算,可是得到最后的结果,这个PV节点的无功出力还是24.3。
, C% N5 G, `$ ~2 {. [我查看runpf.m文件,发现里面有关于无功限制的语句,就是当无功越界时,将PV节点转为PQ节点。那么为什么执行不了呢?求教各位朋友~~谢谢~~
( V/ D! ]/ ~9 e2 a) T这是runpf.m文件中关于无功越界处理的语句,从234行开始:" r4 `: c6 s. ]) v# S8 ]
%% find gens with violated Q constraints
% G1 b0 D8 G, _3 C: y mx = find( gen(:, GEN_STATUS) > 0 & gen(:, QG) > gen(:, QMAX) );
* J: M+ Z+ s9 U8 n mn = find( gen(:, GEN_STATUS) > 0 & gen(:, QG) < gen(:, QMIN) );
, N; X1 r8 U- Y6 a& xif ~isempty(mx) || ~isempty(mn) %% we have some Q limit violations8 V9 [3 J0 V6 _) {4 h o
if isempty(pv)& }# a* W3 M) D, s4 B
if verbose
, b, |2 V+ b$ o( @ if ~isempty(mx) 6 ^/ D( x4 a+ O2 x& |8 h
fprintf('Gen %d (only one left) exceeds upper Q limit : INFEASIBLE PROBLEM\n', mx);; O( c/ P1 i5 e3 S2 z: w' a
else
6 K9 M3 Y- A* J: R c fprintf('Gen %d (only one left) exceeds lower Q limit : INFEASIBLE PROBLEM\n', mn);
8 N/ ^5 K' l+ w: e end
2 Z' s& J! b# `( G end/ T, D' {: T7 d
success = 0;
2 k3 [% S1 u& ` break;9 G4 f& W3 g- p& `) X
end0 J0 c, f- V6 y7 C# D, _# e
: W$ W; X7 H- v0 G& N6 R %% one at a time?* W. r, [0 n* K9 H7 `. U( e
if qlim == 2 %% fix largest violation, ignore the rest8 e) M* N x1 R }
[junk, k] = max([gen(mx, QG) - gen(mx, QMAX);
4 ]: G* k+ J2 m/ V gen(mn, QMIN) - gen(mn, QG)]);
' @0 h% j& m; j5 Q9 Z' c: o1 u if k > length(mx)
/ s: O8 ?, J5 V' U' r+ s mn = mn(k-length(mx));3 m7 F: Q0 j! N& P( h- }) ^# J
mx = [];* r H H+ b& u; J0 ]$ n. M
else& \! B! u" x/ S: F# @6 w
mx = mx(k);
- r4 x# X! y; D3 V1 o8 E2 i mn = [];
: R$ W) f: o* `& }! ^+ x end
3 u3 y" F3 t% v7 F. t end9 |7 ^* W$ g( e" ^
5 {8 X0 H' p/ v6 m9 h/ G9 y+ Q if verbose && ~isempty(mx)
1 O% W5 E1 G2 K3 u4 R. p fprintf('Gen %d at upper Q limit, converting to PQ bus\n', mx);) }- h5 i. s9 d1 h, i% m" }8 x
end
4 f2 ~ { {2 L- d1 E/ @6 x if verbose && ~isempty(mn)" X$ K4 u% g: q( B
fprintf('Gen %d at lower Q limit, converting to PQ bus\n', mn);6 N8 d; @5 p6 w7 r
end) ~8 i) u4 d/ x% B3 m; A4 J0 H9 ]6 w
* ` j2 j6 _1 }; O( V %% save corresponding limit values, t. L' c9 V$ B% r
fixedQg(mx) = gen(mx, QMAX);6 K$ e" a0 ^. R+ y
fixedQg(mn) = gen(mn, QMIN);
* E- R3 H/ g# K# X7 \ mx = [mx;mn];& h7 k+ k% m& ]1 @$ X1 l
) O" X8 w* d7 Q2 [2 L( [# }: w' d %% convert to PQ bus
2 U! M6 ~% S8 _+ ?3 d gen(mx, QG) = fixedQg(mx); %% set Qg to binding limit( H7 A. E6 y6 \3 ?5 n: e
gen(mx, GEN_STATUS) = 0; %% temporarily turn off gen,
3 F K1 T; E z, d- h4 H for i = 1:length(mx) %% (one at a time, since
+ D7 a* ]. Z/ N; v3 C bi = gen(mx(i), GEN_BUS); %% they may be at same bus)
& {" | w+ ^; G9 k, |( D( F: w) F bus(bi, [PD,QD]) = ... %% adjust load accordingly,
0 D C2 { C% N- X9 T1 J bus(bi, [PD,QD]) - gen(mx(i), [PG,QG]);
! A( ]' g- _- o6 S: d: U end
% |7 }' _/ T5 M, I6 j% T2 Q if length(ref) > 1 && any(bus(gen(mx, GEN_BUS), BUS_TYPE) == REF)
5 O; D6 r; ]0 ^$ T) \* L4 l c error('Sorry, MATPOWER cannot enforce Q limits for slack buses in systems with multiple slacks.');- w- \4 ]' z# i$ I9 ]
end
* V( H1 T5 K: C/ }( j& c. l: V8 } bus(gen(mx, GEN_BUS), BUS_TYPE) = PQ; %% & set bus type to PQ |