Index: PersistentAlarm.c =================================================================== diff -u -rcd1dbf44ebce97f61ad4a757d47449562ec366f0 -rffbcb3688e46a39410a395e796f4249363b96f1c --- PersistentAlarm.c (.../PersistentAlarm.c) (revision cd1dbf44ebce97f61ad4a757d47449562ec366f0) +++ PersistentAlarm.c (.../PersistentAlarm.c) (revision ffbcb3688e46a39410a395e796f4249363b96f1c) @@ -17,6 +17,7 @@ #include "AlarmMgmt.h" #include "PersistentAlarm.h" +#include "Timers.h" /** * @addtogroup PersistentAlarm @@ -31,11 +32,11 @@ ALARM_ID_T alarm; ///< Alarm id BOOL isClearable; ///< Flag if alarm can be cleared - U32 persistentClearCount; ///< Persistent count limit before clear alarm - U32 persistentTriggerCount; ///< Persistent count limit before trigger alarm + U32 persistentClearPeriod; ///< Persistent count limit before clear alarm + U32 persistentTriggerPeriod; ///< Persistent count limit before trigger alarm - U32 inRangeCounter; ///< Data in range persistent counter - U32 outOfRangeCounter; ///< Data out of range persistent counter + U32 inRangeStartTime; ///< Data in range persistent counter + U32 outOfRangeStartTime; ///< Data out of range persistent counter } PERSISTENT_ALARM_DATA_T; // ********** private data ********** @@ -53,21 +54,21 @@ * @param alarmIndex Persistent alarm index * @param alarm Alarm id * @param isClearable Flag to indicate alarm is clearable or not - * @param persistentClearCount Persistent count limit before clear alarm - * @param persistentTriggerCount Persistent count limit before trigger alarm + * @param persistentClearPeriod Persistent period limit before clear alarm + * @param persistentTriggerPeriod Persistent period limit before trigger alarm * @return none *************************************************************************/ void initPersistentAlarm( PERSISTENT_ALARM_T alarmIndex, ALARM_ID_T alarm, BOOL isClearable, - F32 persistentClearCount, F32 persistentTriggerCount ) + F32 persistentClearPeriod, F32 persistentTriggerPeriod ) { if ( alarmIndex < NUM_OF_PERSISTENT_ALARM ) { - persistentAlarms[ alarmIndex ].alarm = alarm; - persistentAlarms[ alarmIndex ].isClearable = isClearable; - persistentAlarms[ alarmIndex ].persistentClearCount = persistentClearCount; - persistentAlarms[ alarmIndex ].persistentTriggerCount = persistentTriggerCount; - persistentAlarms[ alarmIndex ].inRangeCounter = 0U; - persistentAlarms[ alarmIndex ].outOfRangeCounter = 0U; + persistentAlarms[ alarmIndex ].alarm = alarm; + persistentAlarms[ alarmIndex ].isClearable = isClearable; + persistentAlarms[ alarmIndex ].persistentClearPeriod = persistentClearPeriod; + persistentAlarms[ alarmIndex ].persistentTriggerPeriod = persistentTriggerPeriod; + persistentAlarms[ alarmIndex ].inRangeStartTime = 0U; + persistentAlarms[ alarmIndex ].outOfRangeStartTime = 0U; } else { @@ -97,18 +98,16 @@ { if ( isOutOfRange ) { - ++persistentAlarms[ alarmIndex ].outOfRangeCounter; - persistentAlarms[ alarmIndex ].inRangeCounter = 0; - if ( persistentAlarms[ alarmIndex ].outOfRangeCounter > persistentAlarms[ alarmIndex ].persistentTriggerCount ) + persistentAlarms[ alarmIndex ].inRangeStartTime = getMSTimerCount(); + if ( calcTimeSince( persistentAlarms[ alarmIndex ].outOfRangeStartTime ) >= persistentAlarms[ alarmIndex ].persistentTriggerPeriod ) { SET_ALARM_WITH_1_F32_DATA( persistentAlarms[ alarmIndex ].alarm, data ); } } else { - ++persistentAlarms[ alarmIndex ].inRangeCounter; - persistentAlarms[ alarmIndex ].outOfRangeCounter = 0; - BOOL const isInRangePersistent = persistentAlarms[ alarmIndex ].inRangeCounter > persistentAlarms[ alarmIndex ].persistentClearCount; + persistentAlarms[ alarmIndex ].outOfRangeStartTime = getMSTimerCount(); + BOOL const isInRangePersistent = calcTimeSince( persistentAlarms[ alarmIndex ].inRangeStartTime ) >= persistentAlarms[ alarmIndex ].persistentClearPeriod; if ( persistentAlarms[ alarmIndex ].isClearable && isInRangePersistent ) { clearAlarm( persistentAlarms[ alarmIndex ].alarm ); Index: PersistentAlarm.h =================================================================== diff -u -r16f92db060dba2b44020c683dc9e9fe50b3cd25d -rffbcb3688e46a39410a395e796f4249363b96f1c --- PersistentAlarm.h (.../PersistentAlarm.h) (revision 16f92db060dba2b44020c683dc9e9fe50b3cd25d) +++ PersistentAlarm.h (.../PersistentAlarm.h) (revision ffbcb3688e46a39410a395e796f4249363b96f1c) @@ -36,21 +36,25 @@ #ifdef _HD_ #endif #ifdef _DG_ - PERSISTENT_ALARM_INLET_WATER_HIGH_TEMPERATURE, ///< Inlet water high temperature persistent alarm - PERSISTENT_ALARM_INLET_WATER_LOW_TEMPERATURE, ///< Inlet water low temperature persistent alarm - PERSISTENT_ALARM_INLET_WATER_HIGH_CONDUCTIVITY, ///< Inlet water high conductivity persistent alarm - PERSISTENT_ALARM_INLET_WATER_LOW_CONDUCTIVITY, ///< Inlet water low conductivity persistent alarm - PERSISTENT_ALARM_RO_REJECTION_RATIO_OUT_OF_RANGE, ///< RO rejection ratio out of range persistent alarm - PERSISTENT_ALARM_INLET_WATER_LOW_PRESSURE, ///< Inlet water low pressure persistent alarm - PERSISTENT_ALARM_INLET_WATER_PRESSURE_FAULT, ///< Inlet water pressure fault persistent alarm + PERSISTENT_ALARM_INLET_WATER_HIGH_TEMPERATURE, ///< Inlet water high temperature persistent alarm + PERSISTENT_ALARM_INLET_WATER_LOW_TEMPERATURE, ///< Inlet water low temperature persistent alarm + PERSISTENT_ALARM_INLET_WATER_HIGH_CONDUCTIVITY, ///< Inlet water high conductivity persistent alarm + PERSISTENT_ALARM_INLET_WATER_LOW_CONDUCTIVITY, ///< Inlet water low conductivity persistent alarm + PERSISTENT_ALARM_RO_REJECTION_RATIO_OUT_OF_RANGE, ///< RO rejection ratio out of range persistent alarm + PERSISTENT_ALARM_INLET_WATER_LOW_PRESSURE, ///< Inlet water low pressure persistent alarm + PERSISTENT_ALARM_INLET_WATER_PRESSURE_FAULT, ///< Inlet water pressure fault persistent alarm + PERSISTENT_ALARM_POST_ACID_CONDUCTIVITY_OUT_OF_RANGE, ///< Post acid concentrate conductivity out of range + PERSISTENT_ALARM_POST_BICARB_CONDUCTIVITY_OUT_OF_RANGE, ///< Post bicarbonate concentrate conductivity out of range + PERSISTENT_ALARM_RO_PUMP_FLOW_RATE_OUT_OF_RANGE, ///< RO pump flow rate out of range #endif - NUM_OF_PERSISTENT_ALARM ///< Number of persistent alarms + NUM_OF_PERSISTENT_ALARM ///< Number of persistent alarms } PERSISTENT_ALARM_T; // ********** public function prototypes ********** +// Persistent period resolution is in ms void initPersistentAlarm( PERSISTENT_ALARM_T alarmIndex, ALARM_ID_T alarm, BOOL isClearable, - F32 persistentClearCount, F32 persistentTriggerCount ); + F32 persistentClearPeriod, F32 persistentTriggerPeriod ); void checkPersistentAlarm( PERSISTENT_ALARM_T const alarmIndex, BOOL const isOutOfRange, F32 const data ); /**@}*/