opy
导读: 大家好,我是小郭老师,硕士毕业于中科院,专注于运用 Python 深度集成 ANSYS 进行工程数值计算与仿真自动化开发,精通基于 Python 实现 ANSYS Workbench 众多模块的全流程脚本驱动(建模、求解、后处理),并具备将复杂仿真流程封装为高效、可复用软件工具的专业能力,今天给大家分享一些 ANSYS 二次开发方面的干货。
前阵子,有一位学员找我反馈了一个很典型的问题:他在做仿真时,需要通过 External Data 模块向 Mechanical 导入多个时序载荷文件,每个文件对应一个工况。在 External Data 的图形界面里可以添加多个文件,对应关系也清晰,但问题出在——导入到 Mechanical 后,那一系列"关联文件、设置作用域"的操作,根本录制不到脚本命令!
他试了几种方法都没成功,最后迫不得已,每个载荷文件单独建一个 External Data 模块,手动一个个关联进来。文件少的时候还能凑合,但载荷文件一旦增多,模块数量暴增,Workbench 项目图混乱不堪,管理起来极其费劲。

这个问题我自己也踩过坑,所以今天就直接把解决方案分享出来——通过 Python 脚本直接操控 Mechanical 的导入载荷逻辑,绕开"录制不到"的死角,一段代码批量完成多文件载荷导入,手把手拆解每行命令的含义,拿到手稍作修改就能直接用。
External Data 是 ANSYS Workbench 中专门用于导入外部数据文件的模块,核心价值在于:它能把来自其他仿真软件、测试设备或自定义计算程序生成的结果数据(如温度场、压力场、位移场等),直接"喂"给 Mechanical 作为载荷输入,典型应用场景包括:
其中一个非常实用的特性是:一个 External Data 模块支持同时添加多个文件,在界面里通过"Add..."按钮逐个添加后,每个文件都会对应一个独立的载荷列,关联关系清晰,如下图所示。


把 External Data 模块链接到 Mechanical 后,在 Mechanical 里需要完成以下操作:
步骤 4 是整个流程的核心——每增加一个文件,就要在表格里新增一行,填写文件标识、时间映射、缩放系数。但如果你用 Mechanical 的"Record Script"功能录制这些操作,会发现步骤 4 和步骤 5 根本不会被记录进脚本!
这正是学员遇到困境的根源:录制不到命令 → 只能手动操作 → 文件一多就抓狂。
既然录制不到,就绕过录制,直接调用 Mechanical API 来操控导入载荷的 Worksheet 表格。下面我们以"批量导入 6 个时序温度载荷文件"为例,完整拆解这段脚本的每一处逻辑。
在动手写代码之前,先把涉及到的对象层级理清楚,后续看代码才不会绕晕:

ExtAPI.DataModel.GetObjectsByName(...) —— 通过名称定位树中的任意对象,是脚本的"导航仪";ImpLoadGroup.AddImportedTemperature() —— 在导入载荷组下添加温度载荷对象;imported_temp_load.GetTableByName("") —— 获取该载荷的 Worksheet 表格(空字符串表示默认表格);Ansys.ACT.Automation.Mechanical.WorksheetRow() —— 创建新的 Worksheet 行对象,用于增加文件映射;ImpLoadGroup.ImportLoad() —— 触发实际的数据导入,相当于点击界面上的"Import Load"按钮。


表格每一行有 3 列,很多人不清楚对应什么,这里统一解释一下:
table_row[0] | File序号:列名,精准定位 External Data 中的具体数据列 | |
table_row[1] | ||
table_row[2] | '1' | |
特别注意:列索引和文件标识符 File1:Temperature1 中的编号,都是从 1 开始,不是从 0 开始!这是一个很容易混淆的坑,i 从 0 开始循环时,对应的文件标识应该写成 File%d % (i+1),不要直接用 File%d % i,否则第一个文件会找不到对应数据。


