Index: firmware/App/Modes/ModeHeatDisinfect.c =================================================================== diff -u -rbe5079c95b05c303878763b458dc0854a600317e -r359cf587f2f935ef9f40a16d17c4105efa653c1d --- firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision be5079c95b05c303878763b458dc0854a600317e) +++ firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision 359cf587f2f935ef9f40a16d17c4105efa653c1d) @@ -37,11 +37,13 @@ #define HEAT_DISINFECTION_TARGET_TEMP 85U ///< Heat disinfection target temperature #define HEAT_DISINFECTION_OVERALL_TIME 60U ///< Heat disinfection overall time in minutes -#define HEAT_DISINFECTION_RECIRC_PATH_TIME 5U -#define HEAT_DISINFECTION_FLUSH_TIME 3U +#define HEAT_DISINFECTION_RECIRC_PATH_TIME_MINS 5U +#define HEAT_DISINFECTION_FLUSH_TIME_MINS 3U +#define HEAT_DISINFECTION_OVERALL_TIME_MINS 30U -#define DRAIN_PUMP_TARGET_RPM 2800U -#define RO_PUMP_TARGET_PRESSURE 110U +#define DRAIN_PUMP_TARGET_DELTA_PRESSURE 0U +#define DRAIN_PUMP_TARGET_RPM 2800U +#define RO_PUMP_TARGET_FLOW_RATE_LPM 0.9 // ********** private data ********** @@ -54,7 +56,8 @@ static void setActuatorsToStop( void ); static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectStart( void ); -static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectEvacuateDialysate( void ); +static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectEvacDialysateReservoir1( void ); +static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectEvacDialysateReservoir2( void ); static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectFillWithWater( void ); static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectHeatWater( void ); static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectRecirculationPath( void ); @@ -102,17 +105,20 @@ *************************************************************************/ U32 execHeatDisinfectMode( void ) { - // execute current heat disinfect state switch ( heatDisinfectionState ) { case DG_HEAT_DISINFECT_STATE_START: heatDisinfectionState = handleHeatDisinfectStart(); break; - case DG_HEAT_DISINFECT_STATE_EVACUATE_DIALYSATE: - heatDisinfectionState = handleHeatDisinfectEvacuateDialysate(); + case DG_HEAT_DISINFECT_STATE_EVAC_DIALYSATE_RESERVOIR_1: + heatDisinfectionState = handleHeatDisinfectEvacDialysateReservoir1(); break; + case DG_HEAT_DISINFECT_STATE_EVAC_DIALYSATE_RESERVOIR_2: + heatDisinfectionState = handleHeatDisinfectEvacDialysateReservoir2(); + break; + case DG_HEAT_DISINFECT_STATE_FILL_WITH_WATER: heatDisinfectionState = handleHeatDisinfectFillWithWater(); break; @@ -174,9 +180,10 @@ *************************************************************************/ void startDGHeatDisinfect( void ) { - // make sure DG is not in the middle of something and it is in standby + // NOTE: make sure DG is not in the middle of something and it is in standby // - transitionToHeatDisinfectMode(); // Call request start heat disinfect + initHeatDisinfectMode(); + requestNewOperationMode( DG_MODE_HEAT ); } /*********************************************************************//** @@ -189,16 +196,49 @@ *************************************************************************/ void stopDGHeatDisinfect( void ) { - heatDisinfectionState = DG_HEAT_DISINFECT_STATE_START; // request standby mode - setActuatorsToStop(); // Not needed + //heatDisinfectionState = DG_HEAT_DISINFECT_STATE_START; // request standby mode + setActuatorsToStop(); + requestNewOperationMode( DG_MODE_STAN ); } // ********** private function definitions ********** static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectStart( void ) { - DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_START; + DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_EVAC_DIALYSATE_RESERVOIR_1; + setActuatorsToStop(); + + /*setValveState ( VPI, VALVE_STATE_OPEN ); + setValveState ( VBF, VALVE_STATE_OPEN ); + setValveState ( VSP, VALVE_STATE_CLOSED ); + setValveState ( VPD, VALVE_STATE_OPEN_C_TO_NO ); + setValveState ( VPO, VALVE_STATE_NOFILL_C_TO_NO ); + setValveState ( VDR, VALVE_STATE_DRAIN_C_TO_NO ); + setValveState ( VRC, VALVE_STATE_RECIRC_C_TO_NC ); + setValveState ( VRO, VALVE_STATE_R2_C_TO_NO ); + setValveState ( VRD, VALVE_STATE_R1_C_TO_NC ); + setValveState ( VRI, VALVE_STATE_R2_C_TO_NC ); + setValveState ( VRF, VALVE_STATE_R1_C_TO_NC ); + + setROPumpTargetFlowRate( 0 ); + //setDrainPumpTargetSpeed( DRAIN_PUMP_TARGET_RPM, PUMP_CONTROL_MODE_OPEN_LOOP ); + stopInletUVReactor(); + stopOutletUVReactor(); + stopPrimaryHeater(); + stopTrimmerHeater();*/ + + //TODO FOR TESTING ONLY, REMOVE + state = DG_HEAT_DISINFECT_STATE_DISINFECT_RECIRC_PATH; + //TODO FOR TESTING ONLY, REMOVE + + return state; +} + +static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectEvacDialysateReservoir1( void ) +{ + DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_EVAC_DIALYSATE_RESERVOIR_1; + setValveState ( VPI, VALVE_STATE_OPEN ); setValveState ( VBF, VALVE_STATE_OPEN ); setValveState ( VSP, VALVE_STATE_CLOSED ); @@ -211,22 +251,21 @@ setValveState ( VRI, VALVE_STATE_R1_C_TO_NO ); setValveState ( VRF, VALVE_STATE_R2_C_TO_NO ); - setROPumpTargetPressure( 0, PUMP_CONTROL_MODE_CLOSED_LOOP ); - setDrainPumpTargetSpeed( 0, PUMP_CONTROL_MODE_OPEN_LOOP ); + setROPumpTargetFlowRate( 0 ); + signalDrainPumpHardStop(); stopInletUVReactor(); stopOutletUVReactor(); stopPrimaryHeater(); stopTrimmerHeater(); return state; } -static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectEvacuateDialysate( void ) + +static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectEvacDialysateReservoir2( void ) { - DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_EVACUATE_DIALYSATE; - return state; - } + static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectFillWithWater( void ) { DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_FILL_WITH_WATER; @@ -247,10 +286,33 @@ { DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_DISINFECT_RECIRC_PATH; - return state; + setValveState ( VPI, VALVE_STATE_OPEN ); + setValveState ( VBF, VALVE_STATE_OPEN ); + setValveState ( VSP, VALVE_STATE_CLOSED ); + setValveState ( VPD, VALVE_STATE_OPEN_C_TO_NO ); + setValveState ( VPO, VALVE_STATE_NOFILL_C_TO_NO ); + //setValveState ( VDR, VALVE_STATE_RECIRC_C_TO_NC ); For the actual heat disinfection + setValveState ( VDR, VALVE_STATE_DRAIN_C_TO_NO ); // For sending the fluid to drain for pump testing + setValveState ( VRC, VALVE_STATE_RECIRC_C_TO_NC ); + setValveState ( VRO, VALVE_STATE_R2_C_TO_NO ); + setValveState ( VRD, VALVE_STATE_R1_C_TO_NO ); + setValveState ( VRI, VALVE_STATE_R1_C_TO_NO ); + setValveState ( VRF, VALVE_STATE_R2_C_TO_NO ); + setROPumpTargetFlowRate( 0.7 ); + //setDrainPumpTargetSpeed( 0, PUMP_CONTROL_MODE_CLOSED_LOOP ); + //startInletUVReactor(); + //startOutletUVReactor(); + //startPrimaryHeater(); + //stopTrimmerHeater(); + // For debugging purposes only REMOVE + state = DG_HEAT_DISINFECT_STATE_DISINFECT_RESERVOIR_1_TO_2; + // For debugging purposes only REMOVE + + return state; } + static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectReservoir1To2( void ) { DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_DISINFECT_RESERVOIR_1_TO_2; @@ -293,9 +355,8 @@ setValveState ( VPD, VALVE_STATE_DRAIN_C_TO_NC ); //TODO composition pumps - - setROPumpTargetPressure( 0, PUMP_CONTROL_MODE_CLOSED_LOOP ); - setDrainPumpTargetSpeed( 0, PUMP_CONTROL_MODE_OPEN_LOOP ); + signalROPumpHardStop(); + signalDrainPumpHardStop(); stopInletUVReactor(); stopOutletUVReactor(); stopPrimaryHeater();