Index: firmware/App/Modes/ModeHeatDisinfect.c =================================================================== diff -u -rcab7c64f095b7ed9061cc537ce48d82eb4464d92 -r1e044a958c655d09fed725cfbc9808319b642d13 --- firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision cab7c64f095b7ed9061cc537ce48d82eb4464d92) +++ firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision 1e044a958c655d09fed725cfbc9808319b642d13) @@ -25,57 +25,42 @@ #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_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_FLUSH_TIME 3U -#define DRAIN_PUMP_TARGET_RPM 600U -#define RO_PUMP_TARGET_PRESSURE 110U -#define TURN_ON TRUE -#define TURN_OFF FALSE +#define DRAIN_PUMP_TARGET_RPM 2800U +#define RO_PUMP_TARGET_PRESSURE 110U // ********** private data ********** -#pragma pack(push, 1) -typedef struct -{ - VALVE_STATE_NAMES_T valvesStates [ NUM_OF_VALVES ]; - U32 ROPumpTargetPressure; - BOOL compositionPump1; - BOOL compositionPump2; - U32 drainPumpTargetRPM; - BOOL inletUVReactor; - BOOL outletUVReactor; - BOOL primaryHeater; - BOOL trimmerHeater; -} ACTUATORS_STATE_T; -#pragma pack(pop) - static DG_HEAT_DISINFECT_STATE_T heatDisinfectionState = DG_HEAT_DISINFECT_STATE_START; ///< Currently active heat disinfect state. -static ACTUATORS_STATE_T actuatorsState; -static BOOL hasTemperatureReachedToTarget; -static U32 heatDisinfectElapsedTime; +static BOOL hasTemperatureReachedToTarget; +static U32 heatDisinfectElapsedTime; // ********** private function prototypes ********** -static BOOL setActuators(); +static void setActuatorsToStop( void ); -static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectStart(); -static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectEvacuateDialysate(); -static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectFlush(); -static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectRecirculationPath(); -static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectReservoir1To2(); -static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectReservoir2To1(); -static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectDrainPath(); -static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectDeprimeReservoirs(); +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 @@ -92,7 +77,8 @@ /*********************************************************************//** * @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 @@ -101,11 +87,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 @@ -124,10 +112,14 @@ heatDisinfectionState = handleHeatDisinfectEvacuateDialysate(); break; - case DG_HEAT_DISINFECT_STATE_FLUSH: - heatDisinfectionState = handleHeatDisinfectFlush(); + 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; @@ -171,145 +163,142 @@ 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() +static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectStart( void ) { DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_START; - actuatorsState.valvesStates [ VRF ] = VALVE_STATE_R1_C_TO_NC; - actuatorsState.valvesStates [ VRI ] = VALVE_STATE_R2_C_TO_NC; - actuatorsState.valvesStates [ VRD ] = VALVE_STATE_R1_C_TO_NC; - actuatorsState.valvesStates [ VRO ] = VALVE_STATE_R2_C_TO_NC; - actuatorsState.valvesStates [ VPO ] = VALVE_STATE_FILL_C_TO_NC; - actuatorsState.valvesStates [ VBF ] = VALVE_STATE_CLOSED; - actuatorsState.valvesStates [ VRC ] = VALVE_STATE_RECIRC_C_TO_NC; - actuatorsState.valvesStates [ VDR ] = VALVE_STATE_RECIRC_C_TO_NC; - actuatorsState.valvesStates [ VPI ] = VALVE_STATE_CLOSED; - actuatorsState.valvesStates [ VSP ] = VALVE_STATE_CLOSED; - actuatorsState.valvesStates [ VR1 ] = 0; - actuatorsState.valvesStates [ VR2 ] = 0; - actuatorsState.valvesStates [ VPD ] = VALVE_STATE_DRAIN_C_TO_NC; - actuatorsState.compositionPump1 = TURN_OFF; - actuatorsState.compositionPump2 = TURN_OFF; - actuatorsState.drainPumpTargetRPM = 0; - actuatorsState.inletUVReactor = TURN_OFF; - actuatorsState.outletUVReactor= TURN_OFF; - actuatorsState.ROPumpTargetPressure = 0; - actuatorsState.primaryHeater = TURN_OFF; - actuatorsState.trimmerHeater = TURN_OFF; + 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 ); - setActuators(); + setROPumpTargetPressure( 0, PUMP_CONTROL_MODE_CLOSED_LOOP ); + setDrainPumpTargetSpeed( 0 ); + stopInletUVReactor(); + stopOutletUVReactor(); + stopPrimaryHeater(); + stopTrimmerHeater(); return state; } -static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectEvacuateDialysate() +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 handleHeatDisinfectFlush() +static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectFillWithWater( void ) { - DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_FLUSH; + DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_FILL_WITH_WATER; return state; } -static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectRecirculationPath() + +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() +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() +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() +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() +static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectDeprimeReservoirs( void ) { DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_DEPRIME_RESERVOIRS; return state; } -BOOL setActuators() +static void setActuatorsToStop( void ) { - BOOL status = TRUE; - U08 i; + 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 ); - for ( i = 0; i < NUM_OF_VALVES; i++ ) - { - status = setValveState ( i, actuatorsState.valvesStates [ i ] ); - } + //TODO composition pumps - status = setROPumpTargetPressure( actuatorsState.ROPumpTargetPressure, PUMP_CONTROL_MODE_CLOSED_LOOP ); - - status = setDrainPumpTargetSpeed( actuatorsState.drainPumpTargetRPM ); - - // TODO composite pumps - - if ( actuatorsState.inletUVReactor ) - { - status = startInletUVReactor (); - } - else - { - stopInletUVReactor (); - } - - if ( actuatorsState.outletUVReactor ) - { - status = startOutletUVReactor (); - } - else - { - stopOutletUVReactor (); - } - - if ( actuatorsState.primaryHeater ) - { - setPrimaryHeaterTargetTemperature ( HEAT_DISINFECTION_TARGET_TEMP ); - status = startPrimaryHeater (); - } - else - { - stopPrimaryHeater (); - } - - if ( actuatorsState.trimmerHeater ) - { - setTrimmerHeaterTargetTemperature ( HEAT_DISINFECTION_TARGET_TEMP ); - status = startTrimmerHeater (); - } - else - { - stopTrimmerHeater(); - } - - return status; + setROPumpTargetPressure( 0, PUMP_CONTROL_MODE_CLOSED_LOOP ); + setDrainPumpTargetSpeed( 0 ); + stopInletUVReactor(); + stopOutletUVReactor(); + stopPrimaryHeater(); + stopTrimmerHeater(); } /**@}*/