艾 森,許向彥,王立凱
(中國飛機強度研究所計算結構技術與仿真中心,陜西西安 710065)
隨著計算機技術及計算力學的快速發展,有限元法作為工程分析的有效方法,在理論、方法、計算機程序開發及應用領域的拓展等方面均取得了舉世矚目的成績[1]。尤其如Nastran、ANSYS、Abaqus 等大型有限元軟件的迅速壯大,使得有限元法的應用向著大型化、通用化的趨勢穩步發展。大型通用有限元軟件對于靜力、動力、非線性、穩定性問題一般可以獲得滿意的解答,并可解決許多復雜的工程問題[2-5]。
大型通用有限元軟件的特點是通用性強,但在專用方面表現不足,無法快速適應工程應用帶來的新問題[6]。而且大型通用有限元軟件開發難度很大,如果想在通用有限元軟件基礎上,快速開發專門問題的軟件工具,則時間周期難以趕上工程進度。為解決這一矛盾,現有的做法基本是在通用有限元軟件平臺上進行二次開發,或將專用軟件整合到通用有限元軟件平臺上作為單獨模塊,并與通用有限元平臺實現前后置交互。其中,由中國飛機強度研究所研發的強度校核軟件就選擇了第二條道路,實現了強度校核專用工具的研發與集成[7-8]。
強度校核軟件以飛機結構靜強度分析作為應用對象,包含金屬結構和復合材料結構的強度分析與校核。該軟件采用Python 語言編寫,作為獨立的求解器集成到大型通用有限元軟件HAJIF 平臺上,并借助HAJIF 平臺的前后置界面實現數據交互和結果可視化。由于HAJIF 平臺提供的前端界面和結果可視化都采用C++語言編寫,而強度校核軟件求解器作為獨立模塊,采用Python 語言編寫,造成前后數據的通信隔離,必須定義一種統一的格式作為前后置與求解器數據交互的媒介。
為實現強度校核軟件求解器與前后置的快速通信,采用JSON 格式的文件作為數據交互媒介。HAJIF 平臺提供的前端界面生成強度校核所需的參數文件,并以JSON 格式寫出。求解器讀取JSON 文件進行解析,并根據解析結果完成相應的強度校核任務,再以JSON 格式將校核結果返回到前端界面,用于結果的顯示與查詢。本文對基于JSON 格式的強度校核軟件數據交互接口的設計和實現過程進行說明,為類似專用模塊開發提供參考。
以飛機蒙皮結構壓縮穩定性校核流程作為案例進行說明。如圖1 所示,對于大曲率的飛機蒙皮結構,在校核壓縮穩定性上,可將其簡化為承受均勻軸向壓縮載荷的矩形平板,其彈性臨界應力可按式(1)計算[9-10]:

其中,b為加載邊寬度;δ為板厚度;E為材料彈性模量;μe為材料彈性泊松比;Kc為壓縮臨界應力系數,與板的邊界支持條件及長寬比(a/b)有關。

Fig.1 Compressed plate parameters and load form圖1 壓縮平板參數及受載形式
利用式(1)計算獲得σcr后,將其作為許用值。為獲得結構的安全裕度,還需要從總體有限元分析結果中獲取結構的工作應力。因此,強度校核流程主要包含兩部分:結構的許用值計算和工作應力的提取。在得到許用值和工作應力后,即可利用式(2)計算安全裕度:

其中,[σ]為結構的許用應力,可以是正應力或剪應力,有時也可以是結構的許用力;對應地,σ為結構的工作應力,同樣可以是正應力、剪應力或工作力。
從以上案例可見,強度校核基本流程為首先獲取強度計算公式中所需要的參數,然后進入求解器中根據參數確定校核類型(如蒙皮壓縮、蒙皮剪切、長桁壓縮等),并調用相關計算公式獲得校核部位的許用值。進一步從總體有限元分析結果中提取工作應力,計算安全裕度,輸出校核結果并返回到后置顯示界面。
強度校核總體流程及軟件實施主要過程如圖2 所示。在該流程中,數據交互接口主要存在于兩個階段,一是由HAJIF 平臺提供的前端界面生成的強度校核參數文件(如圖2 中的“數據交互接口1”),該文件將作為求解器輸入文件;二是經過求解器計算輸出的結果文件(如圖2 中的“數據交互接口2”),該文件將由前端界面讀取并進行結果可視化。

