需求描述:一键跳转瞬态结果峰值时刻
大家好,我是小郭老师,中科院硕士,长期从事 ANSYS 二次开发与仿真流程自动化,曾帮助多个研究所、研究院、国企和大型企业完成 ANSYS 二次开发项目。
瞬态分析做完以后,后处理里经常会出现一个小麻烦:结果曲线能看,表格数据也能查,但如果要把云图准确切到全程最大响应出现的那一刻,手工操作并不算顺手。
比如一个移动载荷瞬态算例,载荷从梁的一端移动到另一端。计算结束后,在 Solution 里添加 Total Deformation,Mechanical 会给出结果云图,同时在下方提供曲线和数据表。这个结果对象对应的时间曲线,可以理解为不同时间点下模型响应极值的变化过程。
选中该结果对象后,Details 面板里有一个很有用的区域,叫 Maximum Value Over Time。它能告诉我们这个结果对象在完整时间范围内的最大响应值和最小响应值。假设其中 Maximum 为 3.8235 mm,就可以判断当前结果对象的全程峰值响应为 3.8235 mm。
真正不方便的地方在下一步:软件把峰值大小列出来了,但峰值发生在哪个时间点,并没有在这个位置直接给出。
曲线足够简单时,工程师可以大致判断峰值在 3 s 附近,然后再用 Retrieve 切换显示时刻。但真实项目里的响应曲线不一定总这么友好。峰值附近可能有多个相近点,也可能曲线局部起伏很多,只靠眼睛去对时间,很容易产生偏差。
本文用一段 Mechanical 脚本把这个动作固定下来:从瞬态结果对象里读取最大响应对应的时间,再把该结果对象的显示时间设置过去。进一步还可以把这段逻辑做成 user_button,以后选中结果对象后点一下按钮,就能直接看到峰值时刻云图。
脚本实现思路
脚本入口优先考虑按钮使用场景:先读取对象树中当前被选中的第一个对象。这样做的好处是,按钮不需要绑定某一个固定名称,用户只要先点中 Total Deformation、Equivalent Stress 等瞬态结果对象,再触发按钮即可。
为了让按钮更像一个可交互工具,脚本还加入了提示框。未选中对象、选错对象、执行失败或跳转成功时,都会通过 MessageBox.Show 给出反馈。
这段脚本主要依赖三个关键点:FirstActiveObject 用来获取当前对象树选中对象,TimeForMaximumOfMaximumValues 用来取得全程最大响应对应的时间,DisplayTime 用来指定结果对象当前显示的时间点。
源码及其讲解
脚本前半段先解决提示框和对象入口。由于使用了 MessageBox.Show,脚本开头需要引用 Mechanical 中可用的 UI Toolkit:
import clrclr.AddReference("Ans.UI.Toolkit")clr.AddReference("Ans.UI.Toolkit.Base")from Ansys.UI.Toolkit import *
然后通过一个小函数统一处理提示信息:
def show_message(text): print text MessageBox.Show(text)
对象获取部分采用当前对象树选中的第一个对象:
active_object = ExtAPI.DataModel.Tree.FirstActiveObject
如果没有选中对象,或者当前对象不支持 TimeForMaximumOfMaximumValues,脚本会弹出提示并停止执行。这样封装成按钮后,用户不会只看到脚本静默失败。
拿到结果对象后,真正的关键动作是读取峰值时刻:
peak_time = result_object.TimeForMaximumOfMaximumValuespeak_time_value = float(peak_time.ToString().split("[")[0])
由于 Mechanical 返回的是带单位的量,脚本先把它转成字符串,再取出数值部分,供后面的 Quantity 使用。
完成时间解析后,把这个时间重新写回结果对象:
result_object.DisplayTime = Quantity(peak_time_value, "s")result_object.EvaluateAllResults()
这一步执行完,当前云图就会刷新到峰值响应发生的时刻。
最后脚本会弹出提示框,显示结果对象名称和峰值响应时刻,方便用户确认按钮确实完成了跳转。
封装为 User Button
如果只是把脚本放在 Mechanical Scripting 窗口里运行,仍然需要打开脚本面板、粘贴代码、点击运行。对于高频后处理动作来说,更适合的方式是把它放到 Mechanical 的 User Buttons 中。
典型操作流程如下:
- 3. 在
User Buttons 区域点击 Manage; - 4. 新建一个按钮,例如命名为
PeakTime 或 跳转峰值时刻; - 5. 将本文脚本粘贴到按钮对应的 Script 区域;
- 8. 点击刚创建的 User Button,脚本自动读取峰值时刻并刷新云图。
这也是为什么脚本里使用:
active_object = ExtAPI.DataModel.Tree.FirstActiveObject
按钮被点击时,脚本会直接读取当前对象树中选中的结果对象。这样一个按钮可以服务不同的 Total Deformation、Equivalent Stress 或其他瞬态结果对象,而不是只能绑定某一个固定名称。
这个按钮的实际使用流程可以概括为:

封装完成后,脚本就不再只是一次性代码,而是变成了 Mechanical 界面中的一个后处理小工具。对团队内部使用来说,这一步很关键,因为使用者不一定需要理解全部代码,只需要知道先选中结果对象,再点击按钮即可。
脚本运行结果
执行完成后,Mechanical 会弹出提示框,提示本次处理的结果名称和识别到的峰值时间,如下图所示。
此时回到图形窗口查看结果,显示时间已经不再需要手动对曲线判断,而是由脚本直接定位到最大响应时刻。
脚本扩展方向
- • 批量遍历 Solution 下所有瞬态结果对象,依次读取峰值时刻
- • 把峰值响应值、峰值时刻和结果对象名称导出到 CSV
- • 同时读取
TimeForMinimumOfMinimumValues,定位最小响应时刻 - • 封装为 ACT 按钮,并加入结果类型和单位检查
- • 将提示框内容改成中英文双语,方便交付给不同用户使用
总结
这篇文章关注的是瞬态后处理里的一个细节问题:峰值数值能在属性里看到,但峰值所在时间点通常还需要人工再找。
用 TimeForMaximumOfMaximumValues 取得时间,用 DisplayTime 改变显示时刻,就能把这一步从人工判断改成脚本执行。封装为 user_button 以后,它就更像一个后处理小工具:选对象,点按钮,看峰值云图。
Mechanical 二次开发很多时候不需要一上来就做很大的系统。像这种高频、容易误判、规则又清楚的后处理动作,先做成小脚本和按钮,往往就能立刻改善日常仿真效率。
点击阅读原文,立即学习《ANSYS Workbench & Mechanical企业级二次开发程序与Python应用入门进阶》,掌握ANSYS Workbench & Mechanical的脚本自动化开发能力。
本课程从基础脚本开发到多工况批量计算的自动化实现,手把手教你用Python打通「仿真流程自动化 - 多工况批量计算」全链路,让「重复仿真工作自动化、复杂工况高效计算」从想法变成日常。
我还为付费用户提供VIP群进行交流、答疑服务、持续加餐内容、提供定制化培训和咨询服务、仿真人才库高薪内推就业、仿真秀还提供奖学金、学完此课程,推荐学习者报名参加工程仿真技术(CAE分析职业能力等级评价证书)。