hi,
you are so great. thank you for your hard-working
At 2020-01-13 23:42:57, "Florian Bennewitz" <midran...@web.de> wrote:
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:
o rows 196, 203-205: some initializations
o rows 246-256: implementation of genreacpowercapcurve()
o row 263: adaption of if-clause
o 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