Fig.2 Strength check overall process and software implementation process圖2 強度校核總體流程及軟件實施過程
上述數據交互文件可以采用各種格式實現,如文本格式、XML 格式、JSON 格式等。但文本文件格式零散、不容易解析,作為求解器的輸入文件時,需要進行二次解析,增加了較大的工作量;而XML 由于文檔龐大、格式復雜、數據冗余、解析消耗太多系統資源等固有缺陷,使其執行效率低下[11]。
JSON 是一種能夠代替XML 的輕量級數據交換格式,在擴展性和可讀性上與XML 相當,但在數據傳輸效率和解析難度上遠優于XML[12-13]。該格式已在多個領域進行了大量應用[14-17]。因此,為統一強度校核軟件的數據交互,本文以JSON 格式作為數據交互媒介,用于參數文件和校核結果文件的數據傳輸。
在本文研發的強度校核軟件中,數據交互接口是鏈接HAJIF 前后置和求解器的唯一媒介,扮演著參數傳遞和任務分發的角色。從“數據交互接口1”來講,用戶在強度校核軟件前端界面(見圖3)中定義好相關參數和計算任務后,形成求解器的輸入文件,由求解器內部子程序對其進行解析,完成相關計算任務。
“數據交互接口1”定義的參數主要包括3 類:基本控制參數、結構及材料參數、結果提取參數。其中,基本控制參數決定當前校核類型及相關模型存放路徑等信息;結構及材料參數將根據當前校核類型所采用的計算公式確定;結果提取參數也將根據當前校核類型及校核部位確定。
求解器通過解析“數據交互接口1”的參數,并調用相應的強度計算程序及結果提取程序完成許用值計算、工作應力提取及安全裕度獲取;然后輸出“數據交互接口2”的數據模型,返回到前端界面進行結果可視化顯示。“數據交互接口2”主要由計算的許用應力、提取的工作應力及安全裕度構成。
在數據交互過程中,交互接口均以JSON 格式的數據模型作為交互媒介,從而實現強度校核軟件高效的數據流轉,如圖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 數據模型

Fig.5 JSON data model output by the solver software圖5 求解器輸出的JSON 數據模型
強度校核軟件前端界面和結果可視化部分均采用C++語言編寫,而求解器部分采用Python 語言編寫。因此,對于JSON 格式的數據文件將涉及兩種語言。當用戶在前端界面上完成相關參數的定義后,先由C++語言輸出JSON 數據文件;然后進入到求解器,利用Python 語言進行解析并完成計算。生成的結果將由Python 輸出為JSON 的數據文件,并由C++進行讀入解析,實現可視化顯示。
2.2.1 基于C++的JSON 格式文件讀寫實現
前端C++對JSON 數據文件的寫出與讀入采用jsoncpp庫實現。jsoncpp 是一個開源的輕量級C++json 解析庫,允許操作JSON 值,包括與字符串之間的序列化和反序列化。它還可以在反序列化/序列化步驟中保留現有注釋,使其成為存儲用戶輸入文件的便捷格式。
為實現JSON 文件的寫出與讀入,需要jsoncpp 中的Json::Value,Json::Reader,Json::Writer 等3 個基本類。3個基本類的執行過程如圖6 所示。

Fig.6 Three basic classes execution process of Jsoncpp library圖6 Jsoncpp 庫3 個基本類的執行過程
Json::Reader 的作用是將字符串解析為Json::Value 對象,解析使用Reader 對象的parse 函數。以蒙皮壓縮數據結構輸出為例,其偽代碼如下:


Json::Writer 是一個虛類,不能直接使用,可以通過它的兩個子類Json::FastWriter 和Json::StyledWriter 進行輸出顯示。兩者的區別是:FastWriter 顯示的內容去掉了格式(回車等),為純字符串,而StyledWriter 保留了格式。同樣以蒙皮壓縮數據結構輸出為例,其偽代碼如下:

2.2.2 基于Python 的JSON 格式文件讀寫實現
相較于C++語言,Python 對JSON 格式文件的讀入、解析及寫出都要簡單得多,Python 通過調用JSON 庫實現JSON 文件的操作。主要應用到JSON 庫中的4 個模塊有:dumps、dump、loads、load。其中,dumps 將數據類型轉換為字符串類型;dump 將數據類型轉換成字符串并存儲在文件中;loads 將字符串轉換成數據類型;load 打開文件,并將字符串轉換成數據類型。
如圖7 所示,采用Python 解析JSON 文件,首先導入JSON 庫,并利用loads 或load 模塊打開加載數據;然后將加載后的數據轉換為Python 語言中的字典格式,字典中的成員以“鍵:值”的形式作為各參數名及取值的數據規則。同樣地,在求解器內部完成強度校核后,其校核結果也將以字典形式構建結果的參數形式,利用dump 模塊將其寫出到本地文件中,并提供給前端界面進行結果顯示及可視化。

Fig.7 Execution flow of Python JSON library圖7 Python JSON 庫執行流程
為說明本文所設計的數據交互接口及實現過程的可行性,以某型飛機機翼上壁板結構為驗證對象,說明其主要過程。某型飛機上壁板部分有限元模型對應結構由蒙皮和“工”字型筋條組成。根據總體有限元分析,上壁板沿展向(圖中Y 向)主要承受壓縮載荷,因此針對各區域進行蒙皮壓縮穩定性校核。上壁板蒙皮壓縮穩定性校核區域如圖8 所示,中間兩個翼肋之間的蒙皮共劃分為5 個校核區域。該區域材料牌號為7050-T7451,根據式(1)所需參數,由前端界面輸出的JSON 文件,將由5 個Elm_group_i(i=1,2,……,5)組成,每個Elm_group_i 包含基本控制參數、結構及材料參數、結果提取參數。

Fig.8 Check area for compression stability of upper panel圖8 上壁板蒙皮壓縮穩定性校核區域
當求解器讀入前端界面生成的JSON 文件后,進行內部解析,并調用平板壓縮穩定性計算子程序進行壓縮許用應力計算。5 個校核區域的結構參數基本一致,因而計算出的壓縮許用應力均為91.99MPa。調用工作應力提取子程序,按每個區域最大工作應力進行提取,其值分別為-17.94MPa、-18.07MPa、-18.70MPa、-19.01MPa、-18.92MPa,由此可獲得各區域的安全裕度。
將校核結果寫入JSON 文件,被前端界面讀取解析,進行可視化顯示。校核區域安全裕度云圖顯示結果如圖9 所示,由于提取到的工作應力結果不同,各區域的安全裕度計算結果也不同。由上述流程和校核結果可知,基于JSON格式的數據交互可作為強度校核軟件的數據通信接口,可支撐強度校核全流程的數據高效流轉。

Fig.9 Safety margin cloud chart of the check area圖9 校核區域安全裕度云圖顯示
航空結構分析專用軟件研發一直都是型號研制的關鍵工具。本文針對航空航天大型裝備研發了強度校核軟件,并集成于HAJIF 平臺。為解決與HAJIF 平臺前端界面數據交互接口不統一等問題,提出以JSON 格式作為數據交互的媒介,并闡述利用C++和Python 語言解析JSON 文件的主要過程,通過驗證算例說明了基于JSON 格式進行數據通信的可行性。采用這種數據格式,可以將前后置界面和求解器的研發任務進行分離,降低了系統編程的復雜性,為未來航空結構專業軟件研發奠定了良好基礎。