馬斌,谷翠軍,徐先偉,黃艷麗
(中車青島四方機車車輛研究所 重慶研發(fā)中心,重慶 401133)
近年來,隨著國民經(jīng)濟的發(fā)展,鐵路車輛的速度越來越快、運量越來越多,這對列車結(jié)構(gòu)提出更高要求。列車結(jié)構(gòu)的損壞大多在焊接結(jié)構(gòu)上,其破壞形式一般為疲勞斷裂,故迫切需要找到一種準(zhǔn)確計算焊縫疲勞壽命的方法。
計算焊縫疲勞壽命時,初始輸入值一般為靜強度計算中焊縫結(jié)構(gòu)的節(jié)點力。有限元計算分析軟件Ansys具有強大的強度分析能力,其輸出的靜強度計算的節(jié)點力信息包含在rst文件中。目前,對rst文件數(shù)據(jù)結(jié)構(gòu)的解析較少。本文對rst文件的數(shù)據(jù)結(jié)構(gòu)進(jìn)行解讀,指出關(guān)鍵焊縫節(jié)點力信息的讀取方法,為分析焊縫疲勞強度提供鋪墊。由于MATLAB的編程環(huán)境簡單、完善,編程語言可操作性強,數(shù)據(jù)處理能力強大,因此通過MATLAB讀取rst文件。
rst文件是Ansys對有限元模型進(jìn)行強度分析計算后自動生成的擴展名為.rst的數(shù)據(jù)文件,亦稱結(jié)果文件。rst文件包含有限元模型的數(shù)據(jù),還包含靜強度分析后各單元節(jié)點的應(yīng)力、應(yīng)變等信息。本文用MATLAB讀取rst文件,從中提取出單元節(jié)點的節(jié)點力數(shù)據(jù),方便后續(xù)采用主-曲線理論計算焊縫的疲勞壽命以及焊縫各節(jié)點位置處的應(yīng)力損傷比。
rst文件采用Fortran語言編寫,屬于二進(jìn)制文件。要讀取rst文件中包含的節(jié)點力數(shù)據(jù),首先需要知道整個rst文件的數(shù)據(jù)結(jié)構(gòu)形式。rst文件數(shù)據(jù)結(jié)構(gòu)的特殊性決定rst文件的特殊性,須將整個rst文件劃分成多個數(shù)據(jù)塊讀取。
rst文件包含很多信息,但組成每條完整信息的字節(jié)數(shù)不一定相同,字節(jié)類型也不盡相同。其中,字節(jié)類型包括int型、double型、char型、long int型等,long int型字節(jié)可以用2個int型字節(jié)表示。因此,用MATLAB讀取rst文件時,必須以字節(jié)為單位進(jìn)行讀取,一次可以同時讀取幾個單位字節(jié),但需要確保一次讀取的字節(jié)所表達(dá)的意思是完整的。
用MATLAB讀取rst文件時,如果命令框中顯示的結(jié)果無意義,那么需要改變一次性讀取字節(jié)的長度或者類型,有時需要多次改變才能使讀出的數(shù)據(jù)意義完整。Ansys自帶二進(jìn)制文件翻譯,可將rst文件的數(shù)據(jù)塊結(jié)構(gòu)以文本文檔的形式顯示出來,驗證rst文件的讀取進(jìn)度。圖1為本文模型的rst文件翻譯后部分文檔的截圖,分析圖1可知rst文件的文件頭包含的字節(jié)數(shù)及其代表的意義等。
圖1 rst文件翻譯后部分文檔截圖
rst文件的數(shù)據(jù)結(jié)構(gòu)形式并非一成不變,不同的有限元模型使用的單元類型不同、材料屬性不同、加載條件不同,都會導(dǎo)致rst文件的數(shù)據(jù)結(jié)構(gòu)模塊發(fā)生變化。參照Ansys自帶的幫助文檔,本文介紹一般情況下rst文件的數(shù)據(jù)結(jié)構(gòu)形式。
初始模型為1塊長方形板,在不考慮溫度影響下對其進(jìn)行有限元網(wǎng)格劃分,單元類型為三維線性4節(jié)點殼單元SHELL 181。利用Ansys進(jìn)行靜態(tài)強度分析,形成rst文件。材料屬性為單一線性材料,板厚單一。
每個rst文件包括1個標(biāo)準(zhǔn)的文件頭,文件頭包含100個整形數(shù)據(jù)的字節(jié),每個字節(jié)對應(yīng)相應(yīng)的Iterm。這個文件頭包含一些rst文件信息,在利用MATLAB讀取rst文件時可以知道字節(jié)所表達(dá)的意思是否完整。當(dāng)然,一些Iterm的內(nèi)容是字符或者字符串形式,而MATLAB在讀取二進(jìn)制文件時不能顯示類似數(shù)據(jù),讀取比較麻煩,需要切換讀取類型,由整形int型變?yōu)閏har型或其他類型。
文件頭中的信息如下:
Iterm1表示文件數(shù),MATLAB讀取值為12,默認(rèn)為12;
Iterm2表示文件形式,Iterm2有1和-1共2個值可選,MATLAB讀取值為-1,表示此模型為大數(shù)形式;
Iterm3表示時間,MATLAB讀取值為171659,對照翻譯文檔中的時間信息,可知讀取進(jìn)度正確;
Iterm4表示日期,MATLAB讀取值為1212013,可知讀取字節(jié)的意思表達(dá)完整;
Iterm5表示單位,MATLAB讀取值為0,代表選擇單位為用戶自定義,符合模型單位;
Iterm6~9在表中無顯示,MATLAB讀取的信息在翻譯文檔中找不到對應(yīng)信息;
Iterm10表示軟件的版本號,MATLAB不能顯示;
Iterm11為版本發(fā)布日期,MATLAB讀取值為20111024;
Iterm12~14、15~16、17~18、19、20~22、23~25分別為機器識別符、工作名稱、Ansys產(chǎn)品名稱、用戶名以及機器識別符,這些都是字符串,MATLAB不能顯示;
Iterm26為系統(tǒng)記錄尺寸,MATLAB讀取值為16384,即此rst文件中包含16384條記錄;
Iterm27為最大文件長度,MATLAB讀取值為312525;
Iterm28為最大記錄號,MATLAB讀取值為20;
Iterm31~38為工作名稱、字符串類型;
Iterm41~60為分析主題、字符串類型;
Iterm61~80為第一子標(biāo)題、字符串類型;
Iterm95為文件切割點,查看翻譯文檔為未知;
Iterm97~98為長整形文件尺寸,MATLAB讀取值為3125250,占2個整形字節(jié);
Iterm99~100無明顯意義,MATLAB讀取值為0654321;
至此,一個標(biāo)準(zhǔn)的100字節(jié)的文件頭表達(dá)完整。通過讀取此文件頭,可以知道此文件計算的時間、記錄長度、軟件版本號等相關(guān)信息。這些信息是整個rst文件的概括特征,并沒有各節(jié)點的節(jié)點力等類似數(shù)據(jù),要想知道類似信息,還需要繼續(xù)往下讀取。讀取方法與上述類似,不再詳述。
在后續(xù)的rst文件讀取中,可以知道單元號、節(jié)點號、節(jié)點坐標(biāo)、材料屬性、實常數(shù)等有限元模型的基本信息,還可以知道各單元節(jié)點的應(yīng)力、應(yīng)變以及節(jié)點自由度等相關(guān)信息,所求的節(jié)點力信息就包含在其中。讀取完整個rst文件,就可以知道節(jié)點力信息具體在哪里。注意:這些節(jié)點力信息屬于所有節(jié)點,后文會介紹怎樣提取焊縫節(jié)點的節(jié)點力。
本文的有限元模型基于有限元前處理軟件HyperMesh建立,其有限元網(wǎng)格劃分前處理功能強大,且軟件用戶界面良好,便于操作。HyperMesh支持多種求解器對應(yīng)文件的輸入、輸出格式,在使用HyperMesh劃分完三維幾何模型的有限元網(wǎng)格后,可以直接把建好的有限元模型轉(zhuǎn)化為不同求解器對應(yīng)的文件格式,利用相應(yīng)的求解器進(jìn)行后續(xù)的分析計算。HyperMesh中求解器為Ansys的cdb文件和Abaqus的inp文件,其中包含焊縫信息。由于讀取inp文件為焊縫信息,不涉及節(jié)點力,因此此處不展開。
不同的rst文件具有不同的數(shù)據(jù)結(jié)構(gòu),為便于解析,本文取1塊100 mm×100 mm×10 mm的鋼板,其彈性模量=2.1×10MPa,泊松比=0.3,密度=7.85×10g/mm。其幾何模型見圖2。
圖2 幾何模型
劃分有限元模型,網(wǎng)格尺寸為5 mm。有限元模型見圖3,單元數(shù)為400個,節(jié)點數(shù)為441個,采用三維4節(jié)點殼單元SHELL 181劃分。
圖3 有限元網(wǎng)格模型
疲勞加載工況為:鋼板在長度方向上受最大拉力為2 100 N的脈動循環(huán)載荷,循環(huán)次數(shù)為1×10次。工況說明:設(shè)置最大拉力為2 100 N主要是為加載方便,鋼板沿寬度方向正好有21個節(jié)點,每個節(jié)點上可加載整100 N的拉力。
脈動循環(huán)是一種典型循環(huán)方式,在一定的條件下,脈動循環(huán)方式可以與對稱循環(huán)方式相互轉(zhuǎn)化。在后續(xù)的程序準(zhǔn)確性驗證中,可以把每個節(jié)點上的載荷調(diào)整為50 N,循環(huán)方式改為對稱循環(huán),循環(huán)次數(shù)不變。查看得到的焊縫應(yīng)力損傷比結(jié)果,是否與100 N脈動循環(huán)情況下的計算結(jié)果一致。建立完整的有限元模型后,將cdb文件導(dǎo)入到Ansys中進(jìn)行計算,即可得到rst文件,此文件包含程序計算所需的節(jié)點力信息數(shù)據(jù)。
1條完整的焊縫包含1排焊縫單元和1排焊縫節(jié)點。焊縫節(jié)點的位置即是真實模型中焊縫的焊趾或焊跟部位的位置,而焊縫單元的位置即是真實焊縫中緊鄰焊縫焊趾或焊跟部位的那一部分母材位置。用1排焊縫單元和1排焊縫節(jié)點才能表達(dá)1條完整焊縫的原因如下:
本文使用SHELL 181單元建立有限元模型,SHELL 181單元是三維4節(jié)點單元,每個單元包含4個節(jié)點,單元中的節(jié)點會被相鄰單元共用。同一個節(jié)點對相鄰不同單元的節(jié)點力不一定相同,其與單元所處的位置、模型的形狀、載荷和約束有一定關(guān)系。僅憑節(jié)點編號提取出的節(jié)點力并不準(zhǔn)確,單用1排節(jié)點表示1條焊縫并不能準(zhǔn)確提供疲勞計算所需的節(jié)點力信息。從單元坐標(biāo)系的角度講,每個單元都有其對應(yīng)的單元坐標(biāo)系,而單元坐標(biāo)系的建立需要單元的3個節(jié)點才能確定,并且單元坐標(biāo)系可決定焊縫的走向以及計算時的先后順序,因此需要建立1排包含焊縫節(jié)點的焊縫單元,并且這些焊縫單元需要在對應(yīng)焊縫節(jié)點的同側(cè),確保計算和單元坐標(biāo)系的有序性。
在有限元模型中建立焊縫。為使實驗數(shù)據(jù)更具有參考性,可建立2條焊縫。鋼板的左、右2邊各1條,2條焊縫走向一致,焊縫的節(jié)點數(shù)和焊縫單元數(shù)也相同。焊縫1的焊縫節(jié)點數(shù)為21,單元數(shù)為20;焊縫2的節(jié)點數(shù)為21,單元數(shù)為20。2條焊縫的節(jié)點編號和單元編號見表1。建立焊縫時,單元和節(jié)點都按順序選擇,而單元編號和節(jié)點編號并非按照編號大小依次排列。
表 1 焊縫的單元編號和節(jié)點編號
在2條焊縫的建立過程中,焊縫單元和焊縫節(jié)點都按順序沿同一方向選取,便于后續(xù)計算,更省去有限元模型單元坐標(biāo)系建立過程中的麻煩。建立的焊縫模型見圖4。
圖4 有限元模型中焊縫
在建立焊縫時,需要注意焊縫單元集名稱和焊縫節(jié)點集名稱的寫法。由于在讀取inp文件控件的回調(diào)函數(shù)中,對焊縫信息的提取是以程序需要識別特定的焊縫名稱為前提的,因此有限元模型中的焊縫名稱需要特定的寫法:焊縫單元需要寫成weld_1_e,焊縫節(jié)點需要寫成weld_1_n。名稱中間的數(shù)字可以隨著焊縫條數(shù)的增加而增大。1排焊縫單元對應(yīng)1排焊縫節(jié)點,焊縫單元與焊縫節(jié)點依次建立。建立好焊縫模型后,導(dǎo)出對應(yīng)求解器為Abaqus的inp文件。
以上完成有限元模型的建立,在Ansys模板下生成對應(yīng)的cdb文件,在Abaqus模板下生成對應(yīng)的inp文件。先把cdb文件導(dǎo)入Ansys中進(jìn)行靜強度計算,得到的結(jié)果是模型在疲勞工況作用下所受的應(yīng)力范圍,或稱應(yīng)力幅值,其生成的rst文件中包含節(jié)點力信息,也稱節(jié)點力幅值。得到rst文件后,即可進(jìn)行文件的讀入和計算。
為掌握rst文件的路徑和文件名,在讀取rst文件時還需要用到uigetfile命令和fopen命令,且以只讀方式打開rst文件。rst文件屬于二進(jìn)制數(shù)據(jù)文件,不同的模型對應(yīng)的rst文件的字節(jié)長度不一樣,在讀取rst文件時需按順序存儲每個字節(jié)的信息。rst文件模型單元的節(jié)點力信息并不是完全按照節(jié)點編號從小到大依次排列的,其排列方式與單元的節(jié)點順序有一定關(guān)系。每個單元包含4個節(jié)點,這4個節(jié)點按照一定的順序(或順時針或逆時針)排列,每個節(jié)點可以有1種或多種節(jié)點力,若其相鄰的單元數(shù)是4個,則此節(jié)點會有4種不同的節(jié)點力,見圖5。表2為節(jié)點的不同節(jié)點力,表中、和表示沿整體坐標(biāo)系、和這3個方向的節(jié)點力,、和表示3個方向的節(jié)點力矩。
圖5 與4個單元相鄰的節(jié)點示意
表 2 節(jié)點的不同節(jié)點力
因此,在讀取節(jié)點力時需要甄別哪些是焊縫節(jié)點的節(jié)點力信息。單純按照節(jié)點編號的順序讀取焊縫的節(jié)點力信息,不能得到想要的節(jié)點力信息。焊縫信息包含單元編號和節(jié)點編號,其中單元編號尤為重要,其決定所要讀取的節(jié)點力信息。
知道節(jié)點力信息的排列方式后,就不難提取出焊縫節(jié)點對應(yīng)的節(jié)點力信息。為便于后續(xù)使用數(shù)據(jù)方便,按照焊縫信息將節(jié)點力信息也放進(jìn)元胞矩陣中,并且節(jié)點力信息的排列順序與相應(yīng)焊縫的節(jié)點編號順序?qū)?yīng)。在提取并存放完所有的焊縫節(jié)點力數(shù)據(jù)后,需要對節(jié)點力進(jìn)行轉(zhuǎn)化。
后續(xù)結(jié)構(gòu)應(yīng)力計算所使用的節(jié)點力是單元坐標(biāo)系(見圖6)下的節(jié)點力,而存放好的節(jié)點力是整體坐標(biāo)系下的節(jié)點力,需要將整體坐標(biāo)系下的節(jié)點力轉(zhuǎn)化為單元坐標(biāo)系下的節(jié)點力。使用for循環(huán)語句對節(jié)點力數(shù)據(jù)逐個進(jìn)行轉(zhuǎn)化,轉(zhuǎn)化時使用方向余弦向量。單元坐標(biāo)系需要3個點才能確定,而焊縫單元包含2個焊縫節(jié)點,需要再提取出此單元包含的另外一個節(jié)點的單元坐標(biāo)系,同時確定單元節(jié)點之間的距離,即單元寬度。這些功能可以在讀取節(jié)點力文件時完成,從而得到單元坐標(biāo)系下的節(jié)點力。
圖6 單元坐標(biāo)系示意
整個讀取過程可按照以下5個步驟進(jìn)行:
(1)通過HyperMesh建模及Ansys有限元計算,得到rst文件。
(2)建模時規(guī)定命名規(guī)則,即在Abaqus模板下生成對應(yīng)的inp文件。采用HyperMesh在Abaqus模板下生成對應(yīng)的inp文件,其中記錄單元編號及節(jié)點編號。
(3)使用MATLAB讀取文件,使用uigetfile命令和fopen命令打開文件。
(4)根據(jù)文件頭釋義,結(jié)合數(shù)據(jù)類型和數(shù)據(jù)長度讀取文件,并將整體坐標(biāo)系轉(zhuǎn)化為單元坐標(biāo)系。
(5)根據(jù)焊縫節(jié)點及焊縫單元的排列規(guī)則,進(jìn)一步讀取相應(yīng)的節(jié)點力信息。
將上述方法得到的節(jié)點力信息轉(zhuǎn)化為等效結(jié)構(gòu)應(yīng)力,并選擇合適的-曲線,即可計算出焊縫的應(yīng)力損傷比。將該結(jié)果與疲勞仿真軟件FE-WELD的計算結(jié)果進(jìn)行對比,見表3。用本文所述方法得到的節(jié)點力有一定的準(zhǔn)確性,并且2種計算結(jié)果具有一定的相似性,見圖7。
表 3 焊縫1的應(yīng)力損傷比結(jié)果對比
圖7 2種計算結(jié)果對比
本文采用三維4節(jié)點殼單元建立典型方形鋼板的有限元模型,加載并計算后得到包含單元節(jié)點力信息的rst文件。重點介紹rst文件的數(shù)據(jù)結(jié)構(gòu)及節(jié)點力信息的排序規(guī)則,以及利用MATLAB讀取節(jié)點力信息的方法。將讀取的節(jié)點力轉(zhuǎn)化后得到的結(jié)果與專業(yè)疲勞仿真軟件的計算結(jié)果進(jìn)行對比,驗證讀取信息的準(zhǔn)確性以及讀取方法的有效性,為焊縫節(jié)點力的獲得提供一種方法。