劉保國,徐小定,岳龍旺,華海峰
(河南工業(yè)大學(xué) 機(jī)械電子工程研究所,鄭州 450052)
STEP(Standard for the Exchange of Product Model Data)標(biāo)準(zhǔn)是一套關(guān)于產(chǎn)品整個(gè)生命周期中產(chǎn)品數(shù)據(jù)的表達(dá)和交換的國際標(biāo)準(zhǔn),通過一種不依賴于具體系統(tǒng)的中性機(jī)制,實(shí)現(xiàn)產(chǎn)品全生命周期中的產(chǎn)品信息數(shù)據(jù)表達(dá)的一致性和完整性[1]。隨著制造業(yè)自動(dòng)化的快速發(fā)展,STEP標(biāo)準(zhǔn)已經(jīng)得到了普遍的重視和應(yīng)用,特別是在航空航天、船舶、汽車等行業(yè)更是有了很大的發(fā)展。
隨著計(jì)算機(jī)技術(shù)的進(jìn)步,各類CAD、CAM、CAPP、CAE軟件促進(jìn)了制造業(yè)自動(dòng)化的發(fā)展。面對(duì)多種多樣的CAX軟件,需要找到一種通用的數(shù)據(jù)交互模式來解決異構(gòu)環(huán)境下的數(shù)據(jù)共享問題,而基于STEP標(biāo)準(zhǔn)的中性文件可以很好的解決CAX軟件之間的接口問題。國外許多研究單位,如Product Data Integration Technologies公司,Object Management Group等都在進(jìn)行STEP方面的研究工作,現(xiàn)有專門支持遵循STEP標(biāo)準(zhǔn)的產(chǎn)品建模和產(chǎn)品數(shù)據(jù)交換的軟件系統(tǒng)有Pro STEP和STEP tools。國內(nèi)對(duì)STEP標(biāo)準(zhǔn)的研究處于探索發(fā)展階段,國家技術(shù)監(jiān)督局標(biāo)準(zhǔn)化所、航空625所、一汽和二汽合資創(chuàng)辦了STEP產(chǎn)品數(shù)據(jù)技術(shù)中心(C-STEP);哈爾濱工程大學(xué)在STEP的AP201應(yīng)用協(xié)議方面取得了一定研究成果;還有一些學(xué)者從微觀上將STEP應(yīng)用于Pro/E、有限元等軟件進(jìn)行下游開發(fā)。
旋轉(zhuǎn)機(jī)械是工程中廣泛使用的一類設(shè)備,其動(dòng)力學(xué)問題的分析方法與一般的機(jī)械結(jié)構(gòu)動(dòng)力學(xué)問題不同,為此,作者及其領(lǐng)導(dǎo)的課題組開發(fā)了旋轉(zhuǎn)機(jī)械CAE系統(tǒng)。這是一款針對(duì)旋轉(zhuǎn)機(jī)械設(shè)備動(dòng)、靜力學(xué)問題的特點(diǎn)專門開發(fā)的分析軟件,可以分析轉(zhuǎn)子的固有頻率、臨界轉(zhuǎn)速、穩(wěn)定性、不平衡響應(yīng)等,也可以進(jìn)行旋轉(zhuǎn)機(jī)械設(shè)備的動(dòng)平衡計(jì)算[2]。
本文以旋轉(zhuǎn)機(jī)械的轉(zhuǎn)子為研究對(duì)象,在對(duì)基于STEP標(biāo)準(zhǔn)的中性文件進(jìn)行結(jié)構(gòu)分析的基礎(chǔ)上,通過建立中性文件與c++之間的映射關(guān)系,實(shí)現(xiàn)中性文件c++對(duì)象的實(shí)例化,最終實(shí)現(xiàn)CAD與旋轉(zhuǎn)機(jī)械CAE系統(tǒng)分析軟件之間的無縫聯(lián)接。
ISO 10303-21規(guī)定基于EXPRESS語言(ISO 10303-11)的產(chǎn)品三維模型(ISO 10303-203)的中性文件表達(dá)格式。STEP中性文件采用純正文編碼格式,以關(guān)鍵字ISO-10303-21開始,以關(guān)鍵字END-ISO-10301-21結(jié)束,由頭部段(HEADER)和數(shù)據(jù)段(DATA)兩部分組成[3]:
頭部段以關(guān)鍵字HEADER開頭,以關(guān)鍵字ENDSCE結(jié)束,包含所用三維建模軟件的相關(guān)信息。
數(shù)據(jù)段是由EXPRESS定義的概念模式中實(shí)體的實(shí)例,以關(guān)鍵字DATA開頭,以關(guān)鍵字ENDSCE結(jié)束,包含了產(chǎn)品的幾何數(shù)據(jù)信息和拓?fù)潢P(guān)系。
中性文件舉例如下:
ISO-10303-21; /*文件開始*/
HEADER; /*頭部段開始*/
…… /*文件信息*/
ENDSEC; /*頭部段結(jié)束*/
DATA; /*數(shù)據(jù)段開始*/
……
#87=CLOSED_SHELL('',(#48,#63,#76,#86));/*實(shí)體實(shí)例*/
……
ENDSEC; /*數(shù)據(jù)段結(jié)束*/
END-ISO-10303-21; /*文件結(jié)束*/
中性文件的數(shù)據(jù)段描述格式如下:
#ID=實(shí)體關(guān)鍵字(‘實(shí)體名稱’,屬性1,屬性2,……);
在數(shù)據(jù)段中,產(chǎn)品的幾何實(shí)體分成很多的實(shí)體實(shí)例,每個(gè)實(shí)體實(shí)例都以“#”開始,以“;”結(jié)束,并且都由唯一的實(shí)體實(shí)例標(biāo)識(shí)號(hào)ID(正整數(shù))標(biāo)識(shí),ID號(hào)是為了區(qū)別不同的實(shí)體實(shí)例。實(shí)體實(shí)例的關(guān)鍵字跟在ID號(hào)的后面,是與其他語言建立映射的關(guān)鍵。實(shí)體實(shí)例的實(shí)體名稱和屬性包含在關(guān)鍵字后面的括號(hào)里,實(shí)體名稱和屬性之間用特殊字符“,”分割開來。實(shí)體實(shí)例之間可以被調(diào)用形成拓?fù)潢P(guān)系,構(gòu)成幾何實(shí)體特征,同一個(gè)實(shí)體實(shí)例可以被多個(gè)實(shí)例調(diào)用[4]。
STEP中性文件對(duì)產(chǎn)品的描述主要基于b-rep表達(dá)的實(shí)體造型,由點(diǎn)、線、邊、環(huán)、面、殼通過路徑使產(chǎn)品幾何與拓?fù)湫畔⒙?lián)系在一起,從而建立實(shí)體模型。“CLOSED_SHELL”表示殼,處于最上方,它是由高端面“ADVANCED_FACE”形成的一個(gè)集合,面又是由面邊界“FACE_OUTER_BOUND”組成。方向“DIRECTION”和笛卡爾坐標(biāo)點(diǎn)“CARTESIAN_POINT”是最基本的元素[5]。
圖1 Pro/e生成的轉(zhuǎn)子封閉軌跡
圖1 是Pro/e生成的轉(zhuǎn)子封閉軌跡,從它所形成的STEP中性文件的部分描述可以看出各個(gè)實(shí)體間的聯(lián)系(如圖2所示)。幾何實(shí)體軸由#87定義,它由高端面#48、#63、#76、#86組成。端面#48又是由面邊界#47和平面#41組成,#41通過三維空間的2坐標(biāo)軸系#40定義,而#40由笛卡爾點(diǎn)#37給出坐標(biāo)位置,由#38和#39給出方向;半圓柱面#63由面邊界#62和圓柱面#53組成,#53通過三維空間的2坐標(biāo)軸系#52和圓柱面半徑2.5定義,而#52由笛卡爾點(diǎn)#49給出坐標(biāo)位置,由#50和#51給出方向;半圓柱面#76由面邊界#75和圓柱面#68組成,#68通過三維空間的2坐標(biāo)軸系#67和圓柱面半徑2.5定義,而#57由笛卡爾點(diǎn)#64給出坐標(biāo)位置,由#65和#66給出方向;端面#86又是由面邊界#85和平面#81組成,#81通過三維空間的2坐標(biāo)軸系#80定義,而#80由笛卡爾點(diǎn)#77給出坐標(biāo)位置,由#78和#79給出方向。
圖2 Pro/e生成的中性文件各個(gè)實(shí)體間的聯(lián)系
STEP標(biāo)準(zhǔn)以EXPRESS作為其形式化的建模語言。EXPRESS建模語言在STEP中性文件中用于規(guī)定實(shí)體實(shí)例的語法結(jié)構(gòu),描述實(shí)體實(shí)例的信息需求,是建立映射的基礎(chǔ)。從描述結(jié)構(gòu)上看,可分為:應(yīng)用層、模式層、說明層。模式說明描述了一個(gè)邏輯上獨(dú)立、完整的概念模式,包含類型說明(TYPE specification)、實(shí)體說明(ENTITY specification)、規(guī)則說明(RULE specifi cation)、常數(shù)說明(CONST specifi cation)等。一個(gè)應(yīng)用數(shù)據(jù)模式說明可以用幾個(gè)子模式說明表示,這些子模式間可以并列、嵌套或者相互引用,也可以引用別的模式說明中的實(shí)體說明[6]。
要把用EXPRESS描述的STEP中性文件格式翻譯為c++描述的格式,就要建立相對(duì)應(yīng)的映射規(guī)則。EXPRESS的數(shù)據(jù)類型包括簡單數(shù)據(jù)類型、聚合數(shù)據(jù)類型、命名數(shù)據(jù)類型、構(gòu)造數(shù)據(jù)類型和廣義數(shù)據(jù)類型。簡單數(shù)據(jù)類型映射定義如表1所示。
表1 EXPRESS簡單數(shù)據(jù)類型與C++映射關(guān)系
所有的聚合數(shù)據(jù)類型(LIST,ARRAY,SET,BAG)都映射定義為c++數(shù)組數(shù)據(jù)類型如表2所示。
表2 EXPRESS聚合數(shù)據(jù)類型與C++映射關(guān)系
其他數(shù)據(jù)類型的映射定義如表3所示。
表3 EXPRESS其他數(shù)據(jù)類型與C++映射關(guān)系
通過以上映射規(guī)則就可以建立相對(duì)應(yīng)的映射,把EXPRESS實(shí)體映射為c++的類,從而將EXPRESS描述方法翻譯為c++所描述的格式,下面是建立對(duì)應(yīng)映射的應(yīng)用實(shí)例,如表4所示。
表4 EXPRESS實(shí)體到C++實(shí)體映射
STEP中性文件的c++實(shí)例化就是要把STEP中性文件描述的產(chǎn)品信息轉(zhuǎn)化為c++語言的描述。由于STEP中性文件是一個(gè)龐大的字符串形式的文本文件,必須對(duì)中性文件做預(yù)處理才能進(jìn)行操作。因?yàn)橹行晕募?shù)據(jù)段具有固定的格式,因此可以采用字符分割的方法將實(shí)體的信息進(jìn)行分段,將分段后的信息保存在結(jié)構(gòu)體中以備利用。所謂字符分割就是以“=”、“,”、“(”、“)”作為特殊字符,將實(shí)體信息在這些特殊字符處分割成各個(gè)部分。
STEP中性文件經(jīng)過詞法分析預(yù)處理后被保存在結(jié)構(gòu)體中,通過結(jié)構(gòu)體中的m_strKeyword[]建立關(guān)鍵字表,將所有的關(guān)鍵字包含在關(guān)鍵字表里。
結(jié)構(gòu)體形式如下:
struct mode
{ char m_strID[]; /*實(shí)體標(biāo)識(shí)號(hào)*/
char m_strKeyword[]; /*實(shí)體關(guān)鍵字*/
char m_strName[]; /*實(shí)體名稱*/
char m_Attr1[]; /*實(shí)體屬性1*/
char m_Attr2 []; /*實(shí)體屬性2*/
char m_Attr3 []; /*實(shí)體屬性3*/
……
};
轉(zhuǎn)子模型的STEP中性文件經(jīng)過預(yù)處理模塊處理后其所描述的產(chǎn)品信息被保存在結(jié)構(gòu)體mode中。首先遍歷由結(jié)構(gòu)體中m_strKeywords[]建立的關(guān)鍵字表,調(diào)出關(guān)鍵字,然后根據(jù)所編寫的判斷程序,查找關(guān)鍵字在內(nèi)存中所對(duì)應(yīng)的c++實(shí)體類描述,建立該實(shí)體c++描述的映射關(guān)系,然后將保存在結(jié)構(gòu)體中的實(shí)體信息作為參數(shù)傳遞給對(duì)應(yīng)的c++實(shí)體類,構(gòu)造c++實(shí)體對(duì)象,從而完成中性文件中實(shí)體的實(shí)例化。流程如圖3所示。
圖3 實(shí)例化流程
笛卡爾點(diǎn)的實(shí)例化部分程序如下:
If(strcmp(m1.m_strKeywords,"CARTESIAN_POINT")==0)
//通過關(guān)鍵字表判斷CARTESIAN_POINT是否為關(guān)鍵字
{ fl oat d1,d2,d3;
int id;
d1=atof(m1.m_Attr1);//將結(jié)構(gòu)體中的屬性轉(zhuǎn)化為浮點(diǎn)型
d2=atof(m1.m_ Attr2);
d3=atof(m1.m_ Attr3);
id=atof(m1.m_ID);
CARTESIAN_POINT cartesian_point;//建立名為cartesian_point的對(duì)象
cartesian_point.Getcartesian_pointparamter(d1,d2,d3,id);
//實(shí)例化cartesian_point對(duì)象
}
針對(duì)特定的轉(zhuǎn)子分析軟件,通過對(duì)轉(zhuǎn)子模型的STEP中性文件結(jié)構(gòu)分析,建立其與c++之間的映射關(guān)系,在詞法分析模塊預(yù)處理后,按照其與c++間的映射關(guān)系,通過實(shí)例化程序完成中性文件的c++實(shí)例化。本文對(duì)于實(shí)現(xiàn)CAD與旋轉(zhuǎn)機(jī)械CAE系統(tǒng)分析軟件的集成有重要參考價(jià)值。
[1] 童秉樞,李學(xué)志,吳軍.機(jī)械CAD技術(shù)基礎(chǔ)(第2版)[M].北京:清華大學(xué)出版社,2003.
[2] 河南工業(yè)大學(xué).河南省高校杰出科研人才創(chuàng)新工程資助項(xiàng)目—“旋轉(zhuǎn)機(jī)械的隨機(jī)參數(shù)系統(tǒng)動(dòng)力學(xué)問題研究及應(yīng)用”課題研究報(bào)告[E].2009,9.
[3] 董曉嵐,黃筱調(diào).關(guān)于STEP中性文件數(shù)據(jù)結(jié)構(gòu)的研究與實(shí)現(xiàn)[J].機(jī)械設(shè)計(jì)與制造,2005,10(10):49-51.
[4] 王銳,張承瑞,劉日良.step中性文件的信息提取與圖形顯示[J].機(jī)械科學(xué),2004,9:1117-1119.
[5] ISO Industrial Automation Systems and Integration-Product Data Representation and Exchange-Part 21:Implementation Method :Clesr Text Encoding of the Exchange Structure[S]. ISO 10303-21,1994.
[6] 徐曉明,盧炎麟.STEP模式的關(guān)系數(shù)據(jù)庫實(shí)現(xiàn)中的數(shù)據(jù)字典及其映射方法[J].現(xiàn)代制造工程,2006,9.