Разработка сценариев автоматизации 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 доступен в нескольких интерфейсах программирования:

Все API имеют общую объектную модель, но существуют специфические для языка нюансы. Ключ заключается в том, чтобы понять, что автоматизация NX обусловлена событиями; вы обычно создаете объект , а затем используете его , и различные классы строителей для взаимодействия с моделью.

Выбор между Python и C#

Решение между Python и C# для автоматизации NX зависит от требований вашего проекта, опыта команды и среды развертывания.

Python для автоматизации NX

C# для автоматизации NX

На практике многие команды используют и Python для выполнения специальных задач и доказательство концепции, и C# для критически важных инструментов, которые нуждаются в полированном интерфейсе и высокой производительности.

Настройка 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, которые нужно знать

Настройка C# для автоматизации NX

Предпосылки

Создание визуального проекта студии

  1. Создание нового проекта библиотеки классов C# (.NET Framework).
  2. Добавить ссылки на требуемые сборки NX:
    • (необязательно, для UF-звонков)
  3. Установите целевую платформу на x64 (NX только 64-битный).
  4. Постройте проект для создания 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 следует аналогичному жизненному циклу:

  1. Получить текущую сессию — на обоих языках.
  2. Получите рабочую часть — (или для видимой части).
  3. Создать строитель — Используйте методы, подобные .
  4. Установите параметры — используйте методы строителя (например, , ).
  5. Обязательство строителя — это создает фактический объект NX и возвращает его.
  6. Уничтожьте конструктора — освобождает память.
  7. Обновление части (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.