运行脚本前,需确保以下环境已就绪:
Temperature1)与代码中的 DATA_COLUMN_NAME 一致,如下图所示。 (External Data 多文件配置截图占位)

ns_wall),用于指定温度载荷施加的几何位置。

2. 将第二节的完整脚本粘贴进脚本面板,根据实际情况修改顶部的 5 个用户参数:

=== 导入完成,共配置 6 个载荷文件 ===脚本执行完成后,在 Mechanical 模型树中可以看到以下结果,说明批量导入已成功完成:
1. 导入载荷节点自动生成
在"Imported Load Group"下,自动出现新增的"Imported Temperature"节点,作用域已自动绑定为 ns_wall 命名选择,无需手动调整,如下图所示。

2. Worksheet 表格自动填写完毕
双击"Imported Temperature"节点,切换到"Worksheet"标签页,可以看到 6 行数据已自动填写完毕,每行分别对应一个载荷文件,时间映射与缩放系数也与代码中的设置完全一致,如下图所示。

3. 导入载荷云图正常显示
点击"Imported Temperature"节点,在图形窗口中可以看到对应时刻的温度场云图已正确映射到几何体上,颜色分布与原始载荷文件的数据吻合,如下图所示。

对比一下手动操作与脚本的耗时差异——6 个文件手动配置约需 5~8 分钟(逐行填写、逐次确认),而脚本运行全程不超过 10 秒,文件数量越多,效率优势越显著。
Q1:运行脚本后提示"找不到对象 'Imported Load (A2) '",怎么办?
A:检查以下两点:① 在 Workbench 项目图中确认 External Data 模块的编号(A2、B2 还是其他),名称要完全一致;② 注意"Imported Load (A2)"后面有一个空格,这是 ANSYS 默认命名的坑,字符串必须带上这个空格,否则匹配失败。
Q2:表格里的File1:Temperature1怎么确认列名是否正确?
A:打开 External Data 模块,查看每个文件对应的"Variables"配置,里面会显示该文件被识别出的数据列名(如 Temperature、Pressure 等)。如果列名叫"Temperature"而不是"Temperature1",则代码中需要改为 'File%d:Temperature' % (i+1)。
Q3:需要同时导入温度和压力两种载荷,代码怎么扩展?
A:在第二步之后,重复"添加载荷→获取表格→填写映射→导入"的逻辑即可,只需把 AddImportedTemperature() 换成 AddImportedPressure(),DATA_COLUMN_NAME 改为对应的压力列名,其余逻辑完全复用。
很多同学在做热-结构耦合分析时,都卡在"External Data 批量导入"这个环节,根本原因就是 Mechanical 的录制功能对导入载荷的 Worksheet 操作存在盲区。本文的脚本通过直接调用 GetTableByName 和 WorksheetRow 两个 API,精准填补了这个空白——只需把用户参数区的 5 个变量改成自己项目里的实际值,就能直接运行,彻底摆脱重复手动配置的麻烦。
此外,在使用过程中遇到代码报错、需求调整等问题,欢迎在评论区留言,我会一一解答。后续还会分享更多 ANSYS 二次开发的实战技巧,敬请关注。
点击阅读原文,立即学习《ANSYS Workbench & Mechanical企业级二次开发程序与Python应用入门进阶》,掌握 ANSYS Workbench & Mechanical 的脚本自动化开发能力。
本课程从基础脚本开发到多工况批量计算的自动化实现,手把手教你用 Python 打通"仿真流程自动化 - 多工况批量计算"全链路,让"重复仿真工作自动化、复杂工况高效计算"从想法变成日常。
我还为付费用户提供 VIP 群进行交流、答疑服务、持续加餐内容、提供定制化培训和咨询服务、仿真人才库高薪内推就业,仿真秀还提供奖学金、学完此课程,推荐学习者报名参加工程仿真技术(CAE 分析职业能力等级评价证书)。
