private void checkBeltSpeed(List<BeltState> beltStates, SystemState state, List<Integer> nodes) {
    for (BeltState beltState : beltStates) {
      // determine upper and lower thresholds for alarms and warnings
      double setpoint = beltState.getBeltUnit().getSetpoint();
      double processValue = beltState.getBeltSpeed();
      double upperLimit = setpoint + beltState.getBeltUnit().getHiWarn();
      double lowerLimit = setpoint - beltState.getBeltUnit().getLoWarn();

      if (setpoint == 0.0) {
        yellowFlag = true;
        beltState.setColor(WHITE);
        continue;
      }

      switch (beltState.getBeltFlag()) {
        case OFF:
          yellowFlag = true;
          beltState.setColor(GRAY);
          break;
        case SET:
          yellowFlag = true;
          beltState.setColor(WHITE);
          break;
        case SEEKING:
          yellowFlag = true;
          if (processValue > lowerLimit && processValue < upperLimit)
            beltState.setBeltFlag(GenFlag.ACTIVE);
          beltState.setColor(WHITE);
          break;
        case ACTIVE:
          beltState.setColor(GREEN);
          if (processValue < lowerLimit || processValue > upperLimit) {
            yellowFlag = true;
            if (beltState.getColor().equals(GREEN)) {
              beltState.setColor(YELLOW);
              if (state.equals(SystemState.SYSTEM_STATE_RUN)) {
                CanComm.sendSystemState(
                    SystemState.SYSTEM_STATE_RUN_PAUSE, Can.OpId.OPER_SET.ordinal(), nodes);
                CanComm.setLightTower(Equip.LightTowerState.WARNING.getTower());
                log.error("beltSpeed out of warning band: " + processValue);
              }
            }
          }
          break;
        default:
          break;
      }
    }
  }