Index: firmware/App/Modes/ModeHeatDisinfectActiveCool.c =================================================================== diff -u -re7947c44f93d92e739a8c3d520dcd2678280cd01 -rb410b42053aab8a94bdd948f857096d2e362cc45 --- firmware/App/Modes/ModeHeatDisinfectActiveCool.c (.../ModeHeatDisinfectActiveCool.c) (revision e7947c44f93d92e739a8c3d520dcd2678280cd01) +++ firmware/App/Modes/ModeHeatDisinfectActiveCool.c (.../ModeHeatDisinfectActiveCool.c) (revision b410b42053aab8a94bdd948f857096d2e362cc45) @@ -73,8 +73,9 @@ #define RSRVR_ACTIVE_COOL_BELOW_TARGET_TEMP_TIMEOUT_MS ( 15 * MS_PER_SECOND ) ///< Reservoir active cool temperature below target timeout in milliseconds. #define RSRVR_ACTIVE_COOL_TARGET_TEMP_TIMEOUT_MS ( 10 * SEC_PER_MIN * MS_PER_SECOND ) ///< Reservoir active cool target temperature met in milliseconds. -// Reservoir drain defines -#define RSRVR_ACTIVE_COOL_DRAIN_TARGET_FLOW_LPM 0.3F ///< Reservoir active cool drain target flow in L/min. +// Complete states, de-pressurize the concentrate lines +#define ACID_BICARB_DEPRESSURIZE_TUBING_SPEED_MLPM 20.0F ///< Acid and bicarb de-pressurize tubing speed in mL/min. +#define ACID_BICARB_DEPRESSURIZE_TUBING_TIMEOUT_MS ( 5 * MS_PER_SECOND ) ///< Acid and bicarb de-pressurize tubing timeout in milliseconds. /// Non-volatile write structure typedef struct @@ -579,11 +580,15 @@ { DG_HEAT_DISINFECT_ACTIVE_COOL_STATE_T state = DG_HEAT_DISINFECT_ACTIVE_COOL_STATE_COMPLETE; - writeDisinfectDataToNV( USAGE_INFO_HEAT_DIS_ACTIVE_COOL ); - - if ( TRUE == disinfectNVOps.hasDisStatusBeenWrittenToNV ) + if ( TRUE == didTimeout( stateStartTimeMS, ACID_BICARB_DEPRESSURIZE_TUBING_TIMEOUT_MS ) ) { - stopDGHeatDisinfectActiveCool(); + deenergizeActuators( NO_PARK_CONC_PUMPS ); + writeDisinfectDataToNV( USAGE_INFO_HEAT_DIS_ACTIVE_COOL ); + + if ( TRUE == disinfectNVOps.hasDisStatusBeenWrittenToNV ) + { + stopDGHeatDisinfectActiveCool(); + } } return state; @@ -988,11 +993,11 @@ case DG_HEAT_DISINFECT_ACTIVE_COOL_DRAIN_R1_STATE: // Valves - setValveState( VPI, VALVE_STATE_OPEN ); + setValveState( VPI, VALVE_STATE_CLOSED ); setValveState( VBF, VALVE_STATE_CLOSED ); setValveState( VSP, VALVE_STATE_CLOSED ); - setValveState( VPD, VALVE_STATE_OPEN_C_TO_NC ); - setValveState( VPO, VALVE_STATE_NOFILL_C_TO_NO ); + setValveState( VPD, VALVE_STATE_DRAIN_C_TO_NO ); + setValveState( VPO, VALVE_STATE_FILL_C_TO_NC ); setValveState( VDR, VALVE_STATE_DRAIN_C_TO_NO ); setValveState( VRC, VALVE_STATE_DRAIN_C_TO_NO ); setValveState( VRO, VALVE_STATE_R1_C_TO_NO ); @@ -1004,23 +1009,21 @@ turnOffUVReactor( INLET_UV_REACTOR ); turnOffUVReactor( OUTLET_UV_REACTOR ); // Concentrate pumps - setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP1_ACID, ACID_PUMP_SPEED_ML_PER_MIN ); - setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP2_BICARB, BICARB_PUMP_SPEED_ML_PER_MIN ); - requestConcentratePumpOn( CONCENTRATEPUMPS_CP1_ACID ); - requestConcentratePumpOn( CONCENTRATEPUMPS_CP2_BICARB ); + requestConcentratePumpOff( CONCENTRATEPUMPS_CP1_ACID , NO_PARK_CONC_PUMPS ); + requestConcentratePumpOff( CONCENTRATEPUMPS_CP2_BICARB , NO_PARK_CONC_PUMPS ); // RO pump - setROPumpTargetFlowRateLPM( RSRVR_ACTIVE_COOL_DRAIN_TARGET_FLOW_LPM, RSRVR_ACTIVE_COOL_MAX_ALLOWED_PRESSURE_PSI ); + signalROPumpHardStop(); // Drain pump setDrainPumpTargetRPM( RSRVR_DRAIN_TARGET_RPM ); break; case DG_HEAT_DISINFECT_ACTIVE_COOL_DRAIN_R2_STATE: // Valves - setValveState( VPI, VALVE_STATE_OPEN ); + setValveState( VPI, VALVE_STATE_CLOSED ); setValveState( VBF, VALVE_STATE_CLOSED ); setValveState( VSP, VALVE_STATE_CLOSED ); - setValveState( VPD, VALVE_STATE_OPEN_C_TO_NC ); - setValveState( VPO, VALVE_STATE_NOFILL_C_TO_NO ); + setValveState( VPD, VALVE_STATE_DRAIN_C_TO_NO ); + setValveState( VPO, VALVE_STATE_FILL_C_TO_NC ); setValveState( VDR, VALVE_STATE_DRAIN_C_TO_NO ); setValveState( VRC, VALVE_STATE_DRAIN_C_TO_NO ); setValveState( VRO, VALVE_STATE_R1_C_TO_NO ); @@ -1032,20 +1035,45 @@ turnOffUVReactor( INLET_UV_REACTOR ); turnOffUVReactor( OUTLET_UV_REACTOR ); // Concentrate pumps - setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP1_ACID, ACID_PUMP_SPEED_ML_PER_MIN ); - setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP2_BICARB, BICARB_PUMP_SPEED_ML_PER_MIN ); + requestConcentratePumpOff( CONCENTRATEPUMPS_CP1_ACID, NO_PARK_CONC_PUMPS ); + requestConcentratePumpOff( CONCENTRATEPUMPS_CP2_BICARB, NO_PARK_CONC_PUMPS ); + // RO pump + signalROPumpHardStop(); + // Drain pump + setDrainPumpTargetRPM( RSRVR_DRAIN_TARGET_RPM ); + break; + + case DG_HEAT_DISINFECT_ACTIVE_COOL_STATE_COMPLETE: + // Valves + setValveState( VPI, VALVE_STATE_CLOSED ); + setValveState( VBF, VALVE_STATE_CLOSED ); + setValveState( VSP, VALVE_STATE_CLOSED ); + setValveState( VPD, VALVE_STATE_DRAIN_C_TO_NO ); + setValveState( VPO, VALVE_STATE_NOFILL_C_TO_NO ); + setValveState( VDR, VALVE_STATE_DRAIN_C_TO_NO ); + setValveState( VRC, VALVE_STATE_DRAIN_C_TO_NO ); + setValveState( VRO, VALVE_STATE_R1_C_TO_NO ); + setValveState( VRD1, VALVE_STATE_CLOSED ); + setValveState( VRD2, VALVE_STATE_CLOSED ); + setValveState( VRI, VALVE_STATE_R1_C_TO_NO ); + setValveState( VRF, VALVE_STATE_R2_C_TO_NO ); + // UV reactors + turnOffUVReactor( INLET_UV_REACTOR ); + turnOffUVReactor( OUTLET_UV_REACTOR ); + // Concentrate pumps + setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP1_ACID, ACID_BICARB_DEPRESSURIZE_TUBING_SPEED_MLPM ); + setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP2_BICARB, ACID_BICARB_DEPRESSURIZE_TUBING_SPEED_MLPM ); requestConcentratePumpOn( CONCENTRATEPUMPS_CP1_ACID ); requestConcentratePumpOn( CONCENTRATEPUMPS_CP2_BICARB ); // RO pump - setROPumpTargetFlowRateLPM( RSRVR_ACTIVE_COOL_DRAIN_TARGET_FLOW_LPM, RSRVR_ACTIVE_COOL_MAX_ALLOWED_PRESSURE_PSI ); + signalROPumpHardStop(); // Drain pump - setDrainPumpTargetRPM( RSRVR_DRAIN_TARGET_RPM ); + signalDrainPumpHardStop(); break; case DG_HEAT_DISINFECT_ACTIVE_COOL_STATE_START: 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: // De-energize the actuators in the state upon transitioning to these states deenergizeActuators( NO_PARK_CONC_PUMPS ); break; @@ -1354,7 +1382,6 @@ } else if ( DG_HEAT_DISINFECT_ACTIVE_COOL_DRAIN_R2_STATE == state ) { - deenergizeActuators( NO_PARK_CONC_PUMPS ); state = DG_HEAT_DISINFECT_ACTIVE_COOL_STATE_COMPLETE; }