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 ) Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -rebbb1f85550a1f9b8f946655f7b2b63f76fbf67d -rb3231e63a423fd2d8408c1859e2f58001266a5b5 --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision ebbb1f85550a1f9b8f946655f7b2b63f76fbf67d) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision b3231e63a423fd2d8408c1859e2f58001266a5b5) @@ -34,7 +34,6 @@ // ********** private definitions ********** #define MIN_RESERVOIR_VOLUME_ML 0 ///< Minimum reservoir volume in mL. -#define MAX_RESERVOIR_VOLUME_ML 2000 ///< Maximum reservoir volume in mL. #define DEFAULT_FILL_VOLUME_ML 1700 ///< Default fill volume for treatment in mL. #define DISINFECT_FILL_VOLUME_ML 2400 ///< Fill volume for disinfection in mL. #define MAX_FILL_VOLUME_ML MAX_RESERVOIR_VOLUME_ML ///< Maximum fill volume in mL. Index: firmware/App/Services/Reservoirs.h =================================================================== diff -u -rebbb1f85550a1f9b8f946655f7b2b63f76fbf67d -rb3231e63a423fd2d8408c1859e2f58001266a5b5 --- firmware/App/Services/Reservoirs.h (.../Reservoirs.h) (revision ebbb1f85550a1f9b8f946655f7b2b63f76fbf67d) +++ firmware/App/Services/Reservoirs.h (.../Reservoirs.h) (revision b3231e63a423fd2d8408c1859e2f58001266a5b5) @@ -31,6 +31,8 @@ // ********** public definitions ********** +#define MAX_RESERVOIR_VOLUME_ML 2000 ///< Maximum reservoir volume in mL. + #pragma pack(push,1) /// Fill command data structure.