Index: firmware/App/Controllers/PermeateTank.c =================================================================== diff -u -rd79faa7118db6d048ce3433224b3e5a478c97a98 -r3094850a313096e5e41497c250089ce1ea9b07d9 --- firmware/App/Controllers/PermeateTank.c (.../PermeateTank.c) (revision d79faa7118db6d048ce3433224b3e5a478c97a98) +++ firmware/App/Controllers/PermeateTank.c (.../PermeateTank.c) (revision 3094850a313096e5e41497c250089ce1ea9b07d9) @@ -333,10 +333,10 @@ case PERMEATE_TANK_FULL_STATE: setValveState( M4_VALV, VALVE_STATE_CLOSED ); setValveState( M12_VALV, VALVE_STATE_CLOSED ); - setValveState( P6_VALV, VALVE_STATE_CLOSED ); + setValveState( P6_VALV, VALVE_STATE_OPEN ); setValveState( P11_VALV, VALVE_STATE_OPEN ); setValveState( P33_VALV, VALVE_STATE_OPEN ); - setValveState( P34_VALV, VALVE_STATE_OPEN ); + setValveState( P34_VALV, VALVE_STATE_CLOSED ); setValveState( P37_VALV, VALVE_STATE_CLOSED ); setValveState( P39_VALV, VALVE_STATE_CLOSED ); tankFullDelayTime = getMSTimerCount(); Index: firmware/App/Modes/FPModes/FlushConcentrate.c =================================================================== diff -u -r25e44b3d8133ef2d8bed9a2e2dd55696c41e8acf -r3094850a313096e5e41497c250089ce1ea9b07d9 --- firmware/App/Modes/FPModes/FlushConcentrate.c (.../FlushConcentrate.c) (revision 25e44b3d8133ef2d8bed9a2e2dd55696c41e8acf) +++ firmware/App/Modes/FPModes/FlushConcentrate.c (.../FlushConcentrate.c) (revision 3094850a313096e5e41497c250089ce1ea9b07d9) @@ -20,6 +20,7 @@ #include "FlowSensor.h" #include "FlushConcentrate.h" #include "FPOperationModes.h" +#include "Level.h" #include "MessageSupport.h" #include "Messaging.h" #include "PermeateTank.h" @@ -39,12 +40,15 @@ #define CONCENTRATE_FLUSH_MAX_TIMEOUT ( 600 * MS_PER_SECOND ) ///< Max override timeout for 10 minutes #define CONCENTRATE_FLUSH_DATA_PUBLISH_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the gen water mode data published. #define CONCENTRATE_FLUSH_TIMEOUT ( 30 * MS_PER_SECOND ) ///< Concentrate flush timer (in ms) -#define CONCENTRATE_FLUSH_RO_PUMP_TGT_PWM 0.8F ///< target in PWM % for the RO pump during concentrate flush. +#define CONCENTRATE_FLUSH_RO_PUMP_TGT_PWM 0.75F ///< target in PWM % for the RO pump during concentrate flush. #define CONCENTRATE_FLUSH_BOOST_PUMP_TGT_PSI 25 ///< Pressure target in PSI for the boost pump during concentrate flush. #define CONCENTRATE_FLUSH_VOLUME_THRESHOLD_ML 1000.0F ///< Integrated volume threshold in ml #define CONCENTRATE_FLUSH_VOLUME_THRESHOLD_PCT 0.9F ///< Integrated volume threshold percentage #define CONCENTRATE_FLUSH_VOLUME_THRESHOLD CONCENTRATE_FLUSH_VOLUME_THRESHOLD_ML * CONCENTRATE_FLUSH_VOLUME_THRESHOLD_PCT ///< alarm threshold for integrated volume +#define CONCENTRATE_FLUSH_WAIT_FOR_TANK_FULL_TIMEOUT ( 60 * MS_PER_SECOND ) ///< Concentrate flush wait for tank full timer (in ms) +#define CONCENTRATE_FLUSH_WAIT_FOR_TANK_FULL_TGT_FLOW 700 ///< target flow rate for waiting for tank state + // ********** private data ********** static const F32 CONCENTRATE_FLOW_INTEGRATOR = 1.0F / (F32)( SEC_PER_MIN * ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ); ///< Multiplier to convert flow (mL/min) into volume (mL) for period of general task interval. @@ -53,6 +57,7 @@ static OVERRIDE_U32_T concentrateFlushDataPublishInterval; ///< Concentrate Flush mode data publish interval. static OVERRIDE_U32_T concentrateFlushTimeout; ///< Concentrate Flush timeout value static U32 concentrateFlushTimer; ///< Concentrate Flush timeout timer +static U32 concentrateFlushTankFullTimer; ///< Concentrate Flush timeout timer static BOOL pendingStartConcentrateFlushRequest; ///< signal to start flushing. static BOOL isFlushComplete; ///< Concentrate Flush complete BOOL static F32 cumulativeConcentrateVolume_mL; ///< cumulative concentrate volume for integrated volume @@ -62,6 +67,7 @@ static void publishConcentrateFlushData( void ); static FP_CONC_FLUSH_STATE_T handleConcentrateFlushProgressState( void ); static FP_CONC_FLUSH_STATE_T handleConcentrateFlushPausedState( void ); +static FP_CONC_FLUSH_STATE_T handleConcentrateFlushWaitForTankFullState( void ); static void setConcentrateFlushTransition( FP_CONC_FLUSH_STATE_T state ); static U32 getConcentrateFlushTimeout( void ); static U32 getConcentrateFlushPublishInterval( void ); @@ -89,6 +95,7 @@ isFlushComplete = FALSE; pendingStartConcentrateFlushRequest = FALSE; cumulativeConcentrateVolume_mL = 0.0F; + concentrateFlushTankFullTimer = 0; } /*********************************************************************//** @@ -110,6 +117,10 @@ concentrateFlushState = handleConcentrateFlushProgressState(); break; + case CONC_FLUSH_WAIT_FOR_TANK_FULL: + concentrateFlushState = handleConcentrateFlushWaitForTankFullState(); + break; + case CONC_FLUSH_PAUSED: concentrateFlushState = handleConcentrateFlushPausedState(); break; @@ -138,27 +149,41 @@ static FP_CONC_FLUSH_STATE_T handleConcentrateFlushProgressState( void ) { FP_CONC_FLUSH_STATE_T state = CONC_FLUSH_IN_PROGRESS; - BOOL isVolumeOutOfRange = FALSE; // if ( TRUE == 1 ) )// TODO Alarm and Stop State Rework // { // state = CONC_FLUSH_PAUSED; // } - // TODO - Condition is to be removed once P7 flow meter is removed. - cumulativeConcentrateVolume_mL = getFlowRate( P7_FLOW ) * CONCENTRATE_FLOW_INTEGRATOR; - if( TRUE == didTimeout( concentrateFlushTimer, getConcentrateFlushTimeout() ) ) + if ( TRUE == didTimeout( concentrateFlushTimer, getConcentrateFlushTimeout() ) ) { - isVolumeOutOfRange = ( cumulativeConcentrateVolume_mL >= CONCENTRATE_FLUSH_VOLUME_THRESHOLD ? TRUE : FALSE ); - - if( FALSE == isVolumeOutOfRange ) - { isFlushComplete = TRUE; state = CONC_FLUSH_PAUSED; - } - else + } + + return state; +} + +/*********************************************************************//** + * @brief + * The handleConcentrateFlushWaitForTankFullState handles the in progress state of Concentrate flush + * @details \b Inputs: none + * @details \b Outputs: none + * @return the next state of Concentrate flush state + *************************************************************************/ +static FP_CONC_FLUSH_STATE_T handleConcentrateFlushWaitForTankFullState( void ) +{ + FP_CONC_FLUSH_STATE_T state = CONC_FLUSH_WAIT_FOR_TANK_FULL; + + if ( LEVEL_STATE_HIGH == getLevelStatus( P25_LEVL ) ) + { + state = CONC_FLUSH_IN_PROGRESS; + } + else + { + if ( TRUE == didTimeout( concentrateFlushTankFullTimer, CONCENTRATE_FLUSH_WAIT_FOR_TANK_FULL_TIMEOUT ) ) { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_FP_CONCENTRATE_FLUSH_VOLUME_OUT_OF_RANGE, CONCENTRATE_FLUSH_VOLUME_THRESHOLD, cumulativeConcentrateVolume_mL) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_FP_CONCENTRATE_FLUSH_TANK_FULL_TIMEOUT, concentrateFlushTankFullTimer, getPermeateTankState() ); state = CONC_FLUSH_PAUSED; } } @@ -181,7 +206,7 @@ { isFlushComplete = FALSE; pendingStartConcentrateFlushRequest = FALSE; - state = CONC_FLUSH_IN_PROGRESS; + state = CONC_FLUSH_WAIT_FOR_TANK_FULL; } return state; @@ -220,6 +245,23 @@ cumulativeConcentrateVolume_mL = 0; break; + case CONC_FLUSH_WAIT_FOR_TANK_FULL: + setValveState( M4_VALV, VALVE_STATE_OPEN ); + setValveState( M12_VALV, VALVE_STATE_CLOSED ); + setValveState( P6_VALV, VALVE_STATE_CLOSED ); + setValveState( P11_VALV, VALVE_STATE_OPEN ); + setValveState( P33_VALV, VALVE_STATE_CLOSED ); + setValveState( P34_VALV, VALVE_STATE_CLOSED ); + setValveState( P37_VALV, VALVE_STATE_CLOSED ); + setValveState( P39_VALV, VALVE_STATE_CLOSED ); + concentrateFlushTankFullTimer = getMSTimerCount(); + if ( TRUE == isBoostPumpInstalled() ) + { + setBoostPumpTargetPressure( CONCENTRATE_FLUSH_BOOST_PUMP_TGT_PSI ); + } + setROPumpTargetFlowRateMLPM( CONCENTRATE_FLUSH_WAIT_FOR_TANK_FULL_TGT_FLOW, TRUE ); + break; + case CONC_FLUSH_PAUSED: // Stop pumps and close only if we alarm ( pause ) during flush. if ( FALSE == isConcentrateFlushComplete() ) Index: firmware/App/Modes/FPModes/ModeGenPermeate.c =================================================================== diff -u -ra0c144ed9f72066d7a7b1d047b01fb76ca56d667 -r3094850a313096e5e41497c250089ce1ea9b07d9 --- firmware/App/Modes/FPModes/ModeGenPermeate.c (.../ModeGenPermeate.c) (revision a0c144ed9f72066d7a7b1d047b01fb76ca56d667) +++ firmware/App/Modes/FPModes/ModeGenPermeate.c (.../ModeGenPermeate.c) (revision 3094850a313096e5e41497c250089ce1ea9b07d9) @@ -155,7 +155,8 @@ case FP_GENP_TANK_FULL_STATE: if ( TRUE == isBoostPumpInstalled() ) { - signalBoostPumpHardStop(); + F32 currentDutyCyclePct = getCurrentBoostPumpDutyCyclePCT(); + setBoostPumpTargetDutyCycle( currentDutyCyclePct ); } break;