Index: firmware/App/Modes/ModeHeatDisinfect.c =================================================================== diff -u -r2fc107b64a3bd166ccfb2bf0945a97ebfc9bfb1f -r135b257c835e406f036dfbdec1d8cd9c51e1c526 --- firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision 2fc107b64a3bd166ccfb2bf0945a97ebfc9bfb1f) +++ firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision 135b257c835e406f036dfbdec1d8cd9c51e1c526) @@ -8,7 +8,7 @@ * @file ModeHeatDisinfect.c * * @author (last) Dara Navaei -* @date (last) 03-Feb-2023 +* @date (last) 27-Feb-2023 * * @author (original) Sean * @date (original) 20-Apr-2020 @@ -114,6 +114,7 @@ #define NELSON_SUPPORT_TARGET_TEMP_C 6.0F // Nelson support heat disinfect target temperature in C. #define NELSON_SUPPORT_STOP_TEMP_C ( NELSON_SUPPORT_TARGET_TEMP_C - 5.0F ) // Nelson support heat disinfect stop temperature in C. #define NELSON_SUPPORT_DISINFECT_TIME_MS ( 2 * MIN_PER_HOUR * SEC_PER_MIN * MS_PER_SECOND ) // Nelson support heat disinfect time in milliseconds. +#define NELSON_SUPPORT_INOCULATE_TIME_MS ( 30 * SEC_PER_MIN * MS_PER_SECOND ) // Nelson support inoculate time in milliseconds. #endif /// Cancellation paths @@ -258,14 +259,14 @@ heatDisinfectState = DG_HEAT_DISINFECT_STATE_START; prevHeatDisinfectState = DG_HEAT_DISINFECT_STATE_START; heatDisinfectUIState = HEAT_DISINFECT_UI_STATE_NOT_RUNNING; - stateTimer = 0; + stateTimer = getMSTimerCount(); stateTrialCounter = 0; areTempSensorsInRange = FALSE; rsrvr1Status = NUM_OF_DG_RESERVOIR_STATUS; rsrvr2Status = NUM_OF_DG_RESERVOIR_STATUS; rsrvr1RefVolML = 0.0F; rsrvr2RefVolML = 0.0F; - overallHeatDisinfectTimer = 0; + overallHeatDisinfectTimer = getMSTimerCount(); cancellationMode = CANCELLATION_MODE_NONE; rsrvrFillStableTimeCounter = 0; isDrainPumpInMixDrainOn = FALSE; @@ -1049,6 +1050,8 @@ setValveState( VPD, VALVE_STATE_DRAIN_C_TO_NO ); setValveState( VDR, VALVE_STATE_RECIRC_C_TO_NC ); setValveState( VRC, VALVE_STATE_RECIRC_C_TO_NC ); + setValveState( VRD1, VALVE_STATE_CLOSED ); + setValveState( VRD2, VALVE_STATE_OPEN ); signalROPumpHardStop(); // Set the drain pump to control mode setDrainPumpTargetOutletFlowLPM( HEAT_DISINFECT_TARGET_RO_FLOW_LPM ); @@ -1249,22 +1252,31 @@ break; case HEAT_DISINFECT_COMPLETE: - if ( TRUE == isRODisinfectDone ) { - requestConcentratePumpOff( CONCENTRATEPUMPS_CP1_ACID, NO_PARK_CONC_PUMPS ); - requestConcentratePumpOff( CONCENTRATEPUMPS_CP2_BICARB, NO_PARK_CONC_PUMPS ); - stopHeater( DG_PRIMARY_HEATER ); - stopHeater( DG_TRIMMER_HEATER ); +#ifndef _RELEASE_ + if ( ( NELSON_HEAT_DISINFECT == nelsonSupport ) || ( NELSON_POS_CONTROL_HEAT_DISINFECT == nelsonSupport ) ) + { + deenergizeActuators( NO_PARK_CONC_PUMPS ); + state = DG_HEAT_DISINFECT_STATE_COMPLETE; + } + else +#endif + { + requestConcentratePumpOff( CONCENTRATEPUMPS_CP1_ACID, NO_PARK_CONC_PUMPS ); + requestConcentratePumpOff( CONCENTRATEPUMPS_CP2_BICARB, NO_PARK_CONC_PUMPS ); + stopHeater( DG_PRIMARY_HEATER ); + stopHeater( DG_TRIMMER_HEATER ); - timeStatus[ RSRVR_AT_77_C ].startTimeMS = 0; - timeStatus[ RSRVR_AT_82_C ].startTimeMS = 0; - timeStatus[ RO_AT_77_C ].startTimeMS = 0; - timeStatus[ RO_AT_82_C ].startTimeMS = 0; - rsrvr1RefVolML = 0.0F; - rsrvr2RefVolML = 0.0F; - stateTimer = getMSTimerCount(); - state = DG_HEAT_DISINFECT_STATE_COOL_DOWN_HEATERS; + timeStatus[ RSRVR_AT_77_C ].startTimeMS = 0; + timeStatus[ RSRVR_AT_82_C ].startTimeMS = 0; + timeStatus[ RO_AT_77_C ].startTimeMS = 0; + timeStatus[ RO_AT_82_C ].startTimeMS = 0; + rsrvr1RefVolML = 0.0F; + rsrvr2RefVolML = 0.0F; + stateTimer = getMSTimerCount(); + state = DG_HEAT_DISINFECT_STATE_COOL_DOWN_HEATERS; + } } #ifndef _RELEASE_ if ( NELSON_INOCULATE == nelsonSupport ) @@ -1286,11 +1298,6 @@ rsrvr2RefVolML = 0.0F; state = DG_NELSON_HEAT_DISINFECT_STATE_FILL_R1_WITH_WATER; } - else if ( ( NELSON_HEAT_DISINFECT == nelsonSupport ) || ( NELSON_POS_CONTROL_HEAT_DISINFECT == nelsonSupport ) ) - { - deenergizeActuators( PARK_CONC_PUMPS ); - state = DG_HEAT_DISINFECT_STATE_COMPLETE; - } #endif break; @@ -1627,7 +1634,7 @@ static DG_RESERVOIR_STATUS_T getRsrvrFillStatus( DG_RESERVOIR_ID_T reservoir, F32 targetVol, U32 timeout ) { DG_RESERVOIR_STATUS_T status = DG_RESERVOIR_BELOW_TARGET; - F32 volume = 0.0; + F32 volume = 0.0F; if ( DG_RESERVOIR_1 == reservoir ) { @@ -1745,10 +1752,9 @@ * * @details Inputs: tempGradOutOfRangeTimer, areRsrvrsLeaking, * isPartialDisinfectInProgress, heatDisinfectTimer, - * targetDisinfectTime * @details Outputs: tempGradOutOfRangeTimer, alarmDetectedPendingTrigger, * areRsrvrsLeaking, isPartialDisinfectInProgress, - * heatDisinfectTimer, targetDisinfectTime + * heatDisinfectTimer * @return status of the heat disinfect (i.e in progress, complete) *************************************************************************/ static HEAT_DISINFECT_STATUS_T getHeatDisinfectStatus( void ) @@ -1821,7 +1827,7 @@ if ( ALARM_ID_NO_ALARM == alarmDetectedPendingTrigger ) { #ifndef _RELEASE_ - if ( nelsonSupport != NELSON_INOCULATE ) + if ( ( nelsonSupport != NELSON_INOCULATE ) && ( nelsonSupport != NELSON_POS_CONTROL_HEAT_DISINFECT ) ) #endif { if ( TDiTempC >= HEAT_DISINFECT_TRIMMER_HEATER_STOP_TEMP_C ) @@ -2009,42 +2015,43 @@ * The setNelsonSupportConditions function sets the disinfect variables for * Nelson support. * @details Inputs: nelsonSupport - * @details Outputs: timeStatus, heatDisinfectState + * @details Outputs: timeStatus, heatDisinfectState, concPumpsStartTemperatureC * @return: none *************************************************************************/ static void setNelsonSupportConditions( void ) { - concPumpsStartTemperatureC = NELSON_SUPPORT_TARGET_TEMP_C; - switch ( nelsonSupport ) { case NELSON_INOCULATE: + concPumpsStartTemperatureC = NELSON_SUPPORT_TARGET_TEMP_C; timeStatus[ RO_AT_77_C ].startTempC = NELSON_SUPPORT_TARGET_TEMP_C; timeStatus[ RO_AT_77_C ].startTimeMS = 0; timeStatus[ RO_AT_77_C ].stopTempC = NELSON_SUPPORT_STOP_TEMP_C; - timeStatus[ RO_AT_77_C ].targetTimeMS = HEAT_DISINFECT_AT_77_C_TIME_MS; + timeStatus[ RO_AT_77_C ].targetTimeMS = NELSON_SUPPORT_INOCULATE_TIME_MS; timeStatus[ RO_AT_77_C ].tempSensor = TEMPSENSORS_HEAT_DISINFECT; timeStatus[ RO_AT_82_C ].startTempC = NELSON_SUPPORT_TARGET_TEMP_C; timeStatus[ RO_AT_82_C ].startTimeMS = 0; timeStatus[ RO_AT_82_C ].stopTempC = NELSON_SUPPORT_STOP_TEMP_C; - timeStatus[ RO_AT_82_C ].targetTimeMS = HEAT_DISINFECT_AT_82_C_TIME_MS; + timeStatus[ RO_AT_82_C ].targetTimeMS = NELSON_SUPPORT_INOCULATE_TIME_MS; timeStatus[ RO_AT_82_C ].tempSensor = TEMPSENSORS_HEAT_DISINFECT; timeStatus[ RSRVR_AT_77_C ].startTempC = NELSON_SUPPORT_TARGET_TEMP_C; timeStatus[ RSRVR_AT_77_C ].startTimeMS = 0; timeStatus[ RSRVR_AT_77_C ].stopTempC = NELSON_SUPPORT_STOP_TEMP_C; - timeStatus[ RSRVR_AT_77_C ].targetTimeMS = NELSON_SUPPORT_DISINFECT_TIME_MS; + // Set 82 C time to be the shorter time since the entire inoculation time should be 30 mins but the 77 C is 32 minutes + timeStatus[ RSRVR_AT_77_C ].targetTimeMS = HEAT_DISINFECT_AT_82_C_TIME_MS; timeStatus[ RSRVR_AT_77_C ].tempSensor = TEMPSENSORS_INLET_DIALYSATE; timeStatus[ RSRVR_AT_82_C ].startTempC = NELSON_SUPPORT_TARGET_TEMP_C; timeStatus[ RSRVR_AT_82_C ].startTimeMS = 0; timeStatus[ RSRVR_AT_82_C ].stopTempC = NELSON_SUPPORT_STOP_TEMP_C; - timeStatus[ RSRVR_AT_82_C ].targetTimeMS = NELSON_SUPPORT_DISINFECT_TIME_MS; + timeStatus[ RSRVR_AT_82_C ].targetTimeMS = HEAT_DISINFECT_AT_82_C_TIME_MS; timeStatus[ RSRVR_AT_82_C ].tempSensor = TEMPSENSORS_INLET_DIALYSATE; break; case NELSON_POS_CONTROL_HEAT_DISINFECT: + concPumpsStartTemperatureC = NELSON_SUPPORT_TARGET_TEMP_C; timeStatus[ RO_AT_77_C ].startTempC = NELSON_SUPPORT_TARGET_TEMP_C; timeStatus[ RO_AT_77_C ].startTimeMS = 0; timeStatus[ RO_AT_77_C ].stopTempC = NELSON_SUPPORT_STOP_TEMP_C; @@ -2140,7 +2147,7 @@ if ( DG_RESERVOIR_REACHED_TARGET == rsrvr1Status ) { - deenergizeActuators( PARK_CONC_PUMPS ); + deenergizeActuators( NO_PARK_CONC_PUMPS ); state = DG_HEAT_DISINFECT_STATE_COMPLETE; } else if ( DG_RESERVOIR_NOT_REACHED_TARGET == rsrvr1Status )