Index: firmware/App/Modes/ModeHeatDisinfectActiveCool.c =================================================================== diff -u -re679a308ab231e03f8e5951fbcb0fe446f3f8fe9 -r2903779754f98d014dacdf075099912ad7830ce6 --- firmware/App/Modes/ModeHeatDisinfectActiveCool.c (.../ModeHeatDisinfectActiveCool.c) (revision e679a308ab231e03f8e5951fbcb0fe446f3f8fe9) +++ firmware/App/Modes/ModeHeatDisinfectActiveCool.c (.../ModeHeatDisinfectActiveCool.c) (revision 2903779754f98d014dacdf075099912ad7830ce6) @@ -51,7 +51,7 @@ #define RSRVR_DRAIN_TIMEOUT_MS ( 2 * SEC_PER_MIN * MS_PER_SECOND ) ///< Reservoir drain timeout in milliseconds. #define RSRVR_DRAIN_STEADY_TIMEOUT_MS ( 6 * MS_PER_SECOND ) ///< Reservoir drain steady timeout in milliseconds. #define RSRVR_DRAIN_TARGET_RPM 2400 ///< Reservoir drain target RPM. -#define RSRVR_MIX_DRAIN_TIMEOUT_MS ( 5 * SEC_PER_MIN * MS_PER_SECOND ) ///< Reservoirs 1 & 2 mix drain timeout in ms. +#define RSRVR_MIX_DRAIN_TIMEOUT_MS ( 4 * SEC_PER_MIN * MS_PER_SECOND ) ///< Reservoirs 1 & 2 mix drain timeout in ms. #define RSRVR_MIX_DRAIN_TEMPERATURE_THRESHOLD_C 60.0F ///< Temperature threshold for performing mix drain or normal drain. // RO filter cool down defines @@ -607,16 +607,19 @@ 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 ) ) { // 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_TARGET_DARIN_RPM; + targetRPM = ROF_ACTIVE_COOL_INITIAL_TARGET_DRAIN_RPM; cancellationMode = CANCELLATION_MODE_HOT; } @@ -641,6 +644,8 @@ if ( DG_RESERVOIR_REACHED_TARGET == rsrvrsStatus.rsrvr[ DG_RESERVOIR_2 ].rStatus ) { + // Reset the state timer for the next reservoir to drain + stateStartTimeMS = getMSTimerCount(); // Set the drain valve to reservoir 1 and close reservoir 2 setValveState( VRD1, VALVE_STATE_OPEN ); setValveState( VRD2, VALVE_STATE_CLOSED ); @@ -652,7 +657,8 @@ setValveState( VRD1, VALVE_STATE_CLOSED ); setValveState( VRD2, VALVE_STATE_CLOSED ); signalDrainPumpHardStop(); - state = DG_HEAT_DISINFECT_ACTIVE_COOL_CANCEL_BASIC_PATH_STATE; + alarmDetectedPendingTrigger = ALARM_ID_DG_RESERVOIR_DRAIN_TIMEOUT; + state = DG_HEAT_DISINFECT_ACTIVE_COOL_CANCEL_BASIC_PATH_STATE; } // If reservoir 2 has already been drained and reservoir 1 is empty, reset and switch to complete @@ -676,8 +682,8 @@ setValveState( VRD1, VALVE_STATE_CLOSED ); setValveState( VRD2, VALVE_STATE_CLOSED ); signalDrainPumpHardStop(); - - state = DG_HEAT_DISINFECT_ACTIVE_COOL_CANCEL_BASIC_PATH_STATE; + alarmDetectedPendingTrigger = ALARM_ID_DG_RESERVOIR_DRAIN_TIMEOUT; + state = DG_HEAT_DISINFECT_ACTIVE_COOL_CANCEL_BASIC_PATH_STATE; } return state; @@ -1057,6 +1063,28 @@ if ( DG_RESERVOIR_NOT_REACHED_TARGET == rsrvrsStatus.rsrvr[ rsrvrID ].rStatus ) { deenergizeActuators( NO_PARK_CONC_PUMPS ); + + switch ( state ) + { + case DG_HEAT_DISINFECT_ACTIVE_COOL_FILL_R1_STATE: + case DG_HEAT_DISINFECT_ACTIVE_COOL_FILL_R2_STATE: + case DG_HEAT_DISINFECT_ACTIVE_COOL_DRAIN_R2_FILL_R1_TO_R2_STATE: + case DG_HEAT_DISINFECT_ACTIVE_COOL_DRAIN_R1_FILL_R2_TO_R1_STATE: + alarmDetectedPendingTrigger = ALARM_ID_DG_RESERVOIR_FILL_TIMEOUT; + break; + + case DG_HEAT_DISINFECT_ACITVE_COOL_MIX_DRAIN_R1_STATE: + case DG_HEAT_DISINFECT_ACTIVE_COOL_MIX_DRAIN_R2_STATE: + case DG_HEAT_DISINFECT_ACTIVE_COOL_DRAIN_R1_STATE: + case DG_HEAT_DISINFECT_ACTIVE_COOL_DRAIN_R2_STATE: + alarmDetectedPendingTrigger = ALARM_ID_DG_RESERVOIR_DRAIN_TIMEOUT; + break; + + default: + // Do nothing + break; + } + heatDisinfectActiceCoolPrevState = state; state = DG_HEAT_DISINFECT_ACTIVE_COOL_CANCEL_WATER_PATH_STATE; } @@ -1078,7 +1106,7 @@ { F32 THdTemperatureC = getTemperatureValue( TEMPSENSORS_HEAT_DISINFECT ); - if ( ( THdTemperatureC < ROF_ACTIVE_COOL_TARGET_TEMP_C ) && ( FALSE == tempBelowTarget.hasTempTargetTimeBeenSet ) ) + if ( ( THdTemperatureC <= ROF_ACTIVE_COOL_TARGET_TEMP_C ) && ( FALSE == tempBelowTarget.hasTempTargetTimeBeenSet ) ) { tempBelowTarget.tempBelowTargetStartTimeMS = getMSTimerCount(); tempBelowTarget.hasTempTargetTimeBeenSet = TRUE;