首页/文章/ 详情

告别手动点选!1段Python脚本,自动化完成ANSYS轴流风扇前八阶模态分析

1小时前浏览45
图片

导读:在最近几篇文章中,在仿真秀平台发起了关于大家最感兴趣的ANSYS二次开发主题调研,发现大家对参数化控制非常感兴趣。
于是,今天就接着上一篇文章使用Python+ANSYS批量定义结构材料(附代码)的内容,聚焦Mechanical参数化脚本应用场景,以轴流式三叶片电风扇模态分析为案例,详细讲解如何通过 Python 脚本一步步实现Mechanical模态分析。之后的文章,后续还将推出更多参数化控制命令(如网格参数化、载荷参数化等),希望大家多多支持。
当然,如果大家有不一样的ANSYS二次开发需求,非常欢迎填写以下问卷,我会优先针对大家的实际问题制作教程。也可提供一对一技术服务和付费答疑,欢迎在仿真秀官网搜索-【小郭老师】的仿真专栏联系我。
01    

需求描述    

某轴流式三叶片电风扇动平衡性良好、出风量大,不易共振,可避免扇叶或轴心振动引发的疲劳断裂。
材料:聚乙烯
载荷条件:轴孔为固定约束
:对三片扇叶开展前八阶模态分析
02    

关键脚本解析    

1、环境清理模块(实用价值:避免历史数据干扰)
  









