1. Additional Input Files

1.1. Specification of internal control system for blade pitch and electrical power

1.1.1. Description of internal control system

The implemented control system is based on the choice of a conventional variable-speed, variable blade-pitch-to-feather configuration wind turbine and consists of two basic control systems: a generator torque controller and a full span rotor-collective blade-pitch controller. The two control systems are designed to work independently. The objective of generator-torque controller is to maximize power capture below the rated operation point. The goal of the blade-pitch controller is to regulate generator speed above the rated operation point.

Control measurement filter

Both the generator torque and blade pitch controllers use the generator speed as the sole feedback input. A recursive, single-pole low-pass filter exponential smoothing to reduce the high frequency excitation of the control systems is provided. The discrete time recursion equation for this filter is

\(\mathrm {\omega _{f.k}=\alpha \omega _{f.k-1}+(1-\alpha )\omega _K}\)

where

\(\mathrm {\alpha =exp((-\Delta t)/(TC))}\)

where \(\mathrm {\Delta t}\) is the discrete time step, \(\mathrm {TC}\) is the filter time constant, \(\mathrm {\alpha }\) is the low-pass filter coefficient \(\mathrm {\omega _f}\) is low pass filtered generator speed and \(\mathrm {k}\) indicates the time step. The relation between the filter time constant and the cut off (corner) frequency \(\mathrm {f_C}\) is given by:

\(\mathrm {TC=\frac{1}{2\pi f_C}}\)

Generator torque controller

The generator torque is computed as a tabulated function of the filtered generator speed, incorporating five control regions: 1, 1 1/2, 2, 2 1/2 and 3 as illustrated in the figure `Illustration of the variable speed controller - Generator torque versus generator speed' below. Region 1 is a control region before cut-in wind speed, where the generator torque is zero and no power is extracted. Instead, the wind is used to accelerate the rotor for start-up. Region 2 is a control region for optimizing power capture. Here, the generator torque is proportional to the quare of the filtered generator speed to maintain a constant (optimal) tip-speed ratio. In region 3, the generator torque or the generator power is held constant. In case of constant power the generator torque is inversely proportional to the filtered generator speed.

Blade pitch controller

In region 3, the collective blade pitch angle commands are computed using a gain-scheduled proportional-integral (PI) control on the speed error between the filtered generator speed and the rated generator speed. The PI regulator is represented by the Laplace transform: \(\mathrm {(K(s+a))/s}\) where \(\mathrm {K}\) and \(\mathrm {a}\) are the proportional gain and the integrator gain. The corresponding and simple regulator algorithm is given by

\(\mathrm {R(t+\Delta t)=R(t)+\Delta \omega \Delta t}\)

\(\mathrm {\theta =K_P\Delta \omega aK_PR(t\Delta t)=K_P\Delta \omega K_IR(t\Delta t)}\)

where \(\mathrm {\Delta t}\) is the regulator time step, \(\mathrm {\Delta \omega }\) is the rotor speed error, i.e. the difference between filtered rotor speed and rated rotor speed. \(\mathrm {R}\) is accumulated time integrated speed error which is set to zero for filtered generator speed less than rated generator speed. \(\mathrm {\theta }\) is the instructed/required collective blade pitch angle.

Gain scheduling

Gain scheduling is introduced because the optimal proportional and integrator gains are dependent of the blade pitch angle. At each step the gain will be corrected based on the pitch angle applied in the previous step. The user may specify a gain scheduling law or choose to apply the default law presented in the table `The defaults gain scheduling law'. For intervening generator speeds, linear interpolation is used.

Illustration of the variable speed controller - Generator torque versus generator speed.

The defaults gain scheduling law
Collective Blade Pitch Angle Correction Factor

\(\mathrm {[deg]}\)

\(\mathrm {[1]}\)

0.0

1.00

5.0

0.56

10.0

0.39

15.0

0.30

20.0

0.24

90.0

0.05

1.1.2. Input description

Engine Data, Generator, One input line
GBRATIO GNS_RATE TRQ_RATE RGN3MP
  • GBRATIO: real >= 1: Gear box ratio. Number of rotations of the high speed shaft for one rotation of the low speed shaft, i.e. generator versus rotor

  • GNS_RATE: real > 0: Rated generator speed \(\mathrm {[rad/T]}\)

  • TRQ_RATE: real > 0: Rated generator torque \(\mathrm {[FL]}\)

  • RGN3MP: real: Minimum pitch angle for which electrical torque versus generator speed will stay in region 3 \(\mathrm {[deg]}\)

Engine Data, Generator One input line
RGN15SP RGN20SP RGN25SP RGN30SP TRQRGN2
  • RGN15SP: real > 0: Transitional generator speed between region 1 and 1 1⁄2. Start speed for extracting power. \(\mathrm {[rad/T]}\)

  • RGN20SP: real > RGN15SP: Transitional generator speed between region 1 1⁄2 and 2. \(\mathrm {[rad/T]}\)

  • RGN25SP: real > RGN20SP: Transitional generator speed between region 2 and 2 1⁄2 \(\mathrm {[rad/T]}\)

  • RGN30SP: real > RGN25SP: Transitional generator speed between region 2 1⁄2 and 3 \(\mathrm {[rad/T]}\)

  • TRQRGN2: real > 0: Generator torque constant in region 2\(\mathrm {[FL/(rad/T)^2]}\)

Engine Data, Generator One input line
METRGN3
  • METRGN3: character(6): Method for power extraction in region 3

    • POWER: Constant Power

    • TORQUE: Constant Torque

Engine Data, Generator actuator One input line
TRQ_MAXRAT TRQ_MAX
  • TRQ_MAXRAT: real > 0: Maximum torque rate \(\mathrm {[FL/T]}\)

  • TRQ_MAX: real > 0: Maximum electrical torque \(\mathrm {[FL]}\)

Blade pitch Controller/actuator One input line
PC_MINPIT PC_MAXPIT PC_MAXRAT
  • PC_MINPIT: real: Minimum pitch setting in pitch controller \(\mathrm {[deg]}\)

  • PC_MAXPIT: real: Maximum pitch setting in pitch controller \(\mathrm {[deg]}\)

  • PC_MAXRAT: real: Maximum pitch rate \(\mathrm {[deg/T]}\)

