Index: firmware/App/Modes/FPModes/ModeGenPermeate.c =================================================================== diff -u -r1abceb4d33eba70426f0bad68060beaf70210cbb -re1da3c63d3b8690d6593a7cc631a383fd942a95b --- firmware/App/Modes/FPModes/ModeGenPermeate.c (.../ModeGenPermeate.c) (revision 1abceb4d33eba70426f0bad68060beaf70210cbb) +++ firmware/App/Modes/FPModes/ModeGenPermeate.c (.../ModeGenPermeate.c) (revision e1da3c63d3b8690d6593a7cc631a383fd942a95b) @@ -47,7 +47,9 @@ #define RO_REJECTION_WAIT_TIME_MS ( 8 * MS_PER_SECOND ) ///< RO rejection alarm wait time. 5 seconds for RR to stabilize and 3 seconds for calculating rolling average ( in ms ) #define MIN_SAMPLES_NEEDED_FOR_DUTY_CYCLE_AVG 10 ///< Minimum number for samples needed for calculating the average duty cycle #define PERMEATE_FLOW_OUT_RANGE_PERSISTENCE_TIME_MS ( 1 * MS_PER_SECOND ) ///< Verify Water timer ( in ms ) -#define PERMEATE_FLOW_TOLERANCE 1.25 ///< Permeate flow tolerance limit +#define PERMEATE_FLOW_TOLERANCE 1.25 ///< Permeate flow high tolerance limit +#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 // ********** private data ********** @@ -120,6 +122,9 @@ startPermeateTankControl(); setROPumpTargetFlowRateMLPM( GEN_PERMEATE_RO_PUMP_TGT_ML, TRUE ); + initPersistentAlarm( ALARM_ID_FP_PERMEATE_FLOW_OUT_LOW_RANGE, + 0, PERMEATE_FLOW_OUT_OF_RANGE_TIMEOUT_MS ); + return genPermeateState; } @@ -182,6 +187,8 @@ permeateFlowPersistanceStartTimeMS = 0; } + checkPermeateFlow(); + //Publish Gen Permeate mode data publishGenPModeData(); @@ -398,6 +405,26 @@ /*********************************************************************//** * @brief + * The checkPermeateFlow function checks the permeate flow rate from P16 + * against the set target flow rate and alarm if the flow is out of range. + * @details \b Inputs: permeateFlow + * @details \b Outputs: none + * @details \b Alarms: ALARM_ID_FP_PERMEATE_FLOW_OUT_LOW_RANGE when + * P16 flow goes beyond threshold limit from set target flow. + * @return none + *************************************************************************/ +void checkPermeateFlow( void ) +{ + F32 permeateFlow = getFilteredFlow( P16_FLOW ); + 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); +} + +/*********************************************************************//** + * @brief * The requestGenWaterStart function handles an DD request to start (go to gen permeate mode). * @details \b Inputs: none * @details \b Outputs: none