diff --git a/rosco/controller/src/ControllerBlocks.f90 b/rosco/controller/src/ControllerBlocks.f90 index a3cce6c1..be29339f 100644 --- a/rosco/controller/src/ControllerBlocks.f90 +++ b/rosco/controller/src/ControllerBlocks.f90 @@ -524,6 +524,8 @@ SUBROUTINE Shutdown(LocalVar, CntrPar, objInst,ErrVar) ! Local Variables CHARACTER(*), PARAMETER :: RoutineName = 'VariableSpeedControl' + REAL(DbKi) :: SD_NacVaneCosF ! Time-filtered x-component of NacVane (deg) + REAL(DbKi) :: SD_NacVaneSinF ! Time-filtered y-component of NacVane (deg) !Initialize shutdown trigger variable IF (LocalVar%iStatus == 0) THEN @@ -533,10 +535,13 @@ SUBROUTINE Shutdown(LocalVar, CntrPar, objInst,ErrVar) ! Filter pitch signal LocalVar%SD_BlPitchF = LPFilter(LocalVar%PC_PitComT, LocalVar%DT, CntrPar%SD_PitchCornerFreq, LocalVar%FP,LocalVar%iStatus, LocalVar%restart, objInst%instLPF) - ! Filter yaw error signal (NacVane) - LocalVar%SD_NacVaneF = LPFilter(LocalVar%NacVane, LocalVar%DT, CntrPar%SD_YawErrorCornerFreq, LocalVar%FP,LocalVar%iStatus, LocalVar%restart, objInst%instLPF) ! Filter yaw generator speed LocalVar%SD_GenSpeedF = LPFilter(LocalVar%Genspeed, LocalVar%DT, CntrPar%SD_GenSpdCornerFreq, LocalVar%FP,LocalVar%iStatus, LocalVar%restart, objInst%instLPF) + + ! Filter yaw error signal (NacVane) + SD_NacVaneCosF = LPFilter(cos(LocalVar%NacVane*D2R), LocalVar%DT, CntrPar%SD_YawErrorCornerFreq, LocalVar%FP,LocalVar%iStatus, LocalVar%restart, objInst%instLPF) + SD_NacVaneSinF = LPFilter(sin(LocalVar%NacVane*D2R), LocalVar%DT, CntrPar%SD_YawErrorCornerFreq, LocalVar%FP,LocalVar%iStatus, LocalVar%restart, objInst%instLPF) + LocalVar%SD_NacVaneF = wrap_180(atan2(SD_NacVaneSinF, SD_NacVaneCosF) * R2D) ! (in deg) ! See if we should shutdown IF (LocalVar%SD_Trigger == 0) THEN diff --git a/rosco/toolbox/controller.py b/rosco/toolbox/controller.py index b8266bd3..e23eaf12 100644 --- a/rosco/toolbox/controller.py +++ b/rosco/toolbox/controller.py @@ -362,12 +362,6 @@ def tune_controller(self, turbine): self.vs_minspd = (turbine.TSR_operational * turbine.v_min / turbine.rotor_radius) self.pc_minspd = self.vs_minspd - # max pitch angle for shutdown - # if self.sd_maxpit: - # self.sd_maxpit = self.sd_maxpit - # else: - # self.sd_maxpit = pitch_op[-1] - # Set IPC ramp inputs if not already defined if max(self.IPC_Vramp) == 0.0: self.IPC_Vramp = [turbine.v_rated*0.8, turbine.v_rated]