Index: firmware/App/Controllers/Pressures.c =================================================================== diff -u -r025612ad77fe630889a364586de54bffe5262d56 -rc7ed4f90b600fe684097654f150e4972646ffec9 --- firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 025612ad77fe630889a364586de54bffe5262d56) +++ firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision c7ed4f90b600fe684097654f150e4972646ffec9) @@ -1,14 +1,14 @@ /************************************************************************** * -* Copyright (c) 2019-2022 Diality Inc. - All Rights Reserved. +* Copyright (c) 2020-2022 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file Pressures.c * * @author (last) Dara Navaei -* @date (last) 01-Jan-2022 +* @date (last) 04-Feb-2022 * * @author (original) Sean * @date (original) 04-Apr-2020 @@ -46,9 +46,12 @@ #define MIN_VALID_PRESSURE_RANGE 0.0 ///< Minimum valid range on pressure reading. #define MAX_VALID_PRESSURE_RANGE 200.0 ///< Maximum valid range on pressure reading. -#define MIN_INLET_WATER_PRESSURE 25 ///< Minimum water input pressure. +#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. + #define INLET_WATER_PRESSURE_PERSISTENCE_PERIOD ( 5 * MS_PER_SECOND ) ///< Persistence period for pressure out of range error. #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 10 ///< Data publish counter start count. /// Defined states for the pressures monitor state machine. typedef enum PresOccl_States @@ -70,7 +73,7 @@ // ********** private data ********** static PRESSURE_STATE_T pressuresState; ///< current state of pressure monitor state machine. -static U32 pressuresDataPublicationTimerCounter = 0; ///< used to schedule pressure data publication to CAN bus. +static U32 pressuresDataPublicationTimerCounter; ///< used to schedule pressure data publication to CAN bus. static OVERRIDE_U32_T pressuresDataPublishInterval = { PRESSURES_DATA_PUB_INTERVAL, PRESSURES_DATA_PUB_INTERVAL, 0, 0 }; /// Pressure data publish interval. @@ -114,9 +117,9 @@ pressuresState = PRESSURE_INIT_STATE; pressuresSelfTestState = PRESSURE_SELF_TEST_STATE_START; - pressuresDataPublicationTimerCounter = 0; + pressuresDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; - initPersistentAlarm( ALARM_ID_INLET_WATER_LOW_PRESSURE, INLET_WATER_PRESSURE_PERSISTENCE_PERIOD, INLET_WATER_PRESSURE_PERSISTENCE_PERIOD ); + initPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE, INLET_WATER_PRESSURE_PERSISTENCE_PERIOD, INLET_WATER_PRESSURE_PERSISTENCE_PERIOD ); initPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_FAULT, INLET_WATER_PRESSURE_PERSISTENCE_PERIOD, INLET_WATER_PRESSURE_PERSISTENCE_PERIOD ); } @@ -131,31 +134,23 @@ void checkInletPressure( void ) { #ifndef DISABLE_WATER_QUALITY_CHECK - F32 const pressure = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_INLET ); - BOOL const isPressureTooLow = ( pressure < MIN_INLET_WATER_PRESSURE ); + F32 pressure = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_INLET ); + BOOL isPressureTooLow = ( pressure < MAX_INLET_WATER_PRESSURE_WARNING_LOW ? TRUE : FALSE ); - checkPersistentAlarm( ALARM_ID_INLET_WATER_LOW_PRESSURE, isPressureTooLow, pressure, MIN_INLET_WATER_PRESSURE ); + // Alarm per PRS 401 + if ( TRUE == isPressureTooLow ) + { + checkPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE, isPressureTooLow, pressure, MAX_INLET_WATER_PRESSURE_WARNING_LOW ); + } + else if ( pressure >= MIN_INLET_WATER_PRESSURE_WARNING_LOW ) + { + checkPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE, FALSE, pressure, MAX_INLET_WATER_PRESSURE_WARNING_LOW ); + } #endif } /*********************************************************************//** * @brief - * The checkInletPressureFault function checks inlet water pressure value - * and triggers a machine fault when pressure value is out of allowed range. - * @details Inputs: RO pump inlet pressure sensor value - * @details Outputs: Triggers pressure fault persistent alarm - * @return none - *************************************************************************/ -void checkInletPressureFault( void ) -{ - F32 const pressure = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_INLET ); - BOOL const isPressureTooLow = ( pressure < MIN_INLET_WATER_PRESSURE ); - - checkPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_FAULT, isPressureTooLow, pressure, MIN_INLET_WATER_PRESSURE ); -} - -/*********************************************************************//** - * @brief * The getMeasuredArterialPressure function gets the current arterial pressure. * @details Inputs: arterialPressure * @details Outputs: none