如何在 Siemens NX 中正确使用 NXOpen Python API

8次阅读

如何在 Siemens NX 中正确使用 NXOpen Python API

本文详解如何在 siemens nx 环境中调用官方 nxopen python api(非 pypi 第三方包),包括环境配置、脚本执行方式、常见错误根源及正确示例代码,帮助开发者避免 `modulenotfounderror: no module named ‘nxopen’` 等典型问题。

Siemens NX 的 NXOpen API 并非一个可通过 pip install nxopen 安装的独立 python 包——它是由 NX 软件自身提供的原生 .NET/Python 绑定库,深度集成于 NX 运行时环境。你遇到的 ModuleNotFoundError: No module named ‘NXOpen’ 错误,根本原因在于:你在外部 Python 解释器(如 vs code 或命令行)中直接运行了依赖 NXOpen 的脚本,而该解释器无法访问 NX 的运行时上下文与底层 DLL/CLR 组件

✅ 正确使用方式如下:

  1. 不安装任何 PyPI 版本的 nxopen
    删除通过 pip install nxopen 安装的第三方包(它与 Siemens 官方 NXOpen 无关,甚至可能引发冲突):

    pip uninstall nxopen
  2. 脚本必须在 NX 内部执行

    • 启动 Siemens NX(建议使用 NX 1980+ 或更新版本,对 Python 3.7+ 支持更完善);
    • 进入菜单栏:File → Utilities → Run Journal…(或按快捷键 Ctrl+Shift+J);
    • 选择你的 .py 文件(例如 get_mass_properties.py),点击 OK —— NX 将自动加载其内置 Python 引擎(含 NXOpen 模块)并执行。
  3. 修正代码:适配 NXOpen 原生 Python 接口
    注意:NX 内置 Python 使用的是 NXOpen(首字母大写)模块名,且无需手动 session.close()(NX 会自动管理生命周期)。以下是修正后的可靠示例:

import NXOpen import os  def get_mass_properties(file_path):     # 验证文件存在且可读     if not os.path.exists(file_path):         raise ValueError(f"File not found: {file_path}")     if not os.access(file_path, os.R_OK):         raise PermissionError(f"Insufficient permissions to access file: {file_path}")      # 获取当前 NX 会话(无需 new session())     the_session = NXOpen.Session.GetSession()     work_part = the_session.Parts.Work      # 关闭当前工作部件(如有),再打开目标 .prt     if work_part is not None:         the_session.Parts.CloseAll(False)      # 打开指定部件文件     part_load_options = the_session.TransientPartLoadOptions     part_load_options.DisplayPart = False     part_load_options.LoadGeometry = True     part_load_options.LoadAttributes = True      opened_part = the_session.Parts.Open(file_path, part_load_options)     the_session.Parts.SetWork(opened_part)      # 获取实体体并计算质量属性     bodies = opened_part.Bodies     solid_bodies = [body for body in bodies if body.Type == NXOpen.Body.Types.Solid]      if len(solid_bodies) != 1:         raise RuntimeError(f"Unsupported file: expected exactly 1 solid body, got {len(solid_bodies)}")      mass_props = opened_part.MeasureManager.CreateMassProperties()     mass_props.Compute()     mass = mass_props.Mass  # 单位:克(取决于建模单位制)      # 可选:获取完整质量属性(质心、惯性矩等)     # print(f"Mass: {mass:.3f} g")     # print(f"Centroid: {mass_props.Centroid}")      # 关闭部件(非必需,但推荐释放资源)     the_session.Parts.CloseBasePart(opened_part, False)      return [mass]  # 示例调用(路径需使用正斜杠或双反斜杠) if __name__ == "__main__":     try:         result = get_mass_properties(r"D:/NX Files/model1.prt")         print(f"Mass = {result[0]:.4f} g")     except Exception as e:         NXOpen.UI.GetUI().NXMessageBox.Show("Error", NXOpen.NXMessageBox.DialogType.Error, str(e))

⚠️ 重要注意事项:

立即学习Python免费学习笔记(深入)”;

  • 路径格式windows 下推荐使用原始字符串(r”D:NX Filesmodel1.prt”)或正斜杠(”D:/NX Files/model1.prt”),避免转义问题;
  • 单位制:NXOpen 返回的质量单位默认为 克(g),若模型单位为毫米,则密度单位为 g/mm³;请确保材料属性已正确定义;
  • 智能提示(IntelliSense)支持:若需在 VS Code 中获得代码补全,可参考 Siemens 官方社区指南(链接),通过配置 NXOpen 类型存根(.pyi)实现静态分析支持;
  • 调试技巧:NX 内置 Python 控制台(Ctrl+Shift+P → 输入 Python console)可用于交互式测试 API 调用。

总结:NXOpen 不是“外部库”,而是 NX 的编程接口。一切脚本都必须在 NX 进程内运行——这是唯一能成功导入 NXOpen 模块并访问 cad 数据的前提。放弃外部解释器执行思维,拥抱 NX 原生开发流程,才能真正释放自动化建模与分析的生产力。

text=ZqhQzanResources