马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
现在用matpower工具算潮流,发现一个问题。执行runpf('case××')算得某一个PV节点的无功出力是24.3,然后我修改generator data数据中的Qmax和Qmin,把Qmax改成了24,然后重新用runpf函数来算,可是得到最后的结果,这个PV节点的无功出力还是24.3。
) E# J8 E6 N, ^# t我查看runpf.m文件,发现里面有关于无功限制的语句,就是当无功越界时,将PV节点转为PQ节点。那么为什么执行不了呢?求教各位朋友~~谢谢~~9 G( _: ?' o% x# H0 F4 J8 H0 b
这是runpf.m文件中关于无功越界处理的语句,从234行开始:
0 Y+ c* @2 h; D/ q, `+ O$ b %% find gens with violated Q constraints
9 ~. `2 S- E/ ~5 S mx = find( gen(:, GEN_STATUS) > 0 & gen(:, QG) > gen(:, QMAX) );
8 F4 t9 x( z% G+ V mn = find( gen(:, GEN_STATUS) > 0 & gen(:, QG) < gen(:, QMIN) );
9 i* y- ]% g1 t: bif ~isempty(mx) || ~isempty(mn) %% we have some Q limit violations& H. _; u5 w7 O, |
if isempty(pv); ^7 S5 P- ?) U% L) |+ B8 M( ~
if verbose
9 t+ ^( c: g9 g( u, H7 m if ~isempty(mx) , L1 d5 A5 K1 g
fprintf('Gen %d (only one left) exceeds upper Q limit : INFEASIBLE PROBLEM\n', mx);, [1 O# _' ^5 X
else
: a4 e9 ]- J3 L, d: d. L9 i' m2 O% S! m fprintf('Gen %d (only one left) exceeds lower Q limit : INFEASIBLE PROBLEM\n', mn);1 m" G1 v1 w* Z( m3 ^. s
end
# B! Q( A* u8 e, e1 T. R$ ]- k end* q: s/ }8 h6 k! M& V1 J
success = 0;& I1 ?5 C3 E9 I& l# J+ x& d& ~
break;
/ J2 U7 u7 ]1 j/ A% d2 \3 P end9 }9 F- N1 y4 f8 P
* a& s0 {, U- S1 f( N" d7 V
%% one at a time?6 ?+ g v: s) P# P9 F" G
if qlim == 2 %% fix largest violation, ignore the rest) L( E3 |6 c- k( C" N4 \
[junk, k] = max([gen(mx, QG) - gen(mx, QMAX);. Z& j; z# ? x) F
gen(mn, QMIN) - gen(mn, QG)]);
) [: C( c$ o2 L7 w" S2 K8 z5 j% L7 b if k > length(mx)
0 H1 M6 q! G& v O; ?. I mn = mn(k-length(mx)); A1 |, {) G& ?8 y
mx = [];
) O/ j# p4 R9 ?) E else
. g `5 ]) D" T mx = mx(k);
& s' H l/ ~( R" l; T mn = [];0 K. W5 _( \. v
end/ S/ Y5 [( s6 X: g- [$ {5 n" t: u0 }
end
; N. v$ \. z4 ~3 ?. E0 g# C( F( t) X5 B8 P
if verbose && ~isempty(mx)
% d6 u* K+ \- A8 T% H0 H fprintf('Gen %d at upper Q limit, converting to PQ bus\n', mx);
0 |2 Y3 o5 z, S9 q end/ C6 X" N- k6 m$ H& e0 f0 j
if verbose && ~isempty(mn)& E1 r; c S( q4 b& q1 ~
fprintf('Gen %d at lower Q limit, converting to PQ bus\n', mn);/ B7 s* S* t) ]9 w0 E, _9 {
end
( u# D- l: Z% V 3 ^0 c5 J$ L6 f& C
%% save corresponding limit values
) Z4 T* Y3 @* t& i6 Y- V fixedQg(mx) = gen(mx, QMAX);
! H6 t0 i; i( k& ] fixedQg(mn) = gen(mn, QMIN);6 c9 t) G% p% ~" v7 h2 B
mx = [mx;mn];
) ^; C( y1 q7 B) |( X3 R/ o 8 ~6 I6 f+ ~; \: d
%% convert to PQ bus2 g6 P( v$ r0 z) Y+ I, K; H
gen(mx, QG) = fixedQg(mx); %% set Qg to binding limit
5 n- v% e5 X) D& \' P gen(mx, GEN_STATUS) = 0; %% temporarily turn off gen,4 \/ r8 A2 S5 _( X7 I
for i = 1:length(mx) %% (one at a time, since
2 u; m6 _% V. R' X& [ bi = gen(mx(i), GEN_BUS); %% they may be at same bus)9 N4 @& J( a s s0 O! ?
bus(bi, [PD,QD]) = ... %% adjust load accordingly,3 v5 U: H0 j7 N y5 D' k
bus(bi, [PD,QD]) - gen(mx(i), [PG,QG]);) _1 D; N" q* y7 M- R
end
/ _; f3 C- j4 k" {/ n& a8 K if length(ref) > 1 && any(bus(gen(mx, GEN_BUS), BUS_TYPE) == REF)
) O$ |$ Y: S# L error('Sorry, MATPOWER cannot enforce Q limits for slack buses in systems with multiple slacks.');
" x% x5 y8 L4 X* K3 l end; \' H# l1 p5 d2 ~& S
bus(gen(mx, GEN_BUS), BUS_TYPE) = PQ; %% & set bus type to PQ |