Index: firmware/App/Controllers/Pressures.c =================================================================== diff -u -ra12e1212c1cf49011ed8d65beaf9416ca18ffe98 -r48731d366e7dc37dc2f343398b4ab901f6237e24 --- firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision a12e1212c1cf49011ed8d65beaf9416ca18ffe98) +++ firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 48731d366e7dc37dc2f343398b4ab901f6237e24) @@ -7,8 +7,8 @@ * * @file Pressures.c * -* @author (last) Dara Navaei -* @date (last) 14-Apr-2023 +* @author (last) Darren Cox +* @date (last) 12-Jul-2023 * * @author (original) Sean * @date (original) 04-Apr-2020 @@ -56,14 +56,15 @@ #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_PSIG 14.0F ///< Maximum allowed low pressure value in psig. -#define MIN_INLET_WATER_PRESSURE_WARNING_LOW_PSIG 30.0F ///< Minimum allowed low pressure value in psig. +#define MAX_INLET_WATER_PRESSURE_WARNING_LOW_PSIG 23.0F ///< Maximum allowed low pressure value in psig. +#define MAX_FLUSH_INLET_WATER_PRESSURE_WARNING_LOW_PSIG 14.0F ///< Maximum allowed low pressure value for Flush in psig. +#define MIN_INLET_WATER_PRESSURE_WARNING_LOW_PSIG 24.0F ///< Minimum allowed low pressure value in psig. #define MAX_INLET_WATER_PRESSURE_WARNING_HIGH_PSIG 80.0F ///< Maximum allowed high pressure value in psig. #define MIN_INLET_WATER_PRESSURE_WARNING_HIGH_PSIG 78.0F ///< Minimum allowed high pressure value in psig. -#define INLET_WATER_PRES_OUT_OF_RANGE_TIMEOUT_MS ( 30 * MS_PER_SECOND ) ///< Persistence period for pressure out of range error in milliseconds. -#define INLET_WATER_PRES_OUT_OF_RANGE_CLEAR_MS ( 1 * MS_PER_SECOND ) ///< Persistence period for pressure out of range clear in milliseconds. +#define INLET_WATER_PRES_OUT_OF_RANGE_TIMEOUT_MS ( 20 * MS_PER_SECOND ) ///< Persistence period for pressure out of range error in milliseconds. +#define INLET_WATER_PRES_OUT_OF_RANGE_CLEAR_MS ( 10 * MS_PER_SECOND ) ///< Persistence period for pressure out of range clear in milliseconds. #define PRESSURE_OUT_OF_RANGE_TIMEOUT_MS ( 5 * MS_PER_SECOND ) ///< Pressure out of range persistence period in milliseconds. #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. @@ -168,58 +169,76 @@ *************************************************************************/ void checkInletWaterPressure( void ) { + F32 pressure = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_INLET ); + + if ( VALVE_STATE_OPEN == getValveStateName( VPI ) ) + { #ifndef _RELEASE_ - if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_WATER_QUALITY_CHECK ) != SW_CONFIG_ENABLE_VALUE ) + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_WATER_QUALITY_CHECK ) != SW_CONFIG_ENABLE_VALUE ) #endif - { - DG_OP_MODE_T opMode = getCurrentOperationMode(); - F32 pressure = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_INLET ); - BOOL isPressureTooLow = ( pressure < MAX_INLET_WATER_PRESSURE_WARNING_LOW_PSIG ? TRUE : FALSE ); - BOOL isPressureTooHigh = ( pressure > MAX_INLET_WATER_PRESSURE_WARNING_HIGH_PSIG ? TRUE : FALSE ); - - switch( opMode ) { - case DG_MODE_GENE: - case DG_MODE_FILL: - case DG_MODE_DRAI: - case DG_MODE_STAN: - if ( TRUE == isAlarmActive( ALARM_ID_DG_INLET_WATER_PRESSURE_IN_LOW_RANGE ) ) - { - isPressureTooLow = ( pressure >= MIN_INLET_WATER_PRESSURE_WARNING_LOW_PSIG ? FALSE : TRUE ); - } + BOOL isPressureTooLow; + BOOL isPressureTooHigh; + F32 maxInletWaterPressureWarningLow = MAX_INLET_WATER_PRESSURE_WARNING_LOW_PSIG; + DG_OP_MODE_T opMode = getCurrentOperationMode(); - // Per PRS 401 - checkPersistentAlarm( ALARM_ID_DG_INLET_WATER_PRESSURE_IN_LOW_RANGE, isPressureTooLow, pressure, MAX_INLET_WATER_PRESSURE_WARNING_LOW_PSIG ); + if ( DG_MODE_STAN == opMode ) + { + maxInletWaterPressureWarningLow = MAX_FLUSH_INLET_WATER_PRESSURE_WARNING_LOW_PSIG; + } - if ( TRUE == isAlarmActive( ALARM_ID_DG_INLET_WATER_PRESSURE_IN_HIGH_RANGE ) ) - { - isPressureTooHigh = ( pressure <= MIN_INLET_WATER_PRESSURE_WARNING_HIGH_PSIG ? FALSE : TRUE ); - } + isPressureTooLow = ( pressure < maxInletWaterPressureWarningLow ? TRUE : FALSE ); + isPressureTooLow = ( pressure > MAX_INLET_WATER_PRESSURE_WARNING_HIGH_PSIG ? TRUE : FALSE ); - // Per PRS 841 - checkPersistentAlarm( ALARM_ID_DG_INLET_WATER_PRESSURE_IN_HIGH_RANGE, isPressureTooHigh, pressure, MAX_INLET_WATER_PRESSURE_WARNING_HIGH_PSIG ); - break; + switch( opMode ) + { + case DG_MODE_GENE: + case DG_MODE_FILL: + case DG_MODE_DRAI: + case DG_MODE_STAN: + if ( TRUE == isAlarmActive( ALARM_ID_DG_INLET_WATER_PRESSURE_IN_LOW_RANGE ) ) + { + isPressureTooLow = ( pressure >= MIN_INLET_WATER_PRESSURE_WARNING_LOW_PSIG ? FALSE : TRUE ); + } - case DG_MODE_FLUS: - case DG_MODE_HEAT: - case DG_MODE_HCOL: - case DG_MODE_CHEM: - case DG_MODE_CHFL: - case DG_MODE_ROPS: - if ( VALVE_STATE_OPEN == getValveStateName( VPI ) ) - { + // Per PRS 401 + checkPersistentAlarm( ALARM_ID_DG_INLET_WATER_PRESSURE_IN_LOW_RANGE, isPressureTooLow, pressure, maxInletWaterPressureWarningLow ); + + if ( TRUE == isAlarmActive( ALARM_ID_DG_INLET_WATER_PRESSURE_IN_HIGH_RANGE ) ) + { + isPressureTooHigh = ( pressure <= MIN_INLET_WATER_PRESSURE_WARNING_HIGH_PSIG ? FALSE : TRUE ); + } + + // Per PRS 841 + checkPersistentAlarm( ALARM_ID_DG_INLET_WATER_PRESSURE_IN_HIGH_RANGE, isPressureTooHigh, pressure, MAX_INLET_WATER_PRESSURE_WARNING_HIGH_PSIG ); + break; + + case DG_MODE_FLUS: + case DG_MODE_HEAT: + case DG_MODE_HCOL: + case DG_MODE_CHEM: + case DG_MODE_CHFL: + case DG_MODE_ROPS: // TODO define the PRS checkPersistentAlarm( ALARM_ID_DG_CLEANING_MODE_INLET_WATER_PRESSURE_TOO_HIGH, isPressureTooHigh, pressure, MAX_INLET_WATER_PRESSURE_WARNING_HIGH_PSIG ); // TODO define the PRS checkPersistentAlarm( ALARM_ID_DG_CLEANING_MODE_INLET_WATER_PRESSURE_TOO_LOW, isPressureTooLow, pressure, MIN_INLET_WATER_PRESSURE_WARNING_LOW_PSIG ); - } - break; + break; - default: - // NOTE: Do nothing for the rest of the modes - break; + default: + // NOTE: Do nothing for the rest of the modes + break; + } } } + else + { + // VPI is closed - clear all alarms + checkPersistentAlarm( ALARM_ID_DG_INLET_WATER_PRESSURE_IN_LOW_RANGE, FALSE, pressure, MAX_INLET_WATER_PRESSURE_WARNING_LOW_PSIG ); + checkPersistentAlarm( ALARM_ID_DG_INLET_WATER_PRESSURE_IN_HIGH_RANGE, FALSE, pressure, MAX_INLET_WATER_PRESSURE_WARNING_HIGH_PSIG ); + checkPersistentAlarm( ALARM_ID_DG_CLEANING_MODE_INLET_WATER_PRESSURE_TOO_HIGH, FALSE, pressure, MAX_INLET_WATER_PRESSURE_WARNING_HIGH_PSIG ); + checkPersistentAlarm( ALARM_ID_DG_CLEANING_MODE_INLET_WATER_PRESSURE_TOO_LOW, FALSE, pressure, MIN_INLET_WATER_PRESSURE_WARNING_LOW_PSIG ); + } } /*********************************************************************//**