Index: firmware/App/Modes/ModeGenPermeate.c =================================================================== diff -u -rf8bdb3ff260a42f46e178d08979758789db7c307 -rcecaee70fe37b4622df8d1f10811a1d6721077a4 --- firmware/App/Modes/ModeGenPermeate.c (.../ModeGenPermeate.c) (revision f8bdb3ff260a42f46e178d08979758789db7c307) +++ firmware/App/Modes/ModeGenPermeate.c (.../ModeGenPermeate.c) (revision cecaee70fe37b4622df8d1f10811a1d6721077a4) @@ -15,8 +15,8 @@ * ***************************************************************************/ +#include "BoostPump.h" #include "DDInterface.h" -#include "FpgaRO.h" #include "Level.h" #include "ModeGenPermeate.h" #include "ModeStandby.h" @@ -35,12 +35,14 @@ // ********** private definitions ********** #define GEN_PERMEATE_DATA_PUBLISH_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the gen permeate mode data published. +#define GEN_PERMEATE_TIMEOUT_MS ( 6 * MS_PER_SECOND ) ///< state switch timeout (in ms) // ********** private data ********** static RO_GENP_MODE_STATE_T genPermeateState; ///< Currently active generate permeate water state. static U32 genPermeateDataPublicationTimerCounter; ///< Used to schedule generate permeate data publication to CAN bus. static OVERRIDE_U32_T genPermeateDataPublishInterval; ///< Generate permeate mode data publish interval. +static U32 stateDelayTime; ///< Time stamp to track delay before valve switch. // ********** private function prototypes ********** @@ -134,10 +136,21 @@ // Do nothing break; case RO_GENP_WATER_LOW_STATE: - // set + setValveState(M4_VALV,VALVE_STATE_OPEN); + setValveState(M7_VALV,VALVE_STATE_CLOSED); + setValveState(P6_VALV,VALVE_STATE_CLOSED); + setValveState(P39_VALV,VALVE_STATE_OPEN); + setValveState(P11_VALV, VALVE_STATE_OPEN); + stateDelayTime = getMSTimerCount(); break; case RO_GENP_WATER_FULL_STATE: //set + setValveState(M4_VALV,VALVE_STATE_CLOSED); + setValveState(M7_VALV,VALVE_STATE_CLOSED); + setValveState(P6_VALV,VALVE_STATE_CLOSED); + setValveState(P39_VALV,VALVE_STATE_OPEN); + setValveState(P11_VALV, VALVE_STATE_CLOSED); + stateDelayTime = getMSTimerCount(); break; default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_OP_MODES_INVALID_MODE_STATE, state ) @@ -154,32 +167,101 @@ static RO_GENP_MODE_STATE_T handleGenPStartState( void ) { RO_GENP_MODE_STATE_T state = RO_GENP_STATE_START; + LEVEL_STATE_T level = getLevelStatus(); + U16 ropwm = (U16)getDDPermeateFlowRate(); + + if ( LEVEL_STATE_HIGH == level ) + { + setModeGenPStateTransition(RO_GENP_WATER_FULL_STATE); + state = RO_GENP_WATER_FULL_STATE; + } + + else if ( LEVEL_STATE_MEDIUM == level ) + { + setModeGenPStateTransition(RO_GENP_WATER_LOW_STATE); + state = RO_GENP_WATER_LOW_STATE; + } + + else if (LEVEL_STATE_LOW == level ) + { + setModeGenPStateTransition(RO_GENP_WATER_LOW_STATE); + state = RO_GENP_WATER_LOW_STATE; + } + + else // Illegal level state + { + + } return state; } /*********************************************************************//** * @brief - * The handleGenPStartState handles the initial state of gen permeate. + * The handleGenPWaterLowState handles the initial state of gen permeate. * @details \b Inputs: none * @details \b Outputs: none * @return the current state of gen permeate mode *************************************************************************/ static RO_GENP_MODE_STATE_T handleGenPWaterLowState( void ) { RO_GENP_MODE_STATE_T state = RO_GENP_WATER_LOW_STATE; + LEVEL_STATE_T level = getLevelStatus(); + + if ( ( LEVEL_STATE_HIGH == level ) && ( TRUE == didTimeout( stateDelayTime, GEN_PERMEATE_TIMEOUT_MS ) ) ) + { + setModeGenPStateTransition(RO_GENP_WATER_FULL_STATE); + state = RO_GENP_WATER_FULL_STATE; + } + + else if ( LEVEL_STATE_MEDIUM == level ) + { + + } + + else if (LEVEL_STATE_LOW == level ) + { + + } + + else // Illegal level state + { + + } return state; } /*********************************************************************//** * @brief - * The handleGenPStartState handles the initial state of gen permeate. + * The handleGenPWaterFullState handles the initial state of gen permeate. * @details \b Inputs: none * @details \b Outputs: none * @return the current state of gen permeate mode *************************************************************************/ static RO_GENP_MODE_STATE_T handleGenPWaterFullState( void ) { RO_GENP_MODE_STATE_T state = RO_GENP_WATER_FULL_STATE; + LEVEL_STATE_T level = getLevelStatus(); + + if ( ( LEVEL_STATE_MEDIUM == level ) && ( TRUE == didTimeout( stateDelayTime, GEN_PERMEATE_TIMEOUT_MS ) ) ) + { + setModeGenPStateTransition(RO_GENP_WATER_LOW_STATE); + state = RO_GENP_WATER_LOW_STATE; + } + + else if ( LEVEL_STATE_HIGH == level ) + { + + } + + else if (LEVEL_STATE_LOW == level ) + { + + } + + else // Illegal level state + { + + } return state; } /**