Index: firmware/App/Monitors/Temperature.c =================================================================== diff -u -r410afd26b3ae5e372310c696c82f58c59235e10d -r8d272582cbd2cb5fc0c6af0fead2867ce02658b0 --- firmware/App/Monitors/Temperature.c (.../Temperature.c) (revision 410afd26b3ae5e372310c696c82f58c59235e10d) +++ firmware/App/Monitors/Temperature.c (.../Temperature.c) (revision 8d272582cbd2cb5fc0c6af0fead2867ce02658b0) @@ -15,9 +15,15 @@ * ***************************************************************************/ +#include "AlarmMgmtFP.h" #include "Messaging.h" #include "MessageSupport.h" +#include "ModeGenPermeate.h" +#include "ModeGenPermeateDefeatured.h" +#include "ModePreGenPermeate.h" +#include "ModePreGenPermeateDefeatured.h" #include "OperationModes.h" +#include "PersistentAlarm.h" #include "Temperature.h" #include "Timers.h" #include "TaskPriority.h" @@ -36,6 +42,11 @@ #define DATA_PUBLISH_COUNTER_START_COUNT 30 ///< Data publish counter start count. +#define TEMPERATURE_INLET_LOW_THRESHOLD 5.0F +#define TEMPERATURE_INLET_HIGH_THRESHOLD 30.0F +#define TEMPERATURE_INLET_PERSISTENCE_TIMER ( 5 * MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) +#define TEMPERATURE_INLET_PERSISTENCE_CLEAR ( 5 * MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) + /// Temperature sensor exec states. typedef enum tempSensors_Exec_States { @@ -56,6 +67,11 @@ static TEMPSENSORS_EXEC_STATES_T handleExecStart( void ); static TEMPSENSORS_EXEC_STATES_T handleExecGetADCValues( void ); static void publishTemperatureSensorsData( void ); +static void monitorTemperatureSenors( void ); +static void monitorOperationModeAlarms( FP_OP_MODE_T opMode ); +static void monitorPreGenAlarms( void ); +static void monitorPreGenDefAlarms( void ); +static void monitorGenPAlarms( void ); /*********************************************************************//** * @brief @@ -77,6 +93,9 @@ // Initialize the temperature sensors initTemperatureSensors(); + + initPersistentAlarm( ALARM_ID_FP_INLET_TEMPERATURE_OUT_LOW_RANGE, TEMPERATURE_INLET_PERSISTENCE_CLEAR, TEMPERATURE_INLET_PERSISTENCE_TIMER ); + initPersistentAlarm( ALARM_ID_FP_INLET_TEMPERATURE_OUT_HIGH_RANGE, TEMPERATURE_INLET_PERSISTENCE_CLEAR, TEMPERATURE_INLET_PERSISTENCE_TIMER ); } /*********************************************************************//** @@ -195,6 +214,133 @@ /*********************************************************************//** * @brief + * The monitorTemperatureSensors function monitors the temperature sensors' + * temperature value and raises an alarm if any of them are out of range + * for more than the specified time. + * @details \b Inputs: tempSensors + * @details \b Outputs: tempSensors + * @details \b Alarms: ALARM_ID_DD_TEMPERATURE_SENSOR_OUT_OF_RANGE when the + * measured temperature exceeds the maximum limit temperature. + * @return none + *************************************************************************/ +static void monitorTemperatureSenors( void ) +{ + monitorOperationModeAlarms( getCurrentOperationMode() ); +} + +static void monitorOperationModeAlarms( FP_OP_MODE_T opMode ) +{ + switch ( opMode ) + { + case FP_MODE_FAUL: + break; + + case FP_MODE_SERV: + break; + + case FP_MODE_INIT: + break; + + case FP_MODE_STAN: + break; + + case FP_MODE_PGEN: + monitorPreGenAlarms(); + break; + + case FP_MODE_GENP: + monitorGenPAlarms(); + break; + + case FP_MODE_DPGW: + monitorPreGenDefAlarms(); + break; + + case FP_MODE_DEGW: + break; + default: + // SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_TEMPERATURE_SENSORS_EXEC_INVALID_STATE, tempSensorsExecState ); + // tempSensorsExecState = TEMPSENSORS_EXEC_STATE_GET_ADC_VALUES; + break; + } +} + +/*********************************************************************//** + * @brief + * The monitorPreGenAlarms function checks temperature alarm conditions for alarms that are + * monitored in Pre-Generate Permeate mode + * @details \b Inputs: none + * @details \b Outputs: none + * @return none + *************************************************************************/ +static void monitorPreGenAlarms( void ) +{ + FP_PRE_GENP_MODE_STATE_T preGenState = getCurrentPreGenPState(); + F32 temperatureP10 = getTemperatureValue( P10_TEMP ); + BOOL isTempOutOfLowRange = FALSE; + BOOL isTempOutOfHighRange = FALSE; + + if ( ( preGenState > FP_PRE_GENP_FILTER_FLUSH ) && ( preGenState != FP_PRE_GENP_PAUSED ) ) + { + isTempOutOfLowRange = ( ( temperatureP10 < TEMPERATURE_INLET_LOW_THRESHOLD ) ? TRUE : FALSE); + isTempOutOfHighRange = ( ( temperatureP10 > TEMPERATURE_INLET_HIGH_THRESHOLD ) ? TRUE : FALSE); + checkPersistentAlarm( ALARM_ID_FP_INLET_TEMPERATURE_OUT_LOW_RANGE, isTempOutOfLowRange, temperatureP10, TEMPERATURE_INLET_LOW_THRESHOLD ); + checkPersistentAlarm( ALARM_ID_FP_INLET_TEMPERATURE_OUT_HIGH_RANGE, isTempOutOfHighRange, temperatureP10, TEMPERATURE_INLET_HIGH_THRESHOLD ); + // TODO - Check M1 temp + } +} + + +/*********************************************************************//** + * @brief + * The monitorGenPAlarms function checks temperature alarm conditions for alarms that are + * monitored in Generate Permeate mode + * @details \b Inputs: none + * @details \b Outputs: none + * @return none + *************************************************************************/ +static void monitorGenPAlarms( void ) +{ + FP_GENP_MODE_STATE_T genState = getCurrentGenPermeateState(); + F32 temperatureP10 = getTemperatureValue( P10_TEMP ); + BOOL isTempOutOfLowRange = FALSE; + BOOL isTempOutOfHighRange = FALSE; + + isTempOutOfLowRange = ( ( temperatureP10 < TEMPERATURE_INLET_LOW_THRESHOLD ) ? TRUE : FALSE); + isTempOutOfHighRange = ( ( temperatureP10 > TEMPERATURE_INLET_HIGH_THRESHOLD ) ? TRUE : FALSE); + checkPersistentAlarm( ALARM_ID_FP_INLET_TEMPERATURE_OUT_LOW_RANGE, isTempOutOfLowRange, temperatureP10, TEMPERATURE_INLET_LOW_THRESHOLD ); + checkPersistentAlarm( ALARM_ID_FP_INLET_TEMPERATURE_OUT_HIGH_RANGE, isTempOutOfHighRange, temperatureP10, TEMPERATURE_INLET_HIGH_THRESHOLD ); + // TODO - Check M1 temp + +} + +/*********************************************************************//** + * @brief + * The monitorPreGenDefAlarms function checks temperature alarm conditions for alarms that are + * monitored in Pre-Generate Permeate, Defeatured mode + * @details \b Inputs: none + * @details \b Outputs: none + * @return none + *************************************************************************/ +static void monitorPreGenDefAlarms( void ) +{ + //FP_PRE_GENP_DEF_MODE_STATE_T preGenDefState; + F32 temperatureM4 = getTemperatureValue( M4_TEMP ); + BOOL isTempOutOfLowRange = FALSE; + BOOL isTempOutOfHighRange = FALSE; + + //if ( preGenDefState == FP_PRE_GENP_DEF_INLET_WATER_CHECK ) + + isTempOutOfLowRange = ( ( temperatureM4 < TEMPERATURE_INLET_LOW_THRESHOLD ) ? TRUE : FALSE); + isTempOutOfHighRange = ( ( temperatureM4 > TEMPERATURE_INLET_HIGH_THRESHOLD ) ? TRUE : FALSE); + checkPersistentAlarm( ALARM_ID_FP_INLET_TEMPERATURE_OUT_LOW_RANGE, isTempOutOfLowRange, temperatureM4, TEMPERATURE_INLET_LOW_THRESHOLD ); + checkPersistentAlarm( ALARM_ID_FP_INLET_TEMPERATURE_OUT_HIGH_RANGE, isTempOutOfHighRange, temperatureM4, TEMPERATURE_INLET_HIGH_THRESHOLD ); + + +} + +/*********************************************************************//** + * @brief * The publishTemperatureSensorsData function broadcasts the temperature * sensors data at the publication interval. * @details \b Inputs: dataPublicationTimerCounter and publish interval time.