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

Reply via email to