Index: firmware/App/Controllers/LoadCell.c =================================================================== diff -u -r5d164f156c9c39a3ceb92f57e50d85a0357d0fb2 -r2f587478f8ced570a80ef4985c764148566c9878 --- firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 5d164f156c9c39a3ceb92f57e50d85a0357d0fb2) +++ firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 2f587478f8ced570a80ef4985c764148566c9878) @@ -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 ) {