Перейти к публикации

TCComponentTcFile.getFile() возвращает старую версию файла


alexeytur

Рекомендованные сообщения

Добрый день.

Дано: плагин для TeamCenter на Java, в нём у ревизии CAM-проекта получаю дочерний узел MENCProgram, а у него - узел CAM dataset, содержащий управляющую программу. Эту управляющую программу извлекаю в файловую систему.

Проблема: мой код почему-то извлекает старую версию УП - если перед этим сохранить prt  в NX, то будет извлечена УП из предыдущего сохранения, отстающего на несколько минут. Но если встать на CAM dataset и вручную извлечь через именованные ссылки, то сохранится актуальная версия. В отладке смотрю, всё правильно до метода TCComponentTcFile.getFile(), он почему-то сохраняет файл, отстающий на несколько минут. В чем может быть ошибка?

			if (comp.getTypeComponent().toString().contains("MENCProgram")) 
			{
				try 
				{
					String itemRevId = "error", itemId = "error";
					AIFComponentContext[] compUsed = comp.whereReferenced(); //где используется компонент MENCProgram
					for (AIFComponentContext compU : compUsed) 
					{
						InterfaceAIFComponent compI = compU.getComponent();
						TCComponent compTC = (TCComponent)compI; //преобразование в TCComponent compTC
						if (compTC.getTypeComponent().toString().contains("MEActivity")) 
						{
							AIFComponentContext[] compTCUsed = compTC.whereReferenced(); //где используется компонент TCComponent compTC
							for (AIFComponentContext compTCU : compTCUsed) 
							{
								InterfaceAIFComponent compTCI = compTCU.getComponent();
								TCComponent compTC2 = (TCComponent)compTCI; //преобразование в TCComponent compTC2
								TCComponentItemRevision itemRev = (TCComponentItemRevision)compTC2; //преобразование в TCComponentItemRevision itemRev
								if (compTC2.getTypeComponent().toString().contains("RH5_CAMProjectRevision")) 
								{
									itemRevId = itemRev.getProperty("item_revision_id"); //получение item_revision_id
									TCComponentItem item = itemRev.getItem(); //получение самого item
									itemId = item.getProperty("item_id"); //получение item_id
								}
							}
						}
					}
					String sFirstPartPath = "D:\\Siemens\\NCF_Projects\\";
					String sPath = sFirstPartPath + itemId + "\\" + itemRevId + "\\UP";
					path = Paths.get(sPath);
					if (!Files.exists(path)) 
					{
						File dir = new File(sPath);
					    dir.mkdirs();
					}
					/* else 
					{
						File dir = new File(sPath);
						ClearLocalFolder.recursiveDelete(dir);
						Thread.sleep(1000);
						dir.mkdirs();
					}*/
					DownloadUPo(comp, sPath);
				} 
				catch (TCException e/* | InterruptedException e*/) 
				{
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}

	protected void DownloadUPo(TCComponent activityComp, String folder) 
	{
		try 
		{
			TCComponent[] achPrComps = activityComp.getRelatedComponents();		 //все объекты в отношениях с TCComponent activityComp
			for (TCComponent achPrComp : achPrComps) 
			{
				if (achPrComp.getTypeComponent().toString().contains("UGCAMPTP")) 
				{ //если объект нужного типа
					TCComponentDataset cam_dataset = (TCComponentDataset)achPrComp;
					TCComponentTcFile tc_files[] = cam_dataset.getTcFiles(); //получаем файлы TCComponentDataset cam_dataset
					for (TCComponentTcFile tc_file : tc_files)
					{
						SaveTcFile(tc_file, folder);
					}
				}
			}
		} 
		catch (TCException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();//
		}
	}
	
	// Сохраняет объект tc_file в папку
	protected void SaveTcFile(TCComponentTcFile tc_file, String folder)
	{
		try
		{
			String file_path = folder + "\\"+ tc_file.toString();
			File file = new File(file_path);
			Path fp = Paths.get(file_path);
			if (Files.exists(fp)) 
			{
				boolean answer_rewrite = MessageDialog.openQuestion(window.getShell(),"Файл уже существует", "Перезаписать файл\n\n" + file_path + "\n\n?");
				if (answer_rewrite) 
				{ 
					file.delete();
					tc_file.getFile(folder);
					file.setLastModified(System.currentTimeMillis());
				}
			}
			else 
			{
				tc_file.getFile(folder);											
				file.setLastModified(System.currentTimeMillis());
			}	
		}
		catch (TCException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

 

img.jpg

Ссылка на сообщение
Поделиться на других сайтах


@koner

Я сделал

TCComponentDataset cam_dataset = (TCComponentDataset)achPrComp;
cam_dataset.clearCache();

Вроде работает. Это правильное решение?

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




  • Сообщения

    • egor-40
      Попробуй включить G98(минутная подача). подача будет G01 F100. или F300. 
    • Maik812
      с какой версии сам модуль.
    • Павлуха
      Отстали от жизни? В солиде уже давно кам-модуль вшит.
    • Ветерок
      В Солиде не получится. Солид - это КАД - в нем строится геометрия. И только. Потому в каком-нибудь КАМ строятся траектории, задаются скорости, направления и прочее. И только потом всё это преобразуется в Ж-коды при помощи постпроцессора именно под конкретную стойку. Нужны все три составляющие - КАД-КАМ-постпроцессор.
    • bubl leg
      Всем доброго, друзья!   Вопрос такой: по причине того, что собираю свой ЧПУ станочек настольный с довольно простыми для ЧПУ задачами (супержесткой рамы и прочего - не сильно обязательно) - рисование маркером печатных плат и сверловка их же - требуется какой то более менее подробный гайд на русском языке, по подготовке G-CODE в Solidworks. На youtube я нашел кучу конечно...Смотрю...Но, хоть и понимаю англицкий неплохо, всё равно не так "на лету", как хотелось бы.   Из этого вопрос: может ли кто то порекомендовать имеющийся тут, на форуме или ещё где то - русскоязычный более менее подробный гайд или видео - по моей задаче? Именно в Solidworks (не во FreeCAD и прочем).   Заранее спасибо!   P.S. Как собрать электронику для станка, как прошить - это всё не важно, это всё знаю. Интересует именно подготовка G-CODE в среде Solidworks,с примерами и (желательно) последующей отправкой на ЧПУ.
    • grayve
      Нет этого пункта в меню((( Вопрос решен. Нужно нажать кнопку Применить представление структуры изделия...
    • BSV1
      С наступающим!  
    • grayve
      Народ, Добрый вечер! Подскажите, у меня в сборке несколько сотен кирпичей. Печь собираю. Многие из них стандартные изделия, но поскольку в библиотеке таких кирпичей нет мне пришлось их делать в виде деталей. Соответственно сейчас в спецификации они попали в сборочные единицы. Знаю, что можно по одной детали через окно структуры поменять Раздел... Но несколько сотен раз очень не хочется. Помогите решить проблему? T-Flex 17
    • grayve
      Нужно разорвать проекционную связь с проекцией и переходить на другую страницу.
    • Viktor2004
      наверное для этого и сделали переменную #8501 но она только для MDI клавиш. Цифр и букв там нет. Я когда пробовал на C-Executor писать, тоже не смог реализовать перехват нажатия кнопок во время загрузки ЧПУ. Там тоже фиксируется момент нажатия, а если она уже нажата во время загрузки, инструментами СИ это перехватить не получится
×
×
  • Создать...