Controller Data (PI regulator : K(s+a)/s One input line
KP KI G_SHEDULE TC
  • KP: real: Proportional gain at zero pitch angle

  • KI: real: Integral gain

  • G_SHEDULE: character: Gain scheduling; Default or Tabulated

    • = D: Default

    • = T: Tabulated

  • TC: real: Time constant for first order low pass filter, \(\mathrm {TC=1/\omega }\) \(\mathrm {[s/rad]}\)

Input refer to low-speed shaft

Gain scheduling (G_SHEDULE=T) One input line
GSNumber
  • NOP_GST: integer > 0 : Number of points in gain scheduling table. The maximum is currently 30.

Gain Scheduling; Gain correction factors. NOP_SGST input lines
BPITCH GCF
  • BPITCH: real: Blade pitch angle \(\mathrm {[deg]}\)

  • GCF: real: Gain correction factor

Controller sample interval
DTSAMP
  • DTSAMP: real > 0: Controller sample interval \(\mathrm {[T]}\)

Example input for control system
‘
'gbratio        gnsrate         trq_rate        rgn3mp
  97            122.911         43.09355         1.0
'rgn15sp        rgn20sp         rgn25sp         rgn30sp         trqrgn2
  70.16         91.208          119.0137        121.6805        0.002332288
'metrgn3
 TORQUE
'trq_maxrat     trq_max
   15.0         43.09355
'pc-minpit      pc-maxpit       pc-maxrat
  1.            90.             8.
'kp             ki              g_shedule       TC
0.006275604     0.000896514     D               0.6366
‘
‘dtsamp
0.0125

1.2. Interface for external wind turbine blade pitch, electrical power and optionally nacelle yaw control system

1.2.1. Control system files needed for RIFLEX simulation

The input to RIFLEX for the external wind turbine control system requires the (path and) name of the executable .jar file, the class to be used within that .jar file, and the (path and) name of a file which may contain input data for the external control. See Wind turbine specification. For example, the input may be:

'jarName
MyController.jar
'className
no.marintek.wind.control.WindTurbineController
'config
ControlInput.txt

Bladed style DLL controller:

A Bladed style external controller may alternatively be used. See Bladed style controller. Note that currently only the measurements and feedback specified in the interface description will be available in the DLL.

A DLL (or Linux .so file) may be specified by giving ";" as the .jar file and "no.marintek.wind.control.bladed.BladedController" as the class name. The third line is used to specify a file containing additional inputs to the wrapper; e.g. DLL (or .so) name, gear box ratio. For example, the input may be:

'jarname
 ;
'classname
 no.marintek.wind.control.bladed.BladedController
'config file
 controller.properties

An example configuration file:

#Properties
configFilePath=DISCON.IN
controllerDllPath=DISCON.dll
gearBoxRatio=50.0
elementNum=1
elementEnd=2

This configuration file will be generated by Sima.

If running without SIMA, the configuration file must be created by the user. To pass the "Yaw bearing My" signal to the controller, specify the tower top element as the only additional element measurement and specify at which end the bending moment is taken; i.e. elementEnd=1 or elementEnd=2. Currently the tower top must be the only additional element measurement and elementNum, the index to the measured element, is not used.

1.2.2. Description of control system interface

1.3. Specification of internal control system for nacelle yaw

1.3.1. Description of internal control system

Only internal yaw control is currently available. See Wind turbine specification for a description of how to set up the model to use yaw control.

The yaw error is found as the relative angle between the instantaneous wind at the hub and the orientation of the shaft. The controller starts aligning the rotor- nacelle assembly when a user defined threshold of the integral of the squared yaw error is reached. This gives more active response to fast changes in the yaw misalignment. The controller uses a constant, user defined yaw rate to get back to zero misalignment, or to a user defined yaw error.

The input yaw error and the output yaw angle are low pass filtered with a fast and a slow corner frequency, respectively.

The yaw controller logics follow the yaw rate controller described by Mulders and van Wingerden (2018).

Yaw controller configuration input version number
yawconfinput_ver
  • yawconfinput_ver: integer > 0: Yaw controller configuration input version number. Current version is 1.

Yaw controller time step
DT_yawcontrol
  • DT_yawcontrol: real > 0: Yaw controller sample interval \(\mathrm {[T]}\)

Yaw set point
YawErrSetPoint
  • YawErrSetPoint: real [-180, 180]: Specified nacelle yaw misalignment \(\mathrm {[deg]}\)

Yaw rate
YawRate
  • YawRate: real > 0: Rotational velocity for yaw engine \(\mathrm {[deg/T]}\)

Yaw misalignment threshold
YawErrThresh
  • YawErrThresh: real > 0: Integral threshold for activation of yaw engine \(\mathrm {[deg^2T]}\)

Fast filter corner period for low pass filtering
T_LPfiltFast
  • T_LPfiltFast: real > 0: Fast filter corner period for input signal \(\mathrm {[T]}\)

Slow filter corner period for low pass filtering
T_LPfiltSlow
  • T_LPfiltSlow: real > 0: Slow filter corner period for output signal \(\mathrm {[T]}\)

yaw misalignment
Figure 1. Definition of (positive) yaw misalignment between wind direction and shaft orientation
Example input for internal yawcontrol system
'yawconfinput_ver
1
'DT_yawcontrol         Yaw controller time step (s)
0.005
'YawErrSetPoint        Yaw set point (deg)
0.
'YawRate               Controller yaw rate, (deg)
0.5
'YawErrThresh          Yaw misalignment threshold, (deg^2 s)
1.0
'T_LPfiltFast          Fast filter corner period for low pass filtering (s)
1.0
'T_LPfiltSlow          Slow filter corner period for low pass filtering (s)
60.0

1.4. Airfoil library file

The airfoil library file contains the coefficient data required for aerodynamic calculations. All of the airfoils which are referred to must be included in a single file; i.e. whether or not they are part of a wind turbine. The airfoils may be listed in any order. Airfoils which are not referred to will be ignored.

Comment lines may be included on any line, as in other input files. Blank lines between airfoils will at present be ignored, but it is recommended to use comment lines instead. Blank lines at other locations in the file will be interpreted as input lines and the default values will be used.

For each airfoil, the following data groups must be given.

1.4.1. Airfoil identifier

CHAIRF
  • CHAIRF: character(32): Airfoil identifier

1.4.2. Airfoil table extension parameters

IATEXT ATAIL1 ATAIL2 ANOSE1 ANOSE2 RNOSEC
  • IATEXT: integer: Flag for extending the table to deep stall regime

    • = 1: Extend the table

    • = 0: Do not extend the table

  • ATAIL1: real: tail angle between a line perpendicular to the flow and the line from the tip of the wedge, low (negative) angles of attack \(\mathrm {[deg]}\)

  • ATAIL2: real: as ATAIL1, but for high (positive) angles of attack \(\mathrm {[deg]}\)

  • ANOSE1: real: nose angle between a line perpendicular to the flow and the line from the tip of the wedge, low (negative) angles of attack \(\mathrm {[deg]}\)

  • ANOSE2: real: as ANOSE1, but for high (positive) angles of attack \(\mathrm {[deg]}\)

  • RNOSEC: real: ratio of the nose radius to the chord of the airfoil \(\mathrm {[1]}\)

1.4.3. Airfoil table size parameters

NRE NGEO DSIN
  • NRE: integer: Number of Reynolds numbers with coefficient data

  • NGEO: integer, default: 0: number of points describing the airfoil geometry

  • DSIN: integer, default: 0: flag for user-defined dynamic stall initialization parameters

    • = 1: User-defined dynamic stall initialization parameters will be given below

    • = 0: No user-defined dynamic stall initialization parameters will be given

1.4.4. Airfoil data

One block per Reynolds number, i.e. NRE data blocks

If only one block is given, the data will be used for all Reynolds numbers. For Reynolds numbers outside the range of Reynolds numbers given, the data for the closest Reynolds number will be used; i.e. flat extrapolation.

Reynolds number
RE NAOA
  • RE: real: Reynolds number for this block \(\mathrm {[1]}\)

  • NAOA: integer: number of angle-of-attack points for this data block

Dynamic stall initialization parameters

To be given only if DSIN=1

AOA0 DCLDA1 DCLDA2 AOAFS1 AOAFS2
  • AOA0: real: the angle of attack where there is zero lift, upcrossing \(\mathrm {[deg]}\)

  • DCLDA1: real: maximum slope of the lift curve in the linear region above AOA0 \(\mathrm {[1/deg]}\)

  • DCLDA2: real: maximum slope of the lift curve in the linear region below AOA0 \(\mathrm {[1/deg]}\)

  • AOAFS1: real: angle of attack corresponding to full separation above AOA0 \(\mathrm {[deg]}\)

  • AOAFS2: real: angle of attack corresponding to full separation below AOA0 \(\mathrm {[deg]}\)

The dynamic stall initialization parameters are shown in the figure `Illustration of dynamic stall initialization parameters' below.

dynstall param
Figure 2. Illustration of dynamic stall initialization parameters.
Aerodynamic coefficients

NAOA input lines

AOA CL CD CM
  • AOA: real: angle of attack \(\mathrm {[deg]}\)

  • CL: real: non-dimensional lift coefficient \(\mathrm {[1]}\)

  • CD: real: non-dimensional drag coefficient \(\mathrm {[1]}\)

  • CM: real: non-dimensional moment coefficient \(\mathrm {[1]}\)

1.4.5. Normalized airfoil geometry

NGEO input lines, to be given only if NGEO > 0.
Airfoil coordinates are normalized by the chord length, with the origin at the aerodynamic reference point. Points around the full airfoil should be given, i.e. several lines may have the same XGEO and different values for YGEO.

XGEO YGEO
  • XGEO: real: x coordinate of geometry point, normalized by chord length.

  • YGEO: real: y coordinate of geometry point, normalized by chord length.