Index: firmware/App/Modes/FPModes/ModePreGenPermeate.c =================================================================== diff -u -rc07917caced76b53a0ed8f35167fac6f9d8310a4 -rf4a8565c7edec12094b8a737ed7b8cd3424a9208 --- firmware/App/Modes/FPModes/ModePreGenPermeate.c (.../ModePreGenPermeate.c) (revision c07917caced76b53a0ed8f35167fac6f9d8310a4) +++ firmware/App/Modes/FPModes/ModePreGenPermeate.c (.../ModePreGenPermeate.c) (revision f4a8565c7edec12094b8a737ed7b8cd3424a9208) @@ -7,8 +7,8 @@ * * @file ModePreGenPermeate.c * -* @author (last) “Raghu -* @date (last) 14-Oct-2025 +* @author (last) “rkallala” +* @date (last) 09-Dec-2025 * * @author (original) Michael Garthwaite * @date (original) 08-Sep-2025 @@ -31,6 +31,7 @@ #include "TaskGeneral.h" #include "Timers.h" #include "Valves.h" +#include "WaterQualityMonitor.h" /** * @addtogroup FPPreGenPermeateMode @@ -40,9 +41,10 @@ // ********** private definitions ********** #define PRE_GENP_DATA_PUBLISH_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the pre gen Permeate mode data published. -#define VERIFY_WATER_RO_PUMP_TGT_FLOW_ML 700 ///< Target flow rate for RO pump in ml/min +#define VERIFY_WATER_RO_PUMP_TGT_FLOW_ML 750 ///< Target flow rate for RO pump in ml/min #define VERIFY_WATER_BOOST_PUMP_TGT_PSI 25 ///< Target pressure for boost pump in psi. #define VERIFY_WATER_TIMEOUT_MS ( 30 * MS_PER_SECOND ) ///< Verify Water timer ( in ms ) +#define FLOW_CONTROL_STABLIZED_TIMEOUT_MS ( 25 * MS_PER_SECOND ) ///< Flow control stablized time ( in ms ) // ********** private data ********** @@ -113,6 +115,7 @@ U32 execPreGenPMode( void ) { FP_PRE_GENP_MODE_STATE_T previouspreGenPState = preGenPState; + // execute current pre gen Permeate state switch ( preGenPState ) { @@ -145,7 +148,7 @@ break; } - if( previouspreGenPState != preGenPState ) + if ( previouspreGenPState != preGenPState ) { setModePreGenPTransition( preGenPState ); SEND_EVENT_WITH_2_U32_DATA( FP_EVENT_PRE_GEN_CHANGE, preGenPState, previouspreGenPState ) @@ -194,6 +197,7 @@ setValveState( P34_VALV, VALVE_STATE_CLOSED ); // Current set to Medium recovery for alpha HW setValveState( P37_VALV, VALVE_STATE_CLOSED ); setValveState( P39_VALV, VALVE_STATE_OPEN ); + startPermeateTankControl(); if ( TRUE == isBoostPumpInstalled() ) { @@ -263,7 +267,7 @@ execFilterFlush(); - if( TRUE == isFilterFlushComplete() ) + if ( TRUE == isFilterFlushComplete() ) { signalStartPermeateFlush(); state = FP_PRE_GENP_PERMEATE_FLUSH; @@ -291,7 +295,7 @@ execPermeateFlush(); - if( TRUE == isPermeateFlushComplete() ) + if ( TRUE == isPermeateFlushComplete() ) { signalStartConcentrateFlush(); state = FP_PRE_GENP_CONCENTRATE_FLUSH; @@ -319,7 +323,7 @@ execConcentrateFlush(); - if( TRUE == isConcentrateFlushComplete() ) + if ( TRUE == isConcentrateFlushComplete() ) { state = FP_PRE_GENP_VERIFY_WATER; } @@ -340,12 +344,24 @@ FP_PRE_GENP_MODE_STATE_T state = FP_PRE_GENP_VERIFY_WATER; F32 roCurrentDutyCycle = getCurrentROPumpDutyCyclePCT(); + //Stay in this state for 25 seconds to stablize flow control + if ( TRUE == didTimeout( verifyWaterTimer, FLOW_CONTROL_STABLIZED_TIMEOUT_MS ) ) + { + // check next 5 seconds for water quality + // check permeate high flow rate is within range + checkPermeateHighFlow(); + // check low flow rate is within range + checkPermeateLowFlow(); + // check conductivity is within range + checkOutletConductivity(); + } + // if ( TRUE == 1 ))// TODO Alarm and Stop State Rework // { // state = FP_PRE_GENP_PAUSED; // } - - if( TRUE == didTimeout( verifyWaterTimer, VERIFY_WATER_TIMEOUT_MS ) ) + // wait 30 second before moving to water generation mode + if ( TRUE == didTimeout( verifyWaterTimer, VERIFY_WATER_TIMEOUT_MS ) ) { transitionToGenPermeateMode(); requestGenWaterStart(); // transition function will clear start flag