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

Wind farm power setpoint tracking controller #29

Merged
merged 26 commits into from
Feb 27, 2024

Conversation

misi9170
Copy link
Collaborator

@misi9170 misi9170 commented Feb 12, 2024

Implements a closed-loop wind farm power-tracking controller and provides an example using the Hercules Floris stand-in.

Addresses #9
Also addresses NREL/hercules#72 on Hercules

To do list:

  • Implement source code for basic open-loop controller
  • Test basic open-loop controller
  • Implement source code for closed-loop controller
  • Test closed-loop controller
  • Make example comparing open-loop to closed-loop controllers
  • Update controller documentation (as well as interface, if needed)

Incidental bits and pieces included in this PR:

  • Some typo corrections throughout documentation
  • Add amr_standin_data.csv to wake steering example

@misi9170 misi9170 added the enhancement New feature or request label Feb 12, 2024
@misi9170 misi9170 marked this pull request as ready for review February 26, 2024 18:47
integral_gain=0

self.K_p = proportional_gain * 1/self.n_turbines
self.K_i = integral_gain *(4*beta*omega_n)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we use K_i, but if we don't, should we have it in there?

def __init__(self, interface, input_dict, proportional_gain=1, verbose=False):
super().__init__(interface, input_dict, verbose=verbose)

# No integral action for now. beta and omega_n not used.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we keep this in, we should mention how these terms are defined and that they're turbine specific (I think they're turbine specific?)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've decided to comment out any code relating to integral action to avoid any confusion about whether integral action is taking place

Copy link
Collaborator

@genevievestarke genevievestarke left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me!

whoc/controllers/wind_farm_power_tracking_controller.py Outdated Show resolved Hide resolved
@misi9170 misi9170 merged commit c979999 into NREL:develop Feb 27, 2024
3 checks passed
@misi9170 misi9170 deleted the feature/power-setpoint-skeleton branch February 27, 2024 22:38
achenry pushed a commit to achenry/wind-hybrid-open-controller that referenced this pull request Apr 22, 2024
* rename actuator disk interface for generality with passing power setpoints and enable interface functionality.

* Initial skeleton for power tracking controller.

* first tests added.

* ruff, typos.

* Passing through yaw angles as well (at null value).

* Open-loop setpoint distribution.

* Rename to distributing for this version.'

* References pass through interface; tested."

* placeholder for feedback-based power tracking controller.

* Tracking control loop runs; not yet tested.

* Test proportional control operation.

* Slightly more thorough test.

* Running simulations back to back.

* plotting; use output_file option in input_dict.

* ruff.

* Follow externally-provided reference.

* Upload data files for examples.

* Update tests to reflect external_signals key on hercules_dict.

* Better tuning (after transients.

* Allow proportional gain to be set externally and test that expected behavior results.

* Update documentation.

* Update plots, trajectory.

* Update documentation of example.

* More consistent tracking of hercules time in plot output.

* Update readme.

* Clarify setpoint default unit; comment out code for integral action to avoid confusion.
@misi9170 misi9170 mentioned this pull request Jul 26, 2024
4 tasks
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 this pull request may close these issues.

2 participants