Index: firmware/App/Monitors/WaterQualityMonitor.c =================================================================== diff -u -r47a7b0fce13cf38919932a8662c378f4f6a8b9f3 -r4bb331eccddd3c929266b9c01066347533726774 --- firmware/App/Monitors/WaterQualityMonitor.c (.../WaterQualityMonitor.c) (revision 47a7b0fce13cf38919932a8662c378f4f6a8b9f3) +++ firmware/App/Monitors/WaterQualityMonitor.c (.../WaterQualityMonitor.c) (revision 4bb331eccddd3c929266b9c01066347533726774) @@ -26,6 +26,7 @@ #include "SystemCommDD.h" #include "TaskPriority.h" #include "Temperature.h" +#include "Timers.h" #include "WaterQualityMonitor.h" /** @@ -68,7 +69,7 @@ #define PERMEATE_FLOW_OUT_RANGE_PERSISTENCE_TIMEOUT_MS ( 5 * MS_PER_SECOND ) ///< Verify Water timer ( in ms ) #define PERMEATE_FLOW_OUT_RANGE_PERSISTENCE_CLEAR_MS ( 5 * MS_PER_SECOND ) ///< Verify Water timer ( in ms ) #define PERMEATE_FLOW_FAULT_MIN_THRESHOLD 200.0F ///< Permeate flow low tolerance limit -#define PERMEATE_FLOW_OUT_OF_RANGE_TIMEOUT_MS ( 12 * MS_PER_SECOND ) ///< Permeate flow low tolerance out of range timeout +#define PERMEATE_FLOW_LOW_OUT_OF_RANGE_EXEMPT_MS ( 5 * MS_PER_SECOND ) ///< Permeate flow low alarm exempt for 10 seconds after starting from Off (5 seconds is considered in persistence) #define RO_PUMP_DUTY_CYCLE_WARNING_TIMEOUT_MS ( 1 * MS_PER_SECOND ) ///< Persistence period for duty cycle in warning range in milliseconds. #define RO_PUMP_DUTY_CYCLE_WARNING_CLEAR_MS ( 1 * MS_PER_SECOND ) ///< Persistence period for duty cycle warning range clear in milliseconds. @@ -113,7 +114,7 @@ //Flow Alarms initPersistentAlarm( ALARM_ID_FP_PERMEATE_FLOW_OUT_HIGH_RANGE, PERMEATE_FLOW_OUT_RANGE_PERSISTENCE_CLEAR_MS, PERMEATE_FLOW_OUT_RANGE_PERSISTENCE_TIMEOUT_MS ); // fault , clearing timeout is not applicable - initPersistentAlarm( ALARM_ID_FP_PERMEATE_FLOW_OUT_LOW_RANGE, 0, PERMEATE_FLOW_OUT_OF_RANGE_TIMEOUT_MS ); + initPersistentAlarm( ALARM_ID_FP_PERMEATE_FLOW_OUT_LOW_RANGE, PERMEATE_FLOW_OUT_RANGE_PERSISTENCE_CLEAR_MS, PERMEATE_FLOW_OUT_RANGE_PERSISTENCE_TIMEOUT_MS ); // duty cycle warning alarm initPersistentAlarm( ALARM_ID_FP_POWER_BUDGET_OUT_OF_RANGE, RO_PUMP_DUTY_CYCLE_WARNING_CLEAR_MS, RO_PUMP_DUTY_CYCLE_WARNING_TIMEOUT_MS ); @@ -197,8 +198,12 @@ BOOL isFlowOutOfRange = FALSE; F32 minimumAllowedPermeateFlow = (F32)getTargetROPumpFlowRateMLPM() - PERMEATE_FLOW_FAULT_MIN_THRESHOLD; - isFlowOutOfRange = ( ( permeateFlow < minimumAllowedPermeateFlow ) ? TRUE : FALSE ); - checkPersistentAlarm( ALARM_ID_FP_PERMEATE_FLOW_OUT_LOW_RANGE, isFlowOutOfRange, permeateFlow, minimumAllowedPermeateFlow ); + if ( TRUE == getROPumpLowFlowExemptFlag() && didTimeout( getROPumpLowFlowExemptTimer(), PERMEATE_FLOW_LOW_OUT_OF_RANGE_EXEMPT_MS ) ) + { + isFlowOutOfRange = ( ( permeateFlow < minimumAllowedPermeateFlow ) ? TRUE : FALSE ); + checkPersistentAlarm( ALARM_ID_FP_PERMEATE_FLOW_OUT_LOW_RANGE, isFlowOutOfRange, permeateFlow, minimumAllowedPermeateFlow ); + } + } /*********************************************************************//**