понедельник, 18 февраля 2019 г.

Способ использования библиотеки NX Open в плагине для Eclipse RCP

Кратко, напишу как можно выполнить операции в сессии NX из приложения созданного на платформе RCP Eclipse. Путь этот не совсем простой, но я его прошёл и могу немного рассказать о технологии.

Для начала, способ этот использует клиент-серверное взаимодействие. Используется технология RMI (т.к. Eclipse в основном это Java).
Есть пример от Siemens, он называется RemotingExample и лежит он в папке UGOPEN\SampleNXOpenApplications\Java (это в NX 10).
Суть примера в создании NX приложения, которое будет загружено в NX и будет служить сервером. Клиентская часть, обращается к серверу и получает доступ к сессии NX. Имея доступ к сессии, можно выполнять операции и т.п.

Для начала необходимо создать плагин, который будет оборачивать Java библиотеки NX Open.
Для этого надо создать проект (Plug-in Project), указать что это не будет приложение RCP (Would you like to create a rich client application? - No). В проекте создать папку lib (например) и в неё скопировать все jar библиотеки NX Open из NX. Все jar'ы начинающиеся на NXOpen. 9 штук их должно быть. На вкладке Runtime в разделе Classpath нажимаем кнопку Add и выбираем все файлы из папки lib проекта. В разделе Exported Packages той же вкладки нажимаем кнопку Add и выбираем все пакеты.


На вкладке Build убеждаемся, что папка lib попадёт в сборку. В разделе Binary Build папка lib должна быть отмечена галочкой (или квадратом чёрным).


Всё, плагин готов.

Следующий этап это создание серверного приложения для NX из примера RemotingExample.
Один интерфейс и один класс реализующий его. Приложение запускается в NX и ждёт клиента.

Теперь, плагин-обёртку копируем на целевую платформу (в папку plugins платформы, для которой он создавался). Остаётся только реализовать подключение к приложению NX и использовать объект из него. Можно создать обработчик (Handler) команды или ещё где-нибудь вставить код. Смотрим код клиентской части из того же примера RemotingExample.

Получилось в стиле обучения рисованию совы. Просто хотел направить в правильном направлении. На подробное описание нужно много времени.


8 комментариев:

  1. Добрый день. Скажите пожалуйста, есть ли возможность написать приложение которое не загружается в NX, а находится в Teamcenter (плагин тимцентра) и просто считывает данные из Teamcenter чтобы затем передать их в NX для дальнейшей работы.
    Банальный пример: пользователь ТС выделяет список деталей или папку и после нажатия на кнопку они отправляются и открываются в NX?

    ОтветитьУдалить
  2. Добрый день! Допустим, "Teamcenter Integration for NX" у вас не установлено и надо изобрести что-то подобное (там используется утилита ug_router кстати). Точно не отвечу на вопрос, т.к. я таким вопросом не занимался. С утилитами, работающими самостоятельно и использующие NX не доводилось работать. Можно попробовать написать утилиту на Си используя Open C (пример InteropNXOpenWithUFunc.cpp), а из плагина Teamcenter вызывать её или написать библиотеку для Java, используя "Java Native Interface", которая будет работать с NX (пример InteropCallCFromJava в папке UGOPEN\SampleNXOpenApplications\Java). Из библиотеки сделать плагин потом. Надо пробовать. Судя по примерам NX Open на языке Си (в папке UGOPEN\SampleNXOpenApplications\C++), там есть программы самостоятельные, значит есть доля вероятности, что прямой доступ к NX можно устроить. Готов провести эксперимент, но не буду обещать.

    ОтветитьУдалить
  3. Если бы что-то получилось и Вы бы отписали потом, была бы очень признательна

    ОтветитьУдалить
  4. Написал утилитки на Си, но ничего нового не увидел. Для открытия файла в окне NX используется метод OpenActiveDisplay коллекции Parts класса NXOpen::Session, т.е. надо получить эту сессию. Из внешнего приложения сессию NX не получить напрямую.
    Если надо открыть несколько файлов, то можно попробовать запускать ugs_router для этого. Например: ugs_router -ug fil1.prt file2.prt
    Для более сложного взаимодействия придётся делать удалённое (Remote) управления, как я и писал ранее. Этого мнения придерживаюсь не только я (В сообществе PLM, например - https://community.plm.automation.siemens.com/t5/NX-Programming-Customization-Forum/How-to-communicate-NX-using-external-application/td-p/357805).

    ОтветитьУдалить
  5. Меня конкретно интересует как скормить конкретную деталь для nx,чтобы он в базе по идентификатору нашел ее

    ОтветитьУдалить
  6. Если взаимодействует TC и NX: В TC пользователь выбирает ревизии изделий, их идентификаторы передаются NX. Приложение NX ищет по идентификаторам в TC и открывает; 2) В TC выбираем, извлекаются файлы моделей в определённую папку и в NX передаём пути до файлов; Это удалённое управление NX'ом.
    Если взаимодействует NX с TC: 1) В NX должен осуществиться выбор необходимых ревизий. Должно быть приложение связывающееся с TC и производящее поиск ревизий или позволяющее проводить навигацию. Выбираются необходимые ревизии и у них извлекаются модели в определённую временную папку и они открываются в NX. Это использование веб-сервисов TC.

    Какой сценарий вы хотите реализовать?

    ОтветитьУдалить
  7. Взаимодействие ТС и NX. Чтобы NX искал по идентификаторам в ТС. Пишу плагины для ТС, в NX занималась только автоматизацией. Потому не знаю как указать NX деталь для поиска в базе ТС. Знаю только как открыть из локального диска. Выгрузка в папки не вариант, в работе много ревизий..

    ОтветитьУдалить
  8. Либо пользователь вводит идентификатор ревизии изделия в виде текста, что не совсем правильно на мой взгляд (но проще реализовать), либо надо делать полноценное отображение дерева объектов (или упрощённое), как в навигаторе TC. По идентификатору изделия и идентификатору ревизии ищем ревизию. У ревизии надо получить набор данных с моделью, а в нём необходимую именованную ссылку на файл. Именованная ссылка содержит путь до файла в томе. Доступ к файлам на томе имеет только система, эти файлы не предназначены для прямого использования, т.е. их надо выгружать из системы. Плюс к этому у наборов данных с моделями находятся дополнительные данные, атрибуты, qaf файлы.
    Есть ещё структура изделия в TC, как быть с ней? Как её изменять? У вас же не только детали наверно, но и более сложные сборки есть.

    ОтветитьУдалить

Определение параметров CHS (Cylinder, Head, Sector) карт CF с помощью утилиты IDEINFO

 Столкнулся с проблемкой подключения карт CF к материнской плате LTC-SL REV-B и WD386SX-LPX. В БИОС этих плат нет автоопределения накопителе...