Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -r53af4ddc318cc5299f15e3cc1ce506b166e6e156 -r9dd9502d10f57408dd50fd43275b29b89a8a66c9 --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 53af4ddc318cc5299f15e3cc1ce506b166e6e156) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 9dd9502d10f57408dd50fd43275b29b89a8a66c9) @@ -737,7 +737,7 @@ F32 inletTemperature = temperatureValues [ TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR ].data; if ( inletTemperature < MIN_WATER_INPUT_TEMPERATURE || inletTemperature >= MAX_WATER_INPUT_TEMPERATURE ) { - SET_ALARM_WITH_1_U32_DATA ( ALARM_ID_INLET_WATER_TEMPERATURE_OUT_OF_RANGE, inletTemperature ); + //SET_ALARM_WITH_1_U32_DATA ( ALARM_ID_INLET_WATER_TEMPERATURE_OUT_OF_RANGE, inletTemperature ); } } // Check if time has elapsed to calculate the internal temperature of the heaters Index: firmware/App/Controllers/UVReactors.c =================================================================== diff -u -r1e044a958c655d09fed725cfbc9808319b642d13 -r9dd9502d10f57408dd50fd43275b29b89a8a66c9 --- firmware/App/Controllers/UVReactors.c (.../UVReactors.c) (revision 1e044a958c655d09fed725cfbc9808319b642d13) +++ firmware/App/Controllers/UVReactors.c (.../UVReactors.c) (revision 9dd9502d10f57408dd50fd43275b29b89a8a66c9) @@ -5,11 +5,16 @@ * Author: fw */ - +#include "gio.h" #include "UVReactors.h" #include "Common.h" +#define ENABLE_UV_REACTOR 1 +#define DISABLE_UV_REACTOR 0 +#define UV_1_GIO_PORT_PIN 0 +#define UV_2_GIO_PORT_PIN 1 + SELF_TEST_STATUS_T execUVReactorsSelfTest( void ) { @@ -23,22 +28,22 @@ BOOL startInletUVReactor() { BOOL status = TRUE; - + //gioSetBit( gioPORTA, UV_1_GIO_PORT_PIN, ENABLE_UV_REACTOR ); return status; } BOOL startOutletUVReactor() { BOOL status = TRUE; - + //gioSetBit( gioPORTA, UV_2_GIO_PORT_PIN, ENABLE_UV_REACTOR ); return status; } void stopInletUVReactor() { - + //gioSetBit( gioPORTA, UV_1_GIO_PORT_PIN, DISABLE_UV_REACTOR ); } void stopOutletUVReactor() { - + //gioSetBit( gioPORTA, UV_2_GIO_PORT_PIN, DISABLE_UV_REACTOR ); } Index: firmware/App/Modes/ModeHeatDisinfect.c =================================================================== diff -u -r518fb519933260477ba20118744399f94ac1a632 -r9dd9502d10f57408dd50fd43275b29b89a8a66c9 --- firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision 518fb519933260477ba20118744399f94ac1a632) +++ firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision 9dd9502d10f57408dd50fd43275b29b89a8a66c9) @@ -35,21 +35,23 @@ // ********** private definitions ********** -#define HEAT_DISINFECT_TARGET_TEMPERATURE 85U ///< Heat disinfection target temperature +// TODO: Change the target temperature to 85 +#define HEAT_DISINFECT_TARGET_TEMPERATURE 30U ///< Heat disinfection target temperature #define MAX_TPO_AND_TDI_SENSORS_DIFFERENCE 1U #define MAX_TEMPERATURE_DEVIATION_FROM_TARGET 4U #define HEAT_DISINFECT_EVAC_RECIRC_PATH_TIME_MS 4000U //TODo do we need this? -#define HEAT_DISINFECT_RECIRC_PATH_TIME_MS 120000U -#define HEAT_DISINFECT_FLUSH_TIME_MINS 3U -#define HEAT_DISINFECT_OVERALL_TIME_MINS 50U +#define HEAT_DISINFECT_RECIRC_PATH_TIME_MS (1*60000) +#define HEAT_DISINFECT_R1_TO_R2_TIME_MS (1*60000) +#define HEAT_DISINFECT_R2_TO_R1_TIME_MS (1*60000) +#define HEAT_DISINFECT_OVERALL_TIME_MS (50*60000) #define DRAIN_PUMP_TARGET_DELTA_PRESSURE 0U #define DRAIN_PUMP_TARGET_RPM 2800U #define RO_PUMP_TARGET_FLOW_RATE_LPM 0.9 -#define FULL_RESERVOIRS_WEIGHT_GRAMS 2000U -#define EMPTY_RESERVOIRS_WEIGHT_GRAMS 0U +#define FULL_RESERVOIRS_WEIGHT_GRAMS 500U +#define EMPTY_RESERVOIRS_WEIGHT_GRAMS 200U // ********** private data ********** @@ -63,7 +65,7 @@ NUM_OF_EVACUTE_STATES } HEAT_DISINFECT_EVACUTE_STATE_T; //TODO do we need this enum? -static HEAT_DISINFECT_EVACUTE_STATE_T heatDisinfectEvacState = EVACUATE_OFF_STATE; +static HEAT_DISINFECT_EVACUTE_STATE_T heatDisinfectEvacState = EVACUATE_OFF_STATE; //TODO we might not need this static DG_HEAT_DISINFECT_STATE_T heatDisinfectionState = DG_HEAT_DISINFECT_STATE_START; ///< Currently active heat disinfect state. static U32 heatDisinfectElapsedTime; static U32 stateTimer; @@ -72,6 +74,7 @@ static void stopActuators( void ); static BOOL isTemperatureInRange( void ); +static BOOL hasHeatDisinfectTimeElapsed( void ); static void execEvacuateFluidPath( void ); // TODO may not be needed (internal state machine) static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectStart( void ); @@ -96,6 +99,7 @@ *************************************************************************/ void initHeatDisinfectMode( void ) { + heatDisinfectElapsedTime = 0; heatDisinfectionState = DG_HEAT_DISINFECT_STATE_START; } @@ -131,7 +135,8 @@ heatDisinfectionState = handleHeatDisinfectStart(); break; - case DG_HEAT_DISINFECT_STATE_EVAC_RECIRC_PATH: + case DG_HEAT_DISINFECT_STATE_EVAC_DIALYSATE_RECIRC_PATH: + heatDisinfectionState = handleHeatDisinfectEvacDialysateRecircPath(); break; case DG_HEAT_DISINFECT_STATE_EVAC_DIALYSATE_RESERVOIR_1: @@ -218,7 +223,7 @@ *************************************************************************/ void stopDGHeatDisinfect( void ) { - heatDisinfectionState = DG_HEAT_DISINFECT_STATE_COMPLETE; + //heatDisinfectionState = DG_HEAT_DISINFECT_STATE_COMPLETE; stopActuators(); requestNewOperationMode( DG_MODE_STAN ); } @@ -227,7 +232,7 @@ static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectStart( void ) { - DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_EVAC_RECIRC_PATH; + DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_EVAC_DIALYSATE_RECIRC_PATH; stopActuators(); @@ -251,7 +256,7 @@ static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectEvacDialysateRecircPath( void ) { - DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_EVAC_RECIRC_PATH; + DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_EVAC_DIALYSATE_RECIRC_PATH; if ( didTimeout( stateTimer, HEAT_DISINFECT_EVAC_RECIRC_PATH_TIME_MS ) ) { @@ -406,14 +411,19 @@ { DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_DISINFECT_RECIRC_PATH; + if ( hasHeatDisinfectTimeElapsed() ) + { + state = DG_HEAT_DISINFECT_STATE_DISINFECT_DRAIN_PATH; + } // If the temperature is out of tolerance, go back to heat water - if ( ! isTemperatureInRange() ) + else if ( ! isTemperatureInRange() ) { state = DG_HEAT_DISINFECT_STATE_HEAT_WATER; } - else if ( didTimeout( stateTimer, HEAT_DISINFECT_EVAC_RECIRC_PATH_TIME_MS ) ) + else if ( didTimeout( stateTimer, HEAT_DISINFECT_RECIRC_PATH_TIME_MS ) ) { heatDisinfectElapsedTime = heatDisinfectElapsedTime + HEAT_DISINFECT_EVAC_RECIRC_PATH_TIME_MS; //TODO Test + // Set the state for reservoir 1 to reservoir 2 setValveState ( VPI, VALVE_STATE_OPEN ); setValveState ( VBF, VALVE_STATE_OPEN ); setValveState ( VSP, VALVE_STATE_CLOSED ); @@ -429,6 +439,7 @@ setDrainPumpTargetDeltaPressure( DRAIN_PUMP_TARGET_DELTA_PRESSURE ); setROPumpTargetFlowRate( RO_PUMP_TARGET_FLOW_RATE_LPM ); + stateTimer = getMSTimerCount(); state = DG_HEAT_DISINFECT_STATE_DISINFECT_RESERVOIR_1_TO_2; } @@ -439,14 +450,76 @@ { DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_DISINFECT_RESERVOIR_1_TO_2; - return state; + if ( hasHeatDisinfectTimeElapsed() ) + { + state = DG_HEAT_DISINFECT_STATE_DISINFECT_DRAIN_PATH; + } + // If the temperature is out of tolerance, go back to heat water + else if ( ! isTemperatureInRange() ) + { + state = DG_HEAT_DISINFECT_STATE_HEAT_WATER; + } + else if ( didTimeout( stateTimer, HEAT_DISINFECT_R1_TO_R2_TIME_MS ) ) + { + heatDisinfectElapsedTime = heatDisinfectElapsedTime + HEAT_DISINFECT_EVAC_RECIRC_PATH_TIME_MS; //TODO Test + // Set the state for reservoir 1 to reservoir 2 + 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_FILL_C_TO_NC ); + 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_R2_C_TO_NC ); + setValveState ( VRF, VALVE_STATE_R1_C_TO_NC ); + setDrainPumpTargetDeltaPressure( DRAIN_PUMP_TARGET_DELTA_PRESSURE ); + setROPumpTargetFlowRate( RO_PUMP_TARGET_FLOW_RATE_LPM ); + stateTimer = getMSTimerCount(); + state = DG_HEAT_DISINFECT_STATE_DISINFECT_RESERVOIR_2_TO_1; + } + + 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; + if ( hasHeatDisinfectTimeElapsed() ) + { + state = DG_HEAT_DISINFECT_STATE_DISINFECT_DRAIN_PATH; + } + // If the temperature is out of tolerance, go back to heat water + else if ( ! isTemperatureInRange() ) + { + state = DG_HEAT_DISINFECT_STATE_HEAT_WATER; + } + else if ( didTimeout( stateTimer, HEAT_DISINFECT_R2_TO_R1_TIME_MS ) ) + { + heatDisinfectElapsedTime = heatDisinfectElapsedTime + HEAT_DISINFECT_EVAC_RECIRC_PATH_TIME_MS; //TODO Test + // Set the state for reservoir 1 to reservoir 2 + 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_FILL_C_TO_NC ); + 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_R2_C_TO_NC ); + setValveState ( VRF, VALVE_STATE_R1_C_TO_NC ); + + setDrainPumpTargetDeltaPressure( DRAIN_PUMP_TARGET_DELTA_PRESSURE ); + setROPumpTargetFlowRate( RO_PUMP_TARGET_FLOW_RATE_LPM ); + + stateTimer = getMSTimerCount(); + state = DG_HEAT_DISINFECT_STATE_DISINFECT_RESERVOIR_2_TO_1; + } + return state; } static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectDrainPath( void ) @@ -525,4 +598,16 @@ return result; } +static BOOL hasHeatDisinfectTimeElapsed( void ) +{ + BOOL result = FALSE; + + if ( heatDisinfectElapsedTime > HEAT_DISINFECT_OVERALL_TIME_MS ) + { + result = TRUE; + } + + return result; +} + /**@}*/ Index: firmware/App/Modes/ModeInitPOST.c =================================================================== diff -u -ra7bf3ca23ea37a61000379facae628a31b3ecc59 -r9dd9502d10f57408dd50fd43275b29b89a8a66c9 --- firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision a7bf3ca23ea37a61000379facae628a31b3ecc59) +++ firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 9dd9502d10f57408dd50fd43275b29b89a8a66c9) @@ -87,7 +87,9 @@ case DG_POST_STATE_START: postState = DG_POST_STATE_FPGA; // FOR TESTING REMOVE - //postState = POST_STATE_TEMPERATURE_SENSORS; + postState = DG_POST_STATE_COMPLETED; + postPassed = TRUE; + // FOR TESTING REMOVE break; case DG_POST_STATE_FPGA: