首页/文章/ 详情

效率飙升!Ansys Workbench脚本二次开发构建电路板多工况热力耦合仿真

精品
作者优秀平台推荐
详细信息
文章亮点
作者优秀
优秀教师/意见领袖/博士学历/特邀专家/独家讲师
平台推荐
内容稀缺
10月前浏览1561
图片

导读:大家好,我是小郭老师,硕士毕业于中科院,专注于运用 Python 深度集成 ANSYS 进行工程数值计算与仿真自动化开发,精通基于 Python实现ANSYS Workbench众多模块的全流程脚本驱动(建模、求解、后处理),并具备将复杂仿真流程封装为高效、可复用软件工具的专业能力
上一篇文章数据拖垮仿真?Python & ANSYS二次开发-轻松拿捏Mechanical瞬态时域数据,演示了Mechanical 的 Python 脚本开发具体案例,并预告了我的Ansys二次开发教程在仿真秀官网全新上架。今天继续给大家分享一些ANSYS二次开发方面的干货。(文末点赞+转发到朋友圈,赠送Workbench二次开发相关资料,包括且不限于模型和代码等)
在电子设备热管理领域,电路板芯片的 “温度失控” 往往是可靠性失效的核心诱因 —— 尤其是当芯片存在 “持续运行 / 间歇启动” 的差异化工作模式,且散热环境、安装约束条件动态变化时,仅靠手动搭建多工况仿真系统,不仅要重复完成 “几何导入→材料设置→边界条件添加→耦合系统配置” 等机械操作,还容易因人工误差导致工况数据不一致,严重拖慢分析效率。
正是为解决这一痛点,本文聚焦 ANSYS Workbench 脚本开发,以 “电路板多工况热仿真” 为实战案例,从脚本核心逻辑拆解到完整代码详解,手把手教你通过 Python 自动化批量构建仿真系统 —— 让原本需数小时的手动操作,压缩至几分钟完成,同时保证所有工况的材料、几何共享一致性,为电子设备热设计优化提供高效、精准的仿真工具。接下来,我们将从脚本开发基础切入,逐步深入多工况系统的自动化构建全流程。
Python & ANSYS二次开发
01    

WB脚本开发概述    

ANSYS Workbench (WB)脚本化是指利用Python(通过 ANSYS  API)对Workbench项目进行自动化创建、参数化修改、求解控制以及后处理的全过程编程。在Workbench中,可以使用Command Window(命令窗口),以交互方式输入Python命令。每次输入命令后,相应的操作将出现在Workbench GUI上。
例如,以下是利用命令窗口快捷创建静力学分析系统的过程:
选择“File > Scripting > Open Command Window”,从而打开命令窗口
打开命令窗口后,输入以下命令,即可创建静力学分析系统
      


