使用 Python 从 ANSYS Mechanical 中导出表格数据

抽象的:

ANSYS Mechanical 提供 Python 脚本环境,允许用户自动控制功能并在 ANSYS Mechanical 环境中收集结果。ANSYS 为其所有产品提供了大量文档,但有些功能仍未记录。

其中一个功能与表格结果数据的提取有关。

这篇文章探讨如何使用 Python 提取表格结果数据并将其导出到 CSV 文件。

细节:

对于许多结果类型,存在一种将结果导出到文件的 Python 方法,但是,并非所有结果类型都支持此功能,如果支持,人们可能希望对收集的数据及其使用方式进行更多的控制。

下图所示的 Python 脚本功能使用“未知控件”访问表格数据窗格。

尽管我想重点介绍导出表格数据的功能,但最简单的示例还必须包含其他功能,才能使此示例有意义。我将详细解释所有这些功能,以便我们能够专注于用于表格数据的这个未知控件。

我的示例检查了应用于简单悬臂梁的应力线性化结果,该悬臂梁受到弯曲载荷并作为静态结构分析求解。结果如下所示:

 

f382637d1144d1eacbe6bcbae7a0e116.png

模型树显示“线性化等效应力”结果。画布显示 3D 模型、图例和应力分类线。图表显示线性化应力结果,这些结果在“表格数据”窗格中列出。

为了清楚起见,我可以右键单击“线性等效应力”并选择“导出文本文件”。

 

1779c5f4b3dac19ba65cfd4d15afef01.png

然而,这种方法并没有教会我们任何有关 ANSYS Mechanical 中的 Python 脚本的知识,而且它并不适合实现自动化。

我们还可以请求使用 ANSYS Mechanical 中的 Python 将此结果导出到文本文件。我们通过访问“自动化”功能区并左键单击“脚本”来执行此操作。ANSYS Mechanical 界面右侧将出现两个新窗格:“编辑器”位于顶部,而“Shell”位于底部。我可以为上面显示的模型输入以下三个命令并导出相同的文本文件:

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

linres=sol.Children[3]

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

 

好的,这是朝着正确方向迈出的一步。三行代码看起来真的很简单。但现实情况是,我不能只为任何模型编写这三行代码,并期望成功导出此文本文件。通常,我会通过在“Shell”中执行命令进行一些搜索,直到找到我想要的内容,然后我可以将其转换为“编辑器”中的脚本,以进行重复的自动化。由于这些细节不是本次讨论的重点,我将继续讨论。

假设我已经编写脚本一段时间了,在此期间,我访问了不同的 ANSYS 资源来键入以导出该表格数据。如果您知道要搜索的内容,则不太可能在在线帮助中找到它。我确实找到了两个资源,它们在这里:

https ://forum.ansys.com/forums/topic/tabular-data-extraction/

https://www.linkedin.com/pulse/script-tip-friday-connecting-mechanical-excel-structural-analysis/

每个例子都提供了对同一事物的不同视角。下面,我将给出第三个视角,希望这个视角能够基于我最初的前提(基于这些表格数据生成 CSV 文件)更加直接。

这是我的基本脚本,可以直接输入到 ANSYS Mechanical 脚本编辑器中:

导入 csv

 

def writeCSV(文件名,数据):

   # 将 Python 列表写入 CSV 文件的函数

   使用 open(filename, 'wb') 作为 csvfile:

       spamwriter = csv.writer(csvfile, 分隔符=',',

                               quotechar='|', 引用=csv.QUOTE_MINIMAL)

       对于数据中的行:

           spamwriter.writerow(行)

 

感兴趣的结果 = []

ResultsOfInterest.append('线性化等效应力')

 

 

导入wbjn

cmd = '返回值(GetUserFilesDirectory())'

用户目录 = wbjn.ExecuteCommand(ExtAPI,cmd)

 

分析编号=0

 

解决方案=模型.分析[分析编号].解决方案

对于 j,枚举中的项目(解决方案.Children):

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

       如果项目名称在 ResultsOfInterest 中:

         项目.激活()

          

           数据=[]

           删除数据[:]

           窗格=ExtAPI.UserInterface.GetPane(MechanicalPanelEnum.TabularData)

           Con = Pane.ControlUnknown

           对于范围内的 R(1,Con.RowsCount+1):

              数据.附加([])

               对于范围内的 C(2,Con.ColumnsCount+1):

                   数据[-1].附加(Con.cell(R,C).文本)

 

           writeCSV(user_dir + "/" + Model.Analyses[AnalysisNumber].Name + " – " + item.Name + ".csv", 数据)

  

打印(“脚本已完成!”)

打印(””)

print("打开文件:" + chr(34) + user_dir + chr(92) + Model.Analyses[AnalysisNumber].Name + " – " + item.Name + ".csv" + chr(34))

 

现在让我们分解一下这里的内容以便澄清。此 Python 脚本包含以下四个元素:

  1. 可以过滤特定的 ANSYS 结果名称
  2. 需要为此特定模型设置 ANSYS 分析编号
  3. 可以在脚本收集正确结果之前过滤特定的“结果类型”
  4. 将读取 ANSYS 结果的“表格数据”并将其打印到 CSV 文件中

使用图片(为了清晰起见带有一些颜色),让我们检查一下每个元素的组成。

过滤特定的 ANSYS 结果名称:

 

962b24cc337984a1853a1d6b3714493c.png

上面用粉色突出显示的是定义列表的地方,但此列表仅包含一个名为“线性等效应力”的项目。我可以列出任意多个特定结果。如果我有多个相似的结果,但只对具有此特定名称的结果感兴趣,那么此方法将允许我根据结果对象名称进行筛选。

设置 ANSYS 分析编号:

 

30277623cdcd8b566b8d0a56faa7d1e8.png

相同的代码,只是用粉红色突出显示了不同的行。ANSYS 从“零”开始索引项目。因此,在我的模型中,我进行的第一个也是唯一的分析是静态结构分析。由于这是“第一个”分析,我输入“0”来表示该分析编号……完成!

设置“结果类型”:

 

c81d0e913c4252eb856121d4056fef2a.png

简短的回答是,这不是您知道的值。您需要使用脚本“Shell”查询模型树中的结果项,并查询“Name”和“GetType()”以获取感兴趣的结果项。我将在不同的演示中探讨如何执行此操作,但对于线性化等效应力结果,建议类型为:

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

如果不过滤结果类型,我可能会尝试提取不存在的特定类型的结果数据。这是选择性控制的又一个级别。

阅读“表格数据”:

 

9b0b8f4ad38df2339b03b6cc6755a5cc.png

最后,这就是我们来到这里的原因!

在此突出显示的部分中,“数据”收集并保存我们将从表格数据中提取的所有内容,然后用于生成 CSV 文件。

我们将“Pane”(顺便说一下,“Pane”是我选择称呼这个对象,你可以根据自己的喜好来命名)定义为一个编程对象,它等同于:

ExtAPI.UserInterface.GetPane(MechanicalPanelEnum.TabularData)

这部分还好。下一行仍是神秘的。我们定义一个名为“Con”的控件,相当于:

窗格.ControlUnknown

现在我可以使用我的新对象“Con”执行操作,从表格数据中提取数据,但请记住,在“Con”后输入一个点“。”不会为您提供可用函数的准确或完整列表。以下是我使用过的一些函数(可能还有更多):

连接行数 (返回一个整数)
连接列数 (返回一个整数)
Con.cell(R,C).文本 (其中 R 和 C 是整数)
Con.Cell(1,C).CheckStateChecked (布尔值返回 True 或 False)

 

如果我们在 Excel 中打开导出的 CSV,则其内容如下:

 

12875eff013c028d384766d2b020db41.png

可以对 ANSYS Mechanical 中的任何表格结果类型重复此过程。

 

作者:David WangYang

物联沃分享整理
物联沃-IOTWORD物联网 » 使用 Python 从 ANSYS Mechanical 中导出表格数据

发表回复