周 航,王鶴螢,龍 波,蘭天寶,王驥驍
(中國核電工程有限公司,北京 100840)
力學(xué)分析工作是核電工程中管道布置設(shè)計工作的重要環(huán)節(jié)。目前較為通用的力學(xué)管道商業(yè)計算軟件為國外引進(jìn)的PIPESTRESS 軟件,該軟件在核級管道力學(xué)計算中已被廣泛采用。但該軟件沒有針對中文報告文檔的生成模塊,目前對PIPESTRESS 計算結(jié)果的提取和處理缺乏高效、自動化的方式。在力學(xué)分析工作過程中需要產(chǎn)出大量的docx 格式的電子報告文檔。報告文檔通常具有相似的結(jié)構(gòu),如幾何模型說明,設(shè)計條件,計算原則,計算結(jié)果等,并且經(jīng)常包含各種各樣相同的要素信息,如項(xiàng)目名稱,工種名稱等。同事,報告文檔中還涉及大量技術(shù)指標(biāo)的確定和分析,對不同的報告,這些技術(shù)指標(biāo)均需要根據(jù)對應(yīng)的計算結(jié)果給出,其中的引用關(guān)系及部分指標(biāo)之間的關(guān)聯(lián)錯綜復(fù)雜,難以保證技術(shù)狀態(tài)的一致性。分析者需要從PIPESTRESS 的大量計算結(jié)果文件中人工查找數(shù)據(jù),手動填寫并編制報告。人工查找數(shù)據(jù)效率較低,錯誤率較高;此外,當(dāng)計算條件及分析要求發(fā)生變化,或模型需要修改及重新計算時,分析者均需要對文檔進(jìn)行重復(fù)編輯及排版,報告中特定項(xiàng)目的統(tǒng)一聲明和規(guī)范也需要手動更新,占用了大量的人力和時間資源。
針對此種情況,本文提供了一種可與PIPESTRESS軟件結(jié)合應(yīng)用的管道力學(xué)分析報告生成程序,可使用PIPESTRESS 計算結(jié)果文件直接生成管道力學(xué)分析報告文檔并進(jìn)行排版,提高管道力學(xué)分析的效率及保證成品文件的準(zhǔn)確性。該程序使用Python 程序設(shè)計語言編寫程序,對PIPESTRESS 結(jié)果數(shù)據(jù)進(jìn)行提取及分析,將報告所需數(shù)據(jù)自動添加到word 模板文檔中對應(yīng)位置并進(jìn)行排版,生成word 格式的力學(xué)報告文件正文部分。利用程序自動化實(shí)現(xiàn)了部分力學(xué)報告質(zhì)量保證要求的強(qiáng)制執(zhí)行,并減輕了管道分析工作人員的工作負(fù)擔(dān)。實(shí)現(xiàn)了對報告的模板化、標(biāo)準(zhǔn)化、規(guī)范化管理,建立報告文檔與力學(xué)計算結(jié)果關(guān)鍵指標(biāo)的關(guān)聯(lián),最終有效地規(guī)范報告編制流程,縮短編制周期,提高文檔質(zhì)量,降低編制成本[1]。
本文所述管道力學(xué)分析報告高效編制程序的開發(fā)基于Python 程序設(shè)計語言。Python 語言自從20 世紀(jì)90 年代初誕生至今,已經(jīng)成為最受喜愛的編程語言之一,其主要原因是該語言語法的簡潔性、易讀性以及強(qiáng)大的可擴(kuò)展性,不僅免費(fèi)開源,對操作系統(tǒng)要求低,沒有商業(yè)許可限制,還有極其強(qiáng)大的第三方庫和龐大穩(wěn)定的社區(qū),真正做到面向?qū)ο螅`活強(qiáng)大??傮w來說,Python 語言是可以快速工作并且集成系統(tǒng)更高效的編程語言,可以滿足工作流程自動化需求。
Python 語言對Word 文檔的操作有兩大類方法:①通過Word 官方提供的COM 接口來實(shí)現(xiàn)。②通過直接讀寫Word 文檔來實(shí)現(xiàn)。前者利用Word 程序提供的接口功能。后者通過第三方庫基于對Word 文檔的存儲格式的解析,提供對文檔的操作。本文采用第三方庫的方法對文檔進(jìn)行底層操作。
Python-docx 作為Python 的一種第三方庫,可用于創(chuàng)建及修改微軟Office 辦公程序中的Word 文檔內(nèi)容及格式,提供完善的Word 程序操作。Jinja2 基于是Python 生態(tài)系統(tǒng)的模板語言。模板語言允許創(chuàng)建基于文本的文檔,文檔中的部分內(nèi)容可以動態(tài)生成。生成的文件可以是HTML、JSON、XML 或任何使用純文本作為編碼的文件。Python-docx-tpl 是結(jié)合Python-docx 和Jinja2 的Python 第三方庫,用于將Word 模板文件和Jinja 標(biāo)記結(jié)合使用,基于模板生成更多文檔。
管道力學(xué)分析報告需要給出計算所依據(jù)的條件,該管道的幾何特征(管道的溫度,壓力,壁厚,線重;支架及閥門的編號,功能,模型中的節(jié)點(diǎn)號,約束方向等),計算所依據(jù)的規(guī)范,計算結(jié)果數(shù)據(jù)(規(guī)范中不同方程下最大應(yīng)力所在的節(jié)點(diǎn)編號,計算應(yīng)力值,許用應(yīng)力值,應(yīng)力計算值與許用值之比等)。因此,一份管道力學(xué)分析報告通??梢杂山y(tǒng)一標(biāo)準(zhǔn)化的模板和個性化的數(shù)據(jù)組成。
同一項(xiàng)目的管道力學(xué)分析報告,其大部分內(nèi)容如報告結(jié)構(gòu)、排版格式通常是相同的,如封面、計算程序及計算標(biāo)準(zhǔn)、符號說明、規(guī)范說明、參考文獻(xiàn)等內(nèi)容通常完全相同。因此,可以將這些內(nèi)容提前編制好作為報告模板,在此基礎(chǔ)上利用程序提取出個性化的計算結(jié)果數(shù)據(jù)并填充至模板的相應(yīng)位置,便可實(shí)現(xiàn)管道力學(xué)分析報告的高效準(zhǔn)確編制[2]。
程序?qū)蟾娴奶幚磉^程本質(zhì)上是將文檔模板化。對文檔進(jìn)行固定化部分和參數(shù)化部分,針對參數(shù)化部分的數(shù)據(jù)進(jìn)行修改。利用程序?qū)?shù)據(jù)和模板兩個原成分以規(guī)定的形式“粘合”,生成最終文檔。
從PIPESTRESS 程序中提取所需數(shù)據(jù),可以利用Python 中的正則表達(dá)式(re Regular Expression)模塊。該模塊具有強(qiáng)大的文本解析、復(fù)雜字符串分析和信息提取功能。利用re.sub(pattern,repl,string)指令獲取結(jié)果文件中的特定參數(shù)。并通過查找關(guān)鍵字篩選,將數(shù)據(jù)屬性及相關(guān)聯(lián)的數(shù)據(jù)值作為字典的鍵值對進(jìn)行儲存。字典是Python 對象中的一種數(shù)據(jù)類型,通過鍵值對來存儲對象。每個項(xiàng)目之間的次序是任意的,只是創(chuàng)建一種鍵-值對的映射關(guān)系。字典作為一種可變?nèi)萜髂P?,是表示無順序集合的一個非常靈活的工具。在力學(xué)報告中,每個節(jié)點(diǎn)在各個工況下都具有很多屬性參數(shù),可以將屬性的名稱作為字典的鍵,將屬性的值作為字典的值。例如,將“管道編號”“管道外徑”“管道壁厚”作為字典的鍵,對應(yīng)地將“001”“33.4”“2.77”作為字典的值。用字典對象調(diào)用相關(guān)的管道信息時,數(shù)據(jù)存儲量小,存儲結(jié)構(gòu)簡潔明了[3]。
利用re 模塊定義查找模型集中質(zhì)量的函數(shù),并從結(jié)果文件中獲取集中質(zhì)量的語句示例如下。
示例中定義的find_MA 函數(shù)可將結(jié)果文件中形如“MA=1.580”中的集中質(zhì)量參數(shù)“1.58”提取為函數(shù)結(jié)果。
模板中需要統(tǒng)一標(biāo)準(zhǔn)化的部分可以根據(jù)項(xiàng)目需要預(yù)先編制。模板在邏輯上與代碼是分開的,允許對模板不變的部分進(jìn)行獨(dú)立修改而無須修改程序的源代碼。
高效編制管道力學(xué)分析報告程序需要用到的核心功能是將程序提取出的數(shù)據(jù)填充進(jìn)Word 模板文檔中,為其指定位置并編輯格式[4]。
調(diào)用Python-docx-tpl 庫并指定文檔模板文件為reporter.docx 的語句如下。
3.2.1 文本生成
以計算結(jié)論為例,力學(xué)分析報告要求以文本形式給出管道的最大應(yīng)力比值和所在的節(jié)點(diǎn)號。
首先將程序中提取出的最大應(yīng)力比值及其節(jié)點(diǎn)號儲存于字符串變量maxstressnode 與maxstressratio 中。
在模板文件reporter.docx 中相應(yīng)位置插入含有占位符的語句描述,案例如下。
計算表明所有節(jié)點(diǎn)的應(yīng)力比都低于節(jié)點(diǎn){{maxnode}},此點(diǎn)的最大應(yīng)力比值為{{maxratio}}。
占位符名稱以模板語言的格式書寫在雙大括號內(nèi)。以下列語句在程序中給出變量和占位符間的對應(yīng)關(guān)系,從而使變量填充至模板文檔的正確位置。
渲染文檔的語句為:tpl.render(context)
渲染后,在文檔中便可得到用結(jié)果文件中對應(yīng)數(shù)據(jù)填充語句如下。
計算表明所有節(jié)點(diǎn)的應(yīng)力比都低于節(jié)點(diǎn)786,此點(diǎn)的最大應(yīng)力比值為0.964。
3.2.2 表格生成
進(jìn)一步地,以應(yīng)力清單為例,力學(xué)分析報告要求以表格形式給出管道的應(yīng)力評定結(jié)果。
首先將程序中提取出的數(shù)據(jù)整理成適合填充至Word 文檔表格中的數(shù)據(jù)結(jié)構(gòu),其語句如下。
例中變量maxstress 為使用程序預(yù)先提取出的管線最大應(yīng)力計算結(jié)果,數(shù)據(jù)結(jié)構(gòu)形式為字典,字典的鍵為管道的各種屬性名稱,字典的值為這些屬性的具體數(shù)值。變量head 為表格表頭。上述語句將表頭與數(shù)據(jù)賦值給列表maxtables。
下列語句可以選擇出需要填充至模板文檔的內(nèi)容。
語句中maxtables 為需要填充至模板文件中的數(shù)據(jù)。tbl,contents 為模板文件中占位符的名稱。在模板文件reporter.docx 中相應(yīng)位置插入含有占位符的表格,占位符名稱tbl_contents、col 與前文中整理出的數(shù)據(jù)結(jié)構(gòu)相對應(yīng),含占位符的表格模板示例如表1 所示。
表1 含占位符的表格模板示例
渲染文檔,填充內(nèi)容并將其另存為output 文件夾下名為LXSJ.docx 文檔的語句如下。
渲染后,文件LXSJ.docx 中便可得到用特定數(shù)據(jù)填充的表格。程序生成的管道應(yīng)力評定結(jié)果表格示例如表2 所示。
表2 程序生成的管道應(yīng)力評定結(jié)果表格示例
其他幾何特征,計算結(jié)果數(shù)據(jù)等可以用同樣的方法在模板中定義位置,提取數(shù)據(jù),并填充結(jié)果。最后新生成的文件LXSJ.docx 即為本題目的管道力學(xué)分析報告正文部分,計算者僅需補(bǔ)充報告附錄,對計算說明、修改說明進(jìn)行敘述,并對報告進(jìn)行核對。至此,用戶利用該程序高效、準(zhǔn)確地從PIPESTRESS 結(jié)果文件中提取出管道應(yīng)力分析報告所需的數(shù)據(jù),并在項(xiàng)目模板的基礎(chǔ)上自動生成了不同管道的應(yīng)力分析報告[5]。
管道力學(xué)分析工作中的報告編制過程。以及校審環(huán)節(jié)改正錯誤的重復(fù)編制過程大約耗時16h 左右。使用該軟件自動生成報告后,分析者僅需對結(jié)果進(jìn)行核對,降低了由于人為因素造成的報告出錯概率,并將報告編制過程時間大幅縮短,平均一份報告的編制過程可縮短至1~2h。本文所述基于Python 程序設(shè)計語言自主研發(fā)的管道力學(xué)分析報告自動生成程序,需求明確,可直接解決管道力學(xué)分析工作編制報告過程中的部分重復(fù)性工作,實(shí)現(xiàn)業(yè)務(wù)自動化;使用方便,報告模板可根據(jù)不同項(xiàng)目要求進(jìn)行更新迭代;并具有良好的可擴(kuò)展性。此外,本文所述技術(shù)可以推廣應(yīng)用于其他領(lǐng)域的文檔動態(tài)編制工作中,具有較好的參考意義。