Index: firmware/App/Monitors/WaterQualityMonitor.c =================================================================== diff -u -r47a7b0fce13cf38919932a8662c378f4f6a8b9f3 -rf1de0420490d71f85393a1e281bbbbc87a232c64 --- firmware/App/Monitors/WaterQualityMonitor.c (.../WaterQualityMonitor.c) (revision 47a7b0fce13cf38919932a8662c378f4f6a8b9f3) +++ firmware/App/Monitors/WaterQualityMonitor.c (.../WaterQualityMonitor.c) (revision f1de0420490d71f85393a1e281bbbbc87a232c64) @@ -8,7 +8,7 @@ * @file WaterQualityMonitor.c * * @author (last) “rkallala” -* @date (last) 15-Jan-2026 +* @date (last) 20-Jan-2026 * * @author (original) Michael Garthwaite * @date (original) 08-Sep-2025 @@ -26,6 +26,7 @@ #include "SystemCommDD.h" #include "TaskPriority.h" #include "Temperature.h" +#include "Timers.h" #include "WaterQualityMonitor.h" /** @@ -66,9 +67,7 @@ #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 ( 5 * MS_PER_SECOND ) ///< Verify Water timer ( in ms ) #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 #define RO_PUMP_DUTY_CYCLE_WARNING_TIMEOUT_MS ( 1 * MS_PER_SECOND ) ///< Persistence period for duty cycle in warning range in milliseconds. #define RO_PUMP_DUTY_CYCLE_WARNING_CLEAR_MS ( 1 * MS_PER_SECOND ) ///< Persistence period for duty cycle warning range clear in milliseconds. @@ -110,10 +109,9 @@ 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 ); - // fault , clearing timeout is not applicable - initPersistentAlarm( ALARM_ID_FP_PERMEATE_FLOW_OUT_LOW_RANGE, 0, PERMEATE_FLOW_OUT_OF_RANGE_TIMEOUT_MS ); + //Flow Alarms. Clearing timeout is not applicable for Fault alarms + initPersistentAlarm( ALARM_ID_FP_PERMEATE_FLOW_OUT_HIGH_RANGE, 0, PERMEATE_FLOW_OUT_RANGE_PERSISTENCE_TIMEOUT_MS ); + initPersistentAlarm( ALARM_ID_FP_PERMEATE_FLOW_OUT_LOW_RANGE, 0, PERMEATE_FLOW_OUT_RANGE_PERSISTENCE_TIMEOUT_MS ); // duty cycle warning alarm initPersistentAlarm( ALARM_ID_FP_POWER_BUDGET_OUT_OF_RANGE, RO_PUMP_DUTY_CYCLE_WARNING_CLEAR_MS, RO_PUMP_DUTY_CYCLE_WARNING_TIMEOUT_MS ); @@ -198,7 +196,13 @@ F32 minimumAllowedPermeateFlow = (F32)getTargetROPumpFlowRateMLPM() - PERMEATE_FLOW_FAULT_MIN_THRESHOLD; isFlowOutOfRange = ( ( permeateFlow < minimumAllowedPermeateFlow ) ? TRUE : FALSE ); - checkPersistentAlarm( ALARM_ID_FP_PERMEATE_FLOW_OUT_LOW_RANGE, isFlowOutOfRange, permeateFlow, minimumAllowedPermeateFlow ); + if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_FP_PERMEATE_FLOW_OUT_LOW_RANGE, isFlowOutOfRange ) ) + { + if ( isROPumpLowflowAlarmExempt() != TRUE ) + { + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_FP_PERMEATE_FLOW_OUT_LOW_RANGE, permeateFlow, minimumAllowedPermeateFlow ); + } + } } /*********************************************************************//**