Table of Contents
Einführung in Custom NX Automation Scripts
Siemens NX ist eine leistungsstarke CAD/CAM/CAE-Plattform, die über die manuelle Modellierung hinausgeht, indem sie einen umfangreichen Satz von APIs für die Automatisierung freilegt. Das Schreiben von benutzerdefinierten Skripten in Python oder C# ermöglicht es Ingenieuren und Entwicklern, sich wiederholende manuelle Arbeit zu eliminieren, Designstandards durchzusetzen und NX in größere Engineering-Pipelines zu integrieren. Ob Sie Dateien batch-exportieren, die Geometrieerstellung automatisieren oder Simulationen ohne Benutzereingriff ausführen müssen, das Mastering von NX-Scripting ist ein Kraftmultiplikator für jedes Designteam.
Dieser Artikel bietet eine erweiterte, praktische Anleitung zur Entwicklung benutzerdefinierter NX-Automatisierungsskripte mit Python und C#. Sie lernen die Unterschiede zwischen den beiden Sprachen kennen, wie Sie Ihre Entwicklungsumgebung einrichten, produktionsfähige Skripte schreiben und Best Practices anwenden, um häufige Fallstricke zu vermeiden. Das Ziel ist es, Ihnen eine solide Grundlage für den Aufbau einer robusten Automatisierung zu geben, die nahtlos mit Ihrem NX-Workflow zusammenarbeitet.
Das NX Automation Ecosystem verstehen
Die NX-Automatisierung basiert auf der NX Open API, einer umfassenden Bibliothek, die fast alle Funktionen der NX-Benutzeroberfläche offenlegt.
- NX Open for Python – Bietet Python-Bindungen für die NX Open API. Ideal für schnelles Scripting, Prototyping und Integration mit Data Science Libraries.
- NX Open for .NET – Voll funktionsfähige .NET-Baugruppen (C#, VB.NET), die Ihnen Zugriff auf das gesamte NX-Objektmodell gewähren.
- NX Open C++ – Für Entwickler, die direkten Speicherzugriff benötigen oder eine Verbindung mit dem alten C++-Code herstellen müssen.
- Journaling – NX kann Ihre manuellen Aktionen als Journaldatei (VB oder C#) aufzeichnen.
Alle APIs teilen ein ähnliches Objektmodell, aber es gibt sprachspezifische Nuancen. Der Schlüssel ist zu verstehen, dass die NX-Automatisierung ereignisgesteuert ist; Sie erstellen normalerweise ein -Objekt und verwenden dann dessen , und verschiedene Builder-Klassen, um mit dem Modell zu interagieren.
Wählen Sie zwischen Python und C#
Die Entscheidung zwischen Python und C# für die NX-Automatisierung hängt von Ihren Projektanforderungen, Ihrer Teamkompetenz und Ihrer Bereitstellungsumgebung ab.
Python für NX Automation
- Benutzerfreundlichkeit: Pythons saubere Syntax macht es zum schnellsten Weg, Automatisierungsskripte zu schreiben. Es ist ideal für Ingenieure, die keine Vollzeitentwickler sind.
- Rapid Prototyping: Sie können Skripte interaktiv mit einer eingebetteten Python-Konsole in NX testen (seit NX 12).
- Datenintegration: Pythons riesiges Ökosystem (NumPy, Pandas, Matplotlib) ermöglicht es Ihnen, NX-Automatisierung mit Datenanalyse und Visualisierung zu kombinieren.
- Leistung: Python wird interpretiert; für sehr große Assemblys oder enge Schleifen kann es langsamer sein als C#. Für die meisten Skriptaufgaben ist der Overhead jedoch vernachlässigbar.
- Deployment: Python-Skripte sind reine Textdateien. Sie können innerhalb von NX über das File → Execute → NX Open Menü oder mit dem Befehl in der NX Befehlszeile ausgeführt werden.
C# für NX Automation
- Vollzugriff auf .NET: C# bietet Ihnen das gesamte .NET-Framework, einschließlich Windows Forms oder WPF für benutzerdefinierte Benutzeroberflächendialoge, Hintergrundthreads und erweitertes Debuggen in Visual Studio.
- Stark getippt: C# fängt viele Fehler bei der Kompilationszeit auf, was es einfacher macht, große Codebasen zu pflegen.
- Integration mit anderen Siemens Tools: Viele Siemens PLM-Produkte (wie Teamcenter) bieten native .NET APIs, die sich gut mit der C#-Automatisierung verbinden.
- Performance: Compiled Code läuft schneller als interpretiert Python, vor allem für Operationen, die über Tausende von Gesichtern oder Kanten iterieren.
- Deployment: C#-Scripts müssen in DLLs oder ausführbaren Dateien kompiliert werden. Sie können als NX-Add-ons über File → Utilities → User Tools geladen werden oder indem die DLL im Startordner platziert wird.
In der Praxis verwenden viele Teams beides: Python für Ad-hoc-Aufgaben und Proof-of-Concepts und C# für missionskritische Tools, die eine ausgefeilte Oberfläche und hohe Leistung benötigen.
Python für NX Automation einrichten
Voraussetzungen
- Siemens NX (Version 12 oder höher wird empfohlen; Python-Unterstützung wurde in der NX 1926-Serie verbessert).
- Python 3.x auf dem gleichen Computer installiert (NX liefert kein eigenes Python; Sie müssen eine kompatible Version installieren).
- Das -Paket. Dieses wird oft in der NX-Installation enthalten, erfordert aber möglicherweise die Einstellung von Umgebungsvariablen.
Umgebungskonfiguration
Bevor Sie Ihr erstes Skript schreiben, stellen Sie sicher, dass NX Ihren Python-Interpreter finden kann. Fügen Sie in Windows den Python-Installationsordner zur Umgebungsvariablen hinzu. Dann überprüfen Sie in NX, ob File → Execute → NX Open → Python ohne Fehler funktioniert. Wenn Sie eine Nachricht "Python kann nicht geladen werden" erhalten, überprüfen Sie, ob die Variable auf Ihr Python-Root-Verzeichnis verweist.
Dein erstes Python-Script
Starten Sie NX, erstellen Sie eine neue Part-Datei (z. B. ), öffnen Sie dann den NX Python-Editor (oder verwenden Sie eine externe IDE wie VS-Code). Geben Sie das folgende Skript ein und führen Sie es aus NX heraus über File → Execute → NX Open → Browse aus.
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()
Wenn es ausgeführt wird, erzeugt dieses Skript einen 100×50×30 mm Block am Ursprung. Das Muster ist für fast jede Geometrieerstellung das gleiche: Holen Sie sich einen Builder, setzen Sie Parameter, begehen und zerstören Sie den Builder.
Wichtige Python-Module zu wissen
- – Der Hauptnamespace für alle NX-Objekte.
- – Benutzerfunktionsaufrufe (ältere API, immer noch für einige Aufgaben auf niedriger Ebene verwendet).
- – Helfer für Einheitenumrechnungen, Mathematik, etc.
C# für NX Automation einrichten
Voraussetzungen
- Siemens NX installiert.
- Visual Studio (jede Edition, die .NET Framework 4.7.2 oder höher unterstützt).
- NX Open .NET Assemblys. Sie befinden sich normalerweise in (Versionsnummer anpassen).
Erstellen eines Visual Studio Projekts
- Erstellen Sie ein neues C# Class Library (.NET Framework) Projekt.
- Verweise auf die erforderlichen NX-Baugruppen hinzufügen:
- (optional, für UF-Aufrufe)
- Setzen Sie das Plattformziel auf x64 (NX ist nur 64-Bit).
- Erstellen Sie das Projekt, um eine DLL zu erstellen.
Dein erstes C#-Script
Dieses Beispiel macht das gleiche wie das Python: Erstellen Sie einen Block.
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.");
}
}
Um diese DLL zu testen, kompilieren Sie sie und gehen Sie dann innerhalb von NX zu File → Execute → NX Open → Browse] und wählen Sie die DLL aus. NX führt die -Methode automatisch aus, wenn Sie sie als Einstiegspunkt markieren (Sie können auch die verwenden, um einen benutzerdefinierten Befehl zu starten).
Debugging von C#-Scripts
Legen Sie Visual Studio an den NX-Prozess an (Debug → Attach to Process → select ). Legen Sie Haltepunkte in Ihrem C#-Code fest und führen Sie das Skript aus dem Inneren von NX aus. Dies gibt Ihnen die vollständige Variableninspektion und das schrittweise Debuggen, ein Vorteil gegenüber Pythons einfacheren -Anweisungen.
Kern-Automatisierungsmuster
Unabhängig von der Sprache folgt jedes NX-Automatisierungsskript einem ähnlichen Lebenszyklus:
- Holen Sie sich die aktuelle Sitzung – in beiden Sprachen.
- Holen Sie sich den Arbeitsteil – (oder für den sichtbaren Teil).
- Erstelle einen Builder – Benutze Methoden wie .
- Set-Parameter – Verwenden Sie die Methoden des Builders (z. B. , .
- Befehle den Builder – Dies erzeugt das eigentliche NX-Objekt und gibt es zurück.
- Zerstöre den Builder – Löst Speicher frei.
- Aktualisieren Sie den Teil – Normalerweise geschieht dies automatisch, aber für einige Operationen müssen Sie aufrufen.
Für Operationen, die die Auswahl beinhalten (z. B., dass der Benutzer ein Gesicht auswählt), verwenden Sie die Klasse . Sie können einen Auswahldialog innerhalb des Skripts erstellen oder den Benutzer zuvor Objekte auswählen lassen, indem Sie interaktive Auswahlmethoden verwenden.
Schreiben eines praktischen Skripts: Batch Export Teile zu Schritt
Lassen Sie uns ein reales Dienstprogramm bauen: Exportieren Sie alle offenen Teiledateien in das STEP-Format. Dies ist eine häufige Voraussetzung für die Zusammenarbeit mit anderen CAD-Systemen. Wir werden sowohl Python- als auch C#-Versionen anbieten.
Python Batch Export
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()
Dieses Skript durchläuft alle geladenen Teile (außer dem Anzeigeteil) und exportiert jedes mit dem in STEP.
C# Batch Export
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}"); } } }Beide Skripte gehen davon aus, dass Sie über die erforderlichen Exportberechtigungen verfügen und NX in den Ausgabeordner schreiben kann.
Best Practices für die Entwicklung und Bereitstellung von Skripten
Codestruktur und Wartung
- Modularisierung: Zerlegen Sie Ihr Skript in Funktionen oder Klassen. Verwenden Sie in C# separate Dateien für verschiedene Feature-Gruppen.
- Konsistente Benennung: Befolgen Sie die NX API-Namenskonventionen.
- Versionssteuerung: Verwenden Sie Git, um Änderungen zu verfolgen. NX-Skripte entwickeln sich, wenn sich Ihre Teildesigns ändern.
Fehlerbehandlung und Protokollierung
- Wrap API ruft in Try-Acease (Python)- oder Try-Catch (C#)-Blöcken auf.
- Verwenden Sie NXs für Echtzeit-Feedback.
- Zerstöre immer Builder in einem -Block oder verwende -Anweisung (C#), um Speicherlecks zu vermeiden.
Leistungsbetrachtungen
- Minimieren Sie die Anzahl der API-Aufrufe in Schleifen, z. B. wenn Sie mehrmals auf die Funktionssammlung eines Teils zugreifen müssen, speichern Sie es in einer Variablen.
- Verwenden Sie für große Baugruppen Flags, um zu vermeiden, dass Komponenten, die Sie nicht benötigen, vollständig geladen werden.
- Deaktivieren Sie Bildschirmaktualisierungen während Batch-Operationen. Verwenden Sie in C# und aktivieren Sie danach wieder.
- In Python kannst du verwenden.
Prüfung
- Testen Sie Skripte in Isolated NX session (Starten Sie NX mit einem neuen leeren Teil).
- Erstellen Sie Testteile mit bekannter Geometrie, um die Ergebnisse zu validieren.
- Für C#-DLLs wird mit einem Spotting-Framework (wie Moq) geschrieben, um NX-Objekte zu simulieren - obwohl das Testen gegen eine echte NX-Instanz zuverlässiger ist.
Einsatz
- Python-Skripte: Verteilen Sie Dateien als , stellen Sie sicher, dass alle Benutzer über kompatible Python- und NX-Versionen verfügen.
- C#-Skripte: Geben Sie eine kompilierte DLL zusammen mit einer Manifestdatei () an, die das Add-In registriert.
Problembehandlung bei gemeinsamen Problemen
API Version Mismatches
NX Open API ist versionspezifisch. Ein Skript, das für NX 1926 geschrieben wurde, funktioniert möglicherweise nicht ohne Änderungen mit NX 1980. Überprüfen Sie immer die zur Laufzeit und passen Sie die Methodenaufrufe entsprechend an.
Python Import Fehler
Wenn Sie sehen, stellen Sie sicher, dass in Ihrem Python-Pfad ist.
Builder nicht verpflichtet
Wenn Ihr Skript nichts tut, überprüfen Sie, ob Sie aufgerufen haben und nicht nur , und überprüfen Sie auch, ob die Builder-Parameter gültig sind (z. B. negative Längen verursachen Ausnahmen).
Berechtigungen und Dateizugriff
Batch-Exportskripte scheitern oft, weil NX keinen Schreibzugriff auf den Ausgabeordner hat. Führen Sie NX als Administrator aus oder wählen Sie einen Ordner in Ihrem Benutzerprofil aus. Verwenden Sie , um relative Pfade aufzulösen.
Schlussfolgerung
Die Entwicklung benutzerdefinierter Automatisierungsskripte mit Python und C# erschließt das volle Potenzial von Siemens NX und ermöglicht es Ihnen, sich wiederholende Aufgaben zu rationalisieren, Standards durchzusetzen und mit größeren PLM-Systemen zu integrieren. Python zeichnet sich durch schnelle Entwicklung und datenreiche Prozesse aus, während C# robuste Leistung und erweiterte UI-Funktionen bietet. Durch das Verständnis der NX Open API, die korrekte Einrichtung Ihrer Umgebung und die Einhaltung von Best Practices für Fehlerbehandlung und -leistung können Sie Skripte erstellen, die zuverlässig und wartungsfähig sind über NX-Versionen hinweg.
Fangen Sie klein an: Verfassen Sie eine manuelle Operation, konvertieren Sie sie in ein Python-Skript, und fügen Sie dann schrittweise Komplexität hinzu. Wenn Sie Vertrauen gewinnen, erkunden Sie die tieferen Fähigkeiten der API - benutzerdefinierte Funktionen, Simulationsautomatisierung und sogar die Verknüpfung von NX mit externen Datenbanken. Die Siemens PLM Community ist eine ausgezeichnete Ressource, um Beispiele zu finden und Fragen zu stellen. Mit dem Wissen aus diesem Artikel sind Sie jetzt in der Lage, Ihr eigenes NX-Automatisierungs-Toolkit zu erstellen.