Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -rb663723e1e35b02546ea1d8ad310cf5db18376a6 -r525770ee7cc0fcbfdc2836ac101c7e2b98d2d9c2 --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision b663723e1e35b02546ea1d8ad310cf5db18376a6) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 525770ee7cc0fcbfdc2836ac101c7e2b98d2d9c2) @@ -31,7 +31,9 @@ // ********** private definitions ********** -#define RESERVOIR_SETTLE_TIME_MS 5000 ///< Allocated time to settle the filled reservoir in milliseconds. +#define RESERVOIR_FRESH_SETTLE_TIME_MS 15000 ///< Allocated time to settle the freshly filled reservoir in milliseconds. +#define RESERVOIR_USED_SETTLE_TIME_MS 5000 ///< Allocated time to settle the depleted reservoir in milliseconds. + // TODO Why use this margin factor? RESERVOIR_CYCLE_EXTRA_MARGIN_TIME_MS #define RESERVOIR_CYCLE_EXTRA_MARGIN_TIME_MS 8000 ///< Reservoir extra time in during the cycle for error in milliseconds. #define MAX_RESERVOIR_VOLUME_ML 1900.0F ///< Maximum allowed fluid in a reservoir in milliliters. @@ -370,7 +372,7 @@ F32 fillTimeMS = ( (F32)FILL_RESERVOIR_TO_VOLUME_ML / ( getTargetFillFlowRateLPM() * ML_PER_LITER ) ) * SEC_PER_MIN * MS_PER_SECOND; F32 targetUFFlowMLP = getCurrentUFSetRate(); F32 timeDepletionMS = ( (F32)FILL_RESERVOIR_TO_VOLUME_ML / dialysateFlowMLP ) * SEC_PER_MIN * MS_PER_SECOND; - F32 timeTotalCycleMS = fillTimeMS + RESERVOIR_SETTLE_TIME_MS + RESERVOIR_CYCLE_EXTRA_MARGIN_TIME_MS + ratios.timeFillPrepMS; + F32 timeTotalCycleMS = fillTimeMS + RESERVOIR_FRESH_SETTLE_TIME_MS + RESERVOIR_CYCLE_EXTRA_MARGIN_TIME_MS + ratios.timeFillPrepMS; F32 timeReservoirCycleMS = 0.0F; F32 timeUFDepletionMS = NEARLY_INFINITY; @@ -391,7 +393,7 @@ DG_CMD_DIALYSATE_HEATING_PARAMS_T params; params.trimmerTargetTemperature = getTreatmentParameterF32( TREATMENT_PARAM_DIALYSATE_TEMPERATURE ); - params.timeReservoirWait2SwitchMS = RESERVOIR_SETTLE_TIME_MS + RESERVOIR_CYCLE_EXTRA_MARGIN_TIME_MS; + params.timeReservoirWait2SwitchMS = RESERVOIR_FRESH_SETTLE_TIME_MS + RESERVOIR_CYCLE_EXTRA_MARGIN_TIME_MS; params.timeReservoirFillMS = fillTimeMS; params.timeReservoirCycleMS = timeReservoirCycleMS; params.dialysateFlowLPM = ( (F32)dialysateFlowMLP ) / ML_PER_LITER; @@ -579,14 +581,7 @@ // Time to wait prior to next fill is depletion time - the whole group of how much time is needed to fill a reservoir + // the time it takes to wait for a reservoir to settle and the extra margin time for ramp up of the RO and drain pumps and // any other extra times. - if ( targetDialysateFlowMLP < RESERVOIR_FLOW_400_MLP ) - { - timeWaitToFillMS = timeDepleteMS - ( getFillTimeMS() + RESERVOIR_SETTLE_TIME_MS + RESERVOIR_CYCLE_EXTRA_MARGIN_TIME_MS ); - } - else - { - timeWaitToFillMS = 0; - } + timeWaitToFillMS = timeDepleteMS - ( getFillTimeMS() + RESERVOIR_FRESH_SETTLE_TIME_MS - RESERVOIR_CYCLE_EXTRA_MARGIN_TIME_MS ); // If the wait time has elapsed, trigger a fill command if ( timeWaitToFillMS <= 0 ) @@ -665,7 +660,7 @@ 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*/ ) ) && + if ( ( TRUE == didTimeout( reservoirSwitchStartTimeMS, RESERVOIR_FRESH_SETTLE_TIME_MS ) ) && ( ( dilutionLevelPct >= MAX_RESERVOIR_DILUTION ) || ( volSpentML >= (F32)FILL_RESERVOIR_TO_VOLUME_ML ) || ( getReservoirWeight( active ) > MAX_RESERVOIR_VOL_BEFORE_SWITCH_ML ) ) ) { DG_SWITCH_RSRVRS_CMD_T rsrvrCmd; @@ -707,7 +702,7 @@ { TREATMENT_RESERVOIR_MGMT_STATE_T state = TREATMENT_RESERVOIR_MGMT_WAIT_FOR_SWITCH_SETTLE_STATE; - if ( TRUE == didTimeout( reservoirSwitchStartTimeMS, RESERVOIR_SETTLE_TIME_MS ) ) + if ( TRUE == didTimeout( reservoirSwitchStartTimeMS, RESERVOIR_USED_SETTLE_TIME_MS ) ) { // Signal dialysis sub-mode to capture final volume of prior reservoir after settling. setFinalReservoirVolume();