collections = [    Model.Mesh.Children,  # 网格数据    Model.NamedSelections.Children,  # 命名选择    ExtAPI.DataModel.GetObjectsByType(DataModelObjectCategory.FixedSupport),  # 固定约束    ExtAPI.DataModel.GetObjectsByType(DataModelObjectCategory.TotalDeformation),  # 变形结果]for collection in collections:    for item in collection:        item.Delete()  # 批量删除
 
二次开发中,脚本常需重复运行(如修改参数后重新分析),若不清理历史数据,会导致「新约束叠加旧约束」「网格重复生成」等问题。
此段代码通过遍历关键对象类型,确保每次运行都从「干净环境」开始。
2、材料批量分配函数
      




















def mat_definition(mat2geo_dict):    # 步骤1:获取已加载材料列表    mat_lib = [mat.Name for mat in Model.Materials.Children]    # 步骤2:提取所需材料并去重    mat_needs = list(set(mat2geo_dict.values()))    # 步骤3:校验材料是否存在    isExist_mat = True    missing_mats = []    for need_mat in mat_needs:        if need_mat not in mat_lib:            isExist_mat = False            missing_mats.append(need_mat)    # 步骤4:存在则分配,缺失则报错    if isExist_mat:        for geo_name, target_mat in mat2geo_dict.items():            for part in Model.Geometry.Children:                for body in part.Children:                    if geo_name in body.Name:  # 模糊匹配几何体名称                        body.Material = target_mat    return isExist_mat, missing_mats
     

Q1: 为什么加「材料存在性校验」?

A1: 工程中常遇到「脚本运行到一半因材料缺失报错」的情况,此逻辑提前拦截问题,并给出解决方案(补充 Engineering Data),避免无效计算。
Q2: 为什么用「模糊匹配(geo_name in body.Name)」?
A2: 实际建模时,几何体名称可能带后缀(如 “Fan1”“Fancopy”),模糊匹配确保只要名称含 “Fan” 就能正确分配材料,提高脚本兼容性。
3、命名选择与约束施加(工程细节:精准定位约束位置)
      









ns = Model.AddNamedSelection()ns.Name = "ns_center"  # 轴孔位置命名选择ns.GenerationCriteria[0].EntityType = SelectionType.GeoEdge  # 选择几何边ns.GenerationCriteria[0].Criterion = SelectionCriterionType.LocationZ  # Z坐标定位ns.GenerationCriteria[0].Operator = SelectionOperatorType.Smallest  # 最小Z值处(轴孔边缘)ns.Generate()# 施加固定约束到命名选择fixed_support = a nalysis.AddFixedSupport()fixed_support.Location = ns
     
风扇模态分析的约束位置是轴孔(固定端),传统手动选择易选错边。
脚本通过「Z 坐标最小」自动定位轴孔边缘(建模时轴孔通常在 Z 最小处),确保约束位置 100% 准确,解决 “因约束错误导致模态结果失真” 的工程问题。
4、求解与后处理(效率提升:自动生成全阶结果)
      






# 用迭代法求解(适合模态分析,速度更快)an alysis_setting.SolverType = SolverType.Iterative# 求解并生成所有阶次振型an  alysis.Solve()deformation.CreateResultsAtAllSets()an alysis_solution.EvaluateAllResults()
     

CreateResultsAtAllSets()的作用时自动生成所有阶次的振型云图,避免手动点击 “Evaluate All Results”,节省后处理时间。

03    

完整脚本    

      










































































# encoding: utf-8def mat_definition(mat2geo_dict):    """    批量材料分配函数    参数:mat2geo_dict - 几何体-材料映射字典(dict类型)    返回:isExist_mat - 材料存在性校验结果(bool类型:True=所有材料存在,False=存在缺失材料);missing_mats - 缺失的材料    """    # 步骤1:获取当前Model中已加载的所有材料名称(从Materials树中读取)    mat_lib = [mat.Name for mat in Model.Materials.Children]  # 提取材料名称列表    print "当前ANSYS材料库中已加载的材料:%s" % mat_lib    # 步骤2:提取映射字典中所需的所有材料(去重)    mat_needs = list(set(mat2geo_dict.values()))  # set去重后转list    print "本次批量分配所需的材料:%s" % mat_needs    # 步骤3:校验材料存在性    isExist_mat = True    missing_mats = []    for need_mat in mat_needs:        if need_mat not in mat_lib:            isExist_mat = False            missing_mats.append(need_mat)    # 步骤4:根据校验结果执行操作    if isExist_mat:        print "\n=== 所有材料已存在,开始批量分配 ==="        for geo_name, target_mat in mat2geo_dict.items():  # 遍历字典项            for part in Model.Geometry.Children:           # 遍历部件                for body in part.Children:                 # 遍历几何体                    if geo_name in body.Name:               # 名称匹配                        body.Material = target_mat          # 核心分配操作                        print "分配成功:几何体「%s」→ 材料「%s」" % (body.Name, target_mat)        print "=== 批量材料分配完成 ==="    else:        print "材料缺失,分配终止!缺失的材料:%s" % missing_mats        print "解决方案:1. 进入Engineering Data模块;2. 补充材料"    return isExist_mat, missing_mats# 初始化collections = [    Model.Mesh.Children,    Model.NamedSelections.Children,    ExtAPI.DataModel.GetObjectsByType(DataModelObjectCategory.FixedSupport),    ExtAPI.DataModel.GetObjectsByType(DataModelObjectCategory.TotalDeformation),]for collection in collections:    for item in collection:        item.Delete()# 材料定义mat_lib = [mat.Name for mat in Model.Materials.Children]mat2geo_dict = {"Fan""Polyethylene"}mat_check_result, missing_mats = mat_definition(mat2geo_dict)if not mat_check_result:    raise Exception("材料缺失,脚本终止执行,缺失的材料:%s" % missing_mats)# 创建Name Selectionns = Model.AddNamedSelection()ns.Name = "ns_center"ns.ScopingMethod = GeometryDefineByType.Worksheetns.GenerationCriteria.Add(None)ns.GenerationCriteria[0].EntityType = SelectionType.GeoEdgens.GenerationCriteria[0].Criterion = SelectionCriterionType.LocationZns.GenerationCriteria[0].Operator = SelectionOperatorType.Smallestns.Generate()# 求解方法设置为迭代法an alysis = DataModel.A nalysisList[0]an alysis_setting = ana lysis.A nalysisSettingsana lysis_setting.SolverType = SolverType.Iterative# 创建固定约束fixed_support = an alysis.AddFixedSupport()fixed_support.Location = ns# 插入后处理an alysis_solution = a nalysis.Solutiondeformation = an alysis_solution.AddTotalDeformation()# 求解an alysis.Solve()# 后处理求模态振型deformation.CreateResultsAtAllSets()a nalysis_solution.EvaluateAllResults()
     
04    

应用延伸:脚本复用与拓展    

1、适配多规格风扇:若需分析不同叶片数量(如 4 叶、5 叶)的风扇,只需修改mat2geodict中的键(如{"Fan4": "Polyethylene"}),并调整命名选择的定位逻辑(如轴孔在 Z 最大处,改Operator为Largest)。
2、结果自动导出:补充代码deformation.ExportToTextFile(...),将前 8 阶固有频率自动写入文本,避免手动记录数据的误差。
3、Workbench & Mechanical脚本联合应用:结合之前文章所讲,实现从Workbench界面直接后台调用Mechanical、执行Mechanical脚本。
...
05    

ANSYS二次开发实战教程      

看完这篇,是不是觉得 ANSYS 二次开发没那么难。如果你也在为ANSYS后台交互而头疼,不妨试试这个脚本。
此外,在使用过程中遇到代码报错、需求调整等问题,欢迎在评论区留言,我会一一解答。后续还会分享更多 ANSYS 二次开发的实战技巧,敬请关注仿真秀-小郭老师的仿真专栏。
点击阅读原文或识别下方二维码,立即学习《ANSYS Workbench & Mechanical企业级二次开发程序与Python应用入门进阶》,掌握ANSYS Workbench & Mechanical的脚本自动化开发能力。
本课程从基础脚本开发到多工况批量计算的自动化实现,手把手教你用 Python 打通 “仿真流程自动化 - 多工况批量计算” 全链路,让 “重复仿真工作自动化、复杂工况高效计算” 从想法变成日常。
我还为付费用户提供VIP群进行交流、答疑服务持续加餐内容提供定制化培训和咨询服务仿真人才库高新内推就业仿真秀还提供奖学金、学完此课程,推荐学习者报名参加工程仿真技术(CAE分析职业能力等级评价证书)。
此外,在使用过程中遇到代码报错、需求调整等问题,欢迎在评论区留言,我会一一解答。后续还会分享更多 ANSYS 二次开发的实战技巧,敬请关注。  

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

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

图片  



来源:仿真秀App
MechanicalLS-DYNAWorkbenchHyperMeshHyperView振动疲劳断裂电路二次开发材料机器人控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-11-15
最近编辑:1小时前
仿真圈
技术圈粉 知识付费 学习强国
获赞 11447粉丝 22800文章 4063课程 241
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