首页/文章/ 详情

ANSYS & Python二次开发实战:批量施加70+力载荷,可扩展至压力载荷等

5月前浏览944

 


导读: 大家好,我是小郭老师,硕士毕业于中科院,专注于运用 Python 深度集成 ANSYS 进行工程数值计算与仿真自动化开发,精通基于 Python实现ANSYS Workbench众多模块的全流程脚本驱动(建模、求解、后处理),并具备将复杂仿真流程封装为高效、可复用软件工具的专业能力,今天给大家分享一些ANSYS二次开发方面的干货。


前几天,我的一个学员找我求助,问题很典型:他做了一组仿真,得到了70+的接触反力CSV文件,每个文件里都包含时间、X/Y/Z三个方向的力分量数据,现在需要把这些载荷全部施加到另一个ANSYS模型中,用于后续的动态响应分析。

image.png

image.png

他一开始尝试手动操作。打开一个CSV文件,copy数据,在ANSYS Mechanical里创建力边界条件,手动粘贴时间和力分量,再命名保存——一个文件就要花1分钟,70个文件算下来,至少也要耗在这种重复劳动上一两个小时,而且手动输入容易出错,一旦某个数据粘错,整个仿真结果都要重来。

其实这种“批量重复操作”,正是ANSYS二次开发的核心应用场景。用Python+ANSYS Mechanical API,我们可以写一段代码,让电脑自动完成“读取CSV→匹配模型位置→创建载荷→赋值数据”的全流程,70个文件几分钟就能搞定,还能避免手动错误。

image.png

今天就手把手教大家,如何用Python批量读取接触反力CSV文件,自动施加到时程载荷边界条件,看完就能直接套用在自己的项目中。

一、Python+ANSYS API批量操作整体思路

在写代码之前,我们先理清整体逻辑——不用一上来就扎进代码里,先搞懂“每一步要做什么”,后续看代码才不会懵。整个流程其实就3步,非常清晰:

1、读取CSV文件:用Python读取每个接触反力CSV,提取出“时间”“X方向力”“Y方向力”“Z方向力”四列数据,整理成便于后续调用的格式;

2、关联ANSYS模型:通过API获取ANSYS模型中提前创建好的“命名选择”(也就是载荷要施加的位置),以及我们要操作的分析系统;

3、批量创建载荷:自动创建力边界条件,将CSV中提取的时程数据,对应赋值到X/Y/Z三个方向,完成单个文件的载荷施加;如果是多个文件,加个循环即可批量执行。

在运行代码之前,需确保满足以下前置条件

1、CSV文件格式:必须包含“时间”和“X/Y/Z方向力”列(列名可以自定义,比如“Time”“Force X”“Fy”等,代码会自动识别)

2、ANSYS模型:提前创建好载荷施加位置的“命名选择”(比如命名为“ns_force”),后续代码会通过这个名称定位施加位置

二、实战代码拆解

这部分是核心,我会把完整代码拆成4个模块,逐段解析每个模块的功能、关键代码含义,以及需要修改的变量——大家不用死记硬背,只要替换掉自己的文件路径和命名选择名称,就能直接运行。

先放完整代码,方便大家整体查看,后面再逐段拆解:

模块1:CSV文件读取函数(read_csv)

这个函数的核心作用,是把CSV文件按“列”读取,整理成字典格式——比如CSV的列名是“Time”“Fx”“Fy”“Fz”,那么读取后得到的字典就是:{"Time":[时间数据列表], "Fx":[X方向力数据列表], ...},后续调用数据会非常方便。

关键代码解析(重点看这3处):

1、with codecs.open(file_path, 'rb', encoding='utf-8') as csvfile:用codecs打开文件,避免中文编码报错(很多工程师的CSV文件会有中文列名,用这个方式能避免读取失败)

2、if not row: continue:跳过CSV中的空行,避免后续转换为浮点数时报错

3、converted_value = float(cleaned_value):将CSV中的文本数据转换为浮点数,这是因为ANSYS载荷需要数值类型,不转换会导致赋值失败。

使用说明:这个函数不需要修改,直接套用即可,后续只需要修改“file”变量,指向自己的CSV文件路径。

模块2:ANSYS模型对象关联

这部分代码的作用,是让Python“找到”ANSYS模型中的载荷施加位置和分析系统,相当于建立Python和ANSYS的连接。

需要修改的2个变量:

1、file:替换为你的CSV文件完整路径,注意路径前面加“r”,避免转义字符报错(比如把“D:\test.csv”写成“r"D:\test.csv"”);

2、ns_locationName:替换为你ANSYS模型中“命名选择”的名称,必须完全一致(比如你命名为“force_location”,这里就改成这个名称)。

补充说明:DataModel.GetObjectsByName(ns_locationName)[0] 是通过名称获取命名选择对象,[0]表示取第一个匹配的对象(如果只有一个命名选择,直接用[0]即可);DataModel.AnalysisList[0] 是获取模型中的第一个分析系统(如果你的载荷要施加到其他分析系统,可修改[0]为对应索引,比如第二个分析系统就是[1])。

