Skip to content

Commit

Permalink
remove yaw-by-ipc
Browse files Browse the repository at this point in the history
  • Loading branch information
nikhar-abbas committed Jun 9, 2022
1 parent 7eb9249 commit 2ca2859
Showing 1 changed file with 6 additions and 21 deletions.
27 changes: 6 additions & 21 deletions ROSCO/src/Controllers.f90
Original file line number Diff line number Diff line change
Expand Up @@ -317,10 +317,8 @@ SUBROUTINE IPC(CntrPar, LocalVar, objInst, DebugVar, ErrVar)
! Local variables
REAL(DbKi) :: PitComIPC(3), PitComIPCF(3), PitComIPC_1P(3), PitComIPC_2P(3)
INTEGER(IntKi) :: i, K ! Integer used to loop through gains and turbine blades
REAL(DbKi) :: axisTilt_1P, axisYaw_1P, axisYawF_1P ! Direct axis and quadrature axis outputted by Coleman transform, 1P
REAL(DbKi) :: axisTilt_2P, axisYaw_2P, axisYawF_2P ! Direct axis and quadrature axis outputted by Coleman transform, 1P
REAL(DbKi) :: axisYawIPC_1P ! IPC contribution with yaw-by-IPC component
REAL(DbKi) :: Y_MErrF, Y_MErrF_IPC ! Unfiltered and filtered yaw alignment error [rad]
REAL(DbKi) :: axisTilt_1P, axisYaw_1P ! Direct axis and quadrature axis outputted by Coleman transform, 1P
REAL(DbKi) :: axisTilt_2P, axisYaw_2P ! Direct axis and quadrature axis outputted by Coleman transform, 1P

CHARACTER(*), PARAMETER :: RoutineName = 'IPC'

Expand All @@ -329,30 +327,20 @@ SUBROUTINE IPC(CntrPar, LocalVar, objInst, DebugVar, ErrVar)
CALL ColemanTransform(LocalVar%rootMOOPF, LocalVar%Azimuth, NP_1, axisTilt_1P, axisYaw_1P)
CALL ColemanTransform(LocalVar%rootMOOPF, LocalVar%Azimuth, NP_2, axisTilt_2P, axisYaw_2P)

! High-pass filter the MBC yaw component and filter yaw alignment error, and compute the yaw-by-IPC contribution
IF (CntrPar%Y_ControlMode == 2) THEN
Y_MErrF = SecLPFilter(LocalVar%Y_MErr, LocalVar%DT, CntrPar%Y_IPC_omegaLP, CntrPar%Y_IPC_zetaLP, LocalVar%FP, LocalVar%iStatus, LocalVar%restart, objInst%instSecLPF)
Y_MErrF_IPC = PIController(Y_MErrF, CntrPar%Y_IPC_KP(1), CntrPar%Y_IPC_KI(1), -CntrPar%Y_IPC_IntSat, CntrPar%Y_IPC_IntSat, LocalVar%DT, 0.0_DbKi, LocalVar%piP, LocalVar%restart, objInst%instPI)
ELSE
axisYawF_1P = axisYaw_1P
Y_MErrF = 0.0
Y_MErrF_IPC = 0.0
END IF

! Soft cutin with sigma function
DO i = 1,2
LocalVar%IPC_KP(i) = sigma(LocalVar%WE_Vw, CntrPar%IPC_Vramp(1), CntrPar%IPC_Vramp(2), 0.0_DbKi, CntrPar%IPC_KP(i), ErrVar)
LocalVar%IPC_KI(i) = sigma(LocalVar%WE_Vw, CntrPar%IPC_Vramp(1), CntrPar%IPC_Vramp(2), 0.0_DbKi, CntrPar%IPC_KI(i), ErrVar)
END DO

! Integrate the signal and multiply with the IPC gain
IF ((CntrPar%IPC_ControlMode >= 1) .AND. (CntrPar%Y_ControlMode /= 2)) THEN
IF (CntrPar%IPC_ControlMode >= 1) THEN
LocalVar%IPC_axisTilt_1P = PIController(axisTilt_1P, LocalVar%IPC_KP(1), LocalVar%IPC_KI(1), -CntrPar%IPC_IntSat, CntrPar%IPC_IntSat, LocalVar%DT, 0.0_DbKi, LocalVar%piP, LocalVar%restart, objInst%instPI)
LocalVar%IPC_axisYaw_1P = PIController(axisYawF_1P, LocalVar%IPC_KP(1), LocalVar%IPC_KI(1), -CntrPar%IPC_IntSat, CntrPar%IPC_IntSat, LocalVar%DT, 0.0_DbKi, LocalVar%piP, LocalVar%restart, objInst%instPI)
LocalVar%IPC_axisYaw_1P = PIController(axisYaw_1P, LocalVar%IPC_KP(1), LocalVar%IPC_KI(1), -CntrPar%IPC_IntSat, CntrPar%IPC_IntSat, LocalVar%DT, 0.0_DbKi, LocalVar%piP, LocalVar%restart, objInst%instPI)

IF (CntrPar%IPC_ControlMode >= 2) THEN
LocalVar%IPC_axisTilt_2P = PIController(axisTilt_2P, LocalVar%IPC_KP(2), LocalVar%IPC_KI(2), -CntrPar%IPC_IntSat, CntrPar%IPC_IntSat, LocalVar%DT, 0.0_DbKi, LocalVar%piP, LocalVar%restart, objInst%instPI)
LocalVar%IPC_axisYaw_2P = PIController(axisYawF_2P, LocalVar%IPC_KP(2), LocalVar%IPC_KI(2), -CntrPar%IPC_IntSat, CntrPar%IPC_IntSat, LocalVar%DT, 0.0_DbKi, LocalVar%piP, LocalVar%restart, objInst%instPI)
LocalVar%IPC_axisYaw_2P = PIController(axisYaw_2P, LocalVar%IPC_KP(2), LocalVar%IPC_KI(2), -CntrPar%IPC_IntSat, CntrPar%IPC_IntSat, LocalVar%DT, 0.0_DbKi, LocalVar%piP, LocalVar%restart, objInst%instPI)
END IF
ELSE
LocalVar%IPC_axisTilt_1P = 0.0
Expand All @@ -361,11 +349,8 @@ SUBROUTINE IPC(CntrPar, LocalVar, objInst, DebugVar, ErrVar)
LocalVar%IPC_axisYaw_2P = 0.0
END IF

! Add the yaw-by-IPC contribution
axisYawIPC_1P = LocalVar%IPC_axisYaw_1P + Y_MErrF_IPC

! Pass direct and quadrature axis through the inverse Coleman transform to get the commanded pitch angles
CALL ColemanTransformInverse(LocalVar%IPC_axisTilt_1P, axisYawIPC_1P, LocalVar%Azimuth, NP_1, CntrPar%IPC_aziOffset(1), PitComIPC_1P)
CALL ColemanTransformInverse(LocalVar%IPC_axisTilt_1P, LocalVar%IPC_axisYaw_1P, LocalVar%Azimuth, NP_1, CntrPar%IPC_aziOffset(1), PitComIPC_1P)
CALL ColemanTransformInverse(LocalVar%IPC_axisTilt_2P, LocalVar%IPC_axisYaw_2P, LocalVar%Azimuth, NP_2, CntrPar%IPC_aziOffset(2), PitComIPC_2P)

! Sum nP IPC contributions and store to LocalVar data type
Expand Down

0 comments on commit 2ca2859

Please sign in to comment.