首页/文章/ 详情

轻松上手Mechanical脚本自动化

4年前浏览4166

还在用APDL?你Out了!快使用ANSYS ACT及其强大的API编写脚本,我们可以轻松地自动化Mechanical的日常任务,固化仿真分析流程,极大提升工作效率。


1、Mechanical脚本概述
脚本是指使用编程语言与软件产品进行交互和修改。Workbench Mechanical支持两种脚本语言:JavaScriptACT Python两者都暂不支持脚本录制,只能基于API编写
ACT 自动化API是基于Python语言,允许我们自动化Mechanical仿真过程(网格划分、模型设置、后处理等)和获取或设置与本地Mechanical对象的相关数据,这在此之前需要使用JavaScript,现在可以使用IronPython编写实现自动化脚本。
Python是一种面向对象、解释型的高级编程语言,语法简洁、优雅、编写的程序易读,易于学习和掌握,适用于非高级开发人员。对于Mechanical脚本开发来说,JavaScript脚本开发目前没有公开的API文档可供参考。
ANSYS提供了非常详细和全面的基于PythonACT开发文档,而且正在逐步扩展和完善ACT开发���能,所以说基于PythonACT开发代表了以后ANSYS二次开发的发展方向。微信后台回复关键字:“ACT开发文档”,即可获得18.0~2019R3ACT开发文档。
2、ACT Python脚本编写
在尝试编写Mechanical自动化脚本之前,我们首先应该熟悉IronPython2.7的使用方法,然后需要了解MechanicalACT控制台、对象结构、如何访问对象及其子对象、如何设置和修改对象的属性值等。


2.1 ACT控制台


Mechanical中的ACT控制台提供ACT Python脚本命令的输入,以便我们开发和调试脚本代码。


打开后的ACT控制台如下所示。通过控制台窗口以交互式执行脚本命令,我们可以:

  • 为扩展的ACT插件查找合适命令;

  • 访问和设置Mechanical中对象数据;

  • 在开发插件之前测试脚本代码;

  • 调试开发的ACT插件。


ACT控制台支持多行脚本命令编辑、代码自动缩进、代码自动补全、代码高亮、历史记录和代码片段管理,常用的快捷键如下。
2.2 代码自动补全
ACT控制台提供智能的自动补全功能,这意味着它考虑了括号或引号等语法元素。当在编辑器中输入句点时,命令行上方将显示一个可滚动的建议列表,方便我们快速完成脚本命令键入。




每个代码补全建议都有一个带有字母颜色编码的图标:


  • 方形图标中的字母描述了成员的类型,如P代表属性(Property)M代表方法(Method)
  • 圆形图标中的字母描述所选成员的返回值类型,如C表示类(Class)E表示枚举(Enumeration)


2.3 Mechanical对象结构
ACT自动化API提供对Mechanical结构树中所有对象的访问权限,允许我们创建对象、删除对象或修改对象属性


  • 通过ACT访问Mechanical结构树时,ExtAPI.DataModel.Project是所有对象的根节点
  • 脚本对象访问遵循和Mechanical结构树相同的结构,从这里我们可以访问所有子节点上的对象。
  • 例如访问Mesh对象,我们输入ExtAPI.DataModel.Project.Model.Mesh或者可简写为Model.Mesh;可以采用相同方式访问模型所有第一级对象(如Geometry、CoordinateSystems等)。

  • 除了Environment对象(如边界载荷、后处理等)之外结构树中的所有对象都遵循单例模式,即第一级对象的实例对象不可能同时存在两个
  • Environment对象作为第一级对象的子对象,存在一个或多个实例对象,不存在直接的访问点。例如,我们可以添加多个Pressure载荷,如果要想访问这些对象,就必须通过Children属性或GetChildren方法访问。


2.4 ��问子对象
如上所述,对于能在Mechanical结构树中存在多个实例的对象,不存在直接的访问点。
对于这些子对象,我们可以按照以下方法访问:
①引用父对象实例,使用Children属性或者GetChildren方法,获得所有子对象列表。
②通过列表索引或对象名称(Name)引用的方式去获得子对象。下面我们通过一个实例演练一下。


  • 上面模型中,可以直接通过结构树访问Named Selections对象,并将实例对象赋值给变量nsObject
  • 然后获取nsObject对象的Children属性得到子对象列表;也可以基于父对象中子对象的枚举类型,使用GetChildren方法获得子对象列表,方法需要传入两个参数:①枚举类型 (DataModelObjectCategory),指定要查找的对象的类别。②布尔类型,指定是否递归地检索子类
  • 获得子对象列表之后,将其赋值给nsList变量。
  • 最后通过nsList列表索引访问子对象;获得子对象之后,我们可以访问它们的Name属性,然后在控制台打印出来,代码和结果如下。
    # 获取Named Selections实例对象
    nsObject = Model.NamedSelections

# 三种方法获取Named Selections对象的子对象列表

nsList = nsObject.Children

nsList = nsObject.GetChildren(DataModelObjectCategory.NamedSelection,True)

nsList = DataModel.GetObjectsByType(DataModelObjectCategory.NamedSelection)

# 列表索引方式获得子对象实例

