Index: firmware/App/Controllers/Pressures.c =================================================================== diff -u -rf6a181c108eae92f9c99316824b78b2dbeedaf7c -rb4da09f79281d8d52a8829963296c9048689158e --- firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision f6a181c108eae92f9c99316824b78b2dbeedaf7c) +++ firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision b4da09f79281d8d52a8829963296c9048689158e) @@ -8,7 +8,7 @@ * @file Pressures.c * * @author (last) Dara Navaei -* @date (last) 21-Sep-2022 +* @date (last) 09-Oct-2022 * * @author (original) Sean * @date (original) 04-Apr-2020 @@ -47,8 +47,10 @@ #define PRESSURE_SAMPLES_TO_AVERAGE ( 200 / TASK_PRIORITY_INTERVAL ) ///< Averaging pressure data over the reporting interval. #define PRESSURE_AVERAGE_MULTIPLIER ( 1.0F / (F32)PRESSURE_SAMPLES_TO_AVERAGE ) ///< Optimization - multiplying is faster than dividing. -#define MIN_VALID_PRESSURE_RANGE 0.0F ///< Minimum valid range on pressure reading. -#define MAX_VALID_PRESSURE_RANGE 200.0F ///< Maximum valid range on pressure reading. +#define MIN_VALID_PRESSURE_RANGE_PSIA 0.0F ///< Minimum valid range on pressure psia. +#define MAX_VALID_PRESSURE_RANGE_PSIA 200.0F ///< Maximum valid range on pressure psia. +#define MIN_VALID_BARO_PRESSURE_PSIA 10.1F ///< Minimum valid barometric pressure in psia. +#define MAX_VALID_BARO_PRESSURE_PSIA 15.4F ///< Maximum valid barometric pressure in psia. #define MAX_INLET_WATER_PRESSURE_WARNING_LOW 25.0F ///< Maximum allowed low pressure value. #define MIN_INLET_WATER_PRESSURE_WARNING_LOW 28.0F ///< Minimum allowed low pressure value. @@ -133,15 +135,16 @@ for ( i = 0; i < NUM_OF_PRESSURE_SENSORS; i++ ) { - pressures[ i ].data = 0.0; - pressures[ i ].ovData = 0.0; - pressures[ i ].ovInitData = 0.0; + pressures[ i ].data = 0.0F; + pressures[ i ].ovData = 0.0F; + pressures[ i ].ovInitData = 0.0F; pressures[ i ].override = OVERRIDE_RESET; msrdPressureSum[ i ] = 0; } initPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE, INLET_WATER_PRESSURE_PERSISTENCE_PERIOD, INLET_WATER_PRESSURE_PERSISTENCE_PERIOD ); initPersistentAlarm( ALARM_ID_DG_PRESSURE_OUT_OF_RANGE, PRESSURE_OUT_OF_RANGE_TIMEOUT_MS, PRESSURE_OUT_OF_RANGE_TIMEOUT_MS ); + initPersistentAlarm( ALARM_ID_DG_BARO_PRESSURE_OUT_OF_RANGE, PRESSURE_OUT_OF_RANGE_TIMEOUT_MS, PRESSURE_OUT_OF_RANGE_TIMEOUT_MS ); } /*********************************************************************//** @@ -183,15 +186,15 @@ *************************************************************************/ F32 getMeasuredDGPressure( U32 pressureID ) { - F32 result = 0.0; + F32 result = 0.0F; if ( pressureID < NUM_OF_PRESSURE_SENSORS ) { result = getF32OverrideValue( &pressures[ pressureID ] ); } else { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_PRESSURE_SENSOR_ID, pressureID ); + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_PRESSURE_SENSOR_SELECTED, pressureID ); } return result; @@ -320,7 +323,7 @@ if ( ++pressureFilterCounter >= PRESSURE_SAMPLES_TO_AVERAGE ) { F32 adcSum; - F32 pressureBeforeCal = 0.0; + F32 pressureBeforeCal = 0.0F; F32 baroPressure = getBaroPressurePSI(); pressureFilterCounter = 0; @@ -348,16 +351,44 @@ pressures[ sensorId ].data = getCalibrationAppliedPressure( sensorId, pressureBeforeCal ); msrdPressureSum[ sensorId ] = 0; break; + +#ifndef _VECTORCAST_ + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_PRESSURE_SENSOR_SELECTED, sensorId ); + break; +#endif } } } for ( sensorId = 0; sensorId < NUM_OF_PRESSURE_SENSORS; sensorId++ ) { - pressureReading = getMeasuredDGPressure( sensorId ) + getBaroPressurePSI(); - isPressureOutOfRange = ( ( pressureReading < MIN_VALID_PRESSURE_RANGE ) || ( pressureReading > MAX_VALID_PRESSURE_RANGE ) ? TRUE : FALSE ); + switch ( sensorId ) + { + case PRESSURE_SENSOR_RO_PUMP_INLET: + case PRESSURE_SENSOR_RO_PUMP_OUTLET: + case PRESSURE_SENSOR_DRAIN_PUMP_INLET: + case PRESSURE_SENSOR_DRAIN_PUMP_OUTLET: + pressureReading = getMeasuredDGPressure( sensorId ) + getBaroPressurePSI(); + isPressureOutOfRange = ( ( pressureReading < MIN_VALID_PRESSURE_RANGE_PSIA ) || ( pressureReading > MAX_VALID_PRESSURE_RANGE_PSIA ) ? TRUE : FALSE ); + checkPersistentAlarm( ALARM_ID_DG_PRESSURE_OUT_OF_RANGE, isPressureOutOfRange, (F32)sensorId, pressureReading ); + break; - checkPersistentAlarm( ALARM_ID_DG_PRESSURE_OUT_OF_RANGE, isPressureOutOfRange, (F32)sensorId, pressureReading ); + case PRESSURE_SENSOR_BAROMETRIC: + if ( baroConvConsts.pressureSensitivity != 0 ) + { + pressureReading = getBaroPressurePSI(); + isPressureOutOfRange = ( ( pressureReading < MIN_VALID_BARO_PRESSURE_PSIA ) || ( pressureReading > MAX_VALID_BARO_PRESSURE_PSIA ) ? TRUE : FALSE ); + checkPersistentAlarm( ALARM_ID_DG_BARO_PRESSURE_OUT_OF_RANGE, isPressureOutOfRange, (F32)sensorId, pressureReading ); + } + break; + +#ifndef _VECTORCAST_ + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_PRESSURE_SENSOR_SELECTED, sensorId ); + break; +#endif + } } return result; @@ -375,14 +406,16 @@ // publish pressure/occlusion data on interval if ( ++pressuresDataPublicationTimerCounter >= getU32OverrideValue( &pressuresDataPublishInterval ) ) { - PRESSURES_DATA_T data; - data.roPumpInletPressure = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_INLET ); - data.roPumpOutletPressure = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_OUTLET ); - data.drainPumpInletPressure = getMeasuredDGPressure( PRESSURE_SENSOR_DRAIN_PUMP_INLET ); - data.drainPumpOutletPressure = getMeasuredDGPressure( PRESSURE_SENSOR_DRAIN_PUMP_OUTLET ); + PRESSURES_DATA_T data; - broadcastData( MSG_ID_DG_PRESSURES_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( PRESSURES_DATA_T ) ); + data.roPumpInletPressure = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_INLET ); + data.roPumpOutletPressure = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_OUTLET ); + data.drainPumpInletPressure = getMeasuredDGPressure( PRESSURE_SENSOR_DRAIN_PUMP_INLET ); + data.drainPumpOutletPressure = getMeasuredDGPressure( PRESSURE_SENSOR_DRAIN_PUMP_OUTLET ); + data.barometricPressure = getMeasuredDGPressure( PRESSURE_SENSOR_BAROMETRIC ); pressuresDataPublicationTimerCounter = 0; + + broadcastData( MSG_ID_DG_PRESSURES_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( PRESSURES_DATA_T ) ); } }