Index: firmware/App/Controllers/BalancingChamber.c =================================================================== diff -u -rc1557cc79c8f0b0c358963c99d83015bd3b37e42 -r67d2fdfc9ec326b98b5a0ac2dbfcee283c8791af --- firmware/App/Controllers/BalancingChamber.c (.../BalancingChamber.c) (revision c1557cc79c8f0b0c358963c99d83015bd3b37e42) +++ firmware/App/Controllers/BalancingChamber.c (.../BalancingChamber.c) (revision 67d2fdfc9ec326b98b5a0ac2dbfcee283c8791af) @@ -748,6 +748,29 @@ /*********************************************************************//** * @brief + * The valveControlForBCSpentSideOnlyOpenState function opens the spent side + * balancing chamber valves and closes the fresh side valves. + * @details \b Inputs: none + * @details \b Outputs: valve states + * @return none. + *************************************************************************/ +void valveControlForBCSpentSideOnlyOpenState( void ) +{ + // Open spent side valves D23,D24,D25,D26 + setValveState( D23_VALV, VALVE_STATE_OPEN ); + setValveState( D25_VALV, VALVE_STATE_OPEN ); + setValveState( D24_VALV, VALVE_STATE_OPEN ); + setValveState( D26_VALV, VALVE_STATE_OPEN ); + + // Close fresh balancing chamber valves D19,D20,D21,D22 + setValveState( D19_VALV, VALVE_STATE_CLOSED ); + setValveState( D20_VALV, VALVE_STATE_CLOSED ); + setValveState( D21_VALV, VALVE_STATE_CLOSED ); + setValveState( D22_VALV, VALVE_STATE_CLOSED ); +} + +/*********************************************************************//** + * @brief * The valveControlForBCState1FreshSideClose function closes only the fresh-side * balancing chamber valves opened during state 1 fill. * @details \b Inputs: none Index: firmware/App/Controllers/BalancingChamber.h =================================================================== diff -u -rc1557cc79c8f0b0c358963c99d83015bd3b37e42 -r67d2fdfc9ec326b98b5a0ac2dbfcee283c8791af --- firmware/App/Controllers/BalancingChamber.h (.../BalancingChamber.h) (revision c1557cc79c8f0b0c358963c99d83015bd3b37e42) +++ firmware/App/Controllers/BalancingChamber.h (.../BalancingChamber.h) (revision 67d2fdfc9ec326b98b5a0ac2dbfcee283c8791af) @@ -76,6 +76,7 @@ void valveControlForBCClosedState( void ); // Closes all balancing chamber valves void valveControlForBCOpenState( void ); // Open all balancing chamber valves void valveControlForBCFreshSideOnlyOpenState( void ); // Open only fresh side balancing chamber valves +void valveControlForBCSpentSideOnlyOpenState( void ); // Open only spent side balancing chamber valves BOOL getBalChamberSwitchingOnlyStatus( void ); // Get balancing chamber switching only status void setBalChamberSwitchingOnlyStatus( BOOL OnOff ); // Set balancing chamber switching only status U32 getBalChamberSwitchingPeriod( void ); // Get balancing chamber switching period Index: firmware/App/Controllers/DryBiCart.c =================================================================== diff -u -rc1557cc79c8f0b0c358963c99d83015bd3b37e42 -r67d2fdfc9ec326b98b5a0ac2dbfcee283c8791af --- firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision c1557cc79c8f0b0c358963c99d83015bd3b37e42) +++ firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision 67d2fdfc9ec326b98b5a0ac2dbfcee283c8791af) @@ -46,7 +46,7 @@ #define DRY_BICART_DATA_PUBLISH_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the drybicart data published. #define WCDI2_PRESSURE_OFFSET_PSI 7.0F ///< The difference between the actual pressure measured at bicart assembly and the measured D66 pressure based on the placement of the sensor for WCID1 #define WCID1_PRESSURE_OFFSET_PSI 1.0F ///< The difference between the actual pressure measured at bicart assembly and the measured D66 pressure based on the placement of the sensor for WCID2 -#define DRY_BICART_PERSISTENCE_DURATION_MS 500 ///< Fill persistence duration to overcome the pressure overshoot/ drop for beta 1.9 and above. +#define DRY_BICART_PERSISTENCE_DURATION_MS 500 ///< Fill persistence duration to overcome the pressure overshoot/ drop for beta 1.9 and above. //#define DRY_BICART_FILL_PERSISTENCE_DURATION_MS ( 1 * MS_PER_SECOND ) ///< Fill persistence duration to overcome the pressure overshoot/ drop for beta 1.9 and above. // Dry Bicart Fill @@ -57,7 +57,7 @@ #define GET_FILL_COMPLETE_PRESSURE_PSI (getTestConfigStatus( TEST_CONFIG_DD_ENABLE_WCID_1 ) != TRUE ? \ DRY_BICART_WCID2_FILL_COMPLETE_PRESSURE_PSI : DRY_BICART_WCID1_FILL_COMPLETE_PRESSURE_PSI ) ///< Get fill complete pressure based on the WCID configuration #define DRY_BICART_FILL_INITIATE_PRESSURE_PSI 1.5F ///< Minimum pressure required to initiate the dry bicart fill process. -#define DRY_BICART_FILL_COMPLETE_SUPPLY_PRESSURE_PSI 10.0F ///< Maximum pressure allowed at bicart fill during supply process/state +#define DRY_BICART_FILL_COMPLETE_SUPPLY_PRESSURE_PSI 10.0F ///< Maximum pressure allowed at bicart fill during supply process/state #define DRY_BICART_FILL_INITIATE_SUPPLY_PRESSURE_PSI 4.0F ///< Minimum pressure required to initiate the dry bicart fill during supply process/state #define DRY_BICART_MAX_FILL_CYCLE_CNT 10 ///< Max fill cycle allowed (by override) for dry bicart fill/mix with water. #define DRY_BICART_MINIMUM_FILL_CYCLE_CNT 3 ///< Minimum fill cycle count for filling dry bicart @@ -169,6 +169,7 @@ static BICARB_CHAMBER_FILL_EXEC_STATE_T handleBicarbChamberPressureCheckState( void ); static BICARB_CHAMBER_FILL_EXEC_STATE_T handleBicarbChamberSupplyVentStartState(void); static BICARB_CHAMBER_FILL_EXEC_STATE_T handleBicarbChamberSupplyVentEndState(void); +static BICARB_CHAMBER_FILL_EXEC_STATE_T completeBicarbChamberFillToIdle( void ); static BOOL isDryBicartChamberFillWindowOpen( void ); static void closeD65IfBalChamberSwitchImminent( void ); // Drain @@ -1188,8 +1189,8 @@ setValveState( D65_VALV, VALVE_STATE_CLOSED ); dryBiCartPersistenceStartTime = 0; - //state = BICARB_CHAMBER_SUPPLY_STATE; - state = BICARB_SUPPLY_VENT_END_STATE; + // Return to idle + state = completeBicarbChamberFillToIdle(); } } @@ -1201,8 +1202,8 @@ //Additional code if ( LVL_STATE_LOW == bicarbChamberLevel ) { - //Force transition to end state to allow next supply - state = BICARB_SUPPLY_VENT_END_STATE; + // Force return to idle to allow next supply + state = completeBicarbChamberFillToIdle(); } return state; @@ -1386,25 +1387,39 @@ /*********************************************************************//** * @brief - * The handleBicarbChamberSupplyVentEndState function actuates the vent valve - * present in the Bicart assembly. - * @details \b Inputs: dryBiCarbSypplyVentStartTime - * @details \b Outputs: bicarbChamberFillRequested - * @return the next bicarb chamber start state. + * The completeBicarbChamberFillToIdle function clears bicarb chamber fill + * request and returns the bicarb chamber fill state machine to start. + * @details \b Inputs: none + * @details \b Outputs: bicarbChamberFillRequested, dryBiCartPressureDecayStartTimeFlag, + * dryBicartStartRequest + * @return BICARB_CHAMBER_START_STATE *************************************************************************/ -static BICARB_CHAMBER_FILL_EXEC_STATE_T handleBicarbChamberSupplyVentEndState(void) +static BICARB_CHAMBER_FILL_EXEC_STATE_T completeBicarbChamberFillToIdle( void ) { - BICARB_CHAMBER_FILL_EXEC_STATE_T state = BICARB_SUPPLY_VENT_END_STATE; + BICARB_CHAMBER_FILL_EXEC_STATE_T state = BICARB_CHAMBER_START_STATE; - bicarbChamberFillRequested.data = FALSE; + bicarbChamberFillRequested.data = FALSE; // for this request override also cleared bicarbChamberFillRequested.ovData = FALSE; dryBiCartPressureDecayStartTimeFlag = FALSE; + dryBicartStartRequest = DRY_BICART_IDLE; - state = BICARB_CHAMBER_START_STATE; + return state; +} - dryBicartStartRequest = DRY_BICART_IDLE; +/*********************************************************************//** + * @brief + * The handleBicarbChamberSupplyVentEndState function completes bicarb chamber + * fill to idle. Kept for any residual VentEnd transitions; prefer calling + * completeBicarbChamberFillToIdle() directly from FillWater/Vent completion. + * @details \b Inputs: none + * @details \b Outputs: bicarbChamberFillRequested, dryBicartStartRequest + * @return the next bicarb chamber start (idle) state. + *************************************************************************/ +static BICARB_CHAMBER_FILL_EXEC_STATE_T handleBicarbChamberSupplyVentEndState(void) +{ + BICARB_CHAMBER_FILL_EXEC_STATE_T state = completeBicarbChamberFillToIdle(); return state; } Index: firmware/App/Monitors/Conductivity.c =================================================================== diff -u -rfc6a157a48debd4ee8c2fb8dec8af21f5b07abe2 -r67d2fdfc9ec326b98b5a0ac2dbfcee283c8791af --- firmware/App/Monitors/Conductivity.c (.../Conductivity.c) (revision fc6a157a48debd4ee8c2fb8dec8af21f5b07abe2) +++ firmware/App/Monitors/Conductivity.c (.../Conductivity.c) (revision 67d2fdfc9ec326b98b5a0ac2dbfcee283c8791af) @@ -41,7 +41,7 @@ #define RO_DATA_PUBLISH_COUNTER_START_COUNT 42 ///< FP RO Data publish counter start count. #define RESISTANCE_DATA_PUBLISH_COUNTER_START_COUNT 43 ///< DD Resistance data publish counter start count. #define CONDUCTIVITY_MAX_FILTER_SIZE_MULTIPLIER ( 252 ) ///< Maximum conductivity filter sample count (At 50qd, we switch once for every 36sec, so 36 * FILTER_SIZE_MULTIPLIER = 252). -#define CONDUCTIVITY_TEMP_SAMPLE_FILTER_MS ( 30 ) ///< Filter conductivity temperature data for given time. Currently set to have 5 samples over 3.5s ( 700ms sample rate ) +#define CONDUCTIVITY_TEMP_SAMPLE_FILTER_MS ( 3 * TASK_PRIORITY_INTERVAL ) ///< Conductivity temperature filter scale (ms). Rolling avg size = FILTER_MS / TASK_PRIORITY_INTERVAL = 3 samples (3 * TASK_PRIORITY_INTERVAL(10) = 30). At 700 ms sensor update rate, 3 * 700 ms ≈ 2.1 s window. #define FILTER_SIZE_MULTIPLIER ( 7 ) ///< Conductivity filter size multiplier. #define SIZE_OF_COND_TEMP_ROLLING_AVG ( CONDUCTIVITY_TEMP_SAMPLE_FILTER_MS / TASK_PRIORITY_INTERVAL ) ///< Filtered conductivity temprature moving average sample count. #define RO_RR_MOVING_AVG_NUM_OF_SAMPLES 30 ///< RO rejection ratio moving average number of samples.