Index: firmware/App/Modes/ModeHeatDisinfect.c =================================================================== diff -u -ra7bf3ca23ea37a61000379facae628a31b3ecc59 -rbe5079c95b05c303878763b458dc0854a600317e --- firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision a7bf3ca23ea37a61000379facae628a31b3ecc59) +++ firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision be5079c95b05c303878763b458dc0854a600317e) @@ -15,22 +15,54 @@ * ***************************************************************************/ +#include "Timers.h" #include "ModeHeatDisinfect.h" #include "OperationModes.h" +#include "Valves.h" +#include "Heaters.h" +#include "DrainPump.h" +#include "LoadCell.h" +#include "ROPump.h" +#include "TemperatureSensors.h" +#include "UVReactors.h" +//TODO control composition pumps + /** * @addtogroup DGHeatDisinfectMode * @{ */ // ********** private definitions ********** +#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 DRAIN_PUMP_TARGET_RPM 2800U +#define RO_PUMP_TARGET_PRESSURE 110U + // ********** private data ********** -static DG_HEAT_DISINFECT_STATE_T heatState = DG_HEAT_DISINFECT_STATE_START; ///< Currently active heat disinfect state. +static DG_HEAT_DISINFECT_STATE_T heatDisinfectionState = DG_HEAT_DISINFECT_STATE_START; ///< Currently active heat disinfect state. +static BOOL hasTemperatureReachedToTarget; +static U32 heatDisinfectElapsedTime; // ********** private function prototypes ********** +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 handleHeatDisinfectFillWithWater( void ); +static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectHeatWater( void ); +static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectRecirculationPath( void ); +static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectReservoir1To2( void ); +static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectReservoir2To1( void ); +static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectDrainPath( void ); +static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectDeprimeReservoirs( void ); + /*********************************************************************//** * @brief * The initHeatDisinfectMode function initializes the heat disinfect Mode module. @@ -41,12 +73,13 @@ *************************************************************************/ void initHeatDisinfectMode( void ) { - heatState = DG_HEAT_DISINFECT_STATE_START; + heatDisinfectionState = DG_HEAT_DISINFECT_STATE_START; } /*********************************************************************//** * @brief - * The transitionToHeatDisinfectMode function prepares for transition to heat disinfect mode. + * The transitionToHeatDisinfectMode function prepares for transition + * to heat disinfect mode. * @details * Inputs : none * Outputs : none @@ -55,11 +88,13 @@ void transitionToHeatDisinfectMode( void ) { initHeatDisinfectMode(); + setActuatorsToStop(); } /*********************************************************************//** * @brief - * The execHeatDisinfectMode function executes the heat disinfect Mode state machine. + * The execHeatDisinfectMode function executes the heat disinfect Mode + * state machine. * @details * Inputs : none * Outputs : none @@ -68,18 +103,51 @@ U32 execHeatDisinfectMode( void ) { // execute current heat disinfect state - switch ( heatState ) + switch ( heatDisinfectionState ) { case DG_HEAT_DISINFECT_STATE_START: + heatDisinfectionState = handleHeatDisinfectStart(); break; + case DG_HEAT_DISINFECT_STATE_EVACUATE_DIALYSATE: + heatDisinfectionState = handleHeatDisinfectEvacuateDialysate(); + break; + + case DG_HEAT_DISINFECT_STATE_FILL_WITH_WATER: + heatDisinfectionState = handleHeatDisinfectFillWithWater(); + break; + + case DG_HEAT_DISINFECT_STATE_HEAT_WATER: + heatDisinfectionState = handleHeatDisinfectHeatWater(); + break; + + case DG_HEAT_DISINFECT_STATE_DISINFECT_RECIRC_PATH: + heatDisinfectionState = handleHeatDisinfectRecirculationPath(); + break; + + case DG_HEAT_DISINFECT_STATE_DISINFECT_RESERVOIR_1_TO_2: + heatDisinfectionState = handleHeatDisinfectReservoir1To2(); + break; + + case DG_HEAT_DISINFECT_STATE_DISINFECT_RESERVOIR_2_TO_1: + heatDisinfectionState = handleHeatDisinfectReservoir2To1(); + break; + + case DG_HEAT_DISINFECT_STATE_DISINFECT_DRAIN_PATH: + heatDisinfectionState = handleHeatDisinfectDrainPath(); + break; + + case DG_HEAT_DISINFECT_STATE_DEPRIME_RESERVOIRS: + heatDisinfectionState = handleHeatDisinfectDeprimeReservoirs(); + break; + default: // TODO - s/w fault - heatState = DG_HEAT_DISINFECT_STATE_START; + heatDisinfectionState = DG_HEAT_DISINFECT_STATE_START; break; } - return heatState; + return (U32)heatDisinfectionState; } /*********************************************************************//** @@ -93,7 +161,145 @@ *************************************************************************/ DG_HEAT_DISINFECT_STATE_T getCurrentHeatDisinfectState( void ) { - return heatState; + return heatDisinfectionState; } +/*********************************************************************//** + * @brief + * The startDGHeatDisinfect function starts heat disinfect mode. + * @details + * Inputs : none + * Outputs : none + * @return none + *************************************************************************/ +void startDGHeatDisinfect( void ) +{ + // make sure DG is not in the middle of something and it is in standby + // + transitionToHeatDisinfectMode(); // Call request start heat disinfect +} + +/*********************************************************************//** + * @brief + * The stopDGHeatDisinfect function stops heat disinfect mode. + * @details + * Inputs : heatDisinfectionState + * Outputs : heatDisinfectionState + * @return none + *************************************************************************/ +void stopDGHeatDisinfect( void ) +{ + heatDisinfectionState = DG_HEAT_DISINFECT_STATE_START; // request standby mode + setActuatorsToStop(); // Not needed +} + +// ********** private function definitions ********** + +static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectStart( void ) +{ + DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_START; + + 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 ); + 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 ); + + setROPumpTargetPressure( 0, PUMP_CONTROL_MODE_CLOSED_LOOP ); + setDrainPumpTargetSpeed( 0, PUMP_CONTROL_MODE_OPEN_LOOP ); + stopInletUVReactor(); + stopOutletUVReactor(); + stopPrimaryHeater(); + stopTrimmerHeater(); + + return state; +} +static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectEvacuateDialysate( 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; + + return state; + +} + +static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectHeatWater( void ) +{ + DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_HEAT_WATER; + + return state; + +} + +static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectRecirculationPath( void ) +{ + DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_DISINFECT_RECIRC_PATH; + + 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; + + return state; + + +} +static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectReservoir2To1( void ) +{ + DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_DISINFECT_RESERVOIR_2_TO_1; + + return state; +} +static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectDrainPath( void ) +{ + DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_DISINFECT_DRAIN_PATH; + + return state; +} +static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectDeprimeReservoirs( void ) +{ + DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_DEPRIME_RESERVOIRS; + + return state; +} + +static void setActuatorsToStop( void ) +{ + setValveState ( VRF, VALVE_STATE_R1_C_TO_NC ); + setValveState ( VRI, VALVE_STATE_R2_C_TO_NC ); + setValveState ( VRD, VALVE_STATE_R1_C_TO_NC ); + setValveState ( VRO, VALVE_STATE_R2_C_TO_NC ); + setValveState ( VPO, VALVE_STATE_FILL_C_TO_NC ); + setValveState ( VBF, VALVE_STATE_CLOSED ); + setValveState ( VRC, VALVE_STATE_RECIRC_C_TO_NC ); + setValveState ( VDR, VALVE_STATE_RECIRC_C_TO_NC ); + setValveState ( VPI, VALVE_STATE_CLOSED ); + setValveState ( VSP, VALVE_STATE_CLOSED ); + 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 ); + stopInletUVReactor(); + stopOutletUVReactor(); + stopPrimaryHeater(); + stopTrimmerHeater(); +} + /**@}*/