模块3:力边界条件创建与设置

这部分是核心中的核心,负责在ANSYS中自动创建力边界条件,并将CSV中的时程数据赋值给X/Y/Z三个方向。

关键解析:

1、AddForce():在分析系统中创建一个力边界条件;

2、bc_f.DefineBy = LoadDefineBy.Components:设置力按“分量”定义(即X/Y/Z三个方向分别赋值),这是时程载荷的常规设置;

3、bc_f.Name = os.path.splitext(os.path.basename(file))[0]:自动用CSV文件名作为边界条件的名称,方便后续管理(比如CSV文件叫“force_1.csv”,边界条件就叫“force_1”);

4、列名自动识别:通过遍历CSV的列名,只要列名包含“time”“x”“y”“z”(不区分大小写),就会自动匹配为时间、X/Y/Z方向力,无需手动指定列索引——比如你的列名是“时间”“X向力”“Y向力”,也能正常识别,非常灵活。

接下来是时程数据赋值,这部分代码将CSV中的数据传递给ANSYS的力边界条件:

关键说明:Quantity(value, "sec") 和 Quantity(value, "N") 是给数据添加单位(时间单位为秒,力的单位为牛),必须添加,否则ANSYS会报错;Inputs是“输入”(即时间),Output是“输出”(即力的大小),对应时程载荷的“时间-力”关系。

三、运行与结果查看

20260308184217_rec_.gif


代码运行完成后,我们需要确认载荷是否成功施加、数据是否准确,避免后续仿真出错。这部分将从“直观效果”和“数据验证”两方面,教大家如何确认运行结果,新手也能快速上手验证。

直观效果查看(ANSYS界面操作)

打开ANSYS Mechanical界面,定位到“分析系统”→“边界条件”,即可看到代码自动创建的力边界条件,具体效果如下:

1、单个文件运行结果:边界条件列表中会新增一个以CSV文件命名的“Force”(力)边界条件,右键点击该边界条件,选择“编辑”,可看到施加位置已自动匹配为我们设置的命名选择(如“ns_force”),且“Define By”已默认设为“Components”(分量),无需手动调整。

2、批量文件运行结果:边界条件列表中会新增与CSV文件数量一致的力边界条件,每个边界条件的名称都与对应的CSV文件名完全匹配(如“Force Reaction_contact_1”“Force Reaction_contact_2”),一目了然,便于后续区分和管理。

补充提示:如果看不到边界条件,可检查“分析系统”是否正确(是否为代码中设置的AnalysisList[0]),或命名选择是否存在,排除路径、命名匹配错误的问题。

数据准确性验证(核心步骤,避免数据错配)

直观看到边界条件后,还需验证CSV中的时程数据是否准确赋值到ANSYS中,避免出现“边界条件创建成功,但数据错误”的情况,验证步骤如下:

1、双击任意一个自动创建的力边界条件,进入编辑界面,切换到“X Component”“Y Component”“Z Component”标签页;

2、每个标签页中,会显示“输入”(时间)和“输出”(力分量)的离散数据,点击“编辑数据”,可查看具体的数值列表;

3、将ANSYS中显示的数值,与对应的CSV文件中的数据进行比对(可随机抽取3-5个时间点,核对X/Y/Z方向的力值),若数值完全一致,说明数据赋值成功;若不一致,可检查CSV文件

写在最后

前面的代码是处理单个CSV文件的,如果需要处理50+个文件,不需要重复运行50次代码,只需要在前面的代码基础上,添加一个“遍历文件夹”的循环即可。

而且这个思路不止适用于接触反力,还能迁移到其他时程载荷的批量施加,比如位移时程、弯矩时程,只要修改代码中的“边界条件类型”(比如把AddForce()改成AddDisplacement()),就能快速适配。

其实ANSYS二次开发不用追求“高大上”,从实际工程需求出发,用几行代码解决一个具体痛点,就是最实用的开发。比如这个工具,看似简单,却能让工程师从重复的手动操作中解放出来,把时间花在更核心的仿真分析上——这正是二次开发的核心意义。

如果大家还有其他ANSYS使用中的痛点,欢迎咨询服务。

ANSYS Mechanical二次开发:多物理场仿真自动化核心方案_仿真分析,二次开发,付费答疑_仿真秀

为了更好的分享各种二次开发学习知识,我还创建了二次开发交流群,并于群里分享各种二次开发文章及相关源程序,欢迎大家于评论区留言,我会逐一邀请加入!

image.png

点击立即学习ANSYS Workbench & Mechanical企业级二次开发程序与Python应用入门进阶,掌握ANSYS Workbench & Mechanical的脚本自动化开发能力。

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

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

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

ui.png


 




Mechanical结构基础静力学瞬态动力学振动显式动力学疲劳断裂碰撞二次开发代码&命令求解技术多体动力学
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-03-10
最近编辑:5月前
小郭老师
硕士 小郭老师,精通ANSYS开发
获赞 145粉丝 43文章 32课程 2
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