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

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,否则会被批量删除。
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
create_initial_system()创建单一瞬态热系统(适配工况 1-1)
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
# ========================# 主程序执行# ========================# 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])
(1)最左侧:EngData(材料)、Geometry(几何);
(2)右侧依次排列:condition1_1(单一瞬态热)→ condition1_2(稳态热→瞬态热→瞬态结构)→ condition1_3(同链结构)→ ... 所有工况系统;
(3)每个系统已共享材料和几何,且完成数据传递配置(如稳态→瞬态的初始条件)。
(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]
本课程从基础脚本开发到多工况批量计算的自动化实现,手把手教你用 Python 打通 “仿真流程自动化 - 多工况批量计算” 全链路,让 “重复仿真工作自动化、复杂工况高效计算” 从想法变成日常。
我还为付费用户提供VIP群进行交流、答疑服务、持续加餐内容、提供定制化培训和咨询服务、仿真人才库高新内推就业、仿真秀还提供奖学金、学完此课程,推荐学习者报名参加工程仿真技术(CAE分析职业能力等级评价证书)。
以下是课程大纲及主要内容: