劉保國,徐小定,岳龍旺,華海峰
(河南工業大學 機械電子工程研究所,鄭州 450052)
STEP(Standard for the Exchange of Product Model Data)標準是一套關于產品整個生命周期中產品數據的表達和交換的國際標準,通過一種不依賴于具體系統的中性機制,實現產品全生命周期中的產品信息數據表達的一致性和完整性[1]。隨著制造業自動化的快速發展,STEP標準已經得到了普遍的重視和應用,特別是在航空航天、船舶、汽車等行業更是有了很大的發展。
隨著計算機技術的進步,各類CAD、CAM、CAPP、CAE軟件促進了制造業自動化的發展。面對多種多樣的CAX軟件,需要找到一種通用的數據交互模式來解決異構環境下的數據共享問題,而基于STEP標準的中性文件可以很好的解決CAX軟件之間的接口問題。國外許多研究單位,如Product Data Integration Technologies公司,Object Management Group等都在進行STEP方面的研究工作,現有專門支持遵循STEP標準的產品建模和產品數據交換的軟件系統有Pro STEP和STEP tools。國內對STEP標準的研究處于探索發展階段,國家技術監督局標準化所、航空625所、一汽和二汽合資創辦了STEP產品數據技術中心(C-STEP);哈爾濱工程大學在STEP的AP201應用協議方面取得了一定研究成果;還有一些學者從微觀上將STEP應用于Pro/E、有限元等軟件進行下游開發。
旋轉機械是工程中廣泛使用的一類設備,其動力學問題的分析方法與一般的機械結構動力學問題不同,為此,作者及其領導的課題組開發了旋轉機械CAE系統。這是一款針對旋轉機械設備動、靜力學問題的特點專門開發的分析軟件,可以分析轉子的固有頻率、臨界轉速、穩定性、不平衡響應等,也可以進行旋轉機械設備的動平衡計算[2]。
本文以旋轉機械的轉子為研究對象,在對基于STEP標準的中性文件進行結構分析的基礎上,通過建立中性文件與c++之間的映射關系,實現中性文件c++對象的實例化,最終實現CAD與旋轉機械CAE系統分析軟件之間的無縫聯接。
ISO 10303-21規定基于EXPRESS語言(ISO 10303-11)的產品三維模型(ISO 10303-203)的中性文件表達格式。STEP中性文件采用純正文編碼格式,以關鍵字ISO-10303-21開始,以關鍵字END-ISO-10301-21結束,由頭部段(HEADER)和數據段(DATA)兩部分組成[3]:
頭部段以關鍵字HEADER開頭,以關鍵字ENDSCE結束,包含所用三維建模軟件的相關信息。
數據段是由EXPRESS定義的概念模式中實體的實例,以關鍵字DATA開頭,以關鍵字ENDSCE結束,包含了產品的幾何數據信息和拓撲關系。
中性文件舉例如下:
ISO-10303-21; /*文件開始*/
HEADER; /*頭部段開始*/
…… /*文件信息*/
ENDSEC; /*頭部段結束*/
DATA; /*數據段開始*/
……
#87=CLOSED_SHELL('',(#48,#63,#76,#86));/*實體實例*/
……
ENDSEC; /*數據段結束*/
END-ISO-10303-21; /*文件結束*/
中性文件的數據段描述格式如下:
#ID=實體關鍵字(‘實體名稱’,屬性1,屬性2,……);
在數據段中,產品的幾何實體分成很多的實體實例,每個實體實例都以“#”開始,以“;”結束,并且都由唯一的實體實例標識號ID(正整數)標識,ID號是為了區別不同的實體實例。實體實例的關鍵字跟在ID號的后面,是與其他語言建立映射的關鍵。實體實例的實體名稱和屬性包含在關鍵字后面的括號里,實體名稱和屬性之間用特殊字符“,”分割開來。實體實例之間可以被調用形成拓撲關系,構成幾何實體特征,同一個實體實例可以被多個實例調用[4]。
STEP中性文件對產品的描述主要基于b-rep表達的實體造型,由點、線、邊、環、面、殼通過路徑使產品幾何與拓撲信息聯系在一起,從而建立實體模型?!癈LOSED_SHELL”表示殼,處于最上方,它是由高端面“ADVANCED_FACE”形成的一個集合,面又是由面邊界“FACE_OUTER_BOUND”組成。方向“DIRECTION”和笛卡爾坐標點“CARTESIAN_POINT”是最基本的元素[5]。

圖1 Pro/e生成的轉子封閉軌跡
圖1 是Pro/e生成的轉子封閉軌跡,從它所形成的STEP中性文件的部分描述可以看出各個實體間的聯系(如圖2所示)。幾何實體軸由#87定義,它由高端面#48、#63、#76、#86組成。端面#48又是由面邊界#47和平面#41組成,#41通過三維空間的2坐標軸系#40定義,而#40由笛卡爾點#37給出坐標位置,由#38和#39給出方向;半圓柱面#63由面邊界#62和圓柱面#53組成,#53通過三維空間的2坐標軸系#52和圓柱面半徑2.5定義,而#52由笛卡爾點#49給出坐標位置,由#50和#51給出方向;半圓柱面#76由面邊界#75和圓柱面#68組成,#68通過三維空間的2坐標軸系#67和圓柱面半徑2.5定義,而#57由笛卡爾點#64給出坐標位置,由#65和#66給出方向;端面#86又是由面邊界#85和平面#81組成,#81通過三維空間的2坐標軸系#80定義,而#80由笛卡爾點#77給出坐標位置,由#78和#79給出方向。