nsFixed = nsObject.Children[0]

nsPress = nsObject.Children[1]

nsBracket = nsObject.Children[2]

# 访问子对象的Name属性,打印到控制台

print nsFixed.Name, nsPress.Name, nsBracket.Name


  • 上面代码中,我们通过列表索引获取子对象,同样也能通过其名称引用子对象实例,封装的代码方法如下:
    # 给定Named Selection名称获取子对象实例
    def GetLocByName(ns_name):

for ns in Model.NamedSelections.Children:

if ns.Name == ns_name: return ns

nsFixed = GetLocByName("FixedSurface")

nsPress = GetLocByName("PressSurface")

nsBracket = GetLocByName("BracketBody")

2.5 添加子对象
Mechanical结构树中的第一级对象都可作为父对象添加子对象;在界面上我们可以选中父对象,然后单击右键会出现菜单,选择Insert项下的子菜单项就可添加子对象。



ACT自动化API中,要想添加子对象到结构树中,首先要获得其父对象实例,然后调用父对象的addObjectName()方法其中ObjectName是所需对象的名称;最后需要设置子对象的属性参数。

例如,我们在静结构 (Static Structure) 分析下添加一个Force载荷,可输入以下代码:

#1.To get the static structural analysis object, type:

analysisObj = Model.Analyses[0]

#2.To create the force and assign it to a variable, type AddForce()

force = analysisObj.AddForce()

#3.Now we can manipulate the created force's property using

force.TypeHereAProperty = TypeHerePropertyValue

2.6 修改对象属性
一旦我们获得Mechanical对象的实例后,就可以在ACT控制台中,通过脚本命令读取和修改界面上详细视图(Details View)中对应的属性参数。
在Mechanical中属性值常见的有6种输入类型:Number、Enumeration、Bool、Quantity、Scoping和Magnitude,下面我们详细介绍一下使用方法。
(1) Number值类型
对象详细视图下需要输入无单位数值的项,属性值应该赋予对应Number值类型,如int整形。例如更改分析设置中的计算步数,输入如下。
(2) Enumeration值类型
对象详细视图中提供下拉框选择的选项,属性值应赋予对应的Enumeration值类型,如下设置属性SolverType值为SolverType.Direct枚举类型。
(3) Bool值类型
对象详细视图中需要只选择OnOff的选项,属性值应赋予对应的Bool类型。比如激活分析设置中的大变形选项,输入如下。
(4) Quantity值类型
对象详细视图中需要输入带单��数值的项,属性值应赋予对应的Quality类型:类型为Quantity(‘value[unit]’)。例如,更改网格单元格尺寸为2mm,输入如下。
(5) Scoping值类型
对象详细视图中Scope组中需要指定Geometry的项,对象的Location属性应赋予对应的Scoping值类型。Mechanical提供两种指定方式:Geometry Selection和Named Selection。例如,添加一个Pressure载荷,并指定加载的边界位置,我们采用两种方式实现,输入如下。


  • Geometry Selection选择:需要先创建一个SelectionInfo对象,然后将几何实体赋予SelectionInfo对象的Entities属性,最后指定给压力载荷对象的Location属性。



  • Named Selection选择:需要得到Named Selections下子对象的实例,然后指定给压力载荷对象的Location属性。


(6) Magnitude值类型
对象详细视图中需要输入Magnitude值的项,属性值应赋予Magnitude值类型;Mechanical中提供三种输入模式:①公式输入②表格数据③常数类型。例如,我们继续以(5)中的压力载荷对象,给定载荷数值大小。


  • 公式输入



  • 表格数据



  • 常数类型


2.7 输出云图


云图输出首先需要创建后处理对象,然后激活对象让其高亮显示,最后使用Graphics.ExportImage方法,指定输出的图片路径即可。例如,我们创建一个总变形云图,然后输出照片,代码示例如下。






total_deform = Model.Analyses[0].Solution.AddTotalDeformation()total_deform.EvaluateAllResults()total_deform.Activate()Graphics.ExportImage("E:\\Workdata\\total.png")
3、Workbench集成
Workbench脚本中可以通过SendCommand命令将ACT Python命令发送Mechanical去执行,以实现仿真流程的集成,代码示例如下所示。


4、案例练习

本期中我们可以基于SCDM脚本建模生成的模型,在Mechanical中使用ACT Python脚本实现自动化仿真分析。


使用SCDM创建模型和Mechanical仿真设置过程大家可以参照上一篇文章,然后参照本期内容,自己上手编写自动化脚本吧。


Fluent其他专业通用科普
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2020-07-27
最近编辑:4年前
小田老师
硕士 | 仿真工程师 欢迎关注ANSYS仿真与开发!
获赞 650粉丝 3787文章 62课程 4
点赞
收藏
作者推荐
未登录
3条评论
依然范特西
事终如始则无败事!
2年前
ACT开发文档
回复
小恒
签名征集中
3年前
小田老师您好,冒昧的问您个问题,请问目前workbench中能用脚本实现对BeamConnection的预紧力施加么?
回复 2条回复
仿真秀0122145127
签名征集中
3年前
新手感觉不错
回复
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