Index: firmware/App/Controllers/LoadCell.c =================================================================== diff -u -r0d0a65cc7b3daef294349a176d7f603a06634aa8 -r8e76e184113c751f5da2b950b7866c3dfd2cf1ad --- firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 0d0a65cc7b3daef294349a176d7f603a06634aa8) +++ firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 8e76e184113c751f5da2b950b7866c3dfd2cf1ad) @@ -367,6 +367,18 @@ BOOL isWeightOutOfRange = FALSE; F32 weight = getLoadCellSmallFilteredWeight( loadCellID ); + if ( ( DG_MODE_SERV == getCurrentOperationMode() ) && ( loadcells[ loadCellID ].autoCalOffset <= NEARLY_ZERO ) ) + { + // In service mode, some of the tests are done when the auto call offset is needed and some when is not needed. + // Once the tare command is issued, we need an auto cal value other than 0 otherwise the tare will fail since we will be at least 1700 grams + // which is the weight of the empty reservoirs. So for that matter, if the reservoirs have not been tared in the service mode meaning + // that the auto cal offset is zero, use the default values from the cal records. + CAL_DATA_DG_RESERVOIRS_T rsrvr = ( ( LOAD_CELL_RESERVOIR_1_PRIMARY == loadCellID ) || ( LOAD_CELL_RESERVOIR_1_BACKUP == loadCellID ) ? + CAL_DATA_RSRVR_1 : CAL_DATA_RSRVR_2 ); + + loadcells[ loadCellID ].autoCalOffset = reservoirsCalRecord.reservoir[ rsrvr ].rsrvrUnfilledWeight; + } + // Check if the load cell is being tared for the first time if ( hasLoadCellBeenTared[ loadCellID ] != TRUE ) {