Index: firmware/App/Modes/ModeChemicalDisinfect.c =================================================================== diff -u -r025612ad77fe630889a364586de54bffe5262d56 -r0d7e62643b00531547654fad55f06c45dd3f0a8d --- firmware/App/Modes/ModeChemicalDisinfect.c (.../ModeChemicalDisinfect.c) (revision 025612ad77fe630889a364586de54bffe5262d56) +++ firmware/App/Modes/ModeChemicalDisinfect.c (.../ModeChemicalDisinfect.c) (revision 0d7e62643b00531547654fad55f06c45dd3f0a8d) @@ -146,7 +146,8 @@ static U32 rsrvrFillStableTimeCounter = 0; ///< Reservoirs fill stable time counter. static ALARM_ID_T alarmDetectedPendingTrigger; ///< Chemical disinfect alarm to raise. static U32 numberOfPostDisinfectRinses = NUM_OF_POST_DISINFECT_RINSES; ///< Number of times to rinse the fluid path after chemical disinfect. -static U32 primeAcidSteadyStateCounter = 0; +static U32 primeAcidSteadyStateCounter = 0; ///< Prime acid steady state counter. +static BOOL haveDrainParamsBeenInit; ///< Boolean flag to indicate whether the drain parameters have been reset or not. // ********** private function prototypes ********** @@ -192,7 +193,7 @@ * R1ChemDisinfectVol, R2ChemDisinfectVol, overallChemDisinfectTimer, * cancellationMode, rsrvrFillStableTimeCounter, prevChemDisinfectState * isPartialDisinfectInProgress, numberOfPostDisinfectRinses, - * primeAcidSteadyStateCounter, chemDisinfectUIState + * primeAcidSteadyStateCounter, chemDisinfectUIState, haveDrainParamsBeenInit * @return none *************************************************************************/ void initChemicalDisinfectMode( void ) @@ -214,6 +215,7 @@ numberOfPostDisinfectRinses = NUM_OF_POST_DISINFECT_RINSES; primeAcidSteadyStateCounter = 0; chemDisinfectUIState = CHEM_DISINFECT_UI_STATE_NOT_RUNNING; + haveDrainParamsBeenInit = FALSE; } /*********************************************************************//** @@ -421,9 +423,6 @@ // Set all the actuators to reset and de-energized state deenergizeActuators(); - // Reset the load cells lowest weight prior to starting the run - resetReservoirsLowestWeight(); - F32 ppiPressure = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_INLET ); F32 THdTemp = getTemperatureValue( TEMPSENSORS_HEAT_DISINFECT ); F32 TPoTemp = getTemperatureValue( TEMPSENSORS_OUTLET_PRIMARY_HEATER ); @@ -441,7 +440,7 @@ setValveState( VPI, VALVE_STATE_CLOSED ); // Request a tare for reservoir 1 - tareReservoir(); + //tareReservoir(); // TODO update the drain here // Set the actuators to drain R1 setValveState( VRD1, VALVE_STATE_OPEN ); @@ -513,7 +512,7 @@ rsrvr2Status = DG_RESERVOIR_ABOVE_TARGET; // Request a tare for reservoir 2 - tareReservoir(); + //tareReservoir(); // TODO update the reservoir drain // Done with draining R1 setValveState( VRD1, VALVE_STATE_CLOSED ); @@ -985,7 +984,7 @@ { primeAcidSteadyStateCounter = 0; } - else if ( cd2Conductivity > MIN_ACID_CONDUCTIVITY_US_PER_CM ) + else { // Check if the acid conductivity value has been if ( ++primeAcidSteadyStateCounter >= PRIME_ACID_STEADY_CONDUCTIVITY_TIME_MS ) @@ -1720,9 +1719,7 @@ /*********************************************************************//** * @brief * The handleChemicalDisinfectCancelModeWaterPathState function handles the - * chemical disinfect cancel mode cold water path state. The state resets all - * the actuators. - * TODO fill up as the state goes + * chemical disinfect cancel mode cold water path state. * @details Inputs: rsrvr1Status, rsrvr2Status, cancellationMode, stateTimer * @details Outputs: rsrvr1Status, rsrvr2Status, cancellationMode, stateTimer, * chemDisinfectUIState @@ -1896,21 +1893,29 @@ static DG_RESERVOIR_STATUS_T getRsrvrDrainStatus( DG_RESERVOIR_ID_T r, U32 drainSteadyStateTimeout, U32 timeout ) { DG_RESERVOIR_STATUS_T status = DG_RESERVOIR_ABOVE_TARGET; + BOOL isDrainComplete = hasTargetDrainVolumeBeenReached( r, drainSteadyStateTimeout ); - BOOL isDrainComplete = hasTargetDrainVolumeBeenReached( r, drainSteadyStateTimeout ); + // If the drain parameters of the reservoir is not initialized, initialize them + if ( FALSE == haveDrainParamsBeenInit ) + { + initDrainParameters( r ); + haveDrainParamsBeenInit = TRUE; + } if ( TRUE == isDrainComplete ) { // Set the state timer in case it needs to be used for another timeout check - stateTimer = getMSTimerCount(); - status = DG_RESERVOIR_REACHED_TARGET; + stateTimer = getMSTimerCount(); + haveDrainParamsBeenInit = FALSE; + status = DG_RESERVOIR_REACHED_TARGET; } else if ( TRUE == didTimeout( stateTimer, timeout ) ) { // Failed to drain on time. Update the previous chemical disinfect state and transition to basic cancellation - prevChemDisinfectState = chemDisinfectState; + prevChemDisinfectState = chemDisinfectState; + haveDrainParamsBeenInit = FALSE; alarmDetectedPendingTrigger = ALARM_ID_DG_RESERVOIR_DRAIN_TIMEOUT; - status = DG_RESERVOIR_NOT_REACHED_TARGET; + status = DG_RESERVOIR_NOT_REACHED_TARGET; } return status; @@ -1931,7 +1936,8 @@ { CHEM_DISINFECT_STATUS_T status = CHEM_DISINFECT_IN_PROGRESS; - F32 ThdTemp = getTemperatureValue( TEMPSENSORS_HEAT_DISINFECT ); + // Update the variables + F32 ThdTemp = getTemperatureValue( TEMPSENSORS_HEAT_DISINFECT ); BOOL isR1OutOfRange = fabs( getLoadCellSmallFilteredWeight( LOAD_CELL_RESERVOIR_1_PRIMARY ) - R1ChemDisinfectVol ) > RSRVRS_MAX_TARGET_VOL_CHANGE_ML; BOOL isR2OutOfRange = fabs( getLoadCellSmallFilteredWeight( LOAD_CELL_RESERVOIR_2_PRIMARY ) - R2ChemDisinfectVol ) > RSRVRS_MAX_TARGET_VOL_CHANGE_ML;