自学内容网 自学内容网

在 ANSYS Mechanical 中使用 Python 搜索树并生成脚本

抽象的:

ANSYS Mechanical 提供 Python 脚本环境,允许在 ANSYS Mechanical 环境中自动控制功能并收集结果。在完成脚本之前,必须进行研究以确定脚本中将包含的关键信息和参考。本文档探讨了在 ANSYS Mechanical 中使用 Python 探索模型树的典型方法,并生成脚本来运行分析和输出结果。

 

细节:

从简单开始

当尝试识别模型中已存在的对象时,我们通常会执行一系列手动搜索,直到找到我们正在寻找的内容,然后将重复“找到”未来模型所需的步骤编入法典。这就像在黑暗中摸索前行,直到我们能够照亮地形并在脑海中描绘出周围环境的图像。

下图中,我有一个悬臂梁,之前我已在其中定义了三个路径对象。我进入“自动化”选项卡,并开始在“Shell”脚本窗格中输入查询。

 

 

97fce397314e536933426743c1efec3c.png

 

首先,我输入一些基本内容来了解​​模型中的内容:

 

b888615ce14d0727b9348b733e6c0f9a.png

 

这里,“Model” 是我的模型。当我在“Model”后面输入第一个点“。”时,在 shell 中,光标处会出现一个可选菜单。我将选择计算我的模型中有多少个孩子。此示例的答案是“8”。接下来,我想了解这些不同孩子的名字。

 

103c9b1abcd0028f0bb41be38b04c1a1.png

 

请注意,当将名称和增量数字合并为文本打印时,我需要将增量数字“i”转换为字符串。

在此示例中,我创建了一个函数,它将打印模型中 8 个子项的名称。我看到“Construction Geometry”是列出的第三个项目,因此是“Model”的第三个子项。在第一行末尾同时选择 <Shift><Enter> 键,可以在命令中包含多行。

我将验证第三个孩子是否与“构造几何”相关。

 

8df7f3e61fdae8a669da88d53c73355f.png

 

看到我如何定义“2”来表示第三个子项了吗?这是因为 Python 中的第一个增量从“0”开始。如果我将“Model.Children[2]”分配给其自己的对象,Python 将提供更多选择。让我将这个第三个子项分配给“cg”(我自己选择的名称),然后看看这个构造几何对象有多少个子项。

 

d9bb19aea58119bad30d450f0bcc1fac.png

 

这个构造几何对象有三个子对象。让我们了解一下它们的名字:

 

769fb24740bba214731c842386e7358b.png

在这些命令系列中,我能够识别“模型”下的“子项”,即“构造几何体”,然后了解该“构造几何体”下存在哪些“子项”。我们以手动方式完成此操作,需要进行查询、查看结果,然后根据所见内容做出决策。我们可以自动执行相同的搜索,但需要具体说明搜索方式。

 

引入自动化

例如,如果我想编写一个脚本来返回模型中任何路径的项目编号和名称,我将需要查看“模型”中的所有内容,并仅对属于“构造几何”类型的项目采取行动。为了进一步复杂化这一点,我可能不想根据名称“构造几何”进行过滤,因为 ANSYS Mechanical 允许用户将这些模型树文件夹重命名为自己选择的名称。因此,我需要确定对象“构造几何”的“类型”,然后根据该“类型”进行过滤。

 

b5442edf0c3e119e82e815d0d0afae4f.png

在这里,我们看到“构造几何”的“类型”是:

Ansys.ACT.自动化.机械.施工几何

现在,我不需要知道哪个对象是构造几何体,也不需要知道它的当前名称。只有当此类型与当前对象的类型匹配时,我才会采取行动。

 

04c302cb10859ef96c725a5ee76cef9a.png

(请注意,“str(j)”相当于“j.ToString()”,如前面的例子所示)

 

解决我们的模型

接下来,我们可以探索如何解决当前的分析,然后将特定结果导出到文本文件。

如果我想解决模型中的第一个分析,我可以输入以下内容:

模型.分析[0].求解()

 

导出结果

ANSYS 不会直接导出到 Excel,而是可以导出文本文件,方式与右键单击模型树中的应力线性化结果对象相同。

 

如果我们假设应力线性化对象已经定义,那么下一步就是访问第一个分析的解决方案(在我的例子中)。

sol=模型.分析[0].解决方案

接下来,列出该解决方案中的子项。

 

7f6096b50655c753051e91569ea45308.png

 

在我的示例中,只有三个结果,“总变形”、“等效应力”和“线性化等效应力”。我将把这个线性化应力分配给它自己的对象,这样我就可以获得更多的 python 命令选项。

linres=sol.Children[3]

我将首先验证我是否正确定义了该对象。

 

db876998ae0cd2baff5cbece9ca33bfd.png

现在我将导出所有结果的文本文件。

linres.ExportToTextFile("D:\Work_Ozen\LinearizedStress.txt")

显然,我已经列出了我希望保存此文件的计算机上的路径……您的路径可能会有所不同。

 

更多自动化

如果我们知道我们想要导出线性化的等效应力结果,那么我们可以使用前面描述的方法编写脚本来执行此操作,无论模型中的对象名称或数量如何。

 

6d7cc4d90330e98367cb17631186b4c5.png

首先,我们找到要对其采取行动的结果对象的“类型”。在本例中,类型为:

Ansys.ACT.Automation.Mechanical.Results.LinearizedStressResults.LinearizedEquivalentStress

因此,我们可以编写如下脚本:

 

19ce72ce5851acee8c7a46b6100233a5.png

在这里,我们检查与解决方案中的每个子项相关的“类型”。如果该类型与“…LinearizedEquivalentStress”类型匹配,则我们收集位置信息并生成一个文件唯一文件名,其中包含结果对象的名称和构造对象路径名。然后,我们将文本数据导出到 TXT 文件,最后将我们刚刚生成的文件的名称打印到控制台。

 

生成脚本

所有这些都是在 Shell 中完成的,但如果我们想将所有这些都做成脚本,它将在编辑器中显示如下:

 

e1bcf1f326f9101718efff29439c4122.png

在编辑器中,可以保存或打开任何 Python 脚本,然后在现有模型中运行该脚本。任何“打印”命令都会出现在 Shell 中。

 

结论

现在,我提供了完成这些任务的分步过程。在每个步骤中,我都会犯错误,在将某个东西设置为其自己的对象名称后进行搜索,然后键入“。”以查看出现的菜单项并做出选择。换句话说,就是反复试验。在编写代码的过程中,您也需要依靠反复试验。

代码片段:

#搜索并列出所有构造几何对象

对于 i,枚举中的项目(Model.Children):

   如果 item.GetType()==Ansys.ACT.Automation.Mechanical.ConstructionGeometry:

       对于 j,cg 在枚举(item.Children)中:

           打印 str(j) + ", " + cg.Name

 

#解决现有的分析

模型.分析[0].求解()

 

#获取解决方案对象

sol=模型.分析[0].解决方案

       

#搜索并输出所有 LinearizedEquivalentStress 对象的文本结果

对于 i,枚举中的项目(sol.Children):

   如果 item.GetType()==Ansys.ACT.Automation.Mechanical.Results.LinearizedStressResults.LinearizedEquivalentStress:

       位置=项目.位置

        文件名="D:\Work_Ozen\LinearizedStress_" + 项目.名称 + "_" + 位置.名称 + ".txt"

       item.ExportToTextFile(文件名)

       打印“生成的文件:”+ chr(34)+文件名+ chr(34)

 


原文地址:https://blog.csdn.net/jkh920184196/article/details/143624201

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!