Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ENH: Maximum produced/consumed reactive power #126

Closed
benoit9126 opened this issue Sep 4, 2023 · 5 comments · Fixed by #133
Closed

ENH: Maximum produced/consumed reactive power #126

benoit9126 opened this issue Sep 4, 2023 · 5 comments · Fixed by #133
Assignees
Labels
enhancement New feature or request

Comments

@benoit9126
Copy link
Member

Describe the feature you want. What problem does it solve?
For flexible loads, the value s_max defines the maximum reactive power which can be consumed or produced for the Q(U) control. It would be great to define in this control two optional values to define the q_min and q_max to limit the maximum reactive power which can be consumed or produced.

Example:

from roseau.load_flow import FlexibleParameter, Control, Projection, Q_

fp = FlexibleParameter(
    control_p=Control.constant(),
    control_q=Control.q_u(
        u_min=Q_(210, "V"), u_down=Q_(220, "V"), u_up=Q_(240, "V"), u_max=Q_(250, "V"),
        q_max=Q(2.5, "kVAr"), # <----- New value
        q_min=Q(-2, "kVAr"), # <----- New value
    ),
    projection=Projection(type="keep_p"),
    s_max=Q_(5, "kVA"),
)

In the Q(U) theoretical curve (see below), it will q_max/s_max would replace the "1" on the Y axis and q_min/s_max the "-1" on the Y axis. At any time, the value Q provided by the user must lie between q_min and q_max. Obviously, abs(q_min)<s_max and abs(q_max)<s_max and q_min<q_max

@YassineAbdelouadoud

@YassineAbdelouadoud
Copy link

YassineAbdelouadoud commented Sep 6, 2023

I would propose two additional specifications if possible :

  • Add the possibility to define q_max and q_min as percentage of s_max. This could be done by specifying the unit : q_max=Q(40, "percent")
  • Add the possibility to set the reactive value inside the dead band (with a default value of 0)

@Saelyos
Copy link
Collaborator

Saelyos commented Sep 20, 2023

@YassineAbdelouadoud

Unfortunately specifying different units for q_min and q_max is a bit complicated, especially when the values are updated as s_max, q_min and q_max are linked together. I think it is better to leave it in the client code.

Could you specify what you mean by

Add the possibility to set the reactive value inside the dead band (with a default value of 0)

Thanks.

@YassineAbdelouadoud
Copy link

By inside the dead band, I mean when the voltage is comprised between u_down and u_up. Adding the possibility to set the reactive power to a non-zero value would give another degree of freedom when configuring the Q(U) control.

@alihamdan
Copy link
Member

By inside the dead band, I mean when the voltage is comprised between u_down and u_up. Adding the possibility to set the reactive power to a non-zero value would give another degree of freedom when configuring the Q(U) control.

Q is not set to zero in this voltage range, it is set to the "theoretical reactive power" which you already have control over when you do load = PowerLoad(id="ld", bus=bus, powers=Pth+1j*Qth, flexible_params=...) (see the figure above). Is this the value you are asking for or did I not understand what you wanted?

@YassineAbdelouadoud
Copy link

My apologies, I missed the fact that this parameter was already available through the PowerLoad definition.

@Saelyos Saelyos linked a pull request Sep 25, 2023 that will close this issue
@Saelyos Saelyos closed this as completed Sep 25, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants