I am rather new to OpenFast. Currently I am working on a OpenFast model of a wind turbine similar to the AOC 15/50 which is used in the OpenFast r-tests. Currently I am working on the controller of the model but I am unsure about the right approach.
ServoDyn offers different possibilities for the controller. With the variable speed control and simple generator model I did not get the desired results yet.
A different option I tried is the Bladed-style DLL with the DISCON controller. I tried adapting the NREL 5MW Discon controller to the much smaller wind turbine model by making adjustments within the Fortran code and compiling a new dll file. So far I did not receive stable result in the pitch controller with the Bladed-style DLL. I am also not sure if this approach of making adjustments within in the Fortran code is the common approach to work with the Bladed-style DLL controller.
The available data of the generator I would like to model is very simple with 2 linear non-zero segments. Above the rated generator speed the pitch control sets in to limit the generator speed. Is there a common work flow for the modeling of the generator and controller with OpenFast?
How confident are you that your data sheet is representing the true torque-speed relationship of the generator? Does the generator really have two linear regions, or is this just a coarse representation of a quadratic relationship?
Since the NREL 5-MW baseline wind turbine and controller were released, NREL has developed ROSCO that provides a much more easily adoptable and more industry-representative baseline wind turbine controller: GitHub - NREL/ROSCO: A Reference Open Source Controller for Wind Turbines. We typically recommend using ROSCO to implement wind turbine controllers, but perhaps the controller you are trying to represent is more basic than that provided in ROSCO?
the information I have about the generator only shows these two linear regions and our Electrical engineer also confirmed it.
I am currently working on the controller for both pitch controll and the generator and I also tried using the ROSCO toolbox to implement the controllers. I am still not sure if I understood the general workflow with ROSCO and Openfast correctly.
As a starting point I used the given DISCON.dll from the NREL 5 MW baseline wind energy turbine which I tried to modify directly in the Fortran code but I was not successful. As suggested in the post above I set up the ROSCO toolbox and generated a DISCON.IN file with my current model and the example04.py script from the ROSCO toolbox. It did not create a new DISCON.dll.
When I set up my simulation with the old DISCON.dll from the NREL 5 MW baseline wind energy turbine and the new DISCON.IN from the ROSCO toolbox, the results were the same as before (without DISCON.IN).
I am not sure about the right workflow at this point. Do I need the modify the DISCON.dll as well? Is there a way to do it within the ROSCO toolbox. I did have trouble to set the toolbox up in a Windows environment and used a virtual Linux to use the ROSCO toolbox. My openfast simulation is running on my Windows machine.
The DISCON.dll controller for the NREL 5-MW baseline controller is different than the DISCON.dll for ROSCO. The DISCON.dll controller for the NREL 5-MW baseline controller has all of its control parameters hard-coded within its source file; the only way to change the control parameters is to recompile the DISCON.dll. The ROSCO DISCON.dll does not have hard-coded control parameters; rather, the control parameters are defined within a DISCON.IN input file, so, there is no need to recompile the ROSCO DISCON.dll if the standard ROSCO control features are to be used.
I hope that helps.
thank you for the quick response. I found the ROSCO libdiscon.dll and used it in my model. Unfortunately I get a error message:
“>> The variable “IPC_IntSat” was not assigned a valid value on line #49.”
In my DISCON.IN in line #49 IPC_Vramp is stored. IPC_IntSat is written in line #50. Has there been a change between versions? I don’t use individual pitch controll in my model but I guess that like in other parts of Openfast, variables have to be in specific lines.
I currently use openfast 2.5.0 and ROSCO version 2.5.0.
You may be using the
develop branch of ROSCO. We made a few API changes after version 2.5.0 that will be included in the next release, like
IPC_Vramp on line #49.
So, the solution is either to recompile and use the
main branch of ROSCO (2.5.0) or use the updated
develop DISCON file, for example, here.
This is all assuming you compiled ROSCO from the source code. Is this correct? Otherwise, we may have another issue.