Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -ra06e2c94a2c49609972b28f7ccd0647baabdb9b1 -rb3231e63a423fd2d8408c1859e2f58001266a5b5 --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision a06e2c94a2c49609972b28f7ccd0647baabdb9b1) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision b3231e63a423fd2d8408c1859e2f58001266a5b5) @@ -53,7 +53,8 @@ #define CONCENTRATE_TEST_TIME_OUT_MS ( 30 * MS_PER_SECOND ) ///< Concentrate test time out period in ms. #define WATER_QUALITY_CHECK_TIME_OUT_MS ( 30 * MS_PER_SECOND ) ///< Inlet water quality check time out period in ms. -#define CONDUCTIVITY_ERROR_PERSISTENCE_PERIOD_MS ( 5 * MS_PER_SECOND ) ///< Persistence period for conductivity error. +#define CONDUCTIVITY_ERROR_PERSISTENCE_PERIOD_MS ( 15 * MS_PER_SECOND ) ///< Persistence period for conductivity error. +#define CONDUCTIVITY_CLEAR_PERSISTENCE_PERIOD_MS ( 5 * MS_PER_SECOND ) ///< Persistence period for conductivity error. #define DIALYSATE_TEMPERATURE_TOLERANCE_C 2.0 ///< Dialysate temperature tolerance in degree C. @@ -104,8 +105,7 @@ dialysateConductivityTotal = 0.0; dialysateConductivitySampleCount = 0; - initPersistentAlarm( ALARM_ID_ACID_CONDUCTIVITY_OUT_OF_RANGE, CONDUCTIVITY_ERROR_PERSISTENCE_PERIOD_MS, CONDUCTIVITY_ERROR_PERSISTENCE_PERIOD_MS ); - initPersistentAlarm( ALARM_ID_DIALYSATE_CONDUCTIVITY_OUT_OF_RANGE, CONDUCTIVITY_ERROR_PERSISTENCE_PERIOD_MS, CONDUCTIVITY_ERROR_PERSISTENCE_PERIOD_MS ); + initPersistentAlarm( ALARM_ID_DIALYSATE_CONDUCTIVITY_OUT_OF_RANGE, CONDUCTIVITY_CLEAR_PERSISTENCE_PERIOD_MS, CONDUCTIVITY_ERROR_PERSISTENCE_PERIOD_MS ); } /*********************************************************************//** @@ -315,6 +315,8 @@ #ifndef DISABLE_DIALYSATE_CHECK if ( TRUE == isBicarbConductivityInRange() ) +#else + if ( TRUE ) #endif { concentrateTestStartTime = getMSTimerCount(); @@ -348,6 +350,8 @@ #ifndef DISABLE_DIALYSATE_CHECK if ( TRUE == isAcidConductivityInRange() ) +#else + if ( TRUE ) #endif { requestConcentratePumpsOn( CONCENTRATEPUMPS_CP1_ACID ); @@ -392,6 +396,10 @@ ( TRUE == isAlarmActive( ALARM_ID_DIALYSATE_CONDUCTIVITY_OUT_OF_RANGE ) ) ) { result = DG_FILL_MODE_STATE_PAUSED; + requestConcentratePumpsOff( CONCENTRATEPUMPS_CP1_ACID ); + requestConcentratePumpsOff( CONCENTRATEPUMPS_CP2_BICARB ); + signalROPumpHardStop(); + stopPrimaryHeater(); } } @@ -416,6 +424,8 @@ ( isAlarmActive( ALARM_ID_DIALYSATE_CONDUCTIVITY_OUT_OF_RANGE ) ) != TRUE ) { result = DG_FILL_MODE_STATE_CHECK_INLET_WATER; + setROPumpTargetFlowRate( TARGET_RO_FLOW_RATE_L, TARGET_RO_PRESSURE_PSI ); + startPrimaryHeater(); } } @@ -433,10 +443,12 @@ static DG_FILL_MODE_STATE_T handleDeliverDialysateState( void ) { F32 avgDialysateConductivity; + F32 integratedVolume_mL; DG_FILL_MODE_STATE_T result = DG_FILL_MODE_STATE_DELIVER_DIALYSATE; DG_RESERVOIR_ID_T inactiveReservoir = getInactiveReservoir(); totalROFlowRate_LPM += getMeasuredROFlowRate(); + integratedVolume_mL = totalROFlowRate_LPM * RO_FLOW_INTEGRATOR * ACID_BICARB_CONCENTRATE_ADDITION_MULTIPLER; dialysateConductivityTotal += getConductivityValue( CONDUCTIVITYSENSORS_CD2_SENSOR ); dialysateConductivitySampleCount++; @@ -464,10 +476,9 @@ } // if we've reached our target fill to volume (by weight), we're done filling - go back to re-circ mode - if ( TRUE == hasTargetFillVolumeBeenReached( inactiveReservoir ) ) + if ( ( TRUE == hasTargetFillVolumeBeenReached( inactiveReservoir ) ) || ( ( integratedVolume_mL - reservoirBaseWeight ) >= MAX_RESERVOIR_VOLUME_ML ) ) { F32 const filledVolume_mL = getReservoirWeight( inactiveReservoir ) - reservoirBaseWeight; - F32 const integratedVolume_mL = totalROFlowRate_LPM * RO_FLOW_INTEGRATOR * ACID_BICARB_CONCENTRATE_ADDITION_MULTIPLER; F32 const integratedVolumeToLoadCellReadingPercent = fabs( 1 - ( filledVolume_mL / integratedVolume_mL ) ); if ( integratedVolumeToLoadCellReadingPercent > FLOW_INTEGRATED_VOLUME_CHECK_TOLERANCE )