首页/文章/ 详情

CAE二次开发软件,演示时暴露某商软界面,客户追问到想钻地缝…

9月前浏览1603
图片
导读:上一篇文章效率飙升!Ansys Workbench脚本二次开发构建电路板多工况热力耦合仿真聚焦 ANSYS Workbench 脚本开发,以 “电路板多工况热仿真” 为实战案例,从脚本核心逻辑拆解到完整代码详解,手把手教你通过 Python 自动化批量构建仿真系统。本文小郭老师继续给大家带来后台交互命令实战案例.
图片
你是否也遇到过这种情况?从事ANSYS二次开发,给客户/领导/导师交付定制化分析软件时,软件一演示运行就暴露底层是调用 ANSYS 开发,而不是自己手写求解器,被疯狂追问 “能不能藏掉这些专业软件界面?
图片
今天小郭老师依旧干货满满,直接教授大家ANSYS二次开发任务中关于后台交互这一关键命令!
图片
01
后台交互 vs 前台交互

(一)差别在哪?

“后台交互” 是 ANSYS 二次开发里 “藏起技术细节、提升效率” 的核心功能,很多工程师第一次接触时都会疑惑 “它到底是怎么工作的”。

简单说,后台交互就是 ANSYS 程序在电脑后台自动运行,不弹出任何可视化界面(比如 Mechanical 的程序界面),用户看不到操作过程,只能通过日志或最终结果确认执行状态。它和我们平时 “手动点开 Mechanical 界面、一步步操作” 的 “前台交互” 是完全相反的模式。

对比维度

前台交互

后台交互

界面显示

弹出 Mechanical 完整窗口,能看到网格、载荷、结果云图

无任何界面,任务管理器里能看到 ANSYS 进程在运行

操作干预

可以随时暂停、修改参数(比如中途调整网格大小)

全程自动执行,无法手动干预(除非强制结束进程)

电脑占用

界面会占用屏幕空间,切换窗口时可能卡顿

只占系统资源(CPU / 内存),不影响用电脑做其他事(比如写报告、画图纸)

适用场景

脚本调试、参数优化(需要实时看过程)

批量仿真、客户交付工具(不需要看界面,只要结果)

(二)为什么要用到后台交互?
不是为了 “炫技”,而是解决实际工作中的核心痛点:交付时 “隐藏底层技术”,提升客户信任
我去年做过的一个项目,当时客户的核心诉求很明确:“不用懂仿真,能快速出温度报告就行”。所以交付的工具最终是这样的:客户只需三步 —— 上传电机三维模型→输入环境温度及工况边界条件→点击 “生成报告”,几分钟后就能下载带温度云图、热点位置的分析报告。
当然,合作初期我们会明确告知 “工具底层基于 ANSYS 开发”,但工具实际使用时,客户完全不用接触这个细节 —— 不用管 ANSYS 是什么,也不用懂热分析原理。
如果用前台交互,打开工具时突然弹出 Mechanical 界面,客户可能会质疑 —— 后台交互能完全藏起 ANSYS 的痕迹,只给客户看你定制的简洁界面,专业度直接拉满。
02
实战操作:如何实现Mechanical后台交互
(一)需求描述
现需开展飞机多层窗导热分析的仿真自动化计算,几何模型如下:
图片
要求:利用Python脚本命令在Engineering Data系统里自动创建相应的材料,并可根据用户选择,实现数据集成应用程序Mechanical的后台交互或前台交互。
(二)脚本拆解
1、中文字符适配与模块导入


