Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -rf06ae950e44b77730b01a32f2f5cabfc75b5e9b8 -rda3fb953ff72fc65fc6c8c6b91fd833114cb7cbf --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision f06ae950e44b77730b01a32f2f5cabfc75b5e9b8) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision da3fb953ff72fc65fc6c8c6b91fd833114cb7cbf) @@ -55,8 +55,7 @@ #define CONDUCTIVITY_ERROR_PERSISTENCE_PERIOD_MS ( 5 * MS_PER_SECOND ) ///< Persistence period for conductivity error. -#define MAXIMUM_DIALYSATE_TEMPERATURE 42.0 ///< Maximum allowed dialysate temperature in degree C. -#define MINIMUM_DIALYSATE_TEMPERATURE 33.0 ///< Minimum allowed dialysate temperature in degree C. +#define DIALYSATE_TEMPERATURE_TOLERANCE_C 2.0 ///< Dialysate temperature tolerance in degree C. #define ONE_LITER_WEIGHT_GRAMS ( ML_PER_LITER ) ///< One liter weight in grams. @@ -252,19 +251,14 @@ * it gets heated up by primary heater. * @details Inputs: TPo temperature value * @details Outputs: None - * @return TRUE if dialysate temperature is good, otherwise FALSE + * @return TRUE if dialysate temperature is in range, otherwise FALSE *************************************************************************/ static BOOL checkDialysateTemperature( void ) { - BOOL result = FALSE; F32 const dialysateTemp = getTemperatureValue( TEMPSENSORS_OUTLET_PRIMARY_HEATER ); + F32 const targetTemp = getPrimaryHeaterTargetTemperature(); - if ( ( MINIMUM_DIALYSATE_TEMPERATURE <= dialysateTemp ) && ( dialysateTemp <= MAXIMUM_DIALYSATE_TEMPERATURE ) ) - { - result = TRUE; - } - - return result; + return ( ( fabs( dialysateTemp - targetTemp ) <= DIALYSATE_TEMPERATURE_TOLERANCE_C ) ? TRUE : FALSE ); } /*********************************************************************//** @@ -405,49 +399,52 @@ F32 avgDialysateConductivity; DG_FILL_MODE_STATE_T result = DG_FILL_MODE_STATE_DELIVER_DIALYSATE; DG_RESERVOIR_ID_T inactiveReservoir = getInactiveReservoir(); + totalROFlowRate_LPM += getMeasuredROFlowRate(); dialysateConductivityTotal += getConductivityValue( CONDUCTIVITYSENSORS_CD2_SENSOR ); dialysateConductivitySampleCount++; handleDialysateMixing(); - if ( ( FALSE == checkDialysateConductivity() ) || ( FALSE == checkDialysateTemperature() ) ) + if ( ( TRUE == checkDialysateConductivity() ) && ( TRUE == checkDialysateTemperature() ) ) { -#ifndef DISABLE_DIALYSATE_CHECK - setValveState( VPO, VALVE_STATE_NOFILL_C_TO_NO ); - result = DG_FILL_MODE_STATE_DIALYSATE_PRODUCTION; -#endif - } - - if ( getReservoirWeight( inactiveReservoir ) >= ONE_LITER_WEIGHT_GRAMS ) - { - avgDialysateConductivity = dialysateConductivityTotal / dialysateConductivitySampleCount; - - if ( ( avgDialysateConductivity < MIN_DIALYSATE_CONDUCTIVITY ) || ( avgDialysateConductivity > MAX_DIALYSATE_CONDUCTIVITY ) ) + if ( getReservoirWeight( inactiveReservoir ) >= ONE_LITER_WEIGHT_GRAMS ) { + avgDialysateConductivity = dialysateConductivityTotal / dialysateConductivitySampleCount; + + if ( ( avgDialysateConductivity < MIN_DIALYSATE_CONDUCTIVITY ) || ( avgDialysateConductivity > MAX_DIALYSATE_CONDUCTIVITY ) ) + { #ifndef DISABLE_DIALYSATE_CHECK - SET_ALARM_WITH_1_F32_DATA( ALARM_ID_DIALYSATE_CONDUCTIVITY_FAULT, avgDialysateConductivity ); - requestNewOperationMode( DG_MODE_CIRC ); + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_DIALYSATE_CONDUCTIVITY_FAULT, avgDialysateConductivity ); + requestNewOperationMode( DG_MODE_CIRC ); #endif + } } - } - // if we've reached our target fill to volume (by weight), we're done filling - go back to re-circ mode - if ( hasTargetFillVolumeBeenReached( inactiveReservoir ) ) - { - F32 const filledVolume_mL = getReservoirWeight( inactiveReservoir ) - reservoirBaseWeight; - F32 const integratedVolume_mL = totalROFlowRate_LPM * RO_FLOW_INTEGRATOR * ACID_BICARB_CONCENTRATE_ADDITION_MULTIPLER; - F32 const integratedVolumeToLoadCellReadingPercent = fabs( 1 - ( filledVolume_mL / integratedVolume_mL ) ); - - if ( integratedVolumeToLoadCellReadingPercent > FLOW_INTEGRATED_VOLUME_CHECK_TOLERANCE ) + // if we've reached our target fill to volume (by weight), we're done filling - go back to re-circ mode + if ( hasTargetFillVolumeBeenReached( inactiveReservoir ) ) { + F32 const filledVolume_mL = getReservoirWeight( inactiveReservoir ) - reservoirBaseWeight; + F32 const integratedVolume_mL = totalROFlowRate_LPM * RO_FLOW_INTEGRATOR * ACID_BICARB_CONCENTRATE_ADDITION_MULTIPLER; + F32 const integratedVolumeToLoadCellReadingPercent = fabs( 1 - ( filledVolume_mL / integratedVolume_mL ) ); + + if ( integratedVolumeToLoadCellReadingPercent > FLOW_INTEGRATED_VOLUME_CHECK_TOLERANCE ) + { #ifndef DISABLE_MIXING - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DG_FLOW_METER_CHECK_FAILURE, filledVolume_mL, integratedVolume_mL ); + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DG_FLOW_METER_CHECK_FAILURE, filledVolume_mL, integratedVolume_mL ); #endif - } + } - requestNewOperationMode( DG_MODE_CIRC ); + requestNewOperationMode( DG_MODE_CIRC ); + } } + else + { +#ifndef DISABLE_DIALYSATE_CHECK + setValveState( VPO, VALVE_STATE_NOFILL_C_TO_NO ); + result = DG_FILL_MODE_STATE_DIALYSATE_PRODUCTION; +#endif + } return result; }