REMOVE this email address from your spam. 

 

 

From: bounce-124269900-85421...@list.cornell.edu
<bounce-124269900-85421...@list.cornell.edu> On Behalf Of Florian Bennewitz
Sent: Monday, January 13, 2020 10:43 AM
To: MATPOWER-DEV-L@cornell.edu
Subject: implementation of generator reactive power capability curve in load
flow

 

Hello everybody,

 

first of all I wish you a happy new year.

 

For the purpose of my thesis, I needed to consider more detailed reactive
power limits of synchronous generators. This mainly includes the influence
of the terminal voltage to the operation chart of the generators. Hence I
wrote the function genreacpowercapcurve_rev() (see attachment), which is
implemented in runpf_rev() directly before the lines, where gens with
violated Q constraints are identified (see further annotations to
runpf_rev() below). Basically, genreacpowercapcurve_rev() calculates the
Q-limits of each generator according to the well-known operating chart. 

 

Some annotations regarding genreacpowercapcurve_rev():

*       The calculation of the operation chart of a round-rotor-generator
needs one further parameter, the stationary reactance in the d-axis. For my
purpose, I wrote that number in gen(:,13), because I do not use any OPF-code
from Matpower. However, salient-pole-generators are currently not
considered.
*       One further parameter needed is the so called practical static
stability limit, which defines a safety margin to the theoretical static
stability limit at theta=90° at the under-excited side of the operating
chart. I included this as mpopt.pf.static_stab_lim, which is by default 70°.

*       The set point regarding active power injection can be inadmissible
in the theoretical case of very low terminal voltages. Currently, this is
considered to be an infeasible problem.
*       The rated voltage of the generator is currently set to the base
voltage of the terminal bus, which might not be true in general.

 

Some annotations regarding runpf_rev():

*       The application of the reactive power capability curve is activated
with mpopt.pf.consider_q_cap_curve, which is 0 by default.
*       The application of voltage-dependent-reactive-power-limits yielded a
problem with the PV-PQ-change of generator-busses, which violate their
reactive power limits. In the original runpf(), in this case a generator is
fixed to the reactive power limit by converting its [Pg,Qg_lim] to a
negative load, i.e. -[Pg,Qg_lim] are stored in mpc.bus. Thereafter, the
limited power injection remains unchanged in further iterations. This is
correct, if the respective reactive power limit does not change further; but
it is wrong, if the reactive power limit changes with terminal voltage
magnitude. Hence, further iterations are needed, until the limited reactive
power injection shows convergence with the terminal voltage magnitude.
However, this issue caused some changes in the runpf_rev(), which I tried to
comment thoroughly. The relevant rows in runpf_rev() are the following ones:


*       rows 196, 203-205: some initializations
*       rows  246-256: implementation of genreacpowercapcurve()
*       row 263: adaption of if-clause
*       rows 301-346: correction of PV-PQ-change and calculation of
ratio_qg_change, which indicates the aforementioned convergence behavior

*       The convergence of the outer loop is assumed, if ratio_qg_change <
mpopt.pf. q_lim_gen_tol, which is 0.01 by default.

 

A first small test looks fine for me. However, I guess there are major
possibilities to improve this, at least my style of writing this code. ;) So
hopefully there will be some good ideas on this.

 

Last but not least a huge thank-you for the tremendous work on Matpower to
Dr. Zimmermann and all the others! 

Kind regards from Germany,

Florian Bennewitz

Reply via email to