-
Recently Browsing 0 members
No registered users viewing this page.
-
Сообщения
-
By s_liam · Posted
А что измеряет и что задано изначально в длине? Сложно сказать так, нужны все циклы и подциклы. И в какой подпрограмме ошибка прописана, чтобы понять, что приводит к её возникновению. -
By IgP · Posted
Аааа, ну это стандартное решение от АСКОН: сделать тоже самое заново ... В данном случае установить ПО на ПК. -
By NDE · Posted
Собственно доработка ПО, различные утилиты DLL (User functions), написанные с помощью UGOpen. Из NX необходимо читать (и по возможности записывать) атрибуты в BOM Teamcenter. Ограничение версии NX - 10. А он, как известно, не умеет работать с атрибутами BOM line, с типами, отличающимися от строковых. Пример, есть атрибут в BOM - номер вхождения с типом integer. При работе в NX необходимо знать, какой атрибут присвоен конкретному компоненту. Штатными средствами увидеть это невозможно (в сборку входит деталь несколько раз с разными значениями этого атрибута и просто визуально посмотреть в Менеджере структуры и потом в навигаторе сборки NX и понять, что к чему относится - невозможно). Да и каменный век это -
By IgP · Posted
Ни hrena не понял ... Задачу бы лучше с технической/материалистичной стороны описали ... -
By NDE · Posted
Предисловие: "Или я слишком глубоко копаю и не вижу ответа на поверхности, или тут что-то действительно не так". Как организована интеграция NX и Teamcenter в части загрузки сборок и хранения информации о компонентах. Исходные данные: NX10, Teamcenter 11.6, испоьзование SOA из поставки NX, язык C/C++. Задача: из User Function NX читать атрибуты строк BOM и записывать их. Как я реализовал это сейчас:: Получаю сессию, открытую NX: NXOpen::Session *theSession = NXOpen::Session::GetSession(); NXOpen::PDM::PdmSession *thePdmSession = theSession->PdmSession(); connectionHandle = thePdmSession->GetSoaConnectionHandle(); Teamcenter::Soa::Client::Connection* tcSoaConnection = reinterpret_cast<Teamcenter::Soa::Client::Connection*>(connectionHandle->GetHandle()); Нахожу в базе ревизию сборки: dmSrev = Teamcenter::Services::Core::DatamanagementService::getService(tcSoaConnection); std::vector< Teamcenter::Services::Core::_2007_01::Datamanagement::GetItemFromIdInfo > query(1); Teamcenter::Services::Core::_2007_01::Datamanagement::GetItemFromIdPref pref; Teamcenter::Soa::Client::Model::ItemRevision *itemRevision; Teamcenter::Soa::Client::Model::Item *item; std::vector< Teamcenter::Soa::Client::ModelObject * > objs(1); query[0].itemId = object_id.GetUTF8Text(); query[0].revIds.push_back(object_rev.GetUTF8Text()); Teamcenter::Services::Core::DatamanagementService::GetItemFromIdResponse item_bom_response = dmSrev->getItemFromId(query, 1, pref); Создаю новое окно BOMWindow: itemRevision = item_bom_response.output[0].itemRevOutput[0].itemRevision; item = item_bom_response.output[0].item; bom_info[0].item = item; bom_info[0].itemRev = itemRevision; bom_info[0].clientId = "InfoDSERequest"; bom_info[0].bomView = nullptr; bom_info[0].objectForConfigure = nullptr; bom_info[0].activeAssemblyArrangement = nullptr; bom_info[0].revRuleConfigInfo = revRuleConfigInfo; Teamcenter::Services::Cad::StructuremanagementService *structServ = Teamcenter::Services::Cad::StructuremanagementService::getService(tcSoaConnection); Teamcenter::Services::Cad::_2007_01::Structuremanagement::CreateBOMWindowsResponse bomWindow = structServ->createBOMWindows(bom_info); topLine = bomWindow.output[0].bomLine; Дальше перебираю BOMLine, ищу UG ENTITY HANDLE, совпадающие с хэндлом в NX (с отбрасыванием от хэндла версионной информации, т.е. первые 28 символов): cur_line = dynamic_cast<Teamcenter::Soa::Client::Model::BOMLine *>(child_lines[i]); ent_handle = cur_line->get_UG_ENTITY_HANDLE(); UF_TAG_decompose_handle ((char*)ent_handle.c_str(), &file_data, &sub_file_id, &versio); child_file_data = file_data; UF_free(file_data); instance_file_data.resize(28); child_file_data.resize(28); if (!instance_file_data.compare(child_file_data) && instance_sub_file_id==sub_file_id) // Сравнение искомого компонента с каждой строкой BOMLine { Чтение атрибутов, например, seq_no = cur_line->get_bl_occ_int_order_no(); } Считаю что это неэффективно, да и вообще неправильно. Если посмотреть, что создаёт NX в кэше SOA с помощью Teamcenter::Soa::Client::ModelObjectVector all_objs; tcSoaConnection->getModelManager()->getObjectsFromStore(all_objs); То мы увидим там и BOMWindow и BOMLine и PSOccurrence и PSOccurrenceThread. Т.е. уже всё открыто и по идее надо работать именно с этими объектами. Но я, хоть убей, не могу найти связь между компонентом сборки NX и объектом TC. Максимум, что я накопал штатными средствами: Можно получить хэндл в БД для PendingComponents (естественно, NX Component для них ещё отсутствует). Хэндл имеет следующий вид: "wCpJ4WwyhfM7oB 0WhJ4WwyhfM7oB 2tpdxbGAhfM7oB". Это 3 UIds в Teamcenter. Первый - это UId айтема/ревизии, второй - PSBOMView, третий PSOccurrenceThread. Не штатными средствами, если импортировать функцию UGMGR_NX_ask_db_comp_handle_uids из LIBUGMR.DLL, можно получить такой же набор UIds для любого компонента NX или только PSOccurrenceThread с помощью UGMGR_NX_ask_occ_thread_of_instance: HINSTANCE lib = nullptr; typedef int(__cdecl *INT_TAG_CHAR_PROC)(tag_t, char **); typedef int(__cdecl *INT_TAG_CHAR3_PROC)(tag_t, char **,char ** ,char **); INT_TAG_CHAR3_PROC UGMGR_NX_ask_db_comp_handle_uids; INT_TAG_CHAR_PROC UGMGR_NX_ask_occ_thread_of_instance; lib = LoadLibraryA("LIBUGMR.DLL"); UGMGR_NX_ask_db_comp_handle_uids = (INT_TAG_CHAR3_PROC)GetProcAddress(lib, "?UGMGR_NX_ask_db_comp_handle_uids@@YAHIPEAPEAD00@Z"); UGMGR_NX_ask_occ_thread_of_instance = (INT_TAG_CHAR_PROC)GetProcAddress(lib, "?UGMGR_NX_ask_occ_thread_of_instance@@YAHIPEAPEAD@Z"); tag_t inst_tag = UF_ASSEM_ask_inst_of_part_occ(pComponent->Tag()); UGMGR_NX_ask_db_comp_handle_uids(inst_tag, &buf, &buf1, &buf2); UGMGR_NX_ask_occ_thread_of_instance(inst_tag, &buf); Эти функции написаны на C без использования ООП, поэтому мне удалось их использовать. Аналогичных функций в UGOpen я не нашёл. В принципе в LIBUGMR.DLL имеются функции для работы с BOM, но они уже на C++ с использованием классов, а лезть в это без исходной документации не лучшая идея. Да и противоречит лицензионной политике . И вот собственно вопросы. 1. Как перейти от PSOccurrenceThread к PSOccurrence или BOMLine? (Для этого нужно знать, в каком BOMWindow искать). 2. Как найти нужный BOMWindow? Примечания: 1. Может быть есть штатные функции получения хэндла в БД на основе instance или occurrence в NX? 2. NX создаёт BOMWindow в следующих случаях: при первом открытии сборки. отдельные BOMWindow для подсборок не создаются. Но если сначала открыть подсборку, а потом вышестоящую сборку, то в системе будет создано 2 BOMwindow. 3. NX не закрывает созданные BOMWindow до конца сессии (видимо поэтому и память потребляет как не в себя). Например, если открыть сборку, потом закрыть её и снова открыть, NX создаст 2 BOMWindow. -
By KSVSVK · Posted
При расчете оболочечной конструкции требуется указать толщину. Этот же размер используется при построении стыкуемых с ней элементов. Естественно хочется задавать его только один раз. Использование размера с эскиза - скелетона в сборке оказывается невозможным. Поэтому в сборке задаю глобальную переменную и присваиваю ее размеру. Теперь нужно установить ее в качестве связанного значения толщины оболочки в Simulation. Объединяю несколько оболочек в группу и в ее свойствах пытаюсь поставить значение. В выборе параметров определяю новый и задаю значение глобальной переменной При этом, несмотря на то, что переменная выше определена с размерностью "мм", здесь единица измерения оказывается "N/A" После применения изменений возвращается предыдущее окно с пустым списком, т.е. введенная переменная не отобразилась. Как задать такую связь? -
By Maik812 · Posted
Ты просто хамло и с тобой нет разговора. я вопрос задал как печать сложные детали. что касаемо больших и сложных был вопрос кстати! -
By mamomot · Posted
Никто не "подставляется". Процесс создания качественной отливки не столь однозначен. В подавляющем числе случаев это только путь опыта конкретных решений... -
By Radon · Posted
Самое прямое. А по рекламе, вуза такого более нет. -
By Killerchik · Posted
Да вот на выходе с принтера - без проблем поверю. А вот через пару месяцев описанной выше эксплуатации получается "не совсем" :) Это я конечно о пластиках, напечатанные металлы ведут себя куда стабильнее.
-
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now