Index: firmware/App/Modes/ModeChemicalDisinfect.c =================================================================== diff -u -r3f19c30ddaa6677778f7e74447cfcdbcfe4cd77e -r2bb8d48b499b9124aa983b5d952b5a261f6efed7 --- firmware/App/Modes/ModeChemicalDisinfect.c (.../ModeChemicalDisinfect.c) (revision 3f19c30ddaa6677778f7e74447cfcdbcfe4cd77e) +++ firmware/App/Modes/ModeChemicalDisinfect.c (.../ModeChemicalDisinfect.c) (revision 2bb8d48b499b9124aa983b5d952b5a261f6efed7) @@ -318,7 +318,7 @@ case DG_CHEM_DISINFECT_STATE_DISINFECTANT_FLUSH: chemDisinfectState = handleChemicalDisinfectDisinfectantFlushState(); - break; + break; case DG_CHEM_DISINFECT_STATE_FILL_WITH_DISINFECTANT: chemDisinfectState = handleChemicalDisinfectFillWithDisinfectantState(); @@ -512,7 +512,7 @@ // This is the final drain of chemical disinfect setValveState( VRD2, VALVE_STATE_CLOSED ); setValveState( VPO, VALVE_STATE_NOFILL_C_TO_NO ); - state = DG_CHEM_DISINFECT_STATE_COMPLETE; + state = DG_CHEM_DISINFECT_STATE_COMPLETE; } else { @@ -563,17 +563,17 @@ if ( TRUE == didTimeout( stateTimer, FLUSH_DRAIN_WAIT_TIME_MS ) ) { // haveInletWaterChecksPassed is set in the monitor function - if ( TRUE == haveInletWaterChecksPassed ) + if ( TRUE == haveInletWaterChecksPassed ) { - // set pumps and valves for next state, flush circulation + // set pumps and valves for next state, flush circulation setValveState( VPD, VALVE_STATE_OPEN_C_TO_NC ); setROPumpTargetFlowRateLPM( RO_PUMP_TARGET_FLUSH_FLOW_RATE_LPM, MAX_RO_PUMP_FLUSH_FILL_PRESSURE_PSI ); // Start heating the water while we are flushing setHeaterTargetTemperature( DG_PRIMARY_HEATER, CHEM_DISINFECT_HEATER_CONTROL_TEMPERATURE_C ); startHeater( DG_PRIMARY_HEATER ); // The UV reactors will be on for the entire disinfect cycle turnOnUVReactor( OUTLET_UV_REACTOR ); - + flushCircWaitTime = FLUSH_CICRCULATION_INITIAL_WAIT_TIME_MS; stateTimer = getMSTimerCount(); state = DG_CHEM_DISINFECT_STATE_FLUSH_CIRCULATION; @@ -591,7 +591,7 @@ prevChemDisinfectState = state; state = DG_CHEM_DISINFECT_STATE_CANCEL_BASIC_PATH; } - } + } } return state; @@ -622,41 +622,43 @@ F32 avgTemp = ( TPoTemp + TD2Temp ) / NUM_OF_TEMP_SENSORS_TO_AVG; F32 cd2Conductivity = getConductivityValue( (U32)CONDUCTIVITYSENSORS_CD2_SENSOR ); F32 cpoConductivity = getConductivityValue( (U32)CONDUCTIVITYSENSORS_CPO_SENSOR ); - + // Check if any of the temperature sensors deviate for more than the defined value from the average of all // of the temperature sensors BOOL isTPoOut = FALSE; BOOL isTD2Out = FALSE; BOOL isCD2Out = ( cd2Conductivity > MAX_FLUSH_CIRC_CONDUCTIVITY_US_PER_CM ? TRUE : FALSE ); BOOL isCPoOut = ( cpoConductivity > MAX_FLUSH_CIRC_CONDUCTIVITY_US_PER_CM ? TRUE : FALSE ); + #ifndef _RELEASE_ if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_TEMPERATURE_SENSORS_ALARM ) != SW_CONFIG_ENABLE_VALUE ) #endif { isTPoOut = ( fabs( TPoTemp - avgTemp ) > MAX_FLUSH_CIRC_TEMP_SENSOR_DIFF_C ? TRUE : FALSE ); isTD2Out = ( fabs( TD2Temp - avgTemp ) > MAX_FLUSH_CIRC_TEMP_SENSOR_DIFF_C ? TRUE : FALSE ); } + // Check if any of the temperature sensors are out of tolerance if( ( TRUE == isTPoOut ) || ( TRUE == isTD2Out ) || ( TRUE == isCD2Out ) || ( TRUE == isCPoOut) ) { // Check if we have exceeded the number of trials. If not, try another time - ++stateTrialCounter; + ++stateTrialCounter; if ( stateTrialCounter < MAX_ALLOWED_FLUSH_CIRC_PERIODS ) { stateTimer = getMSTimerCount(); - flushCircWaitTime = FLUSH_CICRCULATION_ADDITIONAL_WAIT_TIME_MS; + flushCircWaitTime = FLUSH_CICRCULATION_ADDITIONAL_WAIT_TIME_MS; } else { // State failed. Cancel chemical disinfect mode // determine which alarm it is, temperature or conductivity, one of them has to take precedence - if ( ( TRUE == isTPoOut ) || ( TRUE == isTD2Out ) ) - { + if ( ( TRUE == isTPoOut ) || ( TRUE == isTD2Out ) ) + { alarmDetectedPendingTrigger = ALARM_ID_DG_TEMP_SENSORS_DIFF_OUT_OF_RANGE; - } - else - { + } + else + { alarmDetectedPendingTrigger = ALARM_ID_INLET_WATER_CONDUCTIVITY_IN_HIGH_RANGE; //TODO: ALARM_ID_DG_NEW_CON; - } + } prevChemDisinfectState = state; state = DG_CHEM_DISINFECT_STATE_CANCEL_BASIC_PATH; } @@ -670,7 +672,7 @@ disinfectantMixRatio = DISINFECTANT_MIX_RATIO_PRIME; primeAcidSteadyStateCounter = 0; - state = DG_CHEM_DISINFECT_STATE_PRIME_DISINFECTANT; + state = DG_CHEM_DISINFECT_STATE_PRIME_DISINFECTANT; stateTimer = getMSTimerCount(); } } @@ -781,9 +783,9 @@ { stateTimer = getMSTimerCount(); flushDisinfectantWaitTime = FLUSH_DISINFECTANT_ADDITIONAL_WAIT_TIME; - } - else - { + } + else + { if ( ( TRUE == isTPoOutofRange ) ) { alarmDetectedPendingTrigger = ALARM_ID_DG_CHEM_DISINFECT_TARGET_TEMP_TIMEOUT; @@ -793,10 +795,10 @@ alarmDetectedPendingTrigger = ALARM_ID_INLET_WATER_CONDUCTIVITY_IN_HIGH_RANGE; //TODO: ALARM_ID_DG_NEW_CON } state = DG_CHEM_DISINFECT_STATE_CANCEL_WATER_PATH; - } + } } else - { + { // Prepare for filling the reservoirs; fill reservoir 1 and overflow it into reservoir 2 setValveState( VPO, VALVE_STATE_FILL_C_TO_NC ); setValveState( VRI, VALVE_STATE_R2_C_TO_NC ); @@ -931,7 +933,7 @@ setValveState( VRD2, VALVE_STATE_CLOSED ); rsrvr2Status = DG_RESERVOIR_BELOW_TARGET; - stateTimer = getMSTimerCount(); + stateTimer = getMSTimerCount(); state = DG_CHEM_DISINFECT_STATE_PARTIAL_DRAIN_R1_FILL_R2_TO_R1; } else @@ -1057,8 +1059,8 @@ chemDisinfectUIState = CHEM_DISINFECT_UI_STATE_FLUSH_AFTER_DISINFECT; writeDisinfectDataToNV(); - stateTimer = getMSTimerCount(); - state = DG_CHEM_DISINFECT_STATE_DRAIN_R1; + stateTimer = getMSTimerCount(); + state = DG_CHEM_DISINFECT_STATE_DRAIN_R1; } else { @@ -1676,18 +1678,13 @@ if ( hasInletTemperatureFailed || hasConductivityFailed || hasInletPressureFailed ) { // Inlet check failed, haveInletWaterChecksPassed= FALSE; // set flag for flush drain state - // increment timer/counter and check for timeout + + // increment timer/counter and check for timeout if ( ++inletWaterChecksFailCounter >= INLET_WATER_CHECK_FAILURE_TASK_INT ) { // alarm unless in the start, drain, or flush drain states switch( chemDisinfectState ) { - case DG_CHEM_DISINFECT_STATE_START: - case DG_CHEM_DISINFECT_STATE_DRAIN_R1: - case DG_CHEM_DISINFECT_STATE_DRAIN_R2: - case DG_CHEM_DISINFECT_STATE_FLUSH_DRAIN: - break; - case DG_CHEM_DISINFECT_STATE_FLUSH_CIRCULATION: case DG_CHEM_DISINFECT_STATE_PRIME_DISINFECTANT: case DG_CHEM_DISINFECT_STATE_DISINFECTANT_FLUSH: @@ -1704,8 +1701,12 @@ prevChemDisinfectState = chemDisinfectState; alarmDetectedPendingTrigger = ALARM_ID_INLET_WATER_TEMPERATURE_IN_LOW_RANGE; //ALARM_ID_NEW_WAT; chemDisinfectState = DG_CHEM_DISINFECT_STATE_CANCEL_WATER_PATH; - break; - } + break; + + default: + // In all other states, it is not necessary to monitor inlet water conditions + break; + } } } else