Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -re9e5137f937e88f5c523bcaa5eca01607d084545 -r2f3090feeb06eb738aefc8eae5f080070a0a8919 --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision e9e5137f937e88f5c523bcaa5eca01607d084545) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 2f3090feeb06eb738aefc8eae5f080070a0a8919) @@ -115,7 +115,7 @@ static F32 averageBicardConductivity; ///< Average bicard conductivity over 30 seconds. static F32 averageAcidConductivity; ///< Average acid conductivity over 30 seconds. -static F32 averageConductivity; ///< Average conductivity of acid and bicard over 30 seconds. +static F32 pctDiffInConductivity; ///< Percent difference in conductivity between CD1 (acid) and CD2 (bicarb). static U32 bicardConductivitySampleCount; ///< Sample count of bicard conductivity over 30 seconds. static U32 acidConductivitySampleCount; ///< Sample count of acid conductivity over 30 seconds. @@ -174,7 +174,7 @@ pumpSpeedIndex = 0; averageBicardConductivity = 0.0; averageAcidConductivity = 0.0; - averageConductivity = 0.0; + pctDiffInConductivity = 0.0; bicardConductivitySampleCount = 0; acidConductivitySampleCount = 0; totalBicardConductivity = 0.0; @@ -390,30 +390,32 @@ { // If this is the first fill of a treatment, prime acid and bicarb lines, otherwise transition // to dialysate production directly +#ifndef DISABLE_MIXING if ( TRUE == isThisTheFirstFill() ) { - #ifndef DISABLE_MIXING // Prepare the acid and bicarb pumps to prime the concentrate lines setROPumpTargetFlowRateLPM( RO_PUMP_800_ML_PER_MIN / MILLILITERS_PER_LITER, TARGET_RO_PRESSURE_PSI ); setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP1_ACID, CONCENTRATE_PUMP_MAX_SPEED ); setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP2_BICARB, CONCENTRATE_PUMP_MAX_SPEED ); requestConcentratePumpOn( CONCENTRATEPUMPS_CP1_ACID ); // TODO if requestConcentratePumpOn( CONCENTRATEPUMPS_CP2_BICARB ); - #endif + concentratePrimingStartTime = getMSTimerCount(); result = DG_FILL_MODE_STATE_PRIME_CONCENTRATE_LINES; } else +#endif + { result = DG_FILL_MODE_STATE_PRODUCE_DIALYSATE; } } #ifndef DISABLE_DIALYSATE_CHECK if ( TRUE == didTimeout( waterQualityTestStartTime, WATER_QUALITY_TEST_TIME_OUT_MS ) ) { - activateAlarmNoData( ALARM_ID_DG_BAD_INLET_WATER_QUALITY ); - requestNewOperationMode( DG_MODE_GENE ); - } + activateAlarmNoData( ALARM_ID_DG_BAD_INLET_WATER_QUALITY ); // alarm is recoverable should go to fill paused state + result = DG_FILL_MODE_STATE_PAUSED; // paused state should go back to DG_FILL_MODE_STATE_TEST_INLET_WATER + } // when alarm acknowledged #endif return result; @@ -516,7 +518,7 @@ totalAcidConductivity = 0.0; averageBicardConductivity = 0.0; averageAcidConductivity = 0.0; - averageConductivity = 0.0; + pctDiffInConductivity = 0.0; bicardConductivitySampleCount = 0; acidConductivitySampleCount = 0; // Set pumps flow rate to prepare for acid conductivity testing @@ -563,15 +565,16 @@ { averageBicardConductivity = totalBicardConductivity / bicardConductivitySampleCount; averageAcidConductivity = totalAcidConductivity / acidConductivitySampleCount; - averageConductivity = 2.0 * ( averageAcidConductivity - averageBicardConductivity ) / ( averageAcidConductivity + averageBicardConductivity ); + pctDiffInConductivity = fabs( 2.0 * ( averageAcidConductivity - averageBicardConductivity ) / ( averageAcidConductivity + averageBicardConductivity ) ); if ( ( TRUE == isValueWithinPercentRange(averageBicardConductivity, BICARD_TEST_CD2_TCD, FIVE_PERCENT_FACTOR) ) && - ( TRUE == isValueWithinPercentRange(averageAcidConductivity, ACID_TEST_CD2_TCD, FIVE_PERCENT_FACTOR) ) && - ( TRUE == isValueWithinPercentRange(averageConductivity, ACID_TEST_CD2_TCD, FIVE_PERCENT_FACTOR) ) ) + ( TRUE == isValueWithinPercentRange(averageAcidConductivity, ACID_TEST_CD2_TCD, FIVE_PERCENT_FACTOR) ) && + ( pctDiffInConductivity < FIVE_PERCENT_FACTOR ) ) { // Do the necessary setup here before transition to Produce Dialysate State fillStatus.isThisFirstFill = FALSE; requestConcentratePumpOff( CONCENTRATEPUMPS_CP1_ACID ); + setROPumpTargetFlowRateLPM( getTargetFillFlowRateLPM(), TARGET_RO_PRESSURE_PSI ); result = DG_FILL_MODE_STATE_PRODUCE_DIALYSATE; } else @@ -706,6 +709,7 @@ F32 avgAcidConductivity = acidConductivityTotal / conductivitySampleCount; F32 avgBicardConductivity = bicarbConductivityTotal / conductivitySampleCount; + #ifndef DISABLE_FLOW_CHECK_IN_FILL if ( integratedVolumeToLoadCellReadingPercent > FLOW_INTEGRATED_VOLUME_CHECK_TOLERANCE ) // SRSDG 439 { @@ -757,7 +761,8 @@ DG_FILL_MODE_STATE_T result = DG_FILL_MODE_STATE_PAUSED; if ( ( FALSE == isAlarmActive( ALARM_ID_ACID_CONDUCTIVITY_OUT_OF_RANGE ) ) && - ( FALSE == isAlarmActive( ALARM_ID_BICARB_CONDUCTIVITY_OUT_OF_RANGE ) ) ) + ( FALSE == isAlarmActive( ALARM_ID_BICARB_CONDUCTIVITY_OUT_OF_RANGE ) && + ( FALSE == isAlarmActive( ALARM_ID_DG_BAD_INLET_WATER_QUALITY ))) ) { result = DG_FILL_MODE_STATE_TEST_INLET_WATER; }