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