Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -rd51921b4d923754ab63db79923d28c09c27af5aa -rff676a9640e5dfe162de78d2b24f356f63bad5bb --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision d51921b4d923754ab63db79923d28c09c27af5aa) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision ff676a9640e5dfe162de78d2b24f356f63bad5bb) @@ -72,6 +72,8 @@ // ********** private function prototypes ********** +static BOOL areInletWaterConditionsAlarmsActive( void ); + static DG_STANDBY_MODE_STATE_T handleStandbyIdleState( void ); static DG_STANDBY_MODE_STATE_T handleStandbyFlushFilterState( void ); static DG_STANDBY_MODE_STATE_T handleStandbyFlushFilterIdleState( void ); @@ -144,9 +146,13 @@ *************************************************************************/ U32 execStandbyMode( void ) { - checkInletWaterPressure(); - checkInletWaterTemperature(); - checkInletWaterConductivity(); + if ( TRUE == areInletWaterConditionsAlarmsActive() ) + { + setValveState( VSP, VALVE_STATE_CLOSED ); + setValveState( VPI, VALVE_STATE_CLOSED ); + stopSampleWaterRequest = FALSE; + standbyState = DG_STANDBY_MODE_STATE_IDLE; + } // execute current Standby state switch ( standbyState ) @@ -178,6 +184,42 @@ /*********************************************************************//** * @brief + * The areInletWaterConditionsAlarmsActive function checks whether the inlet + * water conditions are out of range and any of their alarms are active. + * @details Inputs: none + * @details Outputs: None + * @return TRUE if any of the alarms are active, otherwise, FALSE + *************************************************************************/ +static BOOL areInletWaterConditionsAlarmsActive( void ) +{ + // Check inlet water conductivity, temperature, pressure, and RO rejection ratio + BOOL status = FALSE; + + if ( VALVE_STATE_OPEN == getValveStateName( VPI ) ) + { + checkInletWaterConductivity(); + checkInletWaterTemperature(); + checkInletWaterPressure(); + + // Check if any of the alarms are active + if ( ( TRUE == isAlarmActive( ALARM_ID_INLET_WATER_CONDUCTIVITY_IN_LOW_RANGE ) ) || + ( TRUE == isAlarmActive( ALARM_ID_INLET_WATER_CONDUCTIVITY_IN_HIGH_RANGE ) ) || + ( TRUE == isAlarmActive( ALARM_ID_INLET_WATER_TEMPERATURE_IN_HIGH_RANGE ) ) || + ( TRUE == isAlarmActive( ALARM_ID_INLET_WATER_TEMPERATURE_IN_LOW_RANGE ) ) || + ( TRUE == isAlarmActive( ALARM_ID_DG_OUTLET_PRIMARY_CONDUCTIVITY_OUT_OF_RANGE ) ) || + ( TRUE == isAlarmActive( ALARM_ID_RO_REJECTION_RATIO_OUT_OF_RANGE ) ) || + ( TRUE == isAlarmActive( ALARM_ID_INLET_WATER_PRESSURE_IN_HIGH_RANGE ) ) || + ( TRUE == isAlarmActive( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE ) ) ) + { + status = TRUE; + } + } + + return status; +} + +/*********************************************************************//** + * @brief * The handleStandbyIdleState function executes the idle state of the * standby mode state machine. * @details Inputs: pendingSampleWaterRequest, pendingStartDGRequest,