一种读取Ansys rst文件中节点力信息的方法

2022-10-20 06:27马斌谷翠军徐先伟黄艳丽
计算机辅助工程 2022年3期
关键词:坐标系字节焊缝

马斌,谷翠军,徐先伟,黄艳丽

(中车青岛四方机车车辆研究所 重庆研发中心,重庆 401133)

0 引 言

近年来,随着国民经济的发展,铁路车辆的速度越来越快、运量越来越多,这对列车结构提出更高要求。列车结构的损坏大多在焊接结构上,其破坏形式一般为疲劳断裂,故迫切需要找到一种准确计算焊缝疲劳寿命的方法。

计算焊缝疲劳寿命时,初始输入值一般为静强度计算中焊缝结构的节点力。有限元计算分析软件Ansys具有强大的强度分析能力,其输出的静强度计算的节点力信息包含在rst文件中。目前,对rst文件数据结构的解析较少。本文对rst文件的数据结构进行解读,指出关键焊缝节点力信息的读取方法,为分析焊缝疲劳强度提供铺垫。由于MATLAB的编程环境简单、完善,编程语言可操作性强,数据处理能力强大,因此通过MATLAB读取rst文件。

1 rst文件介绍

rst文件是Ansys对有限元模型进行强度分析计算后自动生成的扩展名为.rst的数据文件,亦称结果文件。rst文件包含有限元模型的数据,还包含静强度分析后各单元节点的应力、应变等信息。本文用MATLAB读取rst文件,从中提取出单元节点的节点力数据,方便后续采用主-曲线理论计算焊缝的疲劳寿命以及焊缝各节点位置处的应力损伤比。

1.1 rst文件的生成

rst文件采用Fortran语言编写,属于二进制文件。要读取rst文件中包含的节点力数据,首先需要知道整个rst文件的数据结构形式。rst文件数据结构的特殊性决定rst文件的特殊性,须将整个rst文件划分成多个数据块读取。

1.2 rst文件的数据类型及结构形式

rst文件包含很多信息,但组成每条完整信息的字节数不一定相同,字节类型也不尽相同。其中,字节类型包括int型、double型、char型、long int型等,long int型字节可以用2个int型字节表示。因此,用MATLAB读取rst文件时,必须以字节为单位进行读取,一次可以同时读取几个单位字节,但需要确保一次读取的字节所表达的意思是完整的。

用MATLAB读取rst文件时,如果命令框中显示的结果无意义,那么需要改变一次性读取字节的长度或者类型,有时需要多次改变才能使读出的数据意义完整。Ansys自带二进制文件翻译,可将rst文件的数据块结构以文本文档的形式显示出来,验证rst文件的读取进度。图1为本文模型的rst文件翻译后部分文档的截图,分析图1可知rst文件的文件头包含的字节数及其代表的意义等。

图1 rst文件翻译后部分文档截图

rst文件的数据结构形式并非一成不变,不同的有限元模型使用的单元类型不同、材料属性不同、加载条件不同,都会导致rst文件的数据结构模块发生变化。参照Ansys自带的帮助文档,本文介绍一般情况下rst文件的数据结构形式。

初始模型为1块长方形板,在不考虑温度影响下对其进行有限元网格划分,单元类型为三维线性4节点壳单元SHELL 181。利用Ansys进行静态强度分析,形成rst文件。材料属性为单一线性材料,板厚单一。

1.3 rst文件的文件头信息

每个rst文件包括1个标准的文件头,文件头包含100个整形数据的字节,每个字节对应相应的Iterm。这个文件头包含一些rst文件信息,在利用MATLAB读取rst文件时可以知道字节所表达的意思是否完整。当然,一些Iterm的内容是字符或者字符串形式,而MATLAB在读取二进制文件时不能显示类似数据,读取比较麻烦,需要切换读取类型,由整形int型变为char型或其他类型。

文件头中的信息如下:

Iterm1表示文件数,MATLAB读取值为12,默认为12;

Iterm2表示文件形式,Iterm2有1和-1共2个值可选,MATLAB读取值为-1,表示此模型为大数形式;

Iterm3表示时间,MATLAB读取值为171659,对照翻译文档中的时间信息,可知读取进度正确;

Iterm4表示日期,MATLAB读取值为1212013,可知读取字节的意思表达完整;

Iterm5表示单位,MATLAB读取值为0,代表选择单位为用户自定义,符合模型单位;

Iterm6~9在表中无显示,MATLAB读取的信息在翻译文档中找不到对应信息;

Iterm10表示软件的版本号,MATLAB不能显示;

Iterm11为版本发布日期,MATLAB读取值为20111024;

Iterm12~14、15~16、17~18、19、20~22、23~25分别为机器识别符、工作名称、Ansys产品名称、用户名以及机器识别符,这些都是字符串,MATLAB不能显示;

Iterm26为系统记录尺寸,MATLAB读取值为16384,即此rst文件中包含16384条记录;

Iterm27为最大文件长度,MATLAB读取值为312525;

Iterm28为最大记录号,MATLAB读取值为20;

