Index: firmware/App/Controllers/LoadCell.c =================================================================== diff -u -rcbcd41ec1ac2d5ae6446ec206ed6991a5306c249 -rdfb6b6f44bbcfd44e7d55914ee82617c2f50d745 --- firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision cbcd41ec1ac2d5ae6446ec206ed6991a5306c249) +++ firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision dfb6b6f44bbcfd44e7d55914ee82617c2f50d745) @@ -45,7 +45,7 @@ #define LOAD_CELL_ADC_ERROR_PERSISTENCE 500 ///< Alarm persistence period (in ms) for load cell ADC errors. #define EMPTY_RESERVOIR_WEIGHT_GRAMS 1600 ///< Reservoirs empty weight in grams. #define MAX_ALLOWED_EXTRA_WEIGHT_BEFORE_FIRST_TARE_GRAMS 300 ///< Max allowed extra weight before first tare in grams. -#define MAX_ALLOWED_EXTRA_WEIGHT_BEFORE_TARE_GRAMS 15 ///< Max allowed extra weight before tare in grams. +#define MAX_ALLOWED_EXTRA_WEIGHT_BEFORE_TARE_GRAMS 60 ///< Max allowed extra weight before tare in grams. /// Load cell data structure. typedef struct Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -r24dd186948c13ae8e1ff88c14cc4f478e739ee0b -rdfb6b6f44bbcfd44e7d55914ee82617c2f50d745 --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 24dd186948c13ae8e1ff88c14cc4f478e739ee0b) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision dfb6b6f44bbcfd44e7d55914ee82617c2f50d745) @@ -21,6 +21,7 @@ #include "ModeDrain.h" #include "ModeGenIdle.h" #include "OperationModes.h" +#include "Pressures.h" #include "Reservoirs.h" #include "SystemCommMessages.h" #include "TaskGeneral.h" @@ -40,7 +41,9 @@ #define DEFAULT_DRAIN_VOLUME_ML 0 ///< Default drain volume in mL. #define MAX_DRAIN_VOLUME_ML MAX_RESERVOIR_VOLUME_ML ///< Maximum drain volume in mL. -#define MAX_RESERVOIR_WEIGHT 10000 ///< Maximum reservoir weight in grams. +#define MAX_RESERVOIR_WEIGHT 10000 ///< Maximum reservoir weight in grams. + +#define MIN_DRAIN_INLET_PSI_EMPTY 3.0 ///< Minimum drain inlet pressure (in PSI) to indicate reservoir is empty while drain pump on. #define RESERVOIR_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< interval (ms/task time) at which the reservoir data is published on the CAN bus. @@ -493,7 +496,8 @@ // If the goal is to tare the load cell, then the target drain should be reached and timing out on the // reservoir weight is not enough - if ( ( TRUE == hasTimeOut ) || ( ( TRUE == hasTargetReached ) && ( FALSE == tareLoadCellRequest ) ) ) + if ( ( ( TRUE == hasTimeOut ) && ( getMeasuredDGPressure( PRESSURE_SENSOR_DRAIN_PUMP_INLET ) > MIN_DRAIN_INLET_PSI_EMPTY ) ) || + ( ( TRUE == hasTargetReached ) && ( FALSE == tareLoadCellRequest ) ) ) { result = TRUE; // Reset for next drain