Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -r7d69278622976cbdf8406cef731773c6e92d0de1 -rb8b2189750438d1a671114c39b871602ed7e5d0d --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 7d69278622976cbdf8406cef731773c6e92d0de1) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision b8b2189750438d1a671114c39b871602ed7e5d0d) @@ -152,7 +152,6 @@ static DG_FILL_MODE_STATE_T handleDeliverDialysateState( void ); static DG_FILL_MODE_STATE_T handlePausedState( void ); -static BOOL isWaterQualityGood( void ); static void checkDialysateTemperatureSensorsDrift( void ); static void handleDialysateMixing( F32 measuredROFlowRate_mL_min ); static void setFillInfoToRTCRAM( void ); @@ -436,32 +435,26 @@ { DG_FILL_MODE_STATE_T result = DG_FILL_MODE_STATE_TEST_INLET_WATER; -#ifndef DISABLE_DIALYSATE_CHECK - if ( TRUE == isWaterQualityGood() ) -#endif + // If this is the first fill of a treatment, prime acid and bicarb lines, otherwise transition + // to dialysate production directly + if ( TRUE == isThisTheFirstFill() ) { - // 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() ) - { - // 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 ); + // 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 ); - concentratePrimingStartTime = getMSTimerCount(); - result = DG_FILL_MODE_STATE_PRIME_CONCENTRATE_LINES; - } - else -#endif - - { - result = DG_FILL_MODE_STATE_PRODUCE_DIALYSATE; - } + concentratePrimingStartTime = getMSTimerCount(); + result = DG_FILL_MODE_STATE_PRIME_CONCENTRATE_LINES; } + else + { + result = DG_FILL_MODE_STATE_PRODUCE_DIALYSATE; + } + + // TODO get back to this #ifndef DISABLE_DIALYSATE_CHECK if ( TRUE == didTimeout( waterQualityTestStartTime, WATER_QUALITY_TEST_TIME_OUT_MS ) ) { @@ -485,7 +478,6 @@ { DG_FILL_MODE_STATE_T result = DG_FILL_MODE_STATE_PRIME_CONCENTRATE_LINES; -#ifndef DISABLE_PRIME_CONCENT_LINES if ( TRUE == didTimeout( concentratePrimingStartTime, PRIME_CONCENTRATE_LINES_TIME_OUT_MS ) ) { requestConcentratePumpOff( CONCENTRATEPUMPS_CP1_ACID ); @@ -496,9 +488,6 @@ setROPumpTargetFlowRateLPM( RO_PUMP_FLUSH_BUBBLES_FLOWS[ pumpSpeedIndex ] / MILLILITERS_PER_LITER, TARGET_RO_PRESSURE_PSI ); flushBubblesStartTime = getMSTimerCount(); } -#endif - // State transition - result = DG_FILL_MODE_STATE_FLUSH_BUBBLES; return result; } @@ -531,13 +520,15 @@ totalBicarbConductivity = 0.0; averageBicarbConductivity = 0.0; bicarbConductivitySampleCount = 0; + // Set pumps flow rate to prepare for bicarb conductivity testing setROPumpTargetFlowRateLPM( RO_PUMP_400_ML_PER_MIN / MILLILITERS_PER_LITER, TARGET_RO_PRESSURE_PSI ); setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP2_BICARB, BICARB_PUMP_40_ML_PER_MIN ); requestConcentratePumpOn( CONCENTRATEPUMPS_CP2_BICARB ); + // State transition - concentrateTestStartTime = getMSTimerCount(); - result = DG_FILL_MODE_STATE_TEST_BICARB_CONDUCTIVITY; + concentrateTestStartTime = getMSTimerCount(); + result = DG_FILL_MODE_STATE_TEST_BICARB_CONDUCTIVITY; } } @@ -588,8 +579,8 @@ } else { + // Bicarb test failed, go to fault SET_ALARM_WITH_1_F32_DATA( ALARM_ID_BICARB_CONDUCTIVITY_OUT_OF_RANGE, averageBicarbConductivity ); - requestNewOperationMode( DG_MODE_GENE ); } } #endif @@ -641,8 +632,8 @@ } else { - //SET_ALARM_WITH_1_F32_DATA( ALARM_ID_ACID_CONDUCTIVITY_OUT_OF_RANGE, averageAcidConductivity ); - //requestNewOperationMode( DG_MODE_GENE ); + // Acid conductivity did not pass, fault + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_ACID_CONDUCTIVITY_OUT_OF_RANGE, averageAcidConductivity ); } } @@ -664,30 +655,24 @@ DG_FILL_MODE_STATE_T result = DG_FILL_MODE_STATE_PRODUCE_DIALYSATE; F32 measuredROFlowRateMLPM = getMeasuredROFlowRateLPM() * ML_PER_LITER; -#ifndef DISABLE_DIALYSATE_CHECK - if ( TRUE == isWaterQualityGood() ) // SRSDG 216 -#else - if ( TRUE ) -#endif - { - // Prime mixing before deliver result to reservoir - handleDialysateMixing( measuredROFlowRateMLPM ); + // Prime mixing before deliver result to reservoir + handleDialysateMixing( measuredROFlowRateMLPM ); #ifndef DISABLE_MIXING - requestConcentratePumpOn( CONCENTRATEPUMPS_CP1_ACID ); // SRSDG 217 - requestConcentratePumpOn( CONCENTRATEPUMPS_CP2_BICARB ); // SRSDG 217 + requestConcentratePumpOn( CONCENTRATEPUMPS_CP1_ACID ); // SRSDG 217 + requestConcentratePumpOn( CONCENTRATEPUMPS_CP2_BICARB ); // SRSDG 217 - if ( concentratePumpPrimeCount++ > CONCENTRATE_PUMP_PRIME_INTERVAL ) + if ( concentratePumpPrimeCount++ > CONCENTRATE_PUMP_PRIME_INTERVAL ) #endif - { - fillStatus.isThisFirstFill = FALSE; - setValveState( VPO, VALVE_STATE_FILL_C_TO_NC ); - result = DG_FILL_MODE_STATE_DELIVER_DIALYSATE; - } + { + fillStatus.isThisFirstFill = FALSE; + setValveState( VPO, VALVE_STATE_FILL_C_TO_NC ); + result = DG_FILL_MODE_STATE_DELIVER_DIALYSATE; } - else + + /*else { concentratePumpPrimeCount = 0; - } + }*/ // TODO what should we do with this else? Maybe it is not needed return result; } @@ -727,16 +712,6 @@ fillStatus.fillFlowRateRunningSum += getMeasuredROFlowRateLPM(); fillStatus.fillTemperatureRunningSum += getTemperatureValue( (U32)TEMPSENSORS_OUTLET_PRIMARY_HEATER ); -#ifndef DISABLE_DIALYSATE_CHECK - if ( ( isWaterQualityGood() != TRUE ) ) // SRSDG 240 , SRSDG 397 - { - requestConcentratePumpOff( CONCENTRATEPUMPS_CP1_ACID ); - requestConcentratePumpOff( CONCENTRATEPUMPS_CP2_BICARB ); - setValveState( VPO, VALVE_STATE_NOFILL_C_TO_NO ); - result = DG_FILL_MODE_STATE_PRODUCE_DIALYSATE; - } -#endif - #ifndef DISABLE_MIXING // Detect empty bottles using integrated volumes // TODO: empty bottles detection using conductivity sensors if ( ( ( ACID_CONCENTRATION_BOTTLE_VOLUME_ML - getF32OverrideValue( &usedAcidVolumeML ) ) <= CONCENTRATION_BOTTLE_LOW_VOLUME_ML ) ) // || // SRSDG 437 @@ -838,29 +813,6 @@ /*********************************************************************//** * @brief - * The isWaterQualityGood function checks for inlet water quality. - * @details Inputs: Temperature and conductivity alarms - * @details Outputs: none - * @return TRUE if water quality is good, otherwise FALSE - *************************************************************************/ -static BOOL isWaterQualityGood( void ) -{ - BOOL isInletPressureGood = ( FALSE == isAlarmActive( ALARM_ID_INLET_WATER_LOW_PRESSURE ) ? FALSE : TRUE ); - - BOOL isWaterTemperatureGood = ( ( FALSE == isAlarmActive( ALARM_ID_INLET_WATER_HIGH_TEMPERATURE ) && - FALSE == isAlarmActive( ALARM_ID_INLET_WATER_LOW_TEMPERATURE ) && - FALSE == isAlarmActive( ALARM_ID_INLET_WATER_TEMPERATURE_IN_LOW_RANGE ) && - FALSE == isAlarmActive( ALARM_ID_INLET_WATER_TEMPERATURE_IN_HIGH_RANGE ) ) ? FALSE : TRUE ); - - BOOL isWaterConductivityGood = ( ( FALSE == isAlarmActive( ALARM_ID_INLET_WATER_CONDUCTIVITY_IN_WARNING_RANGE ) && - FALSE == isAlarmActive( ALARM_ID_INLET_WATER_LOW_CONDUCTIVITY ) && - FALSE == isAlarmActive( ALARM_ID_RO_REJECTION_RATIO_OUT_OF_RANGE ) ) ? FALSE : TRUE ); - - return ( ( isInletPressureGood && isWaterTemperatureGood && isWaterConductivityGood ) ); -} - -/*********************************************************************//** - * @brief * The checkDialysateTemperatureSensorsDrift function checks whether the * dialysate temperature sensors have drifted. If they are drifted, it raises * an alarm. @@ -948,6 +900,7 @@ static void setFillInfoToRTCRAM( void ) { DG_HEATERS_RECORD_T record; + record.averageFillFlow = fillStatus.fillFlowRateAverage; setHeatersInfoRecord( (U08*)&record );