Iterm31~38为工作名称、字符串类型;

Iterm41~60为分析主题、字符串类型;

Iterm61~80为第一子标题、字符串类型;

Iterm95为文件切割点,查看翻译文档为未知;

Iterm97~98为长整形文件尺寸,MATLAB读取值为3125250,占2个整形字节;

Iterm99~100无明显意义,MATLAB读取值为0654321;

至此,一个标准的100字节的文件头表达完整。通过读取此文件头,可以知道此文件计算的时间、记录长度、软件版本号等相关信息。这些信息是整个rst文件的概括特征,并没有各节点的节点力等类似数据,要想知道类似信息,还需要继续往下读取。读取方法与上述类似,不再详述。

在后续的rst文件读取中,可以知道单元号、节点号、节点坐标、材料属性、实常数等有限元模型的基本信息,还可以知道各单元节点的应力、应变以及节点自由度等相关信息,所求的节点力信息就包含在其中。读取完整个rst文件,就可以知道节点力信息具体在哪里。注意:这些节点力信息属于所有节点,后文会介绍怎样提取焊缝节点的节点力。

2 有限元模型的建立

2.1 研究对象

本文的有限元模型基于有限元前处理软件HyperMesh建立,其有限元网格划分前处理功能强大,且软件用户界面良好,便于操作。HyperMesh支持多种求解器对应文件的输入、输出格式,在使用HyperMesh划分完三维几何模型的有限元网格后,可以直接把建好的有限元模型转化为不同求解器对应的文件格式,利用相应的求解器进行后续的分析计算。HyperMesh中求解器为Ansys的cdb文件和Abaqus的inp文件,其中包含焊缝信息。由于读取inp文件为焊缝信息,不涉及节点力,因此此处不展开。

不同的rst文件具有不同的数据结构,为便于解析,本文取1块100 mm×100 mm×10 mm的钢板,其弹性模量=2.1×10MPa,泊松比=0.3,密度=7.85×10g/mm。其几何模型见图2。

图2 几何模型

2.2 有限元模型建立及工况加载

划分有限元模型,网格尺寸为5 mm。有限元模型见图3,单元数为400个,节点数为441个,采用三维4节点壳单元SHELL 181划分。

图3 有限元网格模型

疲劳加载工况为:钢板在长度方向上受最大拉力为2 100 N的脉动循环载荷,循环次数为1×10次。工况说明:设置最大拉力为2 100 N主要是为加载方便,钢板沿宽度方向正好有21个节点,每个节点上可加载整100 N的拉力。

脉动循环是一种典型循环方式,在一定的条件下,脉动循环方式可以与对称循环方式相互转化。在后续的程序准确性验证中,可以把每个节点上的载荷调整为50 N,循环方式改为对称循环,循环次数不变。查看得到的焊缝应力损伤比结果,是否与100 N脉动循环情况下的计算结果一致。建立完整的有限元模型后,将cdb文件导入到Ansys中进行计算,即可得到rst文件,此文件包含程序计算所需的节点力信息数据。

2.3 焊缝单元及焊缝节点建立

1条完整的焊缝包含1排焊缝单元和1排焊缝节点。焊缝节点的位置即是真实模型中焊缝的焊趾或焊跟部位的位置,而焊缝单元的位置即是真实焊缝中紧邻焊缝焊趾或焊跟部位的那一部分母材位置。用1排焊缝单元和1排焊缝节点才能表达1条完整焊缝的原因如下:

本文使用SHELL 181单元建立有限元模型,SHELL 181单元是三维4节点单元,每个单元包含4个节点,单元中的节点会被相邻单元共用。同一个节点对相邻不同单元的节点力不一定相同,其与单元所处的位置、模型的形状、载荷和约束有一定关系。仅凭节点编号提取出的节点力并不准确,单用1排节点表示1条焊缝并不能准确提供疲劳计算所需的节点力信息。从单元坐标系的角度讲,每个单元都有其对应的单元坐标系,而单元坐标系的建立需要单元的3个节点才能确定,并且单元坐标系可决定焊缝的走向以及计算时的先后顺序,因此需要建立1排包含焊缝节点的焊缝单元,并且这些焊缝单元需要在对应焊缝节点的同侧,确保计算和单元坐标系的有序性。

在有限元模型中建立焊缝。为使实验数据更具有参考性,可建立2条焊缝。钢板的左、右2边各1条,2条焊缝走向一致,焊缝的节点数和焊缝单元数也相同。焊缝1的焊缝节点数为21,单元数为20;焊缝2的节点数为21,单元数为20。2条焊缝的节点编号和单元编号见表1。建立焊缝时,单元和节点都按顺序选择,而单元编号和节点编号并非按照编号大小依次排列。

表 1 焊缝的单元编号和节点编号

在2条焊缝的建立过程中,焊缝单元和焊缝节点都按顺序沿同一方向选取,便于后续计算,更省去有限元模型单元坐标系建立过程中的麻烦。建立的焊缝模型见图4。

图4 有限元模型中焊缝

在建立焊缝时,需要注意焊缝单元集名称和焊缝节点集名称的写法。由于在读取inp文件控件的回调函数中,对焊缝信息的提取是以程序需要识别特定的焊缝名称为前提的,因此有限元模型中的焊缝名称需要特定的写法:焊缝单元需要写成weld_1_e,焊缝节点需要写成weld_1_n。名称中间的数字可以随着焊缝条数的增加而增大。1排焊缝单元对应1排焊缝节点,焊缝单元与焊缝节点依次建立。建立好焊缝模型后,导出对应求解器为Abaqus的inp文件。

以上完成有限元模型的建立,在Ansys模板下生成对应的cdb文件,在Abaqus模板下生成对应的inp文件。先把cdb文件导入Ansys中进行静强度计算,得到的结果是模型在疲劳工况作用下所受的应力范围,或称应力幅值,其生成的rst文件中包含节点力信息,也称节点力幅值。得到rst文件后,即可进行文件的读入和计算。

3 rst文件中节点力信息的读取

为掌握rst文件的路径和文件名,在读取rst文件时还需要用到uigetfile命令和fopen命令,且以只读方式打开rst文件。rst文件属于二进制数据文件,不同的模型对应的rst文件的字节长度不一样,在读取rst文件时需按顺序存储每个字节的信息。rst文件模型单元的节点力信息并不是完全按照节点编号从小到大依次排列的,其排列方式与单元的节点顺序有一定关系。每个单元包含4个节点,这4个节点按照一定的顺序(或顺时针或逆时针)排列,每个节点可以有1种或多种节点力,若其相邻的单元数是4个,则此节点会有4种不同的节点力,见图5。表2为节点的不同节点力,表中表示沿整体坐标系、和这3个方向的节点力,表示3个方向的节点力矩。

图5 与4个单元相邻的节点示意

表 2 节点的不同节点力

因此,在读取节点力时需要甄别哪些是焊缝节点的节点力信息。单纯按照节点编号的顺序读取焊缝的节点力信息,不能得到想要的节点力信息。焊缝信息包含单元编号和节点编号,其中单元编号尤为重要,其决定所要读取的节点力信息。

知道节点力信息的排列方式后,就不难提取出焊缝节点对应的节点力信息。为便于后续使用数据方便,按照焊缝信息将节点力信息也放进元胞矩阵中,并且节点力信息的排列顺序与相应焊缝的节点编号顺序对应。在提取并存放完所有的焊缝节点力数据后,需要对节点力进行转化。

后续结构应力计算所使用的节点力是单元坐标系(见图6)下的节点力,而存放好的节点力是整体坐标系下的节点力,需要将整体坐标系下的节点力转化为单元坐标系下的节点力。使用for循环语句对节点力数据逐个进行转化,转化时使用方向余弦向量。单元坐标系需要3个点才能确定,而焊缝单元包含2个焊缝节点,需要再提取出此单元包含的另外一个节点的单元坐标系,同时确定单元节点之间的距离,即单元宽度。这些功能可以在读取节点力文件时完成,从而得到单元坐标系下的节点力。

图6 单元坐标系示意

整个读取过程可按照以下5个步骤进行:

(1)通过HyperMesh建模及Ansys有限元计算,得到rst文件。

(2)建模时规定命名规则,即在Abaqus模板下生成对应的inp文件。采用HyperMesh在Abaqus模板下生成对应的inp文件,其中记录单元编号及节点编号。

(3)使用MATLAB读取文件,使用uigetfile命令和fopen命令打开文件。

(4)根据文件头释义,结合数据类型和数据长度读取文件,并将整体坐标系转化为单元坐标系。

(5)根据焊缝节点及焊缝单元的排列规则,进一步读取相应的节点力信息。

4 结果对比

将上述方法得到的节点力信息转化为等效结构应力,并选择合适的-曲线,即可计算出焊缝的应力损伤比。将该结果与疲劳仿真软件FE-WELD的计算结果进行对比,见表3。用本文所述方法得到的节点力有一定的准确性,并且2种计算结果具有一定的相似性,见图7。

表 3 焊缝1的应力损伤比结果对比

图7 2种计算结果对比

5 结束语

本文采用三维4节点壳单元建立典型方形钢板的有限元模型,加载并计算后得到包含单元节点力信息的rst文件。重点介绍rst文件的数据结构及节点力信息的排序规则,以及利用MATLAB读取节点力信息的方法。将读取的节点力转化后得到的结果与专业疲劳仿真软件的计算结果进行对比,验证读取信息的准确性以及读取方法的有效性,为焊缝节点力的获得提供一种方法。

猜你喜欢
坐标系字节焊缝
大厚壁对接环焊缝坡口设计及焊接参数分析
极坐标系中的奇妙曲线
字节跳动瞄准教育等新业务
三角函数的坐标系模型
求坐标系内三角形的面积
激光角焊缝在白车身自动化生产上的可行性应用
例谈坐标系与参数方程常考题型
人类进入“泽它时代”
浅谈焊接过程中的变形成因及对策
焊缝质量已成为影响压力容器安全性的关键因素