Index: firmware/App/Controllers/LoadCell.c =================================================================== diff -u -r61fc45d7a43557312d6abd00a6b01e6823b44f04 -rc9a2e913b21980bb44a5418f6acf01a7fa77a9c9 --- firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 61fc45d7a43557312d6abd00a6b01e6823b44f04) +++ firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision c9a2e913b21980bb44a5418f6acf01a7fa77a9c9) @@ -169,6 +169,11 @@ U32 b1 = getFPGALoadCellB1(); U32 b2 = getFPGALoadCellB2(); + BOOL isLoadCellOutOfRange = FALSE; + BOOL isCurrentLoadCellOut = FALSE; + U08 loadCellOutID = 0; + F32 weight = 0.0F; + // Check error bits from new readings U32 a1Err = ( a1 >> SHIFT_BITS_BY_31 ); U32 a2Err = ( a2 >> SHIFT_BITS_BY_31 ); @@ -220,7 +225,13 @@ loadCellsCalRecord.loadCells[ (CAL_DATA_DG_LOAD_CELLS_T)ii ].offset; // Monitor the load cells weight - monitorLoadCellsWeightOutOfRange( (LOAD_CELL_ID_T)ii ); + // Since there is a single alarm value for all 4 load cells the persistence check must be + // executed if ANY of the load cell values are out of range. Only when all of the load + // cells are in range should the persistence for the alarm be cleared. + weight = getLoadCellWeight( ii ); + isCurrentLoadCellOut = ( ( weight < LOAD_CELL_MIN_ALLOWED_WEIGHT_GRAMS ) || ( weight > LOAD_CELL_MAX_ALLOWED_WEIGHT_GRAMS ) ? TRUE : FALSE ); + isLoadCellOutOfRange != isCurrentLoadCellOut; + loadCellOutID = ( TRUE == isCurrentLoadCellOut ? ii : loadCellOutID ); loadcells[ ii ].loadCellVelocity_g_min = ( getLoadCellWeight( (LOAD_CELL_ID_T)ii ) - loadcells[ ii ].smallFilterReadings[ smallReadingsIdx ] ) * (F32)SEC_PER_MIN; @@ -236,6 +247,7 @@ // Apply the tare offset. NOTE: tare must be applied after checking the weight out of range. loadcells[ ii ].smallFilteredWeight.data -= loadcells[ ii ].autoCalOffset; } + checkPersistentAlarm( ALARM_ID_DG_LOAD_CELL_WEIGHT_OUT_OF_RANGE, isLoadCellOutOfRange, loadCellOutID, weight ); smallReadingsIdx = INC_WRAP( smallReadingsIdx, 0, SIZE_OF_SMALL_LOAD_CELL_AVG - 1 ); Index: firmware/App/Modes/ModeHeatDisinfect.c =================================================================== diff -u -rc3dad292358c336c5b37716292f84d79b9881e2f -rc9a2e913b21980bb44a5418f6acf01a7fa77a9c9 --- firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision c3dad292358c336c5b37716292f84d79b9881e2f) +++ firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision c9a2e913b21980bb44a5418f6acf01a7fa77a9c9) @@ -622,7 +622,7 @@ // Couldn't get a good water sample after a couple of trials and the disinfect cycle failed else { - alarmDetectedPendingTrigger = ALARM_ID_DG_HEAT_DISINFECT_INLET_COND_OR_TEMP_OUT; + alarmDetectedPendingTrigger = ALARM_ID_DG_HEAT_DISINFECT_INLET_COND_AND_TEMP_OUT; prevHeatDisinfectState = state; state = DG_HEAT_DISINFECT_STATE_CANCEL_BASIC_PATH; }