Index: firmware/App/Monitors/Pressure.c =================================================================== diff -u -r3edf8084a5028ee0d00a3fba496284e593e4254d -r72ae21d8343d3a2b07a47452ff48549e25f876df --- firmware/App/Monitors/Pressure.c (.../Pressure.c) (revision 3edf8084a5028ee0d00a3fba496284e593e4254d) +++ firmware/App/Monitors/Pressure.c (.../Pressure.c) (revision 72ae21d8343d3a2b07a47452ff48549e25f876df) @@ -15,27 +15,26 @@ * ***************************************************************************/ -#include "AlarmMgmtRO.h" +#include "AlarmMgmtRO.h" #include "Messaging.h" #include "Pressure.h" #include "PersistentAlarm.h" #include "TaskPriority.h" -#include "Valves.h" - -/** - * @addtogroup Pressure - * @{ - */ - -// ********** private definitions ********** +#include "Valves.h" +/** + * @addtogroup Pressure + * @{ + */ + +// ********** private definitions ********** + #define PRESSURES_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval (ms/task time) at which the pressures data is published on the CAN bus. #define DATA_PUBLISH_COUNTER_START_COUNT ( 5 ) ///< Data publish counter start count. #define PRESSURE_SAMPLE_FILTER_MS ( 200 ) ///< Filter pressure data for given time #define PRESSURE_TEMP_SAMPLE_FILTER_MS ( 200 ) ///< Filter temperature data for given time #define SIZE_OF_PRESSURE_ROLLING_AVG ( PRESSURE_SAMPLE_FILTER_MS / TASK_PRIORITY_INTERVAL ) ///< Filtered pressure moving average. #define SIZE_OF_PRESSURETEMP_ROLLING_AVG ( PRESSURE_TEMP_SAMPLE_FILTER_MS / TASK_PRIORITY_INTERVAL ) ///< Filtered pressure temprature w/ 1 second moving average. -#define MMHG_TO_PSI_CONVERSION 0.0193368F ///< MMHG to PSI conversion. #define MIN_INLET_WATER_PRESSURE_WARNING_LOW_PSIG 20.0F ///< Minimum allowed Input low pressure value in psig. #define MAX_INLET_WATER_PRESSURE_WARNING_HIGH_PSIG 80.0F ///< Maximum allowed Input high pressure value in psig. @@ -74,9 +73,9 @@ F32 pressureTempReadingsTotal; ///< Rolling total - used to calc average. U32 pressureTempReadingsCount; ///< Number of samples in rolling average buffer }FILTER_PRESSURE_TEMPERATURE_READINGS_T; - -// ********** private data ********** +// ********** private data ********** + static OVERRIDE_F32_T filteredcurrentPressureReadings[ NUM_OF_PRESSURE_SENSORS ]; ///< filtered current pressure sensor pressure readings (overrideable). static OVERRIDE_F32_T filteredcurrentPresTempReadings[ NUM_OF_PRESSURE_SENSORS ]; ///< filtered current pressure sensor temperature readings (overrideable). //static RO_PRES_SENSORS_CAL_RECORD_T pressuresCalRecord; ///< Pressures calibration record. @@ -85,10 +84,10 @@ static FILTER_PRESSURE_TEMPERATURE_READINGS_T filteredPressureTempReadings[NUM_OF_PRESSURE_SENSORS]; ///< Filtered pressure reading for pressure sensors. static PRESSURE_STATE_T pressuresState; ///< current state of pressure monitor state machine. static U32 pressuresDataPublicationTimerCounter; ///< used to schedule pressure data publication to CAN bus. -static OVERRIDE_U32_T pressuresDataPublishInterval; ///< Pressure data publish interval. - -// ********** private function prototypes ********** +static OVERRIDE_U32_T pressuresDataPublishInterval; ///< Pressure data publish interval. +// ********** private function prototypes ********** + static void filterPressureSensors( void ); static void filterPressureSensorReadings( void ); static void filterPressureSensorTemperatureReadings( void ); @@ -233,19 +232,19 @@ * and triggers an alarm when pressure value is out of allowed range. * @details \b Inputs: RO pump inlet pressure sensor value * @details \b Outputs: Triggers low pressure persistent alarm - * @details \b Alarms: ALARM_ID_DD_INLET_WATER_PRESSURE_IN_LOW_RANGE when + * @details \b Alarms: ALARM_ID_RO_INLET_WATER_PRESSURE_IN_LOW_RANGE when * the inlet water pressure is less than the low limit. - * @details \b Alarms: ALARM_ID_DD_INLET_WATER_PRESSURE_IN_HIGH_RANGE when + * @details \b Alarms: ALARM_ID_RO_INLET_WATER_PRESSURE_IN_HIGH_RANGE when * the inlet water pressure is greater than the high limit. * @return none *************************************************************************/ //void checkInletWaterPressure( void ) //{ -// F32 pressureIn = getFilteredPressure( PRESSURE_SENSOR_WATER_INLET_INPUT ); -// F32 PressureOut = getFilteredPressure( PRESSURE_SENSOR_WATER_INLET_OUTPUT ); +// F32 pressureIn = getFilteredPressure( M1_PRES ); +// F32 PressureOut = getFilteredPressure( M3_PRES ); // // //Check Water Inlet Input pressure range -// if ( VALVE_STATE_OPEN == getValveStateName( VWI ) ) +// if ( VALVE_STATE_OPEN == getValveStateName( M4_VALV ) ) // { // BOOL isPressureTooLow; // BOOL isPressureTooHigh; @@ -255,27 +254,27 @@ // isPressureTooLow = ( pressureIn < maxInletWaterPressureWarningLow ? TRUE : FALSE ); // isPressureTooHigh = ( pressureIn > MAX_INLET_WATER_PRESSURE_WARNING_HIGH_PSIG ? TRUE : FALSE ); // -// if ( TRUE == isAlarmActive( ALARM_ID_DD_INLET_WATER_PRESSURE_IN_LOW_RANGE ) ) +// if ( TRUE == isAlarmActive( ALARM_ID_RO_INLET_WATER_PRESSURE_IN_LOW_RANGE ) ) // { // isPressureTooLow = ( pressureIn >= minInletWaterPressureWarningLow ? FALSE : TRUE ); // } -// checkPersistentAlarm( ALARM_ID_DD_INLET_WATER_PRESSURE_IN_LOW_RANGE, isPressureTooLow, pressureIn, maxInletWaterPressureWarningLow ); +// checkPersistentAlarm( ALARM_ID_RO_INLET_WATER_PRESSURE_IN_LOW_RANGE, isPressureTooLow, pressureIn, maxInletWaterPressureWarningLow ); // -// if ( TRUE == isAlarmActive( ALARM_ID_DD_INLET_WATER_PRESSURE_IN_HIGH_RANGE ) ) +// if ( TRUE == isAlarmActive( ALARM_ID_RO_INLET_WATER_PRESSURE_IN_HIGH_RANGE ) ) // { // isPressureTooHigh = ( pressureIn <= MIN_INLET_WATER_PRESSURE_WARNING_HIGH_PSIG ? FALSE : TRUE ); // } -// checkPersistentAlarm( ALARM_ID_DD_INLET_WATER_PRESSURE_IN_HIGH_RANGE, isPressureTooHigh, pressureIn, MAX_INLET_WATER_PRESSURE_WARNING_HIGH_PSIG ); +// checkPersistentAlarm( ALARM_ID_RO_INLET_WATER_PRESSURE_IN_HIGH_RANGE, isPressureTooHigh, pressureIn, MAX_INLET_WATER_PRESSURE_WARNING_HIGH_PSIG ); // } // else // { -// // VWI is closed - clear all alarms -// checkPersistentAlarm( ALARM_ID_DD_INLET_WATER_PRESSURE_IN_LOW_RANGE, FALSE, pressureIn, MIN_INLET_WATER_PRESSURE_WARNING_LOW_PSIG ); -// checkPersistentAlarm( ALARM_ID_DD_INLET_WATER_PRESSURE_IN_HIGH_RANGE, FALSE, pressureIn, MAX_INLET_WATER_PRESSURE_WARNING_HIGH_PSIG ); +// // M4 valve is closed - clear all alarms +// checkPersistentAlarm( ALARM_ID_RO_INLET_WATER_PRESSURE_IN_LOW_RANGE, FALSE, pressureIn, MIN_INLET_WATER_PRESSURE_WARNING_LOW_PSIG ); +// checkPersistentAlarm( ALARM_ID_RO_INLET_WATER_PRESSURE_IN_HIGH_RANGE, FALSE, pressureIn, MAX_INLET_WATER_PRESSURE_WARNING_HIGH_PSIG ); // } // // //Check Water Inlet Output pressure range -// if ( VALVE_STATE_OPEN == getValveStateName( VWI ) ) +// if ( VALVE_STATE_OPEN == getValveStateName( M4_VALV ) ) // { // BOOL isPressureTooLow; // BOOL isPressureTooHigh; @@ -285,56 +284,56 @@ // isPressureTooLow = ( PressureOut < maxInletWaterPressureWarningLow ? TRUE : FALSE ); // isPressureTooHigh = ( PressureOut > MAX_INLET_WATER_PRES_OUT_WARNING_HIGH_PSIG ? TRUE : FALSE ); // -// if ( TRUE == isAlarmActive( ALARM_ID_DD_INLET_WATER_PRESSURE_OUT_LOW_RANGE ) ) +// if ( TRUE == isAlarmActive( ALARM_ID_RO_INLET_WATER_PRESSURE_OUT_LOW_RANGE ) ) // { // isPressureTooLow = ( PressureOut >= minInletWaterPressureWarningLow ? FALSE : TRUE ); // } -// checkPersistentAlarm( ALARM_ID_DD_INLET_WATER_PRESSURE_OUT_LOW_RANGE, isPressureTooLow, PressureOut, maxInletWaterPressureWarningLow ); +// checkPersistentAlarm( ALARM_ID_RO_INLET_WATER_PRESSURE_OUT_LOW_RANGE, isPressureTooLow, PressureOut, maxInletWaterPressureWarningLow ); // -// if ( TRUE == isAlarmActive( ALARM_ID_DD_INLET_WATER_PRESSURE_OUT_HIGH_RANGE ) ) +// if ( TRUE == isAlarmActive( ALARM_ID_RO_INLET_WATER_PRESSURE_OUT_HIGH_RANGE ) ) // { // isPressureTooHigh = ( PressureOut <= MIN_INLET_WATER_PRES_OUT_WARNING_HIGH_PSIG ? FALSE : TRUE ); // } -// checkPersistentAlarm( ALARM_ID_DD_INLET_WATER_PRESSURE_OUT_HIGH_RANGE, isPressureTooHigh, PressureOut, MAX_INLET_WATER_PRES_OUT_WARNING_HIGH_PSIG ); +// checkPersistentAlarm( ALARM_ID_RO_INLET_WATER_PRESSURE_OUT_HIGH_RANGE, isPressureTooHigh, PressureOut, MAX_INLET_WATER_PRES_OUT_WARNING_HIGH_PSIG ); // } // else // { -// // VWI is closed - clear all alarms -// checkPersistentAlarm( ALARM_ID_DD_INLET_WATER_PRESSURE_OUT_LOW_RANGE, FALSE, PressureOut, MIN_INLET_WATER_PRES_OUT_WARNING_LOW_PSIG ); -// checkPersistentAlarm( ALARM_ID_DD_INLET_WATER_PRESSURE_OUT_HIGH_RANGE, FALSE, PressureOut, MAX_INLET_WATER_PRES_OUT_WARNING_HIGH_PSIG ); +// // M4 valve is closed - clear all alarms +// checkPersistentAlarm( ALARM_ID_RO_INLET_WATER_PRESSURE_OUT_LOW_RANGE, FALSE, PressureOut, MIN_INLET_WATER_PRES_OUT_WARNING_LOW_PSIG ); +// checkPersistentAlarm( ALARM_ID_RO_INLET_WATER_PRESSURE_OUT_HIGH_RANGE, FALSE, PressureOut, MAX_INLET_WATER_PRES_OUT_WARNING_HIGH_PSIG ); // } //} - -/*********************************************************************//** - * @brief + +/*********************************************************************//** + * @brief * The execPressureSensor function executes the pressure monitor state machine - * and publish pressure data. - * @details \b Inputs: pressuresState + * and publish pressure data. + * @details \b Inputs: pressuresState * @details \b Outputs: pressuresState - * @details \b Alarm: ALARM_ID_RO_SOFTWARE_FAULT if invalid pressure state - * @return none - *************************************************************************/ -void execPressureSensor( void ) -{ - // state machine - switch ( pressuresState ) - { - case PRESSURE_INIT_STATE: - pressuresState = handlePressuresInitState(); - break; - - case PRESSURE_CONTINUOUS_READ_STATE: - pressuresState = handlePressuresContReadState(); - break; - - default: + * @details \b Alarm: ALARM_ID_RO_SOFTWARE_FAULT if invalid pressure state + * @return none + *************************************************************************/ +void execPressureSensor( void ) +{ + // state machine + switch ( pressuresState ) + { + case PRESSURE_INIT_STATE: + pressuresState = handlePressuresInitState(); + break; + + case PRESSURE_CONTINUOUS_READ_STATE: + pressuresState = handlePressuresContReadState(); + break; + + default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_PRESSURE_INVALID_EXEC_STATE, pressuresState ) - pressuresState = PRESSURE_INIT_STATE; - break; - } - - // publish pressure/occlusion data on interval - publishPressuresData(); + pressuresState = PRESSURE_INIT_STATE; + break; + } + + // publish pressure/occlusion data on interval + publishPressuresData(); } /*********************************************************************//** @@ -406,12 +405,10 @@ *************************************************************************/ static F32 getConvertedPressure( PRESSURE_SENSORS_T sensor, F32 pressure ) { - F32 pressurePSI = pressure * MMHG_TO_PSI_CONVERSION; - // calibrate pressure - //F32 calPressure = getCalibrationAppliedPressure( sensor, pressurePSI ); // TODO + //F32 calPressure = getCalibrationAppliedPressure( sensor, pressure ); // TODO - return pressurePSI; // calPressure; + return pressure; // calPressure; } /*********************************************************************//** @@ -433,79 +430,81 @@ // pressuresCalRecord.pressureSensors[ (PRESSURE_SENSORS_T)sensorId ].offset; // return calPressure; //} - -/*********************************************************************//** - * @brief - * The handlePressuresInitState function handles the pressures initialize state - * of the pressures monitor state machine. - * @details \b Inputs: none - * @details \b Outputs: none - * @return next state - *************************************************************************/ -static PRESSURE_STATE_T handlePressuresInitState( void ) -{ - return PRESSURE_CONTINUOUS_READ_STATE; -} - -/*********************************************************************//** - * @brief - * The handlePressuresContReadState function handles the continuous read state + +/*********************************************************************//** + * @brief + * The handlePressuresInitState function handles the pressures initialize state + * of the pressures monitor state machine. + * @details \b Inputs: none + * @details \b Outputs: none + * @return next state + *************************************************************************/ +static PRESSURE_STATE_T handlePressuresInitState( void ) +{ + return PRESSURE_CONTINUOUS_READ_STATE; +} + +/*********************************************************************//** + * @brief + * The handlePressuresContReadState function handles the continuous read state * of the pressures monitor state machine. Raw readings are read from driver - * and then filtered via moving average. - * @details \b Inputs: pressureFilterCounter - * @details \b Outputs: pressure sensor values updated - * @return next state - *************************************************************************/ -static PRESSURE_STATE_T handlePressuresContReadState( void ) + * and then filtered via moving average. + * @details \b Inputs: pressureFilterCounter + * @details \b Outputs: pressure sensor values updated + * @return next state + *************************************************************************/ +static PRESSURE_STATE_T handlePressuresContReadState( void ) { PRESSURE_STATE_T result = PRESSURE_CONTINUOUS_READ_STATE; // Get raw pressure readings readPressureSensors(); // filter raw pressure readings - filterPressureSensors(); - - return result; + filterPressureSensors(); + + return result; } -/*********************************************************************//** - * @brief - * The publishPressuresData function publishes RO pressures data at a set interval. - * @details \b Inputs: pressuresDataPublicationTimerCounter +/*********************************************************************//** + * @brief + * The publishPressuresData function publishes RO pressures data at a set interval. + * @details \b Inputs: pressuresDataPublicationTimerCounter * @details \b Outputs: pressuresDataPublicationTimerCounter - * @details \b Message \b Sent: MSG_ID_RO_PRESSURES_DATA to publish pressure data. - * @return none - *************************************************************************/ -static void publishPressuresData( void ) -{ - // publish pressure/occlusion data on interval - if ( ++pressuresDataPublicationTimerCounter >= getU32OverrideValue( &pressuresDataPublishInterval ) ) + * @details \b Message \b Sent: MSG_ID_RO_PRESSURES_DATA to publish pressure data. + * @return none + *************************************************************************/ +static void publishPressuresData( void ) +{ + // publish pressure/occlusion data on interval + if ( ++pressuresDataPublicationTimerCounter >= getU32OverrideValue( &pressuresDataPublishInterval ) ) { PRESSURE_TEMP_DATA_T data; - data.PressurePRi = getFilteredPressure( PRESSURE_SENSOR_WATER_INLET_PRE_REG ); - data.PressurePRo = getFilteredPressure( PRESSURE_SENSOR_WATER_INLET_POST_REG ); - data.PressurePC2o = getFilteredPressure( PRESSURE_SENSOR_WATER_INLET_PRE_COND ); - data.PressurePPo = getFilteredPressure( PRESSURE_SENSOR_PRE_RO_FILTER ); - data.PressurePMp = getFilteredPressure( PRESSURE_SENSOR_POST_RO_FILTER ); - - data.TempPRi = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_WATER_INLET_PRE_REG ); - data.TempPRo = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_WATER_INLET_POST_REG ); - data.TempPC2o = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_WATER_INLET_PRE_COND ); - data.TempPPo = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_PRE_RO_FILTER ); - data.TempPMp = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_POST_RO_FILTER ); + data.m1Pressure = getFilteredPressure( M1_PRES ); + data.m3Pressure = getFilteredPressure( M3_PRES ); + data.p8Pressure = getFilteredPressure( P8_PRES ); + data.p13Pressure = getFilteredPressure( P13_PRES ); + data.p17Pressure = getFilteredPressure( P17_PRES ); + data.x1Pressure = getFilteredPressure( X1_PRES ); - broadcastData( MSG_ID_RO_PRESSURES_DATA, COMM_BUFFER_OUT_CAN_RO_BROADCAST, (U08*)&data, sizeof( PRESSURE_TEMP_DATA_T ) ); + data.m1Temp = getFilteredPressureSensorTemperature( M1_PRES ); + data.m3Temp = getFilteredPressureSensorTemperature( M3_PRES ); + data.p8Temp = getFilteredPressureSensorTemperature( P8_PRES ); + data.p13Temp = getFilteredPressureSensorTemperature( P13_PRES ); + data.p17Temp = getFilteredPressureSensorTemperature( P17_PRES ); + data.x1Temp = getFilteredPressureSensorTemperature( X1_PRES ); + + broadcastData( MSG_ID_RO_PRESSURES_DATA, COMM_BUFFER_OUT_CAN_RO_BROADCAST, (U08*)&data, sizeof( PRESSURE_TEMP_DATA_T ) ); pressuresDataPublicationTimerCounter = 0; - } -} - - -/************************************************************************* - * TEST SUPPORT FUNCTIONS - *************************************************************************/ + } +} +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + /*********************************************************************//** * @brief * The testPressureSensorDataPublishIntervalOverride function overrides the @@ -556,5 +555,5 @@ // // return result; //} - -/**@}*/ + +/**@}*/