圖2 Pro/e生成的中性文件各個實體間的聯系
STEP標準以EXPRESS作為其形式化的建模語言。EXPRESS建模語言在STEP中性文件中用于規定實體實例的語法結構,描述實體實例的信息需求,是建立映射的基礎。從描述結構上看,可分為:應用層、模式層、說明層。模式說明描述了一個邏輯上獨立、完整的概念模式,包含類型說明(TYPE specification)、實體說明(ENTITY specification)、規則說明(RULE specifi cation)、常數說明(CONST specifi cation)等。一個應用數據模式說明可以用幾個子模式說明表示,這些子模式間可以并列、嵌套或者相互引用,也可以引用別的模式說明中的實體說明[6]。
要把用EXPRESS描述的STEP中性文件格式翻譯為c++描述的格式,就要建立相對應的映射規則。EXPRESS的數據類型包括簡單數據類型、聚合數據類型、命名數據類型、構造數據類型和廣義數據類型。簡單數據類型映射定義如表1所示。

表1 EXPRESS簡單數據類型與C++映射關系
所有的聚合數據類型(LIST,ARRAY,SET,BAG)都映射定義為c++數組數據類型如表2所示。

表2 EXPRESS聚合數據類型與C++映射關系
其他數據類型的映射定義如表3所示。

表3 EXPRESS其他數據類型與C++映射關系
通過以上映射規則就可以建立相對應的映射,把EXPRESS實體映射為c++的類,從而將EXPRESS描述方法翻譯為c++所描述的格式,下面是建立對應映射的應用實例,如表4所示。

表4 EXPRESS實體到C++實體映射
STEP中性文件的c++實例化就是要把STEP中性文件描述的產品信息轉化為c++語言的描述。由于STEP中性文件是一個龐大的字符串形式的文本文件,必須對中性文件做預處理才能進行操作。因為中性文件數據段具有固定的格式,因此可以采用字符分割的方法將實體的信息進行分段,將分段后的信息保存在結構體中以備利用。所謂字符分割就是以“=”、“,”、“(”、“)”作為特殊字符,將實體信息在這些特殊字符處分割成各個部分。
STEP中性文件經過詞法分析預處理后被保存在結構體中,通過結構體中的m_strKeyword[]建立關鍵字表,將所有的關鍵字包含在關鍵字表里。
結構體形式如下:
struct mode
{ char m_strID[]; /*實體標識號*/
char m_strKeyword[]; /*實體關鍵字*/
char m_strName[]; /*實體名稱*/
char m_Attr1[]; /*實體屬性1*/
char m_Attr2 []; /*實體屬性2*/
char m_Attr3 []; /*實體屬性3*/
……
};
轉子模型的STEP中性文件經過預處理模塊處理后其所描述的產品信息被保存在結構體mode中。首先遍歷由結構體中m_strKeywords[]建立的關鍵字表,調出關鍵字,然后根據所編寫的判斷程序,查找關鍵字在內存中所對應的c++實體類描述,建立該實體c++描述的映射關系,然后將保存在結構體中的實體信息作為參數傳遞給對應的c++實體類,構造c++實體對象,從而完成中性文件中實體的實例化。流程如圖3所示。

圖3 實例化流程
笛卡爾點的實例化部分程序如下:
If(strcmp(m1.m_strKeywords,"CARTESIAN_POINT")==0)
//通過關鍵字表判斷CARTESIAN_POINT是否為關鍵字
{ fl oat d1,d2,d3;
int id;
d1=atof(m1.m_Attr1);//將結構體中的屬性轉化為浮點型
d2=atof(m1.m_ Attr2);
d3=atof(m1.m_ Attr3);
id=atof(m1.m_ID);
CARTESIAN_POINT cartesian_point;//建立名為cartesian_point的對象
cartesian_point.Getcartesian_pointparamter(d1,d2,d3,id);
//實例化cartesian_point對象
}
針對特定的轉子分析軟件,通過對轉子模型的STEP中性文件結構分析,建立其與c++之間的映射關系,在詞法分析模塊預處理后,按照其與c++間的映射關系,通過實例化程序完成中性文件的c++實例化。本文對于實現CAD與旋轉機械CAE系統分析軟件的集成有重要參考價值。
[1] 童秉樞,李學志,吳軍.機械CAD技術基礎(第2版)[M].北京:清華大學出版社,2003.
[2] 河南工業大學.河南省高校杰出科研人才創新工程資助項目—“旋轉機械的隨機參數系統動力學問題研究及應用”課題研究報告[E].2009,9.
[3] 董曉嵐,黃筱調.關于STEP中性文件數據結構的研究與實現[J].機械設計與制造,2005,10(10):49-51.
[4] 王銳,張承瑞,劉日良.step中性文件的信息提取與圖形顯示[J].機械科學,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模式的關系數據庫實現中的數據字典及其映射方法[J].現代制造工程,2006,9.