Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -rad4d98e7d69ee6320a7ab573c353cd6ff92a76fe -rb9300084966f27ebd166962121c5217f5cd30eb0 --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision ad4d98e7d69ee6320a7ab573c353cd6ff92a76fe) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision b9300084966f27ebd166962121c5217f5cd30eb0) @@ -39,6 +39,8 @@ #define DIA_FLOW_TO_FILL_FLOW_FIRST_ORDER_COEFF 7.5F ///< Dialysate flow rate to fill flow rate first order coefficient. #define DIA_FLOW_TO_FILL_FLOW_CONSTANT 2.0F ///< Dialysate flow rate to fill flow rate constant. +#define MAX_RESERVOIR_VOL_BEFORE_SWITCH_ML 1900.0F ///< Maximum reservoir volume before we switch reservoirs (in mL). + // ********** private data ********** /// States of the treatment reservoir management state machine. @@ -513,9 +515,7 @@ timeWaitToFillMS = timeDepleteMS - ( getFillTimeMS() + RESERVOIR_SETTLE_TIME_MS + RESERVOIR_CYCLE_EXTRA_MARGIN_TIME_MS ); // If the wait time has elapsed, trigger a fill command - // TODO uncomment - //if ( timeWaitToFillMS <= 0 ) - // TODO uncomment + if ( timeWaitToFillMS <= 0 ) { cmdStartDGFill( FILL_RESERVOIR_TO_VOLUME_ML, targetFillFlowRateLPM ); } @@ -587,10 +587,16 @@ static TREATMENT_RESERVOIR_MGMT_STATE_T handleReservoirMgmtWaitForFillSettleState( void ) { TREATMENT_RESERVOIR_MGMT_STATE_T state = TREATMENT_RESERVOIR_MGMT_WAIT_FOR_FILL_SETTLE_STATE; + DG_RESERVOIR_ID_T active = getDGActiveReservoir(); + // Get the ultra-filtration volume milliliters + // Get the dilution level in percent = spent ultra-filtration volume / target fill volume in milliliters + volSpentUFML = getReservoirUltrafiltrationVol( activeReservoir ); + dilutionLevelPct = volSpentUFML / (F32)FILL_RESERVOIR_TO_VOLUME_ML; + // Wait for the reservoir to settle and then send the commands to switch the active reservoir TODO - restore #define below if ( ( TRUE == didTimeout( reservoirSwitchStartTimeMS, 15000 /*RESERVOIR_SETTLE_TIME_MS*/ ) ) && - ( ( dilutionLevelPct >= MAX_RESERVOIR_DILUTION ) || ( volSpentML >= (F32)FILL_RESERVOIR_TO_VOLUME_ML ) ) ) + ( ( dilutionLevelPct >= MAX_RESERVOIR_DILUTION ) || ( volSpentML >= (F32)FILL_RESERVOIR_TO_VOLUME_ML ) || ( getReservoirWeight( active ) > MAX_RESERVOIR_VOL_BEFORE_SWITCH_ML ) ) ) { DG_RESERVOIR_ID_T inactiveRes = getDGInactiveReservoir();