Dear Hernan,
I’m sorry, but I’m not sure I know how to respond to your question. What have you changed between the “Classic PID” and Gain-Scheduled PID" response curves?
Best regards,
Dear Hernan,
I’m sorry, but I’m not sure I know how to respond to your question. What have you changed between the “Classic PID” and Gain-Scheduled PID" response curves?
Best regards,
Dear Jonkman,
I’m sorry if i didn’t make it enough clear. The difference is that PID clasic is the normal way of control and GS PID is a PID controller with a gain scheduling factor. What i tried to explain is that i realize they have the same behavior. In nrel.gov/docs/fy08osti/42437.pdf mentioned that GS PID should have almoust the same response for a wide range of step wind velocities.
Which is the correct approach for testing this controllers?
I hope this to be more clear than former question.
Best regards,
Dear Hernan,
Yes, I would expect the effect of gain scheduling to be more prominent for conditions away from the operating point used to set the gains for the controller without gain scheduling. That said, the report you linked to is not a report I was involved in writing; you may want to contact the lead other (Alan Wright) for additional guidance (Alan does not regularly check this forum).
Best regards,
Dear Jonkman
As always so helpful. Thanks a lot and i will try to contact Alan Wright inorder to solve this doubt.
Best regards,
Dear Jason,
I would like to do the sensitivity analaysis of aerodynamic power to blade pitch in region 3 with another wind turbine. That is why firstly I tryed to reproduce your test with the NREL 5MW. I got the same results as those of Ville ([url]Gain Scheduling]):
It can be said that I need to apply the frozen wake, rigth?
Then, I tryed with the FAST version you posted there (http://wind.nrel.gov/public/jjonkman/FA%20…%20zation.exe), but a error message is displayed saying that it cannot be read the TStart. The values is set to 0.0, but I changed to any other value and it continues displaying the same error. Would you know why it could be due?
Thank you in advance,
Joannes
Dear Joannes,
Yes, using frozen wake will give you the results you expect.
However, I would not go back to use the customized version of FAST v6.01. (But if you wish to track down an error in the processing of the input file, enable the “Echo” flag.)
Instead, the option to use frozen wake is included as a standard option in the linearization functionality of FAST v8.16 and OpenFAST. I suggest you upgrade to the newest version.
Best regards,
Dear all,
I am currently working on the design of the pitch-control for a 15 MW floating turbine, and I am currently using the IEA Wind 15-Megawatt Offshore Reference Wind Turbine model in OpenFAST (v2.4.0).
In this control design process, I must linearize the model in OpenFAST in order to obtain the values of the partial derivatives of power or aerodynamic torque with respect to the collective blade pitch angle. One expects to have a linear evolution of this derivative as a function of the pitch angle and I obtained such a result. However, I need to check my approach because some things are odd in my simulations and I am not fully confident with the consistency of the results. I followed the following approach:
For each wind speed :
When I linearize at a single operating point (NLinTimes = 1), the blade pitch obtained in the linearization file (ie the one at which the aerodynamic power is derived) is the same as the one I used to initialize the model (corresponding to a rated speed and torque in the case without linearization). However, the time of simulation is always t=0.025s which seems really random, even more that it is also this time of simulation when I don’t initialize correctly rotor speed and blade pitch. Also it seems “rapid” to linearize at this time.
If I set NLinTimes = 2 or more, the blade pitch values at each wind speed (read from the lin file or even from the Blade pitch times series) are different from the initial values and this is surprising (because not value corresponding to a steady state). One of the hypothesis I thought of, is that when FAST performs several linearization, these ones which are very close in time, interfere with each other and thus disturb the results. However, I augment the simulation time, the linearization were then more spaced but the observation remains. When I set the TrimCase equal to the torque (TrimCase = 2), the problem is solved but is it consistent to choose the torque as the variable to be trimmed ?
Finally, if when set CalcSteady = False, I need to choose the operating point about which FAST will perform the linearization, so I take a time at which it seems that convergence had occurred. The pitch value remains “normal” (ie equal to the blade pitch corresponding to rated torque) but is it consistent ? Moreover, the aerodynamic derivative curve is no longer linear.
To resume, I am newer sure about how to define the following parameters: CalcSteady, TrimCase, NLinTimes to have results that I can use with confidence for my control design.
I hope that my question is clear enough and I am indeed available for any further information about my simulations or my issues.
Thank you,
Best regards,
Adèle des Moutis
DORIS Engineering
Energy Renewable Energy Department
adele.des-moutis@polytechnique.edu
PS : for your information, I disabled HydroDyn and MoorDyn, as well as the corresponding DOF for now.
Dear Adèle,
When the rotor is spinning, I would not recommend using NLinTimes = 1. When the rotor is spinning, I would generally recommend linearizing every 10-degrees of azimuth, so, NLinTimes, which is the number of times to linearize in one rotor revolution should be set to 36. NLinTimes = 1 is most useful when the rotor is not spinning. Perhaps the steady-state calculation is not working as expected (a bug?) when the rotor is spinning and NLinTimes = 1, but this setup is not recommended anyway.
I’m not sure I fully understand what you are saying when you discuss the NLinTimes = 2 solution.
For an operational variable-speed rotor, in general, I would recommend setting:
I hope that helps.
Best regards,
Dear J. Jonkman,
Thank you very much for your rapid answer. It helped a lot. I was able to perform linearization: for each wind speed above rated, I extracted the aerodynamic sensitivity to rotor collective blade pitch angle (in the D matrix of the linearization output files) for each 36 linearization and associated blade pitch at operating point and averaged. I found a linear law between ∂P/∂θ and θ and the orders of magnitude seem coherent.
I still, however, have some questions:
Thank you for your precious help.
Best regards,
Adèle des Moutis
DORIS Engineering
Paris,France
Hi Adèle,
I might be able to chime in with some responses here.
I would assume that, for standard PI controller tuning purposes, linearizing with HydroDyn enabled is unnecessary.
First, I might point you to the most recent publication on ROSCO that is available through WES Discussions: wes.copernicus.org/preprints/wes-2021-19/
a) The calculations of these derivatives is fundamentally different so we expect the results to be similar, but not the same. Generally, the derivatives are calculated through perturbations from an operating point in OpenFAST, which is not the same as the analytical derivatives calculated from the equations of motion used in ROSCO.
b) If I am following correctly, perhaps the sign error you are seeing is a result of the conventions used in the NREL 5MW report and in ROSCO. In the 5MW report Δθ is defined as a “perturbation … about the rated speed”, so Δθ = θ(t) - θ_ref. From this, equation (7-11) falls out and you get your first result for 2ξω. In ROSCO, the PI controller is put in the closed loop using a more classical negative feedback loop, so Δθ = θ_ref - θ(t). This eventually shakes out to be equation (13) in the ROSCO report, which corresponds to your second result for 2ξω. Regardless, the final gains should be similar (but not equal!) using either method, just with a sign flip.
c) We cannot access it from the D matrix, as rotor speed is not an input. You can, however, pull it out of the C matrix by looking at the relationship between AeroDyn output RtAeroMxh and the rotor speed state.
This is purely a result of the analytical tuning used in the ROSCO toolbox. Per equation (13) in the linked report, and remembering that B is always negative, if 2 ξ_des ω_des + A(v_op) < 0 (which happens at high wind speeds, in this case), then kp can flip signs.
A few links:
NREL 5MW report: nrel.gov/docs/fy09osti/38060.pdf
ROSCO report: wes.copernicus.org/preprints/we … 021-19.pdf
Hope this helps!
Cheers,
Nikhar
Dear Nikhar,
Thanks a lot for your very interessing answers. I may come back to you with more questions after some personnal work to fully understand all of it.
Best regards,
Adèle des Moutis
DORIS Engineering
Paris,France
Dear Nikhar,
I have some remaining questions about the ROSCO controller and especially about the computation of the gains.
= Is it ok to use the ROSCO method (ie use this formula 2ξ_n ω_n=(K_p N)/J (∂τ_a)/∂β-N∂τ/J∂ω(ν) for gains) but to compute the gains numerically (i.e. linearize in OpenFAST and then read the different values in the matrices in .lin files)
= To do that I understood that you must use the wind speed estimator, to have a pitch dependant gain. Could you tell me how to get it with OpenFAST?
= If the wind speed estimator is not ease to use, is it ok to replace ∂τ/∂ω(ν) by -P_0/(Ω_0 ²I) ?
= Finaly, I don’t understand this “controller flag” :
! VS_ControlMode - Generator torque control mode in above rated conditions {0: constant torque, 1: constant power, 2: TSR tracking PI control}
Why the “TSR tracking PI control mode” concerns the above rated conditions and not the below rated conditions?
= More generally, several remarks were raised:
Is it possible to adjust the sampling period of the control, (to make it compatible with real conditions)?
In the blade pitch PI controller, is the generator speed reference a step or a reference trajectory?
Finally, how are the gains chosen between two operating points?
I sincerely thank you for your precious help.
Best regards,
Adèle
Hello everyone,
I need to learn the gain scheduling method of NREL/TP-500-38060 (5 MW Reference Wind Turbine) before applying the same method for wind turbines of different sizes for my research.
Are the pitch angle values in Table 7-1 input or output of linearization analyses? The report refers to them as “the corresponding blade-pitch angles that produce the rated mechanical power (P0= 5.296610 MW)”. It seems like the pitch angles for diffrent wind speeds are calculated before the linearization.
My question is, how are pitch angles in the table calculated? I am using FAST v8.16.00a.
I tried the following:
Dear Behrouz,
It is been a while since that report was written, but if I recall correctly, we enabled GenDOF and used TrimCase = 3 in the linearization process, which finds the pitch angle necessary to achieve the desired rotor speed based on the fixed wind speed (based on an internal controller implemented within FAST). TrimCase was available in FAST v5-v7, but was not available in FAST v8. TrimCase was reintroduced again In OpenFAST, starting in version 2.4 and newer. In FAST v8, a trial and error approach could be used. You could also implement a pitch controller that aims to minimize rotor-speed error. Regardless, I would recommend upgrading to OpenFAST.
A couple other comments:
Best regards,
Dear Dr. Jonkman,
Thank you very much for the answer.
Best regards,
Behrouz
Hi Adèle,
Sorry about the slight delay with response here!
I don’t see any reason that you shouldn’t be able to use the methods used by ROSCO to calculate the gains, but to use the sensitivities from the linearization files. I have not done this yet myself, however.
You do not need to have a wind speed estimator in order to have a pitch dependent gain. One way to schedule the gain is to have a linear scaling such as the classical NREL 5MW controller. In the ROSCO tools, the Cp surface is used to calculate the expected steady state gain depending on tip speed ratio for each wind speed, and the gains are calculated accordingly. This is explained at the end of section 4 of the ROSCO report.
If using ROSCO, the wind speed estimator should not be too much trouble. At first glance, I’m not sure that ∂τ/∂ω(ν) by -P_0/(Ω_0 ²I) would be totally reasonable, as the replacement term would be a constant. Maybe I’m misinterpreting something here, though.
The wording is admittedly a bit confusing about VS_ControlMode. “TSR tracking PI control” is referring to the below-rated behavior. VS_ControlMode = 2 is TSR tracking PI control below rated and constant torque above rated. VS_ControlMode = 2 is TSR tracking PI control below rated and constant power above rated. Please see Table 1 (and associated sections) in the ROSCO report for more detail on the theoretical implementations of this.
The controller communication interval would need to be increased with the OpenFAST time-step due to the discrete nature of the software.
The blade pitch controller’s reference speed is generally rated rotor speed. Please see the ROSCO report for the exact detail of how this is implemented. There may be some future work to enable dynamic reference speeds for the pitch controller, but that has not been done yet.
The gains are linearly interpolated between operating points.
ROSCO report: wes.copernicus.org/preprints/we … 021-19.pdf
Hope this helps!
Nikhar
Hi Nikhar,
Thank you very much for your very interessing answers. It helped me a lot.
Best regars,
Adèle des Moutis
DORIS Engineering
Paris,France