Index: firmware/App/Modes/ModeHeatDisinfectActiveCool.c =================================================================== diff -u -rd325999b7b3ea03b7e294cb8a0b97df93812fbe9 -r75f5cf4a8484f0c08b90edfb4b49a6268e51de65 --- firmware/App/Modes/ModeHeatDisinfectActiveCool.c (.../ModeHeatDisinfectActiveCool.c) (revision d325999b7b3ea03b7e294cb8a0b97df93812fbe9) +++ firmware/App/Modes/ModeHeatDisinfectActiveCool.c (.../ModeHeatDisinfectActiveCool.c) (revision 75f5cf4a8484f0c08b90edfb4b49a6268e51de65) @@ -8,7 +8,7 @@ * @file ModeHeatDisinfectActiveCool.c * * @author (last) Dara Navaei -* @date (last) 12-Jun-2023 +* @date (last) 20-Jun-2023 * * @author (original) Dara Navaei * @date (original) 18-Dec-2022 @@ -598,29 +598,28 @@ static DG_HEAT_DISINFECT_ACTIVE_COOL_STATE_T handleHeatDisinfectActiveCoolCancelWaterPathState( void ) { DG_HEAT_DISINFECT_ACTIVE_COOL_STATE_T state = DG_HEAT_DISINFECT_ACTIVE_COOL_CANCEL_WATER_PATH_STATE; - U32 drainSteadyTimeoutMS = RSRVR_DRAIN_STEADY_TIMEOUT_MS; - U32 drainTimeoutMS = RSRVR_DRAIN_TIMEOUT_MS; + F32 TDi = getTemperatureValue( TEMPSENSORS_INLET_DIALYSATE ); + F32 TRo = getTemperatureValue( TEMPSENSORS_OUTLET_REDUNDANT ); + BOOL isMixDrainNeeded = ( ( TDi >= RSRVR_MIX_DRAIN_TEMPERATURE_THRESHOLD_C ) && ( TRo >= RSRVR_MIX_DRAIN_TEMPERATURE_THRESHOLD_C ) ? TRUE : FALSE ); + U32 drainTimeoutMS = ( TRUE == isMixDrainNeeded ? RSRVR_MIX_DRAIN_TIMEOUT_MS : RSRVR_DRAIN_TIMEOUT_MS ); + U32 drainSteadyTimeoutMS = ( TRUE == isMixDrainNeeded ? ROF_ACTIVE_COOL_MIX_DRAIN_STEADY_TIMEOUT_MS : RSRVR_DRAIN_STEADY_TIMEOUT_MS ); if ( CANCELLATION_MODE_NONE == cancellationMode ) { U32 targetRPM = RSRVR_DRAIN_TARGET_RPM; - F32 TDi = getTemperatureValue( TEMPSENSORS_INLET_DIALYSATE ); - F32 TRo = getTemperatureValue( TEMPSENSORS_OUTLET_REDUNDANT ); cancellationMode = CANCELLATION_MODE_COLD; // The two sensors must be less than a threshold to decide if mix drain is needed to normal drain - if ( ( TDi >= RSRVR_MIX_DRAIN_TEMPERATURE_THRESHOLD_C ) && ( TRo >= RSRVR_MIX_DRAIN_TEMPERATURE_THRESHOLD_C ) ) + if ( TRUE == isMixDrainNeeded ) { // The fluid is hot so this is a mix drain. Set the VPd to direct the cold inlet fluid to drain setValveState( VPI, VALVE_STATE_OPEN ); setValveState( VPD, VALVE_STATE_DRAIN_C_TO_NO ); turnOnUVReactor( INLET_UV_REACTOR ); - drainSteadyTimeoutMS = ROF_ACTIVE_COOL_MIX_DRAIN_STEADY_TIMEOUT_MS; - drainTimeoutMS = RSRVR_MIX_DRAIN_TIMEOUT_MS; - targetRPM = ROF_ACTIVE_COOL_INITIAL_TARGET_DRAIN_RPM; - cancellationMode = CANCELLATION_MODE_HOT; + targetRPM = ROF_ACTIVE_COOL_INITIAL_TARGET_DRAIN_RPM; + cancellationMode = CANCELLATION_MODE_HOT; } rsrvrsStatus.rsrvr[ DG_RESERVOIR_1 ].rStatus = DG_RESERVOIR_ABOVE_TARGET; @@ -789,6 +788,7 @@ // If there is any fault alarm and we are not already in the cancel water path state, set it to cancel water path state heatDisinfectActiceCoolPrevState = heatDisinfectActiveCoolState; heatDisinfectActiveCoolState = DG_HEAT_DISINFECT_ACTIVE_COOL_CANCEL_WATER_PATH_STATE; + setHeatDisinfectActiveCoolActuators( heatDisinfectActiveCoolState ); } } } @@ -1032,8 +1032,13 @@ case DG_HEAT_DISINFECT_ACTIVE_COOL_CANCEL_WATER_PATH_STATE: case DG_HEAT_DISINFECT_ACTIVE_COOL_CANCEL_BASIC_PATH_STATE: case DG_HEAT_DISINFECT_ACTIVE_COOL_STATE_COMPLETE: - // Do nothing the actuators in the above states are handled in a different part of code + // De-energize the actuators in the state upon transitioning to these states + deenergizeActuators( NO_PARK_CONC_PUMPS ); break; + + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_HEAT_DISINFECT_ACTIVE_COOL_INVALID_EXEC_STATE, state ) + break; } } @@ -1092,6 +1097,7 @@ heatDisinfectActiceCoolPrevState = state; state = DG_HEAT_DISINFECT_ACTIVE_COOL_CANCEL_WATER_PATH_STATE; + setHeatDisinfectActiveCoolActuators( state ); } return state;