Index: firmware/App/Controllers/Fans.c =================================================================== diff -u -rfeec9f68e1585117996fc0e025633fe215120a4f -r70031fe2d788c19ba0ec4779f144751b2ba3d3f9 --- firmware/App/Controllers/Fans.c (.../Fans.c) (revision feec9f68e1585117996fc0e025633fe215120a4f) +++ firmware/App/Controllers/Fans.c (.../Fans.c) (revision 70031fe2d788c19ba0ec4779f144751b2ba3d3f9) @@ -53,7 +53,6 @@ #define FANS_MAX_ALLOWED_RPM_OUT_OF_RANGE_INTERVAL ( 3 * MS_PER_SECOND ) ///< Fans max allowed RPM out of range time interval. #define FANS_MAX_ALLOWED_RPM 5500 ///< Fans max allowed RPM value. #define FANS_MIN_ALLOWED_RPM 150 ///< Fans max allowed RPM value. -#define FANS_MONITOR_INTERVAL_COUNT ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Fans monitor time interval in counts. #define FANS_MIN_RPM_OUT_OF_RANGE_TOL 0.25 ///< Fans min RPM out of range tolerance. #define FANS_MAX_RPM_OUT_OF_RANGE_TOL 0.5 ///< Fans max RPM out of range tolerance. @@ -77,7 +76,6 @@ static FANS_EXEC_STATES_T fansExecState = FANS_EXEC_STATE_WAIT_FOR_POST_STATE; ///< Fans exec state. static U32 fansControlCounter = 0; ///< Fans control interval counter. static U32 fansPublishCounter = 0; ///< Fans data publish interval counter. -static U32 fansMonitorCounter = 0; ///< Fans monitor interval counter. static BOOL isPOSTComplete = FALSE; ///< Flag that indicates whether POST is complete or not. static BOOL hasAlarmBeenRaised = FALSE; ///< Flag that indicates whether the RPM out of range alarm been raise. static OVERRIDE_U32_T rpmAlarmStartTimeOffset = { 0, 0, 0, 0}; ///< RPM out of range alarm start time offset. @@ -96,7 +94,7 @@ static void setInletFansDutyCycle( F32 pwm ); static void setOutletFansDutyCycle( F32 pwm ); -static F32 getMaximumTemperature( void ); +static F32 getMaximumTemperature( void ); static void convertTogglePeriod2RPM( void ); static void monitorFans( void ); static U32 getRPMAlarmStartTimeOffset( void ); @@ -107,7 +105,7 @@ * The initFans function initializes the fans module. * @details Inputs: none * @details Outputs: fansExecState, fansControlCounter, fansPublishCounter, - * fansMonitorCounter, isPOSTComplete, hasAlarmBeenRaised, rpmAlarmStartTime, + * isPOSTComplete, hasAlarmBeenRaised, rpmAlarmStartTime, * fansStatus, rpmAlarmStartTimeOffset * @return none *************************************************************************/ @@ -119,7 +117,6 @@ fansExecState = FANS_EXEC_STATE_WAIT_FOR_POST_STATE; fansControlCounter = 0; fansPublishCounter = 0; - fansMonitorCounter = 0; isPOSTComplete = FALSE; hasAlarmBeenRaised = FALSE; rpmAlarmStartTime = 0; @@ -438,68 +435,54 @@ /*********************************************************************//** * @brief * The monitorFans function monitors the fans for RPM. - * @details Inputs: fansMonitorCounter, rpmAlarmStartTimer, hasAlarmBeenRaised - * @details Outputs: fansMonitorCounter, rpmAlarmStartTimer, hasAlarmBeenRaised + * @details Inputs: rpmAlarmStartTimer, hasAlarmBeenRaised + * @details Outputs: rpmAlarmStartTimer, hasAlarmBeenRaised * @return none *************************************************************************/ static void monitorFans( void ) { - if ( ++fansMonitorCounter >= FANS_MONITOR_INTERVAL_COUNT ) - { - FAN_NAMES_T fan; - F32 rpm = 0.0; - BOOL isAlarmTriggered = FALSE; - BOOL isFanRPMOutOfRange = FALSE; + FAN_NAMES_T fan; + F32 rpm = 0.0; + BOOL isAlarmTriggered = FALSE; + BOOL isFanRPMOutOfRange = FALSE; - // The RPM is expected to be 5500 @ 100% duty cycle - // The nominal RPM = duty cycle * 5500 / 1.0 - // The RPM tolerance is -25% to +50% of the nominal RPM - F32 fansNominalRPM = fansStatus.dutyCycle * FANS_MAX_ALLOWED_RPM; - F32 fansMinAllowedRPM = fansNominalRPM - ( fansNominalRPM * FANS_MIN_RPM_OUT_OF_RANGE_TOL ); - F32 fansMaxAllowedRPM = fansNominalRPM + ( fansNominalRPM * FANS_MAX_RPM_OUT_OF_RANGE_TOL ); + // The RPM is expected to be 5500 @ 100% duty cycle + // The nominal RPM = duty cycle * 5500 / 1.0 + // The RPM tolerance is -25% to +50% of the nominal RPM + F32 fansNominalRPM = fansStatus.dutyCycle * FANS_MAX_ALLOWED_RPM; + F32 fansMinAllowedRPM = fansNominalRPM - ( fansNominalRPM * FANS_MIN_RPM_OUT_OF_RANGE_TOL ); + F32 fansMaxAllowedRPM = fansNominalRPM + ( fansNominalRPM * FANS_MAX_RPM_OUT_OF_RANGE_TOL ); - for ( fan = FAN_INLET_1; fan < NUM_OF_FANS_NAMES; fan++ ) - { - rpm = getMeasuredFanRPM( fan ); - isFanRPMOutOfRange |= ( ( rpm < fansMinAllowedRPM ) || ( rpm > fansMaxAllowedRPM ) ? TRUE : FALSE ); - } + for ( fan = FAN_INLET_1; fan < NUM_OF_FANS_NAMES; fan++ ) + { + rpm = getMeasuredFanRPM( fan ); + isFanRPMOutOfRange |= ( ( rpm < fansMinAllowedRPM ) || ( rpm > fansMaxAllowedRPM ) ? TRUE : FALSE ); + } - // If the fans alarm has been raise already, do not raise again - if ( FALSE == hasAlarmBeenRaised ) - { - isAlarmTriggered = isPersistentAlarmTriggered( ALARM_ID_DG_FAN_RPM_OUT_OF_RANGE, isFanRPMOutOfRange ); + // If the fans alarm has been raised already, do not raise again + if ( FALSE == hasAlarmBeenRaised ) + { + isAlarmTriggered = isPersistentAlarmTriggered( ALARM_ID_DG_FAN_RPM_OUT_OF_RANGE, isFanRPMOutOfRange ); - if ( TRUE == isAlarmTriggered ) - { - SET_ALARM_WITH_1_F32_DATA( ALARM_ID_DG_FAN_RPM_OUT_OF_RANGE, rpm ) - // Set the alarm flag to TRUE - hasAlarmBeenRaised = TRUE; - } - // If the alarm has been raised but the start time of the alarm has not been set, set the alarm start timer - if ( ( TRUE == hasAlarmBeenRaised ) && ( 0 == rpmAlarmStartTime ) ) - { - rpmAlarmStartTime = getMSTimerCount(); - } - } - // If the alarm has been raised the silence the alarm time has elapsed, get ready to raise the alarm in case the RPM was out of range - // Once the alarm is raised, it is not raised again for 24 hours - else if ( ( TRUE == hasAlarmBeenRaised ) && ( ( calcTimeSince( rpmAlarmStartTime ) + getRPMAlarmStartTimeOffset() ) >= SECONDS_IN_A_DAY * MS_PER_SECOND ) ) + if ( TRUE == isAlarmTriggered ) { - hasAlarmBeenRaised = FALSE; - rpmAlarmStartTime = 0; + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_DG_FAN_RPM_OUT_OF_RANGE, rpm ) + // Set the alarm flag to TRUE + hasAlarmBeenRaised = TRUE; } - else + // If the alarm has been raised but the start time of the alarm has not been set, set the alarm start timer + if ( ( TRUE == hasAlarmBeenRaised ) && ( 0 == rpmAlarmStartTime ) ) { - // If the alarm has been raised and 24 hours has not elapsed, check if the fans RPM is back in range again - // If the fans RPM is in range again, clear the alarm - if ( FALSE == isFanRPMOutOfRange ) - { - clearAlarmCondition( ALARM_ID_DG_FAN_RPM_OUT_OF_RANGE ); - } + rpmAlarmStartTime = getMSTimerCount(); } - - fansMonitorCounter = 0; } + // If the alarm has been raised the silence the alarm time has elapsed, get ready to raise the alarm in case the RPM was out of range + // Once the alarm is raised, it is not raised again for 24 hours + else if ( ( TRUE == hasAlarmBeenRaised ) && ( ( calcTimeSince( rpmAlarmStartTime ) + getRPMAlarmStartTimeOffset() ) >= SECONDS_IN_A_DAY * MS_PER_SECOND ) ) + { + hasAlarmBeenRaised = FALSE; + rpmAlarmStartTime = 0; + } } /*********************************************************************//**