Index: firmware/App/Modes/FPModes/FlushFilter.c =================================================================== diff -u -r4ab24710d331b6ea41ea58a4e9057ffb95724712 -r38c8d303358e16782f9d6a1828ee1cc55a4e9a24 --- firmware/App/Modes/FPModes/FlushFilter.c (.../FlushFilter.c) (revision 4ab24710d331b6ea41ea58a4e9057ffb95724712) +++ firmware/App/Modes/FPModes/FlushFilter.c (.../FlushFilter.c) (revision 38c8d303358e16782f9d6a1828ee1cc55a4e9a24) @@ -15,6 +15,7 @@ * ***************************************************************************/ +#include "BoostPump.h" #include "FlushFilter.h" #include "FPOperationModes.h" #include "MessageSupport.h" Index: firmware/App/Modes/FPModes/ModeGenPermeate.c =================================================================== diff -u -r0718166cde46a427c8b063d93faa6d3f8e2aff1f -r38c8d303358e16782f9d6a1828ee1cc55a4e9a24 --- firmware/App/Modes/FPModes/ModeGenPermeate.c (.../ModeGenPermeate.c) (revision 0718166cde46a427c8b063d93faa6d3f8e2aff1f) +++ firmware/App/Modes/FPModes/ModeGenPermeate.c (.../ModeGenPermeate.c) (revision 38c8d303358e16782f9d6a1828ee1cc55a4e9a24) @@ -46,8 +46,6 @@ #define PUMP_REST_TIMEOUT_MS ( 3 * MS_PER_SECOND ) ///< Duraion for open loop control at the start of tank fill/full state ( in ms ) #define RO_REJECTION_WAIT_TIME_MS ( 8 * MS_PER_SECOND ) ///< RO rejection alarm wait time. 5 seconds for RR to stabilize and 3 seconds for calculating rolling average ( in ms ) #define MIN_SAMPLES_NEEDED_FOR_DUTY_CYCLE_AVG 10 ///< Minimum number for samples needed for calculating the average duty cycle -#define PERMEATE_FLOW_OUT_RANGE_PERSISTENCE_TIME_MS ( 1 * MS_PER_SECOND ) ///< Verify Water timer ( in ms ) -#define PERMEATE_FLOW_TOLERANCE 1.25 ///< Permeate flow high tolerance limit #define PERMEATE_FLOW_FAULT_MIN_THRESHOLD 200.0F ///< Permeate flow low tolerance limit #define PERMEATE_FLOW_OUT_OF_RANGE_TIMEOUT_MS ( 12 * MS_PER_SECOND ) ///< Permeate flow low tolerance out of range timeout @@ -139,7 +137,6 @@ U32 execGenPermeateMode( void ) { FP_GENP_MODE_STATE_T prevState = genPermeateState; - F32 permeateFlow = 0.0F; // execute current gen Permeate state switch ( genPermeateState ) @@ -168,27 +165,8 @@ SEND_EVENT_WITH_2_U32_DATA( FP_EVENT_GENP_CHANGE, genPermeateState, prevState ) } - permeateFlow = getFilteredFlow( P16_FLOW ); - // check for permeate flow (P16) is not within range - if( permeateFlow >= ( GEN_PERMEATE_RO_PUMP_TGT_ML * PERMEATE_FLOW_TOLERANCE ) ) - { - if ( 0 == permeateFlowPersistanceStartTimeMS ) - { - permeateFlowPersistanceStartTimeMS = getMSTimerCount(); - } - else if ( TRUE == didTimeout( permeateFlowPersistanceStartTimeMS, PERMEATE_FLOW_OUT_RANGE_PERSISTENCE_TIME_MS ) ) - { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_FP_RO_PERMEATE_FLOW_OUT_HIGH_RANGE, PERMEATE_FLOW_OUT_RANGE_PERSISTENCE_TIME_MS, permeateFlow) - } - } - // check for permeate flow (P16) within range and reset the alarm timer - else if ( permeateFlow < ( GEN_PERMEATE_RO_PUMP_TGT_ML * PERMEATE_FLOW_TOLERANCE ) ) - { - permeateFlowPersistanceStartTimeMS = 0; - } + checkPermeateHighFlow(); - checkPermeateFlow(); - //Publish Gen Permeate mode data publishGenPModeData(); @@ -197,6 +175,55 @@ /*********************************************************************//** * @brief + * The requestGenWaterStart function handles an DD request to start (go to gen permeate mode). + * @details \b Inputs: none + * @details \b Outputs: none + * @return TRUE if request accepted, FALSE if not. + *************************************************************************/ +BOOL requestGenWaterStart( void ) +{ + BOOL result = TRUE; + requestNewFPOperationMode( FP_MODE_GENP ); + + return result; +} + +/*********************************************************************//** + * @brief + * The requestGenWaterStop function handles an DD request to stop (go to standby mode). + * @details \b Inputs: none + * @details \b Outputs: none + * @return TRUE if request accepted, FALSE if not. + *************************************************************************/ +BOOL requestGenWaterStop( void ) +{ + BOOL result = TRUE; + signalROPumpHardStop(); + + if ( TRUE == isBoostPumpInstalled() ) + { + signalBoostPumpHardStop(); + } + requestNewFPOperationMode( FP_MODE_STAN ); + + return result; +} + +/*********************************************************************//** + * @brief + * The getCurrentGenPermeateState function returns the current state of the + * gen permeate mode. + * @details \b Inputs: genPermeateState + * @details \b Outputs: genPermeateState + * @return the current state of gen permeate mode + *************************************************************************/ +FP_GENP_MODE_STATE_T getCurrentGenPermeateState( void ) +{ + return genPermeateState; +} + +/*********************************************************************//** + * @brief * The setModeGenPTransition function sets the actuators and variables * for the state transition in generate permeate mode. * @details Inputs: none @@ -352,19 +379,6 @@ /*********************************************************************//** * @brief - * The getCurrentGenPermeateState function returns the current state of the - * gen permeate mode. - * @details \b Inputs: genPermeateState - * @details \b Outputs: genPermeateState - * @return the current state of gen permeate mode - *************************************************************************/ -FP_GENP_MODE_STATE_T getCurrentGenPermeateState( void ) -{ - return genPermeateState; -} - -/*********************************************************************//** - * @brief * The getGenPermeateDataPublishInterval function gets the generate water * mode data publish interval. * @details \b Inputs: genPermeateDataPublishInterval @@ -423,43 +437,7 @@ checkPersistentAlarm( ALARM_ID_FP_PERMEATE_FLOW_OUT_LOW_RANGE, isFlowOutOfRange, permeateFlow, minimumAllowedPermeateFlow); } -/*********************************************************************//** - * @brief - * The requestGenWaterStart function handles an DD request to start (go to gen permeate mode). - * @details \b Inputs: none - * @details \b Outputs: none - * @return TRUE if request accepted, FALSE if not. - *************************************************************************/ -BOOL requestGenWaterStart( void ) -{ - BOOL result = TRUE; - requestNewFPOperationMode( FP_MODE_GENP ); - return result; -} - -/*********************************************************************//** - * @brief - * The requestGenWaterStop function handles an DD request to stop (go to standby mode). - * @details \b Inputs: none - * @details \b Outputs: none - * @return TRUE if request accepted, FALSE if not. - *************************************************************************/ -BOOL requestGenWaterStop( void ) -{ - BOOL result = TRUE; - signalROPumpHardStop(); - - if ( TRUE == isBoostPumpInstalled() ) - { - signalBoostPumpHardStop(); - } - requestNewFPOperationMode( FP_MODE_STAN ); - - return result; -} - - /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ Index: firmware/App/Modes/FPModes/ModePreGenPermeate.c =================================================================== diff -u -rded97a5b204a0b752f1c90fa39dc28639bc129ed -r38c8d303358e16782f9d6a1828ee1cc55a4e9a24 --- firmware/App/Modes/FPModes/ModePreGenPermeate.c (.../ModePreGenPermeate.c) (revision ded97a5b204a0b752f1c90fa39dc28639bc129ed) +++ firmware/App/Modes/FPModes/ModePreGenPermeate.c (.../ModePreGenPermeate.c) (revision 38c8d303358e16782f9d6a1828ee1cc55a4e9a24) @@ -31,6 +31,7 @@ #include "TaskGeneral.h" #include "Timers.h" #include "Valves.h" +#include "WaterQualityMonitor.h" /** * @addtogroup FPPreGenPermeateMode @@ -354,7 +355,7 @@ if( TRUE == isFlowControlStabilized ) { // check permeate high flow rate is within range - checkPermeateFlow(); + checkPermeateHighFlow(); // check low flow rate is within range checkPermeateLowFlowRate(); // check conductivity is within range Index: firmware/App/Monitors/WaterQualityMonitor.c =================================================================== diff -u -recb538c8bf67a7a62d11a1186a9ef5fe53cf9d9e -r38c8d303358e16782f9d6a1828ee1cc55a4e9a24 --- firmware/App/Monitors/WaterQualityMonitor.c (.../WaterQualityMonitor.c) (revision ecb538c8bf67a7a62d11a1186a9ef5fe53cf9d9e) +++ firmware/App/Monitors/WaterQualityMonitor.c (.../WaterQualityMonitor.c) (revision 38c8d303358e16782f9d6a1828ee1cc55a4e9a24) @@ -60,6 +60,9 @@ #define INLET_CONDUCTIVITY_HIGH_THRESHOLD_US 2000.0F ///< Maximum allowed outlet conductivity in uS/cm. #define MIN_RO_REJECTION_RATIO_PCT 90.0F ///< Minimum RO rejection ration in percentage +#define PERMEATE_FLOW_OUT_RANGE_PERSISTENCE_TIMEOUT_MS ( 5 * MS_PER_SECOND ) ///< Verify Water timer ( in ms ) +#define PERMEATE_FLOW_OUT_RANGE_PERSISTENCE_CLEAR_MS 0 ///< Verify Water timer ( in ms ) + // ********** private data ********** // ********** private function prototypes ********** @@ -87,6 +90,9 @@ // Conductivity Alarms initPersistentAlarm( ALARM_ID_FP_INLET_CONDUCTIVITY_OUT_HIGH_RANGE, INLET_WATER_COND_OUT_OF_RANGE_CLEAR_MS, INLET_WATER_COND_OUT_OF_RANGE_TIMEOUT_MS ); initPersistentAlarm( ALARM_ID_FP_RO_OUTLET_CONDUCTIVITY_HIGH_RANGE, INLET_WATER_COND_OUT_OF_RANGE_CLEAR_MS, INLET_WATER_COND_OUT_OF_RANGE_TIMEOUT_MS ); + + //Flow Alarms + initPersistentAlarm( ALARM_ID_FP_PERMEATE_FLOW_OUT_HIGH_RANGE, PERMEATE_FLOW_OUT_RANGE_PERSISTENCE_CLEAR_MS, PERMEATE_FLOW_OUT_RANGE_PERSISTENCE_TIMEOUT_MS ); } /*********************************************************************//** @@ -132,15 +138,15 @@ /*********************************************************************//** * @brief - * The checkPermeateFlow function checks the permeate flow rate from P16 - * against the set target flow rate and alarm if the flow is out of range. + * The checkPermeateHighFlow function checks the permeate flow rate from P16 + * against the set target flow rate and alarm if the flow is out of range high. * @details \b Inputs: permeateFlow * @details \b Outputs: none * @details \b Alarms: ALARM_ID_FP_PERMEATE_FLOW_OUT_HIGH_RANGE when * P16 flow goes beyond threshold limit from set target flow. * @return none *************************************************************************/ -void checkPermeateFlow( void ) +void checkPermeateHighFlow( void ) { F32 permeateFlow = getFilteredFlow( P16_FLOW ); BOOL isFlowOutOfRange = FALSE; Index: firmware/App/Monitors/WaterQualityMonitor.h =================================================================== diff -u -r76ede35cf15c9310c2915151f1d47998f22b71de -r38c8d303358e16782f9d6a1828ee1cc55a4e9a24 --- firmware/App/Monitors/WaterQualityMonitor.h (.../WaterQualityMonitor.h) (revision 76ede35cf15c9310c2915151f1d47998f22b71de) +++ firmware/App/Monitors/WaterQualityMonitor.h (.../WaterQualityMonitor.h) (revision 38c8d303358e16782f9d6a1828ee1cc55a4e9a24) @@ -42,7 +42,7 @@ void checkInletTemperatures( void ); void checkInletConductivity( void ); void checkOutletConductivity( void ); -void checkPermeateFlow( void ); +void checkPermeateHighFlow( void ); void checkRORejectionRatio( void ); #endif