Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r1ac16991f665ddf377a4fd17f91c1949b64edf8e -r3d87e97b9345aec63ca88d741e3bcd548f90422b --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 1ac16991f665ddf377a4fd17f91c1949b64edf8e) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 3d87e97b9345aec63ca88d741e3bcd548f90422b) @@ -584,7 +584,7 @@ } else if ( TRUE == heatersStatus[ heater ].hasTargetTempChanged ) { - F32 inletTemperature = getTemperatureValue( (U32)TEMPSENSORS_HEAT_DISINFECT ); + F32 inletTemperature = getTemperatureValue( TEMPSENSORS_HEAT_DISINFECT ); F32 targetTemperature = heatersStatus[ heater ].targetTempC; F32 targetFlow = getTargetROPumpFlowRateLPM(); F32 dutyCycle = calculatePrimaryHeaterDutyCycle( targetTemperature, inletTemperature, targetFlow, TRUE ); @@ -677,15 +677,15 @@ // If the mode is heat disinfect, use the target flow rate instead of the avg. flow // Most of the times the heater should be running at 100% duty cycle since the target temperature is 81 C and // it is far from the inlet temperature. - currentTemperature = getTemperatureValue( (U32)TEMPSENSORS_HEAT_DISINFECT ); + currentTemperature = getTemperatureValue( TEMPSENSORS_HEAT_DISINFECT ); targetFlowLPM = getTargetROPumpFlowRateLPM(); dutyCycle = calculateTrimmerHeaterDutyCycle( targetTemperature, currentTemperature, targetFlowLPM, FALSE ); state = HEATER_EXEC_STATE_CONTROL_TO_DISINFECT_TARGET; } else { // If not any of the above modes, just calculate the energy equation based on TRo - currentTemperature = getTemperatureValue( (U32)TEMPSENSORS_OUTLET_REDUNDANT ); + currentTemperature = getTemperatureValue( TEMPSENSORS_OUTLET_REDUNDANT ); dutyCycle = calculateTrimmerHeaterDutyCycle( targetTemperature, currentTemperature, targetFlowLPM, TRUE ); state = HEATER_EXEC_STATE_TRIMMER_CONTROL_TO_TARGET; } @@ -734,7 +734,7 @@ // When the trimmer heater is on, its duty cycle is adjusted at the control interval. For this control check, // dialysate inlet temperature sensor is used rather than the theoretical calculations. - F32 dialysateInletTemperature = getTemperatureValue( (U32)TEMPSENSORS_OUTLET_REDUNDANT ); + F32 dialysateInletTemperature = getTemperatureValue( TEMPSENSORS_OUTLET_REDUNDANT ); F32 targetTemperature = heatersStatus[ heater ].targetTempC; F32 targetFlowLPM = getTargetDialysateFlowLPM(); F32 dutyCycle = calculateTrimmerHeaterDutyCycle( targetTemperature, dialysateInletTemperature, targetFlowLPM, TRUE ); Index: firmware/App/Controllers/LoadCell.c =================================================================== diff -u -rc71859467ae9ff4058d9fc4abeae23ee86a7cb69 -r3d87e97b9345aec63ca88d741e3bcd548f90422b --- firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision c71859467ae9ff4058d9fc4abeae23ee86a7cb69) +++ firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 3d87e97b9345aec63ca88d741e3bcd548f90422b) @@ -540,6 +540,9 @@ { memcpy( &loadcells[ id ].autoCalOffset, bufferAddress, sizeof( F32 ) ); bufferAddress += sizeof( F32 ); + + // Set the load cells have been tared already. + hasLoadCellBeenTared[ id ] = TRUE; } } Index: firmware/App/Modes/ModeHeatDisinfect.c =================================================================== diff -u -re5713fcc4511a625434a4748f7dded3d237acdf8 -r3d87e97b9345aec63ca88d741e3bcd548f90422b --- firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision e5713fcc4511a625434a4748f7dded3d237acdf8) +++ firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision 3d87e97b9345aec63ca88d741e3bcd548f90422b) @@ -95,7 +95,7 @@ #define HEAT_DISINFECT_MAX_RO_PRESSURE_PSI 30 ///< Heat disinfect maximum RO pressure in psi. #define HEAT_DISINFECT_START_TEMP_TIMEOUT_MS ( 4 * MIN_PER_HOUR * SEC_PER_MIN * MS_PER_SECOND ) ///< Heat disinfect reaching to minimum temperature timeout in milliseconds. #define RSRVRS_TARGET_VOL_OUT_TIMEOUT_MS ( 5 * MS_PER_SECOND ) ///< Reservoirs 1 & 2 maximum volume out of range timeout during heat disinfect. -#define RSRVRS_MAX_TARGET_VOL_CHANGE_ML 100.0F ///< Reservoirs 1 & 2 maximum allowed volume change when full during heat disinfect. +#define RSRVRS_MAX_TARGET_VOL_CHANGE_ML 150.0F ///< Reservoirs 1 & 2 maximum allowed volume change when full during heat disinfect. #define POST_HEAT_DISINFECT_WAIT_TIME_MS ( 3 * SEC_PER_MIN * MS_PER_SECOND ) ///< Heat disinfect final wait time before flushing the system in milliseconds. #define HEAT_DISINFECT_MAX_TEMP_GRADIENT_C 15.0F ///< Heat disinfect maximum allowed temperature gradient in between hottest and coldest sensors. #define HEAT_DISINFECT_TEMP_GRAD_OUT_RANGE_TIME_MS ( 0.16 * SEC_PER_MIN * MS_PER_SECOND ) ///< Heat disinfect temperature gradient out of range timeout in milliseconds. Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -r49497f5219d7b7786e83ecadade22615803cadc8 -r3d87e97b9345aec63ca88d741e3bcd548f90422b --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 49497f5219d7b7786e83ecadade22615803cadc8) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 3d87e97b9345aec63ca88d741e3bcd548f90422b) @@ -55,8 +55,8 @@ #define DATA_PUBLISH_COUNTER_START_COUNT 5 ///< Data publish counter start count. #define NUM_OF_ACID_AND_BICARB_NV_DATA_TO_CHECK 1 ///< Number of acid and bicarb non-volatile data to check. -#define TRIMMER_HEATER_TARGET_TEMP_GAIN 0.002F ///< Trimmer heater target temperature gain. -#define TRIMMER_HEATER_TARGET_TEMP_OFFSET 0.3F ///< Trimmer heater target temperature offset. +#define TRIMMER_HEATER_TARGET_TEMP_GAIN -0.002F ///< Trimmer heater target temperature gain. +#define TRIMMER_HEATER_TARGET_TEMP_OFFSET 1.7F ///< Trimmer heater target temperature offset. // ********** private data ********** @@ -568,7 +568,8 @@ *************************************************************************/ F32 getTrimmerHeaterTargetTemperature( void ) { - return heatersTempCalc.tempTargetTrimmer + ( getTargetDialysateFlowLPM() * TRIMMER_HEATER_TARGET_TEMP_GAIN ) + TRIMMER_HEATER_TARGET_TEMP_OFFSET; + return heatersTempCalc.tempTargetTrimmer + ( getTargetDialysateFlowLPM() * TRIMMER_HEATER_TARGET_TEMP_GAIN * ML_PER_LITER ) + + TRIMMER_HEATER_TARGET_TEMP_OFFSET; } /*********************************************************************//**