# -*- coding: utf-8 -*-  # 指定文件编码为UTF-8,确保支持中文注释和路径import os  # 导入操作系统接口模块,用于文件路径操作
这两行是所有 Python 脚本的 “标配”。第一行解决中文乱码问题。如果在脚本里写了中文注释,没这句可能会报错。
第二行导入 os 模块。后面处理文件路径全靠它,比如找几何文件存在哪里、脚本放在哪个文件夹,都是基于os模块。
2、用户参数定义
    is_background = True  # 后台运行模式标志(True表示非交互模式)
    proj_folder = GetProjectDirectory()  # 获取当前ANSYS Workbench项目目录路径
    # 构建脚本文件路径并统一使用正斜杠(确保跨平台兼容性)
    file_script = os.path.join(proj_folder, "script", "script_mechanical.py")  # 拼接Mechanical脚本路径
    file_script = file_script.replace("\\", "/")
    # 构建几何文件路径并统一使用正斜杠
    file_geo = os.path.join(proj_folder, "geometry", "geo.scdoc")  # 拼接几何模型文件路径
    file_geo = file_geo.replace("\\", "/")

    在这段代码块中,绝大多数命令在我发布的上一篇文章《Python+ANSYS,打造多工况仿真自动化系统》中均有所提及。与本文所讲内容相关的就是命令is_background = True

    is_background设为True,就是后台运行(不弹 Mechanical 界面);设为False,就是前台运行(弹出界面让你看过程)。

    我平时开发时,调试阶段会设成False—— 方便盯着界面看哪里出错了;给客户交付时就改成True,藏起 ANSYS 界面,只给客户看结果。

    3、核心函数定义:材料创建























    def create_mat(system_mat, mat_name, density, therma_conductivity):    """在工程数据系统中创建新材料并定义其物理属性    参数:        system_mat: 材料系统对象(工程数据容器)        mat_name: 材料名称(字符串)        density: 材料密度值(kg/m³)        therma_conductivity: 材料热导率值(W/m·°C)    """    # 获取工程数据容器    engineeringData1 = system_mat.GetContainer(ComponentName="Engineering Data")    # 创建新材料对象    mat = engineeringData1.CreateMaterial(Name=mat_name)    # 定义密度属性(带单位说明)    mat.CreateProperty(Name='Density').SetData(        Variables=['Density'],         Values=[["%s [kg m^-3]" % density]]  # 格式化为带单位的字符串    )    # 定义热导率属性(带单位说明)    mat.CreateProperty(Name='Thermal Conductivity').SetData(        Variables=['Thermal Conductivity'],         Values=[["%s [W m^-1 C^-1]" % therma_conductivity]]  # 格式化为带单位的字符串    )

    这个create_mat函数是 “批量建材料” 的核心,解决了手动在 Engineering Data 里点来点去的麻烦。咱们拆解下它的逻辑:

    • 参数设计:函数需要 4 个参数 ——system_mat(材料系统对象,相当于 ANSYS 里的 “工程数据” 模块)、mat_name(材料名)、density(密度)、therma_conductivity(热导率)。这样设计后,想建多少材料,调用多少次函数就行,不用重复写代码。

    • 获取工程数据容器engineeringData1 = system_mat.GetContainer(...)相当于手动点开 Workbench 里的 “Engineering Data” 模块,拿到操作权限。

    • 创建材料mat = engineeringData1.CreateMaterial(...)对应手动点击 “创建新材料” 按钮,Name=mat_name就是给材料起名(比如 “Mag2Al”)。

    • 定义属性:重点看SetData里的Values参数,这里用了"%s [kg m^-3]" % density的格式。这是因为 ANSYS 对单位非常敏感,如果你只写 “2560”,它可能默认成 “g/cm³”,结果直接差 1000 倍!带单位字符串能确保 ANSYS 正确识别([kg m^-3]就是千克每立方米,[W m^-1 C^-1]是瓦每米每摄氏度)。

    在飞机多层窗导热分析中,按要求需创建4种材料,则重复调用这个函数4次,即可完成材料参数的定义。

    4、主程序执行
    (1)创建材料系统并批量生成材料
    • # 创建材料系统
      template_mat = GetTemplate(TemplateName="EngData")  # 获取工程数据模板
      system_mat = template_mat.CreateSystem()  # 基于模板创建材料系统
      # 创建四种工程材料
      create_mat(system_mat, "Mag2Al", 2560, 158)  # 创建Mag2Al合金材料
      create_mat(system_mat, "air", 1.295, 0.024)   # 创建空气材料
      create_mat(system_mat, "glass", 33, 0.025)    # 创建玻璃材料
      create_mat(system_mat, "al", 4450, 202)       # 创建铝材料


      # 创建材料系统
      template_mat = GetTemplate(TemplateName="EngData")  # 获取工程数据模板
      system_mat = template_mat.CreateSystem()  # 基于模板创建材料系统
      # 创建四种工程材料
      create_mat(system_mat, "Mag2Al", 2560, 158)  # 创建Mag2Al合金材料
      create_mat(system_mat, "air", 1.295, 0.024)   # 创建空气材料
      create_mat(system_mat, "glass", 33, 0.025)    # 创建玻璃材料
      create_mat(system_mat, "al", 4450, 202)       # 创建铝材料

    前两行相当于在 Workbench 左侧拖一个 “Engineering Data” 模块到项目里。GetTemplate是拿 “工程数据” 的模板,CreateSystem是实际创建这个模块。有了它,后面才能在里面建材料。

    之后就是调用前面定义的create_mat函数,一次性建四种材料。

    如果后续需要加材料,直接再加一行create_mat(...)就行。比如,加个 “铜” 就写:create_mat(system_mat, "copper", 8960, 401),非常方便。

    (2)把材料共享给热分析系统

      # 获取工程数据组件用于后续共享
      engineeringDataComponent1 = system_mat.GetComponent(Name="Engineering Data")# 创建热分析系统并共享工程数据
      template_thermal = GetTemplate(TemplateName="Steady-State Thermal", Solver="ANSYS")  # 获取稳态热分析模板# 创建热分析系统并共享已定义的材料数据
      system_thermal = template_thermal.CreateSystem(
         ComponentsToShare=[engineeringDataComponent1],  # 共享工程数据组件
         Position="Right"  # 在Workbench界面右侧创建新系统)

      这部分解决了 “材料复用” 的问题。手动操作时,建完材料后要在热分析模块里手动关联,脚本里用ComponentsToShare参数,直接把前面建好的材料系统共享给新创建的热分析系统(Steady-State Thermal是稳态热分析模板),避免重复定义材料。

      Position="Right"是说在 Workbench 界面里,热分析系统显示在材料系统的右边,和手动拖模块的布局一致,方便调试时查看。

      (3)导入几何模型

        # 设置几何模型
        geo_thermal = system_thermal.GetContainer(ComponentName="Geometry")  # 获取几何容器
        geo_thermal.SetFile(FilePath=file_geo)  # 导入几何模型文件

        这两行相当于在热分析系统里双击 “Geometry”,然后选择前面定义好的file_geo路径导入模型。GetContainer(ComponentName="Geometry")是拿到几何模块的操作权限,SetFile是指定要导入的几何文件。

        如果你的几何需要参数化(比如窗户厚度可变),可以在这一步后面加geo_thermal.Edit()打开 SpaceClaim 脚本接口,批量修改尺寸参数 。关于这部分,这个我们后面案例再细讲。

        (4)控制前台 / 后台交互模式

          # 设置分析环境
          setup_thermal = system_thermal.GetContainer(ComponentName="Setup")  # 获取分析设置容器
          setup_thermal.Edit(Interactive=not is_background)  # 根据后台标志决定是后台交互还是前台交互

          这是实现 “后台 / 前台切换” 的关键代码!setup_thermal是热分析的 “设置” 模块(就是 Mechanical 里划分网格、加边界条件的地方)。

          setup_thermal.Edit(Interactive=...)里的Interactive参数:

          • is_background=True时,Interactive=not True=False,表示 “非交互模式”(后台运行,不弹 Mechanical 界面);

          • is_background=False时,Interactive=not False=True,表示 “交互模式”(前台运行,弹出 Mechanical 界面)。

          这就是为什么前面说is_background是 “总开关”—— 改一个参数,就能在调试和交付模式间切换。

          (5)执行 Mechanical 里的详细操作
            # 构建并执行Mechanical脚本命令
            command = 'WB.AppletList.Applet("DSApplet").App.Script.doToolsRunMacro("%s")' % file_script
            setup_thermal.SendCommand(Command=command)  # 在Mechanical环境中执行外部Python脚本

            这部分是 “调用细节脚本”。前面的脚本解决了 “建材料、关联系统、导入几何”,但具体的网格划分(比如设置网格尺寸 2mm)、加边界条件(比如外表面温度 - 50℃)、求解设置(比如收敛精度 1e-6),这些更细致的操作通常写在script_mechanical.py里(就是前面定义的file_script路径)。

            SendCommand相当于在 Mechanical 的命令行里输入指令,让它去运行script_mechanical.py里的内容。这样做的好处是 “分工明确”—— 主脚本管流程,细节脚本管具体操作,后续改网格或边界条件时,只动细节脚本就行。

            (三)完整脚本及其演示






































































            # -*- coding: utf-8 -*-  # 指定文件编码为UTF-8,确保支持中文注释和路径import os  # 导入操作系统接口模块,用于文件路径操作# ========================# 用户参数定义# ========================is_background = True  # 后台运行模式标志(True表示非交互模式)proj_folder = GetProjectDirectory()  # 获取当前ANSYS Workbench项目目录路径# 构建脚本文件路径并统一使用正斜杠(确保跨平台兼容性)file_script = os.path.join(proj_folder, "script""script_mechanical.py")  # 拼接Mechanical脚本路径file_script = file_script.replace("\\""/"# 构建几何文件路径并统一使用正斜杠file_geo = os.path.join(proj_folder, "geometry""geo.scdoc")  # 拼接几何模型文件路径file_geo = file_geo.replace("\\""/"# ========================# 核心函数定义# ========================def create_mat(system_mat, mat_name, density, therma_conductivity):    """在工程数据系统中创建新材料并定义其物理属性    参数:        system_mat: 材料系统对象(工程数据容器)        mat_name: 材料名称(字符串)        density: 材料密度值(kg/m³)        therma_conductivity: 材料热导率值(W/m·°C)    """    # 获取工程数据容器    engineeringData1 = system_mat.GetContainer(ComponentName="Engineering Data")    # 创建新材料对象    mat = engineeringData1.CreateMaterial(Name=mat_name)    # 定义密度属性(带单位说明)    mat.CreateProperty(Name='Density').SetData(        Variables=['Density'],         Values=[["%s [kg m^-3]" % density]]  # 格式化为带单位的字符串    )    # 定义热导率属性(带单位说明)    mat.CreateProperty(Name='Thermal Conductivity').SetData(        Variables=['Thermal Conductivity'],         Values=[["%s [W m^-1 C^-1]" % therma_conductivity]]  # 格式化为带单位的字符串    )# ========================# 主程序执行# ========================# 创建材料系统template_mat = GetTemplate(TemplateName="EngData")  # 获取工程数据模板system_mat = template_mat.CreateSystem()  # 基于模板创建材料系统# 创建四种工程材料create_mat(system_mat, "Mag2Al"2560158)  # 创建Mag2Al合金材料create_mat(system_mat, "air"1.2950.024)   # 创建空气材料create_mat(system_mat, "glass"330.025)    # 创建玻璃材料create_mat(system_mat, "al"4450202)       # 创建铝材料# 获取工程数据组件用于后续共享engineeringDataComponent1 = system_mat.GetComponent(Name="Engineering Data")# 创建热分析系统并共享工程数据template_thermal = GetTemplate(TemplateName="Steady-State Thermal", Solver="ANSYS")  # 获取稳态热分析模板# 创建热分析系统并共享已定义的材料数据system_thermal = template_thermal.CreateSystem(    ComponentsToShare=[engineeringDataComponent1],  # 共享工程数据组件    Position="Right"  # 在Workbench界面右侧创建新系统)# 设置几何模型geo_thermal = system_thermal.GetContainer(ComponentName="Geometry")  # 获取几何容器geo_thermal.SetFile(FilePath=file_geo)  # 导入几何模型文件# 设置分析环境setup_thermal = system_thermal.GetContainer(ComponentName="Setup")  # 获取分析设置容器setup_thermal.Edit(Interactive=not is_background)  # 根据后台标志决定是后台交互还是前台交互# 构建并执行Mechanical脚本命令command = 'WB.AppletList.Applet("DSApplet").App.Script.doToolsRunMacro("%s")' % file_scriptsetup_thermal.SendCommand(Command=command)  # 在Mechanical环境中执行外部Python脚本# 完成设置并保存setup_thermal.Exit()  # 退出设置编辑器界面Save(Overwrite=True)  # 保存项目文件(覆盖现有文件)


             刷新
            03
            更进一步,隐藏ANSYS Workbench界面
            篇幅有限,本文仅介绍如何实现Mechanical后台交互,同学们可参考本文所提供的命令,实现Mechanical/Fluent等数据集成应用程序 (data-integrated applications)的后台交互操作。
            更近一步的,在我于仿真秀推出的《ANSYS Workbench & Mechanical企业级二次开发程序与Python应用入门进阶》中,我还进一步讲解了如何利用批处理命令,利用批处理命令,后台打开Ansys Workbench并执行一系列脚本命令。学习过程中不仅提供相关学习资料还提供VIP群答疑服务。
            图片
            图片
            那么,根据视频教程内容,并结合自行搭建的UI界面及其交互逻辑,即可开发属于你自己的ANSYS二次开发软件!!!详情见下文,或在仿真秀官网搜索。
            04
            ANSYS二次开发需求调研
            聊到这里,其实我后台经常收到朋友的私信。有人问 “能不能讲讲参数化建模的脚本?”,有人想知道 “批量导出仿真报告怎么实现”,还有人纠结 “APDL 和 Python 到底该学哪个”。
            这些问题都很实在,但我怕自己想当然地选了主题,最后讲的不是大家最急需的。毕竟二次开发的方向太多,从基础的脚本调试,到进阶的定制化界面开发,再到工业级的批量仿真平台搭建,每个方向的实用技巧都不一样。
            所以这次想麻烦大家花1-2分钟填个小问卷,问卷里只有几个选择题,主要想明确两件事:
            你目前在做哪类仿真(热分析、结构强度、流体等),遇到的二次开发痛点是什么?
            你最想深入学的方向(比如自动建材料、参数化几何、后处理报告自动化等)?
            后续我会根据问卷结果调整内容。大家最关注的方向,我会拆成更细的实战案例,从 “需求背景→脚本拆解→避坑技巧” 一步步讲透;甚至如果某类需求集中,我还会整理对应的代码模板,让大家拿过去改改参数就能用。
            图片
            Mechanical二次开发代码&命令通用
            著作权归作者所有,欢迎分享,未经许可,不得转载
            首次发布时间:2025-11-06
            最近编辑:9月前
            小郭老师
            硕士 小郭老师,精通ANSYS开发
            获赞 145粉丝 43文章 32课程 2
            点赞
            收藏
            作者推荐
            未登录
            还没有评论
            课程
            培训
            服务
            行家
            VIP会员 学习计划 福利任务
            下载APP
            联系我们
            帮助与反馈