Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -rb3231e63a423fd2d8408c1859e2f58001266a5b5 -r69cab05a9f77dc834cb5f2c93feb7f6db8bd5307 --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision b3231e63a423fd2d8408c1859e2f58001266a5b5) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 69cab05a9f77dc834cb5f2c93feb7f6db8bd5307) @@ -46,11 +46,13 @@ #define DIALYSATE_BICARB_CONCENTRATE_RATIO ( 4.06812 / FRACTION_TO_PERCENT_FACTOR ) ///< Ratio between RO water and bicarbonate concentrate. #define DIALYSATE_FILL_TIME_OUT ( 5 * SEC_PER_MIN * MS_PER_SECOND ) ///< Time out period when reservoir is not filled with correct dialysate. +///< Persistent time interval for concentrate pumps test. +#define CONCENTRATE_PUMP_TEST_PERSISTENT_INTERVAL ( 2 * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) #define ACID_BICARB_CONCENTRATE_ADDITION_MULTIPLER 1.06 ///< Acid and bicarbonate concentrates make up around 6% to total volume. #define FLOW_INTEGRATED_VOLUME_CHECK_TOLERANCE 0.1 ///< Flow integrated volume has 10% tolerance compare to load cell reading. -#define CONCENTRATE_TEST_TIME_OUT_MS ( 30 * MS_PER_SECOND ) ///< Concentrate test time out period in ms. +#define CONCENTRATE_TEST_TIME_OUT_MS ( SEC_PER_MIN * 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 ( 15 * MS_PER_SECOND ) ///< Persistence period for conductivity error. @@ -73,6 +75,7 @@ static U32 waterQualityCheckStartTime; ///< Starting time for inlet water quality check. static F32 dialysateConductivityTotal; ///< Total of dialysate conductivity during fill. static U32 dialysateConductivitySampleCount; ///< Sample count of dialysate conductivity during fill. +static U32 concentratePumpTestPersistentCount; ///< Persistent count for concentrate pump testing. // ********** private function prototypes ********** @@ -104,6 +107,7 @@ concentrateTestStartTime = 0; dialysateConductivityTotal = 0.0; dialysateConductivitySampleCount = 0; + concentratePumpTestPersistentCount = 0; initPersistentAlarm( ALARM_ID_DIALYSATE_CONDUCTIVITY_OUT_OF_RANGE, CONDUCTIVITY_CLEAR_PERSISTENCE_PERIOD_MS, CONDUCTIVITY_ERROR_PERSISTENCE_PERIOD_MS ); } @@ -319,11 +323,19 @@ if ( TRUE ) #endif { - concentrateTestStartTime = getMSTimerCount(); - requestConcentratePumpsOn( CONCENTRATEPUMPS_CP1_ACID ); - requestConcentratePumpsOff( CONCENTRATEPUMPS_CP2_BICARB ); - result = DG_FILL_MODE_STATE_ACID_PUMP_CHECK; + if ( concentratePumpTestPersistentCount++ > CONCENTRATE_PUMP_TEST_PERSISTENT_INTERVAL ) + { + concentratePumpTestPersistentCount = 0; + concentrateTestStartTime = getMSTimerCount(); + requestConcentratePumpsOn( CONCENTRATEPUMPS_CP1_ACID ); + requestConcentratePumpsOff( CONCENTRATEPUMPS_CP2_BICARB ); + result = DG_FILL_MODE_STATE_ACID_PUMP_CHECK; + } } + else + { + concentratePumpTestPersistentCount = 0; + } if ( TRUE == didTimeout( concentrateTestStartTime, CONCENTRATE_TEST_TIME_OUT_MS ) ) { @@ -354,10 +366,18 @@ if ( TRUE ) #endif { - requestConcentratePumpsOn( CONCENTRATEPUMPS_CP1_ACID ); - requestConcentratePumpsOn( CONCENTRATEPUMPS_CP2_BICARB ); - result = DG_FILL_MODE_STATE_DIALYSATE_PRODUCTION; + if ( concentratePumpTestPersistentCount++ > CONCENTRATE_PUMP_TEST_PERSISTENT_INTERVAL ) + { + concentratePumpTestPersistentCount = 0; + requestConcentratePumpsOn( CONCENTRATEPUMPS_CP1_ACID ); + requestConcentratePumpsOn( CONCENTRATEPUMPS_CP2_BICARB ); + result = DG_FILL_MODE_STATE_DIALYSATE_PRODUCTION; + } } + else + { + concentratePumpTestPersistentCount = 0; + } if ( TRUE == didTimeout( concentrateTestStartTime, CONCENTRATE_TEST_TIME_OUT_MS ) ) {