template1 = GetTemplate(TemplateName="Static Structural", Solver="ANSYS"system1 = template1.CreateSystem(
     

02    

工作台日志    

ANSYS Workbench 在整个仿真流程中会自动生成Journal(工作台日志),用于记录用户操作、系统调用。根据用户偏好设置,完整会话的日志可自动保存到指定的位置。
在 .wbpj 项目文件所在目录下有-files 子文件夹,内部包含 userfiles、dp0、dpn 等子目录。默认的,日志文件会自动记录所有操作,并以journal.wbjn的文件形式默认保存于 -files -> sessionfiles下。
此外,用户也可通过File > Scripting > Record Journal,手动给定日志文件位置,记录会话期间的操作命令,直至选择File > Scripting > Stop Recording Journal 。
03    

实战操作:电路板多工况物理系统构建    

(一)问题描述
由于芯片实际工作中存在 “持续 / 间歇运行”“多芯片协同启动” 等不同模式,且设备散热环境、电路板安装约束方式也会动态影响热分布与结构应力,因此本项目核心通过 “多工况仿真” 的方式,模拟不同工作模式、散热条件、约束状态下的热响应,全面挖掘关键影响因素,为热设计优化提供支撑。
所采用的几何模型如下图所示:
考虑芯片散热效果,取热对流边界条件( T=22\ ℃, h=4\ \text{W/m2K),并有如下芯片工作时序。
通过上述多工况仿真分析,最终实现三大目标:
(1)明确 “芯片间歇 / 持续工作时序”“多芯片协同模式” 对电路板温度场的影响规律;
(2)量化 “边界散热能力”“基板约束方式” 对瞬态温度场、瞬态热应力场的作用程度;
(3)输出各工况下的精准仿真数据(温度分布云图、热应力峰值等),为电子设备电路板的热设计优化、可靠性评估及结构改进提供直接的科学依据。
(二)多工况物理系统脚本详解
根据问题描述可知,Workbench脚本开发的核心是批量创建匹配 “稳态热 - 瞬态热 - 瞬态结构” 耦合需求的分析系统,并通过 “组件共享” 减少重复操作、保证工况一致性。下面按 “参数定义→核心函数→主程序” 的顺序,逐行拆解代码逻辑与 Workbench API 特性。
1、用户参数定义:控制脚本核心配置
  








import os  # 导入操作系统模块,用于处理文件路径# ========================# 用户参数定义# ========================is_clean = True  # 是否清理现有系统:True=删除Workbench中所有已存在的分析系统,避免新旧系统冲突proj_folder = GetProjectDirectory()  # 调用Workbench API,获取当前项目的根目录(无需手动输入路径,适配不同电脑)# 拼接几何文件路径:将项目目录+“geometry子文件夹”+“geo.scdoc几何文件”组合,replace处理Windows/Linux路径分隔符差异file_geo = os.path.join(proj_folder, "geometry""geo.scdoc").replace("\\""/")
 
  • GetProjectDirectory()是 Workbench 专属 API,直接获取当前打开项目的路径,避免手动写死路径导致脚本在不同电脑上失效;

  • 几何文件需提前放在项目根目录下的 “geometry” 文件夹中(命名为 geo.scdoc),脚本通过os.path.join自动适配路径格式(Windows 用\,Linux 用/replace("\\", "/")统一为/避免报错);

  • is_clean=True适合新建项目:若已有重要系统,需改为False,否则会被批量删除。

2、核心函数定义:封装复用逻辑
脚本封装了 3 个核心函数,分别对应 “组件共享”“耦合系统链创建”“初始系统创建”,解决多工况下 “重复操作多、系统关联复杂” 的问题。
      























def share_components(target_system, source_mat_system, source_geo_system):    """    功能:将源系统的“工程数据(材料)”和“几何”共享给目标系统    参数:        target_system:接收共享组件的目标分析系统(如瞬态热系统)        source_mat_system:提供“工程数据”的源系统(全局材料系统)        source_geo_system:提供“几何”的源系统(全局几何系统)    """    # 第一步:共享“工程数据”(材料)    engDataComp = target_system.GetComponent(Name="Engineering Data")  # 获取目标系统的“工程数据”组件    engDataComp_source = source_mat_system.GetComponent(Name="Engineering Data")  # 获取源材料系统的“工程数据”组件    # 关键API:ReplaceWithShare——用源组件替换目标组件,并建立共享关系(修改源材料,所有共享系统同步更新)    engDataComp.ReplaceWithShare(        TargetSystem=target_system,        ComponentToShare=engDataComp_source,        SourceSystem=source_mat_system)    # 第二步:共享“几何”(同理,避免多系统重复导入几何)    geoComp = target_system.GetComponent(Name="Geometry")    geoComp_source = source_geo_system.GetComponent(Name="Geometry")    geoComp.ReplaceWithShare(        TargetSystem=target_system,        ComponentToShare=geoComp_source,        SourceSystem=source_geo_system)
     
为什么要共享?

所有工况的电路板材料都是 “结构钢”,几何模型也相同 —— 若每个工况都重新创建 “工程数据” 和 “几何”,不仅冗余,还会导致后续材料 / 几何修改时需逐个调整。通过ReplaceWithShare建立共享后,只需修改 1 个源系统,所有工况系统自动同步,大幅减少维护成本。

  • create_an alysisSystems():创建 “稳态热 - 瞬态热 - 瞬态结构” 耦合系统

此函数是脚本的核心,针对需要 “先稳态热(芯片 1 达热稳态)→再瞬态热(芯片 2/3 间歇工作)→最后瞬态结构(热应力)” 的工况(如工况 1-2、1-3、1-4、2-1、3-1),自动创建三系统耦合链,并实现数据传递。

    



























































def create_a nalysisSystems(name, system_mat, system_geo, system_ref):    """    功能:创建“稳态热→瞬态热→瞬态结构”耦合系统    参数:        name:系统的显示名称(对应工况名,如“condition1_2”)        system_mat:共享的材料系统        system_geo:共享的几何系统        system_ref:参考系统(新系统将放在该系统的右侧,避免重叠)    返回:创建的稳态热系统、瞬态热系统、瞬态结构系统    """    # 1. 获取Workbench分析模板(根据模板创建对应系统)    template_steady = GetTemplate(TemplateName="Steady-State Thermal", Solver="ANSYS")  # 稳态热分析模板    template_transient_thermal = GetTemplate(TemplateName="Transient Thermal", Solver="ANSYS")  # 瞬态热分析模板    template_transient_structural = GetTemplate(TemplateName="Transient Structural", Solver="ANSYS")  # 瞬态结构分析模板    # 2. 创建“稳态热系统”(第一步:计算芯片1达热稳态的温度场)    system_steady_thermal = template_steady.CreateSystem(        Position="Below",  # 系统位置:放在参考系统的下方        RelativeTo=system_ref  # 参考系统:与前一个工况系统对齐    )    share_components(system_steady_thermal, system_mat, system_geo)  # 共享材料和几何    # 3. 准备数据传递:从“稳态热”到“瞬态热”(稳态结果作为瞬态初始条件)    model_steady = system_steady_thermal.GetComponent(Name="Model")  # 获取稳态热的“模型”组件    solution_steady = system_steady_thermal.GetComponent(Name="Solution")  # 获取稳态热的“求解结果”组件    # 获取瞬态热系统的“仿真设置模板”(用于指定数据传递的目标位置)    thermal_template = GetComponentTemplate(Name="SimulationSetupCellTemplate_ThermalTransientANSYS")    # 4. 创建“瞬态热系统”(第二步:计算芯片2/3间歇工作的瞬态温度场)    system_transient_thermal = template_transient_thermal.CreateSystem(        # 共享组件:材料、几何、稳态热的模型(避免重复设置网格/边界)        ComponentsToShare=[            system_steady_thermal.GetComponent(Name="Engineering Data"),            system_steady_thermal.GetComponent(Name="Geometry"),            model_steady        ],        # 数据传递:将稳态热的求解结果(温度场)作为瞬态热的初始条件        DataTransferFrom=[Set(FromComponent=solution_steady, TransferName=None, ToComponentTemplate=thermal_template)],        Position="Right",  # 放在稳态热系统的右侧        RelativeTo=system_steady_thermal    )    # 5. 准备数据传递:从“瞬态热”到“瞬态结构”(温度场作为热应力的载荷)    model_trans_thermal = system_transient_thermal.GetComponent(Name="Model")  # 瞬态热的“模型”组件    solution_trans_thermal = system_transient_thermal.GetComponent(Name="Solution")  # 瞬态热的“求解结果”组件    # 获取瞬态结构系统的“仿真设置模板”    structural_template = GetComponentTemplate(Name="SimulationSetupCellTemplate_StructuralTransientANSYS")    # 6. 创建“瞬态结构系统”(第三步:计算热应力场)    system_trasient_structural = template_transient_structural.CreateSystem(        # 共享组件:材料、几何、瞬态热的模型        ComponentsToShare=[            system_transient_thermal.GetComponent(Name="Engineering Data"),            system_transient_thermal.GetComponent(Name="Geometry"),            model_trans_thermal        ],        # 数据传递:将瞬态热的温度场作为瞬态结构的热载荷        DataTransferFrom=[Set(FromComponent=solution_trans_thermal, TransferName=None, ToComponentTemplate=structural_template)],        Position="Right",  # 放在瞬态热系统的右侧        RelativeTo=system_transient_thermal    )    # 7. 设置系统显示名称(与工况名对应,方便后续识别)    system_steady_thermal.DisplayText = name    return system_steady_thermal, system_transient_thermal, system_trasient_structural
   
以工况 1-2 为例(芯片 1 稳态后,芯片 2 间歇工作):
先通过 “稳态热系统” 计算芯片 1 持续工作至热稳态的温度场;
再通过 “瞬态热系统” 继承稳态结果,添加芯片 2 在 20~30s 的间歇热源,计算 1min 内的瞬态温度;
最后通过 “瞬态结构系统” 继承瞬态温度场,施加约束(如 4 个安装孔固定),计算热应力 —— 完全匹配 “温度场→热应力” 的分析流程。
create_initial_system()创建单一瞬态热系统(适配工况 1-1)
工况 1-1 是 “仅芯片 1 持续工作 1min”,无需先做稳态热分析(直接用瞬态热模拟 1min 内的温度变化,包含热稳态过程),因此单独封装此函数创建单一瞬态热系统。
    

















def create_initial_system(system_name, system_mat, system_geo):    """    功能:创建单一瞬态热系统(适配无需稳态热的工况,如工况1-1)    参数:        system_name:系统显示名称        system_mat:共享的材料系统        system_geo:共享的几何系统    返回:创建的瞬态热系统    """    template = GetTemplate(TemplateName="Transient Thermal", Solver="ANSYS")  # 瞬态热模板    system = template.CreateSystem(        Position="Right"        RelativeTo=system_geo  # 放在几何系统右侧,作为第一个工况系统    )    share_components(system, system_mat, system_geo)  # 共享材料和几何    system.DisplayText = system_name  # 设置工况名称    return system
   
3、主程序执行:按工况批量创建系统
主程序是脚本的 “入口”,按 “清理旧系统→创建基础系统→创建工况系统” 的顺序执行,确保流程清晰、可追溯。
  


























# ========================# 主程序执行# ========================# 1. 清理现有系统(若is_clean=True)if is_clean:    for system in GetAllSystems():  # 调用API获取Workbench中所有系统        print(system.Name)  # 打印待删除系统名称(方便排查误删)        system.Delete()  # 批量删除# 2. 创建全局基础系统(所有工况共享)system_mat = GetTemplate(TemplateName="EngData").CreateSystem()  # 材料系统(存放结构钢参数)system_geo = GetTemplate(TemplateName="Geometry").CreateSystem()  # 几何系统(导入电路板模型)# 给几何系统指定几何文件路径(API:SetFile)system_geo.GetContainer(ComponentName="Geometry").SetFile(FilePath=file_geo)# 3. 按工况创建分析系统(顺序与工况表对应)# 工况1-1:仅芯片1持续工作→调用单一瞬态热系统system_condition1_1 = create_initial_system("condition1_1", system_mat, system_geo)# 工况1-2:芯片1稳态+芯片2间歇→调用“稳态热-瞬态热-瞬态结构”链,参考系统为工况1-1systems_condition1_2 = create_an alysisSystems("condition1_2", system_mat, system_geo, system_condition1_1)# 工况1-3:芯片1稳态+芯片2持续→参考系统为工况1-2的稳态热系统systems_condition1_3 = create_a nalysisSystems("condition1_3", system_mat, system_geo, systems_condition1_2[0])# 工况1-4:三芯片全程持续→参考系统为工况1-3的稳态热系统systems_condition1_4 = create_a nalysisSystems("condition1_4", system_mat, system_geo, systems_condition1_3[0])# 工况2-1:基准模式+散热h=2→参考系统为工况1-4的稳态热系统systems_condition2_1 = create_a nalysisSystems("condition2_1", system_mat, system_geo, systems_condition1_4[0])# 工况3-1:基准模式+边缘固定→参考系统为工况2-1的稳态热系统systems_condition3_1 = create_an alysisSystems("condition3_1", system_mat, system_geo, systems_condition2_1[0])
 
执行效果:
运行脚本后,Workbench 会自动生成如下系统布局(无手动操作):

(1)最左侧:EngData(材料)、Geometry(几何);

(2)右侧依次排列:condition1_1(单一瞬态热)→ condition1_2(稳态热→瞬态热→瞬态结构)→ condition1_3(同链结构)→ ... 所有工况系统;

(3)每个系统已共享材料和几何,且完成数据传递配置(如稳态→瞬态的初始条件)。

4、关键 API 总结与使用注意事项
注意事项:

(1)几何文件路径需正确:确保geo.scdoc在项目根目录的 “geometry” 文件夹中,否则脚本会报错 “几何文件不存在”;

(2)脚本运行环境:需在 Workbench 的 “Command Window” 中输入python命令执行;或通过 “File→Scripting→Run Script” 选择脚本文件;

(3)工况扩展:若新增工况(如调整芯片功率),只需复 制create_an alysisSystems调用代码,修改工况名和参考系统即可,无需重写核心逻辑。

通过以上脚本,原本需要手动创建 1(材料)+1(几何)+1(工况 1-1)+3×5(其他 5 个工况的三系统链)=17 个系统的操作,现在只需运行一段代码即可完成,且避免了手动操作的误差(如数据传递漏设、共享关系错误),为后续多工况参数修改(如调整对流系数 h、约束方式)打下了高效基础。

(三)完整程序及其运行结果
      































































































# -*- coding: utf-8 -*-import os# ========================# 用户参数定义# ========================is_clean = True  # 是否清理现有系统proj_folder = GetProjectDirectory()  # 获取项目目录file_geo = os.path.join(proj_folder, "geometry""geo.scdoc").replace("\\""/")  # 几何文件路径# ========================# 核心函数定义# ========================def share_components(target_system, source_mat_system, source_geo_system):    """共享工程数据和几何组件到目标系统"""    # 共享工程数据    engDataComp = target_system.GetComponent(Name="Engineering Data")    engDataComp_source = source_mat_system.GetComponent(Name="Engineering Data")    engDataComp.ReplaceWithShare(        TargetSystem=target_system,        ComponentToShare=engDataComp_source,        SourceSystem=source_mat_system)    # 共享几何    geoComp = target_system.GetComponent(Name="Geometry")    geoComp_source = source_geo_system.GetComponent(Name="Geometry")    geoComp.ReplaceWithShare(        TargetSystem=target_system,        ComponentToShare=geoComp_source,        SourceSystem=source_geo_system)def create_an alysisSystems(name, system_mat, system_geo, system_ref):    """    创建分析系统链(稳态热-瞬态热-瞬态结构)    返回: 创建的稳态热系统(作为后续系统的参考)    """    # 获取分析模板    template_steady = GetTemplate(TemplateName="Steady-State Thermal", Solver="ANSYS")    template_transient_thermal = GetTemplate(TemplateName="Transient Thermal", Solver="ANSYS")    template_transient_structural = GetTemplate(TemplateName="Transient Structural", Solver="ANSYS")    # 创建稳态热分析系统    system_steady_thermal = template_steady.CreateSystem(Position="Below", RelativeTo=system_ref)    share_components(system_steady_thermal, system_mat, system_geo)    # 获取稳态热系统的关键组件    model = system_steady_thermal.GetComponent(Name="Model")    solution = system_steady_thermal.GetComponent(Name="Solution")    thermal_template = GetComponentTemplate(Name="SimulationSetupCellTemplate_ThermalTransientANSYS")    # 创建瞬态热分析系统    system_transient_thermal = template_transient_thermal.CreateSystem(        ComponentsToShare=[            system_steady_thermal.GetComponent(Name="Engineering Data"),            system_steady_thermal.GetComponent(Name="Geometry"),            model        ],        DataTransferFrom=[Set(FromComponent=solution, TransferName=None, ToComponentTemplate=thermal_template)],        Position="Right",        RelativeTo=system_steady_thermal)    # 获取瞬态热系统的关键组件    model2 = system_transient_thermal.GetComponent(Name="Model")    solution2 = system_transient_thermal.GetComponent(Name="Solution")    structural_template = GetComponentTemplate(Name="SimulationSetupCellTemplate_StructuralTransientANSYS")    # 创建瞬态结构分析系统    system_trasient_structural = template_transient_structural.CreateSystem(        ComponentsToShare=[            system_transient_thermal.GetComponent(Name="Engineering Data"),            system_transient_thermal.GetComponent(Name="Geometry"),            model2        ],        DataTransferFrom=[Set(FromComponent=solution2, TransferName=None, ToComponentTemplate=structural_template)],        Position="Right",        RelativeTo=system_transient_thermal)    # 设置显示文本    system_steady_thermal.DisplayText = name    return system_steady_thermal, system_transient_thermal, system_trasient_structuraldef create_initial_system(system_name, system_mat, system_geo):    """创建初始瞬态热分析系统"""    template = GetTemplate(TemplateName="Transient Thermal", Solver="ANSYS")    system = template.CreateSystem(Position="Right", RelativeTo=system_geo)    share_components(system, system_mat, system_geo)    system.DisplayText = system_name    return system# ========================# 主程序执行# ========================if is_clean:    for system in GetAllSystems():        print system.Name        system.Delete()# 创建基础系统system_mat = GetTemplate(TemplateName="EngData").CreateSystem()system_geo = GetTemplate(TemplateName="Geometry").CreateSystem()system_geo.GetContainer(ComponentName="Geometry").SetFile(FilePath=file_geo)# 创建不同工况下的求解系统system_condition1_1 = create_initial_system("condition1_1",system_mat, system_geo)systems_condition1_2 = create_an alysisSystems("condition1_2", system_mat, system_geo, system_condition1_1)systems_condition1_3 = create_an alysisSystems("condition1_3", system_mat, system_geo, systems_condition1_2[0])systems_condition1_4 = create_an alysisSystems("condition1_4", system_mat, system_geo, systems_condition1_3[0])systems_condition2_1 = create_an alysisSystems("condition2_1", system_mat, system_geo, systems_condition1_4[0])systems_condition3_1 = create_an alysisSystems("condition3_1", system_mat, system_geo, systems_condition2_1[0]
     
   
   
04    

脚本自动化是多工况仿真的“效率刚需”    

当你手动重复创建第 3 个 ANSYS 分析系统时,或许就该意识到:脚本化不是 “可选技能”,而是多工况仿真场景下的 “效率刚需”。
本文从 ANSYS Workbench 脚本开发基础切入,以电路板多工况热 - 力耦合仿真为实战载体,不仅拆解了 “参数定义 - 核心函数 - 主程序” 的完整脚本逻辑,更通过 “组件共享”“数据传递” 等关键 API 的应用,实现了 6 大工况仿真系统的自动化批量构建 —— 只需十几秒即可创建完成,且彻底规避了人工设置误差导致的工况数据不一致问题。
对企业工程师而言,这份脚本不仅是 “代码模板”,更是一套可复用的多工况仿真思路!只需在现有脚本基础上微调参数,即可快速生成新的分析系统,大幅缩短工程设计的迭代周期。
看完这篇,是不是觉得 ANSYS 二次开发没那么难。如果你也在为模拟数据处理头疼,不妨试试这个脚本。此外,在使用过程中遇到代码报错、需求调整等问题,欢迎在仿真秀官网的课程评论区留言,我会一一解答。后续还会分享更多 ANSYS 二次开发的实战技巧,敬请关注。  
点击阅读原文,立即学习《ANSYS Workbench & Mechanical企业级二次开发程序与Python应用入门进阶》,掌握ANSYS Workbench & Mechanical的脚本自动化开发能力。  
05    

我的ANSYS二次开发教程      

本课程从基础脚本开发到多工况批量计算的自动化实现,手把手教你用 Python 打通 “仿真流程自动化 - 多工况批量计算” 全链路,让 “重复仿真工作自动化、复杂工况高效计算” 从想法变成日常。

我还为付费用户提供VIP群进行交流答疑服务持续加餐内容提供定制化培训咨询服务仿真人才库高新内推就业仿真秀还提供奖学金、学完此课程,推荐学习者报名参加工程仿真技术(CAE分析职业能力等级评价证书)。

此外,在使用过程中遇到代码报错、需求调整等问题,欢迎在评论区留言,我会一一解答。后续还会分享更多 ANSYS 二次开发的实战技巧,敬请关注。  

可回放,开具发票,奖学金、直播加餐
提供vip群答疑和模型下载
ANSYS Workbench & Mechanical企业级二次开发程序与Python应用入门进阶
    
图片
扫码查看视频教程

以下是课程大纲及主要内容:

图片


来源:仿真秀App
ACTMechanicalWorkbenchSystemHyperMesh静力学振动电路二次开发电子芯片焊接材料热设计控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-10-21
最近编辑:10月前
仿真圈
技术圈粉 知识付费 学习强国
获赞 12081粉丝 23475文章 4583课程 276
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