Index: firmware/App/Controllers/ConductivitySensors.c =================================================================== diff -u -r2fafa5769ca6850277200ae0ec08a0e508b0d2ed -r4b15ae8df98dc7f3be2bd64984f2f53022c23fcd --- firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 2fafa5769ca6850277200ae0ec08a0e508b0d2ed) +++ firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 4b15ae8df98dc7f3be2bd64984f2f53022c23fcd) @@ -213,38 +213,6 @@ /*********************************************************************//** * @brief - * The isAcidConductivityInRange function checks if acid conductivity value - * is in range. - * @details Inputs: CD1 sensor conductivity - * @details Outputs: none - * @return TRUE if acid conductivity is in range, otherwise FALSE - *************************************************************************/ -BOOL isAcidConductivityInRange( void ) -{ - F32 const acidConductivity = getConductivityValue( CONDUCTIVITYSENSORS_CD1_SENSOR ); - BOOL const isConductivityInRange = ( MIN_ACID_CONCENTRATE_CONDUCTIVITY <= acidConductivity ) && ( acidConductivity <= MAX_ACID_CONCENTRATE_CONDUCTIVITY ); - - return isConductivityInRange; -} - -/*********************************************************************//** - * @brief - * The isBicarbConductivityInRange function checks if bicarbonate conductivity - * value is in range. - * @details Inputs: CD2 sensor conductivity - * @details Outputs: none - * @return TRUE if bicarb conductivity is in range, otherwise FALSE - *************************************************************************/ -BOOL isBicarbConductivityInRange( void ) -{ - F32 const bicarbConductivity = getConductivityValue( CONDUCTIVITYSENSORS_CD2_SENSOR ); - BOOL const isConductivityInRange = ( MIN_BICARB_CONCENTRATE_CONDUCTIVITY <= bicarbConductivity ) && ( bicarbConductivity <= MAX_BICARB_CONCENTRATE_CONDUCTIVITY ); - - return isConductivityInRange; -} - -/*********************************************************************//** - * @brief * The isDialysateConductivityInRange function checks if dialysate conductivity * value is in range. * @details Inputs: CD2 sensor conductivity @@ -253,10 +221,12 @@ *************************************************************************/ BOOL isDialysateConductivityInRange( void ) { - F32 const bicarbConductivity = getConductivityValue( CONDUCTIVITYSENSORS_CD2_SENSOR ); - BOOL const isConductivityInRange = isAcidConductivityInRange() && ( MIN_DIALYSATE_CONDUCTIVITY <= bicarbConductivity ) && ( bicarbConductivity <= MAX_DIALYSATE_CONDUCTIVITY ); + F32 const acidConductivity = getConductivityValue( CONDUCTIVITYSENSORS_CD1_SENSOR ); + F32 const dialysateConductivity = getConductivityValue( CONDUCTIVITYSENSORS_CD2_SENSOR ); + BOOL const isAcidConductivityInRange = ( MIN_ACID_CONCENTRATE_CONDUCTIVITY <= acidConductivity ) && ( acidConductivity <= MAX_ACID_CONCENTRATE_CONDUCTIVITY ); + BOOL const isDialysateConductivityInRange = ( MIN_DIALYSATE_CONDUCTIVITY <= dialysateConductivity ) && ( dialysateConductivity <= MAX_DIALYSATE_CONDUCTIVITY ); - return isConductivityInRange; + return ( ( TRUE == isAcidConductivityInRange ) && ( TRUE == isDialysateConductivityInRange ) ); } /*********************************************************************//** Index: firmware/App/Controllers/ConductivitySensors.h =================================================================== diff -u -r86617288c49b57eca42cf2d0b67ade76e69f96bd -r4b15ae8df98dc7f3be2bd64984f2f53022c23fcd --- firmware/App/Controllers/ConductivitySensors.h (.../ConductivitySensors.h) (revision 86617288c49b57eca42cf2d0b67ade76e69f96bd) +++ firmware/App/Controllers/ConductivitySensors.h (.../ConductivitySensors.h) (revision 4b15ae8df98dc7f3be2bd64984f2f53022c23fcd) @@ -71,8 +71,6 @@ void checkInletWaterConductivity( void ); void checkRORejectionRatio( void ); -BOOL isAcidConductivityInRange( void ); -BOOL isBicarbConductivityInRange( void ); BOOL isDialysateConductivityInRange( void ); F32 getConductivityValue( U32 sensorId ); Index: firmware/App/Controllers/UVReactors.c =================================================================== diff -u -r037f0edb0b880130563058c809ba50308f2a63e9 -r4b15ae8df98dc7f3be2bd64984f2f53022c23fcd --- firmware/App/Controllers/UVReactors.c (.../UVReactors.c) (revision 037f0edb0b880130563058c809ba50308f2a63e9) +++ firmware/App/Controllers/UVReactors.c (.../UVReactors.c) (revision 4b15ae8df98dc7f3be2bd64984f2f53022c23fcd) @@ -319,7 +319,6 @@ { uvReactorsSelfTestResult = SELF_TEST_STATUS_FAILED; -#ifndef DISABLE_UV_REACTOR_MONITOR // Check which reactor has not been healthy and raise an alarm if ( FALSE == isInletHealthy ) { @@ -329,7 +328,6 @@ { SET_ALARM_WITH_1_U32_DATA( ALARM_ID_UV_REACTOR_NOT_HEALTHY, OUTLET_UV_REACTOR ); } -#endif } // Turn off the UV reactors once the test is finished Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -r2fafa5769ca6850277200ae0ec08a0e508b0d2ed -r4b15ae8df98dc7f3be2bd64984f2f53022c23fcd --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 2fafa5769ca6850277200ae0ec08a0e508b0d2ed) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 4b15ae8df98dc7f3be2bd64984f2f53022c23fcd) @@ -54,7 +54,7 @@ #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 ( SEC_PER_MIN * MS_PER_SECOND ) ///< Concentrate test time out period in ms. +#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 ( 15 * MS_PER_SECOND ) ///< Persistence period for conductivity error. @@ -78,6 +78,7 @@ 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. +static U32 concentratePumpPrimeCount; // ********** private function prototypes ********** @@ -110,6 +111,7 @@ dialysateConductivityTotal = 0.0; dialysateConductivitySampleCount = 0; concentratePumpTestPersistentCount = 0; + concentratePumpPrimeCount = 0; initPersistentAlarm( ALARM_ID_DIALYSATE_CONDUCTIVITY_OUT_OF_RANGE, CONDUCTIVITY_CLEAR_PERSISTENCE_PERIOD_MS, CONDUCTIVITY_ERROR_PERSISTENCE_PERIOD_MS ); } @@ -235,11 +237,12 @@ static BOOL checkDialysateConductivity( void ) { BOOL const isDialysateConductivityGood = isDialysateConductivityInRange(); + F32 const acidConductivity = getConductivityValue( CONDUCTIVITYSENSORS_CD1_SENSOR ); if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_DIALYSATE_CONDUCTIVITY_OUT_OF_RANGE, !isDialysateConductivityGood ) ) { #ifndef DISABLE_DIALYSATE_CHECK - if ( FALSE == isAcidConductivityInRange() ) + if ( ( MIN_ACID_CONCENTRATE_CONDUCTIVITY <= acidConductivity ) && ( acidConductivity <= MAX_ACID_CONCENTRATE_CONDUCTIVITY ) ) { SET_ALARM_WITH_1_F32_DATA( ALARM_ID_ACID_CONDUCTIVITY_OUT_OF_RANGE, getConductivityValue( CONDUCTIVITYSENSORS_CD1_SENSOR ) ); } @@ -296,6 +299,7 @@ concentrateTestStartTime = getMSTimerCount(); requestConcentratePumpsOff( CONCENTRATEPUMPS_CP1_ACID ); requestConcentratePumpsOn( CONCENTRATEPUMPS_CP2_BICARB ); + setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP2_BICARB, 40.0 ); result = DG_FILL_MODE_STATE_BICARB_PUMP_CHECK; } @@ -319,21 +323,37 @@ static DG_FILL_MODE_STATE_T handleBicarbPumpCheckState( void ) { DG_FILL_MODE_STATE_T result = DG_FILL_MODE_STATE_BICARB_PUMP_CHECK; + F32 const bicarbConductivity = getConductivityValue( CONDUCTIVITYSENSORS_CD2_SENSOR ); - handleDialysateMixing(); + if ( MIN_BICARB_CONCENTRATE_CONDUCTIVITY <= bicarbConductivity ) + { + if ( concentratePumpPrimeCount++ > CONCENTRATE_PUMP_PRIME_INTERVAL ) + { + F32 const measuredROFlowRate = getMeasuredROFlowRate(); + F32 const bicarbCP2PumpFlowRate = DIALYSATE_BICARB_CONCENTRATE_RATIO * measuredROFlowRate * ML_PER_LITER; + setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP2_BICARB, bicarbCP2PumpFlowRate ); + } + } + else + { + concentratePumpPrimeCount = 0; + } + #ifndef DISABLE_DIALYSATE_CHECK - if ( TRUE == isBicarbConductivityInRange() ) + if ( ( MIN_BICARB_CONCENTRATE_CONDUCTIVITY <= bicarbConductivity ) && ( bicarbConductivity <= MAX_BICARB_CONCENTRATE_CONDUCTIVITY ) ) #else if ( TRUE ) #endif { if ( concentratePumpTestPersistentCount++ > CONCENTRATE_PUMP_TEST_PERSISTENT_INTERVAL ) { concentratePumpTestPersistentCount = 0; + concentratePumpPrimeCount = 0; concentrateTestStartTime = getMSTimerCount(); requestConcentratePumpsOn( CONCENTRATEPUMPS_CP1_ACID ); requestConcentratePumpsOff( CONCENTRATEPUMPS_CP2_BICARB ); + setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP1_ACID, 40.0 ); result = DG_FILL_MODE_STATE_ACID_PUMP_CHECK; } } @@ -362,11 +382,25 @@ static DG_FILL_MODE_STATE_T handleAcidPumpCheckState( void ) { DG_FILL_MODE_STATE_T result = DG_FILL_MODE_STATE_ACID_PUMP_CHECK; + F32 const acidConductivity = getConductivityValue( CONDUCTIVITYSENSORS_CD1_SENSOR ); - handleDialysateMixing(); + if ( MIN_ACID_CONCENTRATE_CONDUCTIVITY <= acidConductivity ) + { + if ( concentratePumpPrimeCount++ > CONCENTRATE_PUMP_PRIME_INTERVAL ) + { + F32 const measuredROFlowRate = getMeasuredROFlowRate(); + F32 const acidCP1PumpFlowRate = DIALYSATE_ACID_CONCENTRATE_RATIO * measuredROFlowRate * ML_PER_LITER; + setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP1_ACID, acidCP1PumpFlowRate ); + } + } + else + { + concentratePumpPrimeCount = 0; + } + #ifndef DISABLE_DIALYSATE_CHECK - if ( TRUE == isAcidConductivityInRange() ) + if ( ( MIN_ACID_CONCENTRATE_CONDUCTIVITY <= acidConductivity ) && ( acidConductivity <= MAX_ACID_CONCENTRATE_CONDUCTIVITY ) ) #else if ( TRUE ) #endif