Controllers#
The whoc.controllers
module contains a library of wind and hybrid power plant
controllers. Each controller must inherit from ControllerBase
(see
controller_base.py) and implement a
mandatory compute_controls()
method, which contains the relevant control
algorithm and writes final control signals to the controls_dict
attribute
as key-value pairs. compute_controls()
is, in turn, called in the step()
method of ControllerBase
.
Available controllers#
LookupBasedWakeSteeringController#
Yaw controller that implements wake steering based on a lookup table.
Requires a df_opt
object produced by a FLORIS yaw optimization routine. See example
lookup-based_wake_steering_florisstandin for example usage.
Currently, yaw angles are set based purely on the (local turbine) wind direction. The lookup table is sampled at a hardcoded wind speed of 8 m/s. This will be updated in future when an interface is developed for a simulator that provides wind turbine wind speeds also.
WakeSteeringROSCOStandin#
Not yet developed. May be combined into a universal simple LookupBasedWakeSteeringController.
WindFarmPowerDistributingController#
Wind farm-level power controller that simply distributes a farm-level power reference between wind turbines evenly, without checking whether turbines are able to produce power at the requested level. Not expected to perform well when wind turbines are waked or cannot produce the desired power for other reasons. However, is a useful comparison case for the WindFarmPowerTrackingController (described below).
WindFarmPowerTrackingController#
Closed-loop wind farm-level power controller that distributes a farm-level power reference among the wind turbines in a farm and adjusts the requests made from each turbine depending on whether the power reference has been met. Developed under the A2e2g project, with further details provided in Sinner et al..
Integral action, as well as gain scheduling based on turbine saturation, has been disabled as
simple proportional control appears sufficient currently. However, these may be enabled at a
later date if needed. The proportional_gain
for the controller may be provided on instantiation,
and defaults to proportional_gain = 1
.
HybridSupervisoryControllerBaseline#
Simple closed-loop supervisory controller for a hybrid wind/solar/battery plant. Reads in current power production from wind, solar, and battery, as well as a plant power reference. Contains logic to determine technology set points for wind, solar and battery technologies to follow the plant power reference. The control is based on a proportional gain based on the error between the wind and solar production and the plant power reference. The controller increases the power references sent to wind, solar, and battery if the power reference is not met. If there is a power surplus from wind and solar, the controller adjusts the power reference values to charge the battery up to the battery capacity.
The power reference values for wind, solar and battery technologies are then handled by the operational controllers for wind, solar, and battery, which are assigned to the HybridSupervisoryControllerBaseline
on instantiation to distribute the bulk references to each asset amongst the individual generators. Currently, only wind actually distributes the power.
Intended as a baseline for comparison to more advanced supervisory controllers.
This controller can also be run for a hybrid plant comprising wind or solar
and/or a battery. At least one of the wind or solar components must be present,
with the battery component optional. Upon instantiation, the user may set
wind_controller
, solar_controller
, and/or battery_controller
to None
if
no wind, solar, and/or battery component is available, respectively.