Index: firmware/App/Controllers/Pressures.c =================================================================== diff -u -rb8f298547eb578000b3ff3cf55732fda7a689ce0 -r79d0c6ca5e03581ba1b4a142f5b450bf4547dded --- firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision b8f298547eb578000b3ff3cf55732fda7a689ce0) +++ firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 79d0c6ca5e03581ba1b4a142f5b450bf4547dded) @@ -7,8 +7,8 @@ * * @file Pressures.c * -* @author (last) Dara Navaei -* @date (last) 11-Jan-2023 +* @author (last) Bill Bracken +* @date (last) 17-Jan-2023 * * @author (original) Sean * @date (original) 04-Apr-2020 @@ -151,8 +151,8 @@ msrdPressureSum[ i ] = 0; } - initPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE, INLET_WATER_PRES_OUT_OF_RANGE_TIMEOUT_MS, INLET_WATER_PRES_OUT_OF_RANGE_CLEAR_MS ); - initPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_IN_HIGH_RANGE, INLET_WATER_PRES_OUT_OF_RANGE_TIMEOUT_MS, INLET_WATER_PRES_OUT_OF_RANGE_CLEAR_MS ); + initPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE, INLET_WATER_PRES_OUT_OF_RANGE_CLEAR_MS, INLET_WATER_PRES_OUT_OF_RANGE_TIMEOUT_MS ); + initPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_IN_HIGH_RANGE, INLET_WATER_PRES_OUT_OF_RANGE_CLEAR_MS, INLET_WATER_PRES_OUT_OF_RANGE_TIMEOUT_MS ); 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 ); initPersistentAlarm( ALARM_ID_DG_CLEANING_MODE_INLET_WATER_PRESSURE_TOO_HIGH, INLET_WATER_PRES_OUT_OF_RANGE_TIMEOUT_MS, INLET_WATER_PRES_OUT_OF_RANGE_TIMEOUT_MS ); @@ -183,17 +183,17 @@ case DG_MODE_GENE: case DG_MODE_FILL: case DG_MODE_DRAI: - if ( ( pressure >= MIN_INLET_WATER_PRESSURE_WARNING_LOW_PSIG ) && ( TRUE == isAlarmActive( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE ) ) ) + if ( TRUE == isAlarmActive( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE ) ) { - isPressureTooLow = FALSE; + isPressureTooLow = ( pressure >= MIN_INLET_WATER_PRESSURE_WARNING_LOW_PSIG ? FALSE : TRUE ); } // Per PRS 401 checkPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE, isPressureTooLow, pressure, MAX_INLET_WATER_PRESSURE_WARNING_LOW_PSIG ); - if ( ( pressure <= MIN_INLET_WATER_PRESSURE_WARNING_HIGH_PSIG ) && ( TRUE == isAlarmActive( ALARM_ID_INLET_WATER_PRESSURE_IN_HIGH_RANGE ) ) ) + if ( TRUE == isAlarmActive( ALARM_ID_INLET_WATER_PRESSURE_IN_HIGH_RANGE ) ) { - isPressureTooHigh = FALSE; + isPressureTooHigh = ( pressure <= MIN_INLET_WATER_PRESSURE_WARNING_HIGH_PSIG ? FALSE : TRUE ); } // Per PRS 841 @@ -245,6 +245,18 @@ return result; } + +/*********************************************************************//** + * @brief + * The resetPressuresPOSTState function resets the pressures POST state. + * @details Inputs: none + * @details Outputs: pressuresSelfTestState + * @return none + *************************************************************************/ +void resetPressuresPOSTState( void ) +{ + pressuresSelfTestState = PRESSURE_SELF_TEST_STATE_START; +} /*********************************************************************//** * @brief @@ -555,14 +567,14 @@ *************************************************************************/ static void monitorPressureSensors( void ) { - U08 sensorId; - BOOL isPressureOutOfRange = FALSE; - BOOL isCurrentPressureOut = FALSE; - BOOL isBaroOutOfRange = FALSE; - F32 pressureOutID = 0.0F; - F32 pressureReading = 0.0F; + PRESSURE_SENSORS_T sensorId; + PRESSURE_SENSORS_T sensorInAlarm = PRESSURE_FIRST; + F32 pressureReading = 0.0F; + BOOL isBaroOutOfRange = FALSE; + BOOL isPressureOutOfRange = FALSE; + F32 alarmPressure = 0.0F; - for ( sensorId = 0; sensorId < NUM_OF_PRESSURE_SENSORS; sensorId++ ) + for ( sensorId = PRESSURE_FIRST; sensorId < NUM_OF_PRESSURE_SENSORS; sensorId++ ) { switch ( sensorId ) { @@ -576,9 +588,12 @@ // Remember the ID of the pressure sensor that is out of range. The ID is converted to float since the check persistent alarm function // accepts only floats. pressureReading = getMeasuredDGPressure( sensorId ) + getBaroPressurePSI(); - isCurrentPressureOut = ( ( pressureReading < MIN_VALID_PRESSURE_RANGE_PSIA ) || ( pressureReading > MAX_VALID_PRESSURE_RANGE_PSIA ) ? TRUE : FALSE ); - isPressureOutOfRange |= isCurrentPressureOut; - pressureOutID = ( TRUE == isCurrentPressureOut ? (F32)sensorId : pressureOutID ); + if ( ( pressureReading < MIN_VALID_PRESSURE_RANGE_PSIA ) || ( pressureReading > MAX_VALID_PRESSURE_RANGE_PSIA ) ) + { + isPressureOutOfRange = TRUE; + sensorInAlarm = sensorId; + alarmPressure = pressureReading; + } break; case PRESSURE_SENSOR_BAROMETRIC: @@ -600,7 +615,7 @@ } // Once the sensors were all checked to be out of range, check the persistent alarm - checkPersistentAlarm( ALARM_ID_DG_PRESSURE_OUT_OF_RANGE, isPressureOutOfRange, pressureOutID, pressureReading ); + checkPersistentAlarm( ALARM_ID_DG_PRESSURE_OUT_OF_RANGE, isPressureOutOfRange, sensorInAlarm, alarmPressure ); }