Разработка сценариев автоматизации Nx с Python и C#
Введение в пользовательские сценарии автоматизации NX
Siemens NX - это мощная платформа CAD/CAM/CAE, которая выходит за рамки ручного моделирования, выставляя богатый набор API для автоматизации. Написание пользовательских скриптов на Python или C# позволяет инженерам и разработчикам устранять повторяющуюся ручную работу, обеспечивать соблюдение стандартов проектирования и интегрировать NX в более крупные инженерные конвейеры. Независимо от того, нужно ли вам загружать файлы, автоматизировать создание геометрии или запускать симуляции без вмешательства пользователя, освоение NX скриптов - это множитель силы для любой команды разработчиков.
Эта статья предоставляет расширенное практическое руководство по разработке пользовательских скриптов автоматизации NX с использованием как Python, так и C#. Вы узнаете различия между двумя языками, как настроить среду разработки, написать готовые к производству скрипты и применить лучшие практики, чтобы избежать распространенных подводных камней. Цель состоит в том, чтобы дать вам прочную основу для создания надежной автоматизации, которая работает бесшовно с вашим рабочим процессом NX.
Понимание экосистемы автоматизации NX
Автоматизация NX построена на NX Open API, комплексной библиотеке, которая раскрывает практически все функциональные возможности, доступные в пользовательском интерфейсе NX. API доступен в нескольких интерфейсах программирования:
- NX Open for Python — Обеспечивает привязку Python к NX Open API. Идеально подходит для быстрого написания сценариев, прототипирования и интеграции с библиотеками данных.
- NX Open for .NET — полнофункциональные .NET-ассемблеры (C#, VB.NET), дающие доступ ко всей объектной модели NX. Лучше всего подходит для сложных, критически важных по производительности приложений с компонентами пользовательского интерфейса.
- NX Open C++ — для разработчиков, которым нужен прямой доступ к памяти или необходимость связываться с устаревшим кодом C++.
- Журналирование — NX может записывать ваши ручные действия в виде файла журнала (VB или C#). Эти журналы являются отличной отправной точкой для изучения синтаксиса API.
Все API имеют общую объектную модель, но существуют специфические для языка нюансы. Ключ заключается в том, чтобы понять, что автоматизация NX обусловлена событиями; вы обычно создаете объект , а затем используете его , и различные классы строителей для взаимодействия с моделью.
Выбор между Python и C#
Решение между Python и C# для автоматизации NX зависит от требований вашего проекта, опыта команды и среды развертывания.
Python для автоматизации NX
- Простота использования: Чистый синтаксис Python делает его самым быстрым способом написания сценариев автоматизации. Он идеально подходит для инженеров, которые не являются штатными разработчиками.
- Быстрое прототипирование: Вы можете тестировать сценарии интерактивно, используя встроенную консоль Python в NX (с NX 12).
- Обширная экосистема Python (NumPy, Pandas, Matplotlib) позволяет сочетать автоматизацию NX с анализом и визуализацией данных.
- Перформанс:Питон интерпретируется; для очень больших сборок или плотных петель он может быть медленнее, чем C#.Однако для большинства задач сценариев накладные расходы незначительны.
- Развертывание: Скрипты Python — это простые текстовые файлы. Они могут быть запущены внутри NX через Файл → Исполнить → NX Open меню или с помощью команды в командной строке NX.
C# для автоматизации NX
- Полный доступ к .NET: C# предоставляет вам всю структуру .NET, включая формы Windows или WPF для пользовательских диалогов пользовательского интерфейса, фоновых потоков и расширенной отладки в Visual Studio.
- Strongly Typed: C# улавливает множество ошибок во время компиляции, что облегчает поддержание больших кодовых баз.
- Интеграция с другими инструментами Siemens: Многие продукты Siemens PLM (например, Teamcenter) обеспечивают собственные API .NET, которые хорошо сочетаются с автоматизацией C#.
- Составленный код работает быстрее, чем интерпретируемый Python, особенно для операций, которые повторяются на тысячах лиц или краев.
- Развертывание: Скрипты C# должны быть скомпилированы в DLL или исполняемые файлы. Они могут быть загружены в виде NX-дополнений через Файл → Утилиты → Инструменты пользователя или путем размещения DLL в папке запуска.
На практике многие команды используют и Python для выполнения специальных задач и доказательство концепции, и C# для критически важных инструментов, которые нуждаются в полированном интерфейсе и высокой производительности.
Настройка Python для автоматизации NX
Предпосылки
- Siemens NX (рекомендуется версия 12 или более поздняя; поддержка Python была расширена в серии NX 1926).
- Python 3.x установлен на том же компьютере (NX не поставляет свой собственный Python; вам нужно установить совместимую версию).
- Пакет . Часто он включается в установку NX, но может потребовать настройки переменных среды.
Конфигурация окружающей среды
Перед написанием первого скрипта убедитесь, что NX может найти интерпретатор Python. В Windows добавьте папку установки Python в переменную среды . Затем внутри NX проверьте, что File → Execute → NX Open → Python работает без ошибок. Если вы получите сообщение «Невозможно загрузить Python», проверьте, что переменная указывает на ваш корневой каталог Python.
Ваш первый скрипт Python
Запустите NX, создайте новый файл части (например, ), затем откройте редактор NX Python (или используйте внешнюю IDE, такую как VS Code). Введите следующий скрипт и запустите его из NX через File → Execute → NX Open → Browse.
import NXOpen
def main():
session = NXOpen.Session.GetSession()
work_part = session.Parts.Work
# Create a block
body_feature = work_part.Features.CreateBlockBuilder(NXOpen.Features.BlockBuilder.Null)
body_feature.BlockBuilder.SetOrigin(NXOpen.Point3d(0, 0, 0))
body_feature.BlockBuilder.SetLengths(NXOpen.Point3d(100, 50, 30))
nx_object = body_feature.Commit()
body_feature.Destroy()
print("Block created successfully!")
if __name__ == '__main__':
main()
При выполнении этот скрипт создает блок 100×50×30 мм у истоков.Паттерн одинаков практически для любого создания геометрии: получить строителя, задать параметры, совершить и уничтожить строителя.
Основные модули Python, которые нужно знать
- — основное пространство имен для всех объектов NX.
- — вызовы функций пользователя (старый API, все еще используемый для некоторых задач низкого уровня).
- — помощники для конверсий единиц, математики и т. д.
Настройка C# для автоматизации NX
Предпосылки
- Siemens NX уже установлен.
- Visual Studio (любое издание, поддерживающее .NET Framework 4.7.2 или более поздней версии).
- NX Open .NET сборки. Они обычно расположены в (номер версии с регулировкой).
Создание визуального проекта студии
- Создание нового проекта библиотеки классов C# (.NET Framework).
- Добавить ссылки на требуемые сборки NX:
- (необязательно, для UF-звонков)
- Установите целевую платформу на x64 (NX только 64-битный).
- Постройте проект для создания DLL.
Первый сценарий C#
Этот пример делает то же самое, что и Python: создает блок.
using NXOpen;
public class CreateBlockExample
{
public static void Main()
{
Session session = Session.GetSession();
Part workPart = session.Parts.Work;
Features.BlockBuilder blockBuilder = workPart.Features.CreateBlockBuilder(null);
blockBuilder.SetOrigin(new Point3d(0, 0, 0));
blockBuilder.SetLengths(new Point3d(100, 50, 30));
NXObject block = blockBuilder.Commit();
blockBuilder.Destroy();
session.ListingWindow.WriteLine("Block created.");
}
}
Чтобы протестировать этот DLL, составьте его, а затем внутри NX перейдите в File → Execute → NX Open → Browse и выберите DLL. NX автоматически выполнит метод , если вы пометите его как точку входа (вы также можете использовать для запуска пользовательской команды).
Отладка сценариев C#
Прикрепите Visual Studio к процессу NX (]Debug → Attach to Process → выберите . Установите точки останова в коде C# и запустите скрипт изнутри NX. Это дает вам полную проверку переменных и пошаговую отладку, преимущество перед более простыми утверждениями Python .
Основные шаблоны автоматизации
Независимо от языка, каждый скрипт автоматизации NX следует аналогичному жизненному циклу:
- Получить текущую сессию — на обоих языках.
- Получите рабочую часть — (или для видимой части).
- Создать строитель — Используйте методы, подобные .
- Установите параметры — используйте методы строителя (например, , ).
- Обязательство строителя — это создает фактический объект NX и возвращает его.
- Уничтожьте конструктора — освобождает память.
- Обновление части (FLT:0) Обновление части (FLT:1) — обычно происходит автоматически, но для некоторых операций вам нужно позвонить (FLT:27).
Для операций, которые включают в себя выбор (например, пользователь выбирает лицо), вы используете класс . Вы можете создать диалог выбора внутри сценария или позволить пользователю выбирать объекты заранее, используя интерактивные методы выбора.
Написание практического сценария: экспорт партийных частей в шаг
Давайте создадим реальную утилиту: экспортируем все открытые файлы деталей в формат STEP. Это общее требование для сотрудничества с другими системами САПР. Мы предоставим как версии Python, так и C#.
Python Batch Экспорт
import NXOpen
import os
def export_part_to_step(part, output_folder):
part_fsa = part.FullPath # full file path
if not part_fsa:
print(f"Part {part.Name} has no file path, skipping.")
return
step_filename = os.path.join(output_folder, part.Name.replace(".prt", ".stp"))
# Create step export builder
step_builder = part.StepExportBuilder()
step_builder.FileName = step_filename
step_builder.Commit()
step_builder.Destroy()
print(f"Exported {part.Name} to {step_filename}")
def main():
session = NXOpen.Session.GetSession()
parts = session.Parts
output = r"C:\temp\step_exports"
if not os.path.exists(output):
os.makedirs(output)
for part in parts:
# Skip display part and work part duplicates
if part == parts.Display or part == parts.Work:
continue
export_part_to_step(part, output)
if __name__ == '__main__':
main()
Этот скрипт повторяется через все загруженные части (за исключением части дисплея) и экспортирует каждую в STEP с помощью FLT:30.
C# Экспорт пакетов
using NXOpen; using System.IO; public class BatchStepExport { public static void Main() { Session session = Session.GetSession(); PartCollection parts = session.Parts; string outputFolder = @"C:\temp\step_exports"; Directory.CreateDirectory(outputFolder); foreach (Part part in parts) { if (part == parts.Display || part == parts.Work) continue; string partPath = part.FullPath; if (string.IsNullOrEmpty(partPath)) continue; string stepFile = Path.Combine(outputFolder, Path.GetFileNameWithoutExtension(partPath) + ".stp"); StepExportBuilder builder = part.StepExportBuilder(); builder.FileName = stepFile; builder.Commit(); builder.Destroy(); session.ListingWindow.WriteLine($"Exported {part.Name} -> {stepFile}"); } } }Оба сценария предполагают, что у вас есть необходимые разрешения на экспорт и что NX может писать в выходную папку. Обработка ошибок (попробовать прилов) должна быть добавлена в производственный код.
Лучшие практики для разработки и развертывания сценариев
Структура кода и его сохранение
- Модуляция: Разбейте сценарий на функции или классы.В C# используйте отдельные файлы для разных групп функций.
- Последовательные имена: Следуйте соглашениям об именах NX API. Используйте в C# и в Python для локальных переменных.
- Управление версиями: Используйте Git для отслеживания изменений. NX-скрипты развиваются по мере изменения дизайна деталей.
Обработка ошибок и регистрация
- Заверните вызовы API в блоки try-кроме (Python) или try-catch (C#). Проверьте на наличие определенных ошибок NX.
- Используйте NX для обратной связи в режиме реального времени. Для журналов напишите в текстовый файл с использованием (C#) или стандартной записи Python.
- Всегда уничтожайте строителей в блоке или используя утверждение (C#), чтобы избежать утечек памяти.
Соображения в отношении эффективности
- Минимизируйте количество вызовов API внутри петель. Например, если вам нужно многократно получить доступ к набору функций детали, храните его в переменной.
- Для больших сборок используйте флаги , чтобы избежать полной загрузки компонентов, которые вам не нужны.
- Выключите обновления экрана во время пакетных операций. В C# используйте и повторно включите после.
- В Python вы можете использовать .
Испытание
- Тестовые сценарии в Изолированный NX-сессии (начните NX с новой пустой части).
- Создавайте тестовые части с известной геометрией для проверки выходов.
- Для C# DLL записывайте единичные тесты с использованием макетной структуры (например, Moq) для имитации объектов NX, хотя тестирование на реальном экземпляре NX более надежно.
Развертывание
- Python скрипты: Распространяйте как файлы . Убедитесь, что все пользователи имеют совместимые версии Python и NX.
- Скрипты C#: Предоставьте скомпилированный DLL вместе с манифестным файлом (), который регистрирует надстройку. Альтернативно, поместите DLL в папку под установкой NX для автоматической загрузки.
Устранение общих проблем
API версия несоответствия
NX Open API является версия-специфической. Сценарий, написанный для NX 1926, может не работать с NX 1980 без модификаций. Всегда проверяйте во время выполнения и соответствующим образом корректируйте вызовы метода. Ссылайтесь на Siemens NX API документация для правильной версии.
Ошибки при импорте Python
Если вы видите , убедитесь, что находится на вашем пути Python. Файл обычно находится в . Добавьте этот путь к переменной среды .
Строитель не обязан
Если ваш сценарий ничего не делает, проверьте, что вы позвонили , а не только . Также проверьте, что параметры сборщика действительны (например, отрицательные длины вызывают исключения).
Разрешения и доступ к файлам
Скрипты пакетного экспорта часто терпят неудачу, потому что NX не имеет доступа к выходной папке для записи. Запустите NX в качестве администратора или выберите папку в своем профиле пользователя. Используйте для решения относительных путей.
Заключение
Разработка пользовательских скриптов автоматизации с Python и C# раскрывает весь потенциал Siemens NX, позволяя упорядочить повторяющиеся задачи, обеспечить соблюдение стандартов и интегрироваться с более крупными системами PLM. Python превосходит быстрое развитие и богатые данными процессы, в то время как C# предлагает надежную производительность и расширенные возможности пользовательского интерфейса. Понимая NX Open API, правильно настраивая свою среду и следуя лучшим практикам для обработки ошибок и производительности, вы можете создавать сценарии, которые надежны и поддерживаются в версиях NX.
Начните с малого: запишите ручную операцию, преобразуйте ее в скрипт Python, затем постепенно добавьте сложность. По мере того, как вы обретаете уверенность, исследуйте более глубокие возможности API — создание пользовательских функций, автоматизацию моделирования и даже связь NX с внешними базами данных. Сообщество Siemens PLM является отличным ресурсом для поиска примеров и задавания вопросов. С помощью знаний из этой статьи вы теперь оснащены для создания собственного инструментария автоматизации NX.