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

Blade Pitch Angle Stuck Fault Simulation Issue #2524

Closed
dorsamgh opened this issue Nov 18, 2024 · 7 comments
Closed

Blade Pitch Angle Stuck Fault Simulation Issue #2524

dorsamgh opened this issue Nov 18, 2024 · 7 comments

Comments

@dorsamgh
Copy link

Hello,
I hope you’re doing well. I am currently working on implementing a fault in the pitch angle control system. The fault scenario involves Blade 1’s pitch angle being fixed at its exact value at 400 seconds and remaining stuck in that position. To achieve this, I attempted to modify the relevant source code in ServoDyn, specifically the UserSubs.f90 file and the PitchCntrl subroutine, as shown in the attached image. Additionally, I’ve also included the pitch control settings from the ServoDyn module for reference.

However, when I run the simulation on the 15 MW semi-submersible turbine model, I am not getting the expected results.
I intended for the Blade 1 pitch angle to behave exactly like the normal operation curve during the first 400 seconds, but it does not. I kindly ask for your guidance in resolving this issue.

Thank you very much for your help!
image
image
image

@jjonkman
Copy link
Collaborator

Dear @dorsamgh,

I see a few problems with your approach:

  • The IEA Wind 15-MW RWT OpenFAST model makes use of the ROSCO controller, which would be called by setting PCMode = 5, but you have disabled the ROSCO pitch controller by setting PCMode = 3. If you want to use ROSCO up until the fault, you'll have to modify ROSCO directly, not UserSubs.f90.
  • The simulation time (ZTime) may not reach exactly 400 s (depending on the time step, DT). I would use some tolerance based on DT in the calculation.
  • Your FixedPitch variable is a local variable that you have not marked with the SAVE attribute, so, its value won't be saved between calls to your routine.

Best regards,

@dorsamgh
Copy link
Author

dear @jjonkman
Thank you for your response. Now, I have the question that when PCMode is set to 3, does it completely disconnect from Roscoe? While by changing YCMode to 3 and modifying the source code related to yaw control, I achieved the desired change, as shown in the images. I would like to achieve similar behavior in relation to the blade pitch angle.

image
image
image

@jjonkman
Copy link
Collaborator

Dear @dorsamgh,

ROSCO will only control blade-pitch if you set PCMode = 5 in ServoDyn. If you want to override ROSCO or other active blade-pitch control actions with a ramp or step function, you can use the override pitch maneuver inputs (TPitManS, PitManRat, BlPitchF). (A step function could be approximated by setting PitManRat high).

FYI: You could also implement a ramp or step function in yaw through the override yaw maneuver inputs (TYawManS, YawManRat, NacYawF).

Best regards,

@dorsamgh
Copy link
Author

Dear @jjonkman
Thank you. I had also thought of this solution and implemented it. However, I wanted the simulation to be such that the blade pitch angle stays exactly at the value it has at time 400 (without considering other parameters like the BTS file, etc.). If I want to use this method, I need to adjust the final blade pitch value at each simulation run to match the normal value it has at time 400, based on the different conditions. Is that correct?

@jjonkman
Copy link
Collaborator

Dear @dorsamgh,

I see two possible solutions: (1) run two simulations, recording the pitch angle at 400 s from the first and setting that to BlPitchF in the second simulation with the override manuever set with TPitManS = 400 s and ; (2) changing the OpenFAST source code to implement this logic and recompiling.

Best regards,

@dorsamgh
Copy link
Author

dorsamgh commented Nov 29, 2024

Dear @jjonkman

I feel more comfortable with your first suggestion and have implemented it. I think it's sufficient for my work as it is.
I just have one more question: Does this change made with the ServoDyn module cause actuator faults or sensor faults?
Thank you for always providing generous and quick guidance and responses.

Sincerely, Dorsa
image

@jjonkman
Copy link
Collaborator

Dear @dorsamgh,

I'm glad your problem is solved. I would call this an "actuator fault".

Best regards,

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants