Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r0a74bcce6674271e35d5154003dd6c25011f80f9 -re803f3e6d135641015dc78e2aeac0a5489c9492c --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 0a74bcce6674271e35d5154003dd6c25011f80f9) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision e803f3e6d135641015dc78e2aeac0a5489c9492c) @@ -69,6 +69,7 @@ #define HEATER_TEMP_CONTROL_TRANSFER 1.0F ///< Primary Heater temperature difference to switch to control function #define HEATER_TARGET_TEMPERATURE_MIN 10.0F ///< Minimum allowed target temperature for the heaters. #define HEATER_TARGET_TEMPERATURE_MAX 90.0F ///< Maximum allowed target temperature for the heaters. +#define DELTA_TEMP_ADJ_FLOW_RATE 150.0F ///< Fo Qd <= 150, the bottom range of second level temperature correction to be applied. #define D5_HEAT_ON_NO_FLUID_TIMEOUT_MS ( 10 * MS_PER_SECOND ) ///< Primary heater on with no flow time out in milliseconds. #define D45_HEAT_ON_NO_FLUID_TIMEOUT_MS ( 12 * MS_PER_SECOND ) ///< Trimmer heater on with no flow time out in milliseconds. @@ -401,6 +402,7 @@ F32 targetTempfromTD = getTDTargetDialysateTemperature(); F32 measuredTempAtDialyzer = getConductivityTemperatureValue( D27_COND ); F32 calcTargetTemp = getHeaterTargetTemperature( D5_HEAT ); + F32 dialysateFlowrate = getTDDialysateFlowrate(); F32 deltaTempC = targetTempfromTD - measuredTempAtDialyzer; F32 capDeltaTempC = MIN( fabs(deltaTempC), ADJ_DELTA_TEMP_STEP ); @@ -421,9 +423,19 @@ } //Make sure the adjusted temp not crossing the max and min limits. - adjustedPrimaryTargetTemp = MIN(adjustedPrimaryTargetTemp, ( calcTargetTemp + MAX_ADJ_DELTA_TEMP_C ) ); - adjustedPrimaryTargetTemp = MAX(adjustedPrimaryTargetTemp, ( calcTargetTemp - MAX_ADJ_DELTA_TEMP_C ) ); + adjustedPrimaryTargetTemp = MIN( adjustedPrimaryTargetTemp, ( calcTargetTemp + MAX_ADJ_DELTA_TEMP_C ) ); + // For Qd <= 150, The bottom range of second level temperature correction not to go below the initial + // Delta temperature adjustment. + if ( dialysateFlowrate > DELTA_TEMP_ADJ_FLOW_RATE ) + { + adjustedPrimaryTargetTemp = MAX( adjustedPrimaryTargetTemp, ( calcTargetTemp - MAX_ADJ_DELTA_TEMP_C ) ); + } + else + { + adjustedPrimaryTargetTemp = MAX( adjustedPrimaryTargetTemp, calcTargetTemp ); + } + isTargetTempAdjusted = TRUE; primaryTargetTempAdjCounter = 0; }