Workbench开发指南:仿真模板开发
本文摘要(由AI生成):
本文介绍了如何基于ANSYS Workbench平台进行仿真模板开发,以球阀仿真流程为例,通过WB参数化、脚本参数化、WB批处理调用、求解计算和结果读取等步骤,实现了用户通过界面输入流速和阀门开度后,执行计算功能后即可完成整个分析流程,输出并显示管道压降。
本案例以球阀为对象,基于其仿真参数化文件,演示如何对仿真流程进行界面开发,形成定制化仿真模板的完整过程。
1、需求描述
球阀控制水通过1英寸(25.4毫米)直径管道,在不同流速和阀门开度时,会对应着不同的管道压降。通过仿真模板开发形成定制化界面,需实现用户通过界面输入流速和阀门开度后,执行计算功能后即可完成整个分析流程,输出并显示管道压降。
2、知识储备
在开始之前,我们需要了解:仿真模板开发涉及仿真流程开发和界面开发两个阶段。在仿真流程开发阶段中,首先需要对仿真流程进行参数化,实现的方式有两种:Workbench参数化和脚本参数化;然后通过WB脚本对仿真流程进行集成和调用。界面开发阶段中,我们将仿真流程封装起来,提供与仿真流程中输入和输出参数间交互的用户界面。整个开发过程中,需要掌握的知识内容如下:
- 首先需熟悉ANSYS仿真操作过程,可以在Workbench平台对仿真流程进行参数化;WB参数化方法可以查看往期文章《轻松搞定ANSYS仿真参数化》。如果是采用脚本参数化的方式,需要了解软件模块对应的脚本开发知识,如SCDM中的Python脚本、Fluent中的Scheme脚本、Mechanical中的ACT Python脚本。
- 最后具备面向对象编程和代码封装能力,至少掌握一种常用界面开发(GUI)技术,如C#的WinForms开发或WPF开发、QT界面开发等技术。
3、实施路线
以球阀仿真流程为例,以其Workbench参数化文件为基础,根据开发需求,模板开发的实施路线和详细的操作步骤如下。
编写WB脚本代码,实现Parameter Set下的输入参数:阀门开度(P1)和入口流速(P3)的修改,并将输入参数初始值用特殊字符替换,脚本内容如下。
添加结果输出代码到脚本中,在仿真系统更新完成后,自动输出最大网格扭曲度(P2)和管道压降(P4),最后保存项目文件。
将上述脚本代码内容放在一起保存为Valve.py;在Workbench界面中,选择File -> Archive功能,将项目文件保存为Valve.wbpz。项目和脚本文件放在同一个文件夹中。采用C#的WinForms开发技术,可以进行可视化的界面设计。首先打开Visual Studio2015,执行文件 -> 新建 -> 项目,选择创建Visual C#模板下的Windows窗体应用程序,解决方案和名称都为ValveApp;然后在VS2015中将工具箱中的Label、GroupBox、TextBox和Button控件拖动到窗体(Form)上,创建下图所示窗体控件布局和内容。
后端代码用于实现界面交互功能,包括脚本参数替换、WB批处理调用、求解计算和结果读取等,具体代码如下。
替换原始脚本中的变量值为指定值,然后写入到文件中生成新脚本。
创建新的进程(Process),指定参数项目文件(*.wbpz)和脚本文件(*.py),调用WB批处理命令。
首先将原始的项目和脚本文件复 制到工作目录下,然后将脚本中参数替换为界面输入值,最后调用WB批处理方法RunWB2执行仿真计算。
计算输出的结果文件内容如下。
Mesh-Max=0.8733
pressure-drop-op=4091.4672
编写代码读取文件数据,将最大网格扭曲度和管道压降的结果存在泛型数组里。
事件(Event)基本上说是一个用户操作,如按键、点击、鼠标移动等等;应用程序需要在事件发生时对事件进行响应。通过事件机制可以实现界面控件调用后端功能代码。本案例中,我们为btnSolve按钮添加一个Click事件,挂接到btnSolve_Click方法上,以此实现完整仿真流程调用。
在VS2015中编译项目代码,生成应用程序ValveApp.exe,然后将原始项目和脚本文件放在wb_files文件夹中,将应用程序和wb_files文件夹放在同一目录,文件结构如下图所示。
4、后记
在实际仿真模板开发项目中,大部分工作量都集中在仿真流程开发上。当然界面开发难度会随着参数数量与交互复杂性的增大而急剧增大。界面开发的方式有很多种,比如常用的C#的WinForms或Python的PyQt5等,大家可以根据自己的喜好去选择。仿真流程参数化是仿真流程开发中的关键部分,我们可以通过WB参数化功能或者是脚本参数化实现。WB参数化方式存在局限性:只适用于几何拓扑和边界类型不变的模型,即计算只会改变其大小与位置尺寸、边界条件值。如果涉及几何拓扑、物理模型、边界类型的更改和自动后处理操作等,就需要采用更灵活和通用性脚本参数化的方式。