艾 森,許向彥,王立凱
(中國飛機強度研究所計算結(jié)構(gòu)技術(shù)與仿真中心,陜西西安 710065)
隨著計算機技術(shù)及計算力學的快速發(fā)展,有限元法作為工程分析的有效方法,在理論、方法、計算機程序開發(fā)及應用領域的拓展等方面均取得了舉世矚目的成績[1]。尤其如Nastran、ANSYS、Abaqus 等大型有限元軟件的迅速壯大,使得有限元法的應用向著大型化、通用化的趨勢穩(wěn)步發(fā)展。大型通用有限元軟件對于靜力、動力、非線性、穩(wěn)定性問題一般可以獲得滿意的解答,并可解決許多復雜的工程問題[2-5]。
大型通用有限元軟件的特點是通用性強,但在專用方面表現(xiàn)不足,無法快速適應工程應用帶來的新問題[6]。而且大型通用有限元軟件開發(fā)難度很大,如果想在通用有限元軟件基礎上,快速開發(fā)專門問題的軟件工具,則時間周期難以趕上工程進度。為解決這一矛盾,現(xiàn)有的做法基本是在通用有限元軟件平臺上進行二次開發(fā),或?qū)S密浖系酵ㄓ糜邢拊浖脚_上作為單獨模塊,并與通用有限元平臺實現(xiàn)前后置交互。其中,由中國飛機強度研究所研發(fā)的強度校核軟件就選擇了第二條道路,實現(xiàn)了強度校核專用工具的研發(fā)與集成[7-8]。
強度校核軟件以飛機結(jié)構(gòu)靜強度分析作為應用對象,包含金屬結(jié)構(gòu)和復合材料結(jié)構(gòu)的強度分析與校核。該軟件采用Python 語言編寫,作為獨立的求解器集成到大型通用有限元軟件HAJIF 平臺上,并借助HAJIF 平臺的前后置界面實現(xiàn)數(shù)據(jù)交互和結(jié)果可視化。由于HAJIF 平臺提供的前端界面和結(jié)果可視化都采用C++語言編寫,而強度校核軟件求解器作為獨立模塊,采用Python 語言編寫,造成前后數(shù)據(jù)的通信隔離,必須定義一種統(tǒng)一的格式作為前后置與求解器數(shù)據(jù)交互的媒介。
為實現(xiàn)強度校核軟件求解器與前后置的快速通信,采用JSON 格式的文件作為數(shù)據(jù)交互媒介。HAJIF 平臺提供的前端界面生成強度校核所需的參數(shù)文件,并以JSON 格式寫出。求解器讀取JSON 文件進行解析,并根據(jù)解析結(jié)果完成相應的強度校核任務,再以JSON 格式將校核結(jié)果返回到前端界面,用于結(jié)果的顯示與查詢。本文對基于JSON 格式的強度校核軟件數(shù)據(jù)交互接口的設計和實現(xiàn)過程進行說明,為類似專用模塊開發(fā)提供參考。
以飛機蒙皮結(jié)構(gòu)壓縮穩(wěn)定性校核流程作為案例進行說明。如圖1 所示,對于大曲率的飛機蒙皮結(jié)構(gòu),在校核壓縮穩(wěn)定性上,可將其簡化為承受均勻軸向壓縮載荷的矩形平板,其彈性臨界應力可按式(1)計算[9-10]:
其中,b為加載邊寬度;δ為板厚度;E為材料彈性模量;μe為材料彈性泊松比;Kc為壓縮臨界應力系數(shù),與板的邊界支持條件及長寬比(a/b)有關(guān)。
Fig.1 Compressed plate parameters and load form圖1 壓縮平板參數(shù)及受載形式
利用式(1)計算獲得σcr后,將其作為許用值。為獲得結(jié)構(gòu)的安全裕度,還需要從總體有限元分析結(jié)果中獲取結(jié)構(gòu)的工作應力。因此,強度校核流程主要包含兩部分:結(jié)構(gòu)的許用值計算和工作應力的提取。在得到許用值和工作應力后,即可利用式(2)計算安全裕度:
其中,[σ]為結(jié)構(gòu)的許用應力,可以是正應力或剪應力,有時也可以是結(jié)構(gòu)的許用力;對應地,σ為結(jié)構(gòu)的工作應力,同樣可以是正應力、剪應力或工作力。
從以上案例可見,強度校核基本流程為首先獲取強度計算公式中所需要的參數(shù),然后進入求解器中根據(jù)參數(shù)確定校核類型(如蒙皮壓縮、蒙皮剪切、長桁壓縮等),并調(diào)用相關(guān)計算公式獲得校核部位的許用值。進一步從總體有限元分析結(jié)果中提取工作應力,計算安全裕度,輸出校核結(jié)果并返回到后置顯示界面。
強度校核總體流程及軟件實施主要過程如圖2 所示。在該流程中,數(shù)據(jù)交互接口主要存在于兩個階段,一是由HAJIF 平臺提供的前端界面生成的強度校核參數(shù)文件(如圖2 中的“數(shù)據(jù)交互接口1”),該文件將作為求解器輸入文件;二是經(jīng)過求解器計算輸出的結(jié)果文件(如圖2 中的“數(shù)據(jù)交互接口2”),該文件將由前端界面讀取并進行結(jié)果可視化。
Fig.2 Strength check overall process and software implementation process圖2 強度校核總體流程及軟件實施過程
上述數(shù)據(jù)交互文件可以采用各種格式實現(xiàn),如文本格式、XML 格式、JSON 格式等。但文本文件格式零散、不容易解析,作為求解器的輸入文件時,需要進行二次解析,增加了較大的工作量;而XML 由于文檔龐大、格式復雜、數(shù)據(jù)冗余、解析消耗太多系統(tǒng)資源等固有缺陷,使其執(zhí)行效率低下[11]。
JSON 是一種能夠代替XML 的輕量級數(shù)據(jù)交換格式,在擴展性和可讀性上與XML 相當,但在數(shù)據(jù)傳輸效率和解析難度上遠優(yōu)于XML[12-13]。該格式已在多個領域進行了大量應用[14-17]。因此,為統(tǒng)一強度校核軟件的數(shù)據(jù)交互,本文以JSON 格式作為數(shù)據(jù)交互媒介,用于參數(shù)文件和校核結(jié)果文件的數(shù)據(jù)傳輸。
在本文研發(fā)的強度校核軟件中,數(shù)據(jù)交互接口是鏈接HAJIF 前后置和求解器的唯一媒介,扮演著參數(shù)傳遞和任務分發(fā)的角色。從“數(shù)據(jù)交互接口1”來講,用戶在強度校核軟件前端界面(見圖3)中定義好相關(guān)參數(shù)和計算任務后,形成求解器的輸入文件,由求解器內(nèi)部子程序?qū)ζ溥M行解析,完成相關(guān)計算任務。
“數(shù)據(jù)交互接口1”定義的參數(shù)主要包括3 類:基本控制參數(shù)、結(jié)構(gòu)及材料參數(shù)、結(jié)果提取參數(shù)。其中,基本控制參數(shù)決定當前校核類型及相關(guān)模型存放路徑等信息;結(jié)構(gòu)及材料參數(shù)將根據(jù)當前校核類型所采用的計算公式確定;結(jié)果提取參數(shù)也將根據(jù)當前校核類型及校核部位確定。
求解器通過解析“數(shù)據(jù)交互接口1”的參數(shù),并調(diào)用相應的強度計算程序及結(jié)果提取程序完成許用值計算、工作應力提取及安全裕度獲?。蝗缓筝敵觥皵?shù)據(jù)交互接口2”的數(shù)據(jù)模型,返回到前端界面進行結(jié)果可視化顯示?!皵?shù)據(jù)交互接口2”主要由計算的許用應力、提取的工作應力及安全裕度構(gòu)成。
在數(shù)據(jù)交互過程中,交互接口均以JSON 格式的數(shù)據(jù)模型作為交互媒介,從而實現(xiàn)強度校核軟件高效的數(shù)據(jù)流轉(zhuǎn),如圖4、圖5 所示。
Fig.3 Front-end interface of strength check software圖3 強度校核軟件前端界面
Fig.4 JSON data model output by the front-end interface圖4 前端界面輸出的JSON 數(shù)據(jù)模型
Fig.5 JSON data model output by the solver software圖5 求解器輸出的JSON 數(shù)據(jù)模型
強度校核軟件前端界面和結(jié)果可視化部分均采用C++語言編寫,而求解器部分采用Python 語言編寫。因此,對于JSON 格式的數(shù)據(jù)文件將涉及兩種語言。當用戶在前端界面上完成相關(guān)參數(shù)的定義后,先由C++語言輸出JSON 數(shù)據(jù)文件;然后進入到求解器,利用Python 語言進行解析并完成計算。生成的結(jié)果將由Python 輸出為JSON 的數(shù)據(jù)文件,并由C++進行讀入解析,實現(xiàn)可視化顯示。
2.2.1 基于C++的JSON 格式文件讀寫實現(xiàn)
前端C++對JSON 數(shù)據(jù)文件的寫出與讀入采用jsoncpp庫實現(xiàn)。jsoncpp 是一個開源的輕量級C++json 解析庫,允許操作JSON 值,包括與字符串之間的序列化和反序列化。它還可以在反序列化/序列化步驟中保留現(xiàn)有注釋,使其成為存儲用戶輸入文件的便捷格式。
為實現(xiàn)JSON 文件的寫出與讀入,需要jsoncpp 中的Json::Value,Json::Reader,Json::Writer 等3 個基本類。3個基本類的執(zhí)行過程如圖6 所示。
Fig.6 Three basic classes execution process of Jsoncpp library圖6 Jsoncpp 庫3 個基本類的執(zhí)行過程
Json::Reader 的作用是將字符串解析為Json::Value 對象,解析使用Reader 對象的parse 函數(shù)。以蒙皮壓縮數(shù)據(jù)結(jié)構(gòu)輸出為例,其偽代碼如下:
Json::Writer 是一個虛類,不能直接使用,可以通過它的兩個子類Json::FastWriter 和Json::StyledWriter 進行輸出顯示。兩者的區(qū)別是:FastWriter 顯示的內(nèi)容去掉了格式(回車等),為純字符串,而StyledWriter 保留了格式。同樣以蒙皮壓縮數(shù)據(jù)結(jié)構(gòu)輸出為例,其偽代碼如下:
2.2.2 基于Python 的JSON 格式文件讀寫實現(xiàn)
相較于C++語言,Python 對JSON 格式文件的讀入、解析及寫出都要簡單得多,Python 通過調(diào)用JSON 庫實現(xiàn)JSON 文件的操作。主要應用到JSON 庫中的4 個模塊有:dumps、dump、loads、load。其中,dumps 將數(shù)據(jù)類型轉(zhuǎn)換為字符串類型;dump 將數(shù)據(jù)類型轉(zhuǎn)換成字符串并存儲在文件中;loads 將字符串轉(zhuǎn)換成數(shù)據(jù)類型;load 打開文件,并將字符串轉(zhuǎn)換成數(shù)據(jù)類型。
如圖7 所示,采用Python 解析JSON 文件,首先導入JSON 庫,并利用loads 或load 模塊打開加載數(shù)據(jù);然后將加載后的數(shù)據(jù)轉(zhuǎn)換為Python 語言中的字典格式,字典中的成員以“鍵:值”的形式作為各參數(shù)名及取值的數(shù)據(jù)規(guī)則。同樣地,在求解器內(nèi)部完成強度校核后,其校核結(jié)果也將以字典形式構(gòu)建結(jié)果的參數(shù)形式,利用dump 模塊將其寫出到本地文件中,并提供給前端界面進行結(jié)果顯示及可視化。
Fig.7 Execution flow of Python JSON library圖7 Python JSON 庫執(zhí)行流程
為說明本文所設計的數(shù)據(jù)交互接口及實現(xiàn)過程的可行性,以某型飛機機翼上壁板結(jié)構(gòu)為驗證對象,說明其主要過程。某型飛機上壁板部分有限元模型對應結(jié)構(gòu)由蒙皮和“工”字型筋條組成。根據(jù)總體有限元分析,上壁板沿展向(圖中Y 向)主要承受壓縮載荷,因此針對各區(qū)域進行蒙皮壓縮穩(wěn)定性校核。上壁板蒙皮壓縮穩(wěn)定性校核區(qū)域如圖8 所示,中間兩個翼肋之間的蒙皮共劃分為5 個校核區(qū)域。該區(qū)域材料牌號為7050-T7451,根據(jù)式(1)所需參數(shù),由前端界面輸出的JSON 文件,將由5 個Elm_group_i(i=1,2,……,5)組成,每個Elm_group_i 包含基本控制參數(shù)、結(jié)構(gòu)及材料參數(shù)、結(jié)果提取參數(shù)。
Fig.8 Check area for compression stability of upper panel圖8 上壁板蒙皮壓縮穩(wěn)定性校核區(qū)域
當求解器讀入前端界面生成的JSON 文件后,進行內(nèi)部解析,并調(diào)用平板壓縮穩(wěn)定性計算子程序進行壓縮許用應力計算。5 個校核區(qū)域的結(jié)構(gòu)參數(shù)基本一致,因而計算出的壓縮許用應力均為91.99MPa。調(diào)用工作應力提取子程序,按每個區(qū)域最大工作應力進行提取,其值分別為-17.94MPa、-18.07MPa、-18.70MPa、-19.01MPa、-18.92MPa,由此可獲得各區(qū)域的安全裕度。
將校核結(jié)果寫入JSON 文件,被前端界面讀取解析,進行可視化顯示。校核區(qū)域安全裕度云圖顯示結(jié)果如圖9 所示,由于提取到的工作應力結(jié)果不同,各區(qū)域的安全裕度計算結(jié)果也不同。由上述流程和校核結(jié)果可知,基于JSON格式的數(shù)據(jù)交互可作為強度校核軟件的數(shù)據(jù)通信接口,可支撐強度校核全流程的數(shù)據(jù)高效流轉(zhuǎn)。
Fig.9 Safety margin cloud chart of the check area圖9 校核區(qū)域安全裕度云圖顯示
航空結(jié)構(gòu)分析專用軟件研發(fā)一直都是型號研制的關(guān)鍵工具。本文針對航空航天大型裝備研發(fā)了強度校核軟件,并集成于HAJIF 平臺。為解決與HAJIF 平臺前端界面數(shù)據(jù)交互接口不統(tǒng)一等問題,提出以JSON 格式作為數(shù)據(jù)交互的媒介,并闡述利用C++和Python 語言解析JSON 文件的主要過程,通過驗證算例說明了基于JSON 格式進行數(shù)據(jù)通信的可行性。采用這種數(shù)據(jù)格式,可以將前后置界面和求解器的研發(fā)任務進行分離,降低了系統(tǒng)編程的復雜性,為未來航空結(jié)構(gòu)專業(yè)軟件研發(fā)奠定了良好基礎。