鐘建琳,常 城,王紅軍
(北京信息科技大學,北京 100192)
原子滑車(又名過山車)作為游樂設備在我國已有很多游樂場所使用,盡管原子滑車在國內的研究、制造不過十余年,但目前國內已有一些單位如北京實寶來游樂設備制造有限公司、華北礦山冶金機械廠和上海煤炭機械研究所等具有生產原子滑車的能力。為縮短設計開發周期,提高設計效率,利用Pro/E軟件開發原子滑車相關零部件庫,這樣在設計某個零件或部件時,只需要輸入相關的參數,系統能夠自動生成該零件或部件的三維模型,因此,可以減少重復勞動,提高設計效率。參數化是建庫的基礎,美國PTC公司開發的CAD/CAM軟件Pro/E功能強大,在國內外機械、汽車、家電、航空航天等領域得到廣泛應用。該軟件近年來在我國的各企業正逐步地得到廣泛應用,以尺寸驅動、基于特征、單一全關聯的數據庫等優點深受廣大設計人員的推崇和喜愛。
原子滑車設備主要由主體滑行結構、提升機、滑車、站臺、制動系統、氣動系統、電控系統、設備基礎組成[1]。原子滑車一般共有6節車廂,可坐24人,車輛間由連接軸聯接,車廂內為每位乘客設有壓肩安全杠和二次安全帶,另外兩車中間還裝有2條φ12.5的鋼絲繩做安全保護。滑車設有承重輪、側導向輪、底輪和防倒裝置。從站臺上發車,經過提升機,使滑車提升到一定高度,在勢能作用下,依靠慣性沿軌道滑行。滑車運行過程中產生的加速度、離心力及失重感使游客在驚險刺激的感覺中體現極限的樂趣。游樂設施原子滑車的設計屬于單件,為了提高設計和制造效率,迫切需要產品實現參數化設計。下面以滑車中的輪軸為例加以介紹。
根據原子滑車所要實現的運動情況將輪軸設計為三種,分別是承重輪軸、側導輪軸和側掛輪軸。承重輪軸是起承重的作用,并帶動車體在軌道上行駛,一般由大滑輪、支撐大滑輪的軸、滑輪與軸之間連接所用軸承、防塵圈、端蓋和罩等組成。側導輪軸是導向和承受轉彎時的離心力作用,側導輪軸一般包括大滑輪、支撐大滑輪的軸、小滑輪、支撐小滑輪的軸、軸承、防塵圈、端蓋和罩等。側掛輪軸是一個類似安全輪的作用,在小車翻越圓環時由于離心力的大小不同,軌道對小車施加的支持力的方向就不同,當離心力比小車重力小時,小車會在重力作用下下落,這時側掛輪軸就起作用了。側掛輪軸的零部件與側導輪軸類似。
Pro/E下的二次開發有多種不同的方法:JLink、Pro/Toolkit、Pro/Program、族表、用戶自定義特征等等。其中,J-Link是PTC公司提供的二次開發工具,它是基于Java語言的,用戶可以通過Java編程從而實現在Pro/E中添加所需要的功能。Pro/Toolkit是PTC公司提供的基于Pro/E的開發工具包,支持在Windows操作系統中使用C和C++語言設計程序。它為用戶或第三方軟件商提供了龐大的C語言函數庫,用戶借助該庫可以通過C或C++程序代碼擴充Pro/E系統的功能,開發用戶自己的應用程序模塊,可訪問Pro/E數據、實現與Pro/E的無縫集成,并滿足用戶的特殊要求。Pro/Program是Pro/E中由類似Basic的語言構成的,Pro/E中的每個模型都有相應的Pro/Program程序,用戶可修改該程序,系統運行修改過的程序后,可以通過人機交互來控制系統的參數、特征尺寸及是否顯示特征等。族表在Pro/E中是通過電子表格來管理的,是由表格驅動的,先將通用零件建立為父零件,然后在父零件的基礎上控制各參數來生成派生零件。由此可見族表主要用于管理具有相同或相近結構的零件,特別是管理標準件。用戶自定義特征可用來建立特定產品中的特定結構,用戶可以根據產品特征來快速生成幾何模型。
原子滑車相關零部件的參數化設計綜合利用了Pro/E中的族表、Pro/Program功能和用戶自定義特征來建立零部件庫,然后通過數據庫管理相關數據,采用VC++語言運用Pro/Toolkit工具包進行二次開發,采用動態鏈接庫(DLL)方式來實現Pro/E系統、Pro/Toolkit應用程序與VC++應用程序三者之間的通信。這種方法程序運行速度快并且兼容性好。
原子滑車相關零部件的參數化設計過程可分為三個主要步驟:運用Pro/E建立原子滑車零部件的基本模型,系統整體界面設計,數據庫設計。
原子滑車中的相關零部件可以分為標準件和非標準件。標準件是指采用國家標準和行業標準的零件。非標準件主要有底盤、車體、輪架、連接器、承重輪、底輪、側導向輪、壓肩安全杠和防倒裝置等。對于標準件及重復性高、相似性大的零部件,可以使用原始樣本零件(Generic part)及族表來簡化建模工作。
在建立原子滑車相關零部件三維模型的時候,可以利用樣本零件和族表來代表同一類型或相似類型的零件。需要該零件的時候只要調出族表內其名稱,便可以自動生成一個按照族表所示尺寸比例的零件。Pro/E中的族表是相似零件、組件或特征的集合,集合中的元素在大小或詳細特征等一兩個方面略有不同。使用族表可以從零件文件中生成各種相似的零件,而沒必要去重新建模,節省時間又節省保存文件所需的硬盤空間[2]。
族表本質上是電子數據表,由行和列組成。可以創建和修改族表。族表包含:基本對象,族的所有成員都建立在它的基礎上;尺寸和參數,特征數,自定義特征名,組件成員名都被選作是表驅動的(以后稱之為項目);由表產生的所有族成員(即實例)的名稱和每一個表驅動項目的相應值。
行包含實例及其相應的值;列用于項目。列標題包括實例名和表所選擇的所有尺寸、參數、特征名、成員和組的名稱。尺寸用名稱列出,相關的符號名(如果有的話)列在它下面的線上。參數也用其名稱列出。特征按特征編號列出,其下面的行顯示相關的特征類型或特征名稱。
原始樣本模型位于表的第一行。原始樣本模型只能通過修改真實零件,隱藏或恢復特征來改變;不能通過編輯族表來改變原始樣本模型。
對于每一個實例,可以定義是否在實例中應用特征、參數、或組件名。其方法是通過指出它是否出現在實例中(Y或N),或提供一個數值(如果是尺寸的話)來實現。所有尺寸單元必須有一個相對應的值,可以是一個數或星號(*),星號(*)則表示使用原始樣本模型的值。對于每一個實例來說,沒有包含在族表中的所有原始樣本模型特性都自動生成。
運用Pro/Toolkit二次開發技術在Pro/E中添加菜單有兩種不同的方法。方法之一是向Pro/E的菜單欄中添加菜單條;另一方法則是向菜單管理器中添加模式菜單[3]。此處采取第一種方法向Pro/E的菜單欄中添加菜單條。
創建菜單條的方法是直接調用ProMenubarAdd()函數向Pro/E添加所需的菜單,同時建立新建菜單的信息文件。信息文件屬于ASCII碼文件,其中包含有菜單項以及菜單項提示等信息,可以用字處理軟件或VC++集成開發環境來建立,要求以純文本格式保存。該信息文件每四行為一組,第一行是Pro/E系統可識別的關鍵字,關鍵字必須與使用該信息文件函數中的相關字符串相同;第二行是在菜單項或菜單項提示上顯示的文字;第三行是另一語言的譯文,可以空著;第四行是當前的Pro/E版本,也可以空著不填。例如:在user_initialize()初始化函數中添加以下代碼:
ProError status=PRO_TK_NO_ERROR;
ProFileName MsgFile;
ProStringToWstring(MsgFile,"TKMessage.txt"
);
uiCmdCmdId LocPinPushButton_cmd_id,LocKey-PushButton_cmd_id,
VBlockPushButton_cmd_id,HandLocPushButton_cmd_id;
ProMenubarMenuAdd("StdPartLibMenuBar","MainMenu","Utilities",PRO_B_TRUE,MsgFile);
之后,在信息文件中加入以下菜單項信息:
MainMenu
StdPartLib
零部件庫
#
便在Pro/E菜單欄“工具”菜單右側添加了一個菜單項——“零部件庫”。同理可以用ProMenubarmenuMenuAdd()函數向“零部件庫”菜單項下面添加下拉式子菜單。之后可以調用Pro/Toolkit下的ProMenubarmenuPushbuttonAdd()函數來設置菜單的相應動作。然后制作Makefile工程文件,該文件包含了生成的可執行文件或動態鏈接庫的名稱,如果采用多進程工作模式,則需要將源文件編譯生成可執行文件,如果采用動態鏈接庫工作模式,則要將源文件生成動態鏈接庫。此處采用動態鏈接庫模式,在VC++環境下編譯調試該動態鏈接庫后即生成Pro/Toolkit應用程序。該應用程序在Pro/E中運行前要進行注冊。注冊文件用來向Pro/E系統傳遞應用程序的信息,格式如下:
name<應用程序名稱>
startup<工作模式Spawn或dll>
exec_file<生成的可執行文件或動態鏈接庫的位置>
text_dir<菜單文件和窗口信息文件位置>
revision<所使用的Pro/E版本號>
end<結束>
應用程序可以手工注冊也可以自動注冊。手工注冊要在啟動Pro/E之后在“工具”菜單下選擇“輔助應用程序”子菜單,之后在彈出的對話框中單擊“注冊”按鈕注冊即可。自動注冊要將該注冊文件以protk.dat保存并放在Pro/E的啟動目錄下,運行Pro/E后,注冊文件中的Pro/Toolkit應用程序就可以自動注冊。注冊成功之后單擊“啟動”按鈕便可以運行用戶的應用程序。
對話框是應用軟件不可缺少的用戶界面之一。Pro/E中有兩種完全不同的對話框設計方法:一種方法是利用Pro/Toolkit提供的用戶接口對話框技術,可以設計出與Pro/E系統具有相同風格的對話框。該方法可以充分利用Pro/Toolkit提供的用戶對話框操作函數和Pro/E資源設計出與Pro/E界面風格一致的對話框。但是該技術是用文本文件的形式來定義對話框的,不能直觀地反映界面的布局,設計、修改和調試都非常困難。另一種方法是在VC++環境中采用微軟基礎類庫(MFC:Microsoft Foundation Class)技術來設計對話框,該方法“所見即所得”,非常直觀。VC++中使用MFC可視化技術創建對話框過程如下:先使用應用程序向導AppWizard創建Pro/Toolkit應用程序基本框架,之后在AppWizard創建的并與工程文件同名的CPP文件中添加user_initializ()和user_terminate()函數,最后在VC集成開發環境選擇“insert”菜單中“Resourse”菜單項的“insertResourse”對話框來創建對話框。圖1所示為利用MFC技術設計的對話框。

圖1 用MFC技術設計的對話框
在建立原子滑車常用零部件庫的過程中,各個零部件的參數值各不一樣,需要有一個統一管理的模塊對參數值進行管理。因此,要為每一個零部件建立一張參數表,然后在數據庫中集中管理。該數據庫較為簡單,可以采用Microsoft Access。訪問數據庫的方式如下:
ODBC(Open Database Connectivity),開放數據庫互連。ODBC是上個世紀八十年代末九十年代初出現的技術,它為編寫關系數據庫的客戶軟件提供了一種統一的接口。ODBC提供一個單一的API,可用于處理不同數據庫的客戶應用程序。使用ODBC API的應用程序可以與任何具有ODBC驅動程序的關系數據庫進行通信。
DAO(Data Access Object),數據訪問對象。DAO就是一組Microsoft Access/Jet數據庫引擎的COM自動化接口。DAO不像ODBC那樣是面向C/C++程序員的,它是微軟提供給Visual Basic開發人員的一種簡單的數據訪問方法,用于操縱Access數據庫。
RDO(Remote Data Object),遠程數據對象。由于RDO直接調用ODBC API,而不是像DAO那樣通過Jet引擎,所以可以為使用關系數據庫的應用程序提供更好的性能。
OLE DB,對象鏈接與嵌入數據庫。OLE DB在兩個方面對ODBC進行了擴展:①OLE DB提供了一個數據庫編程的COM接口;②OLE DB提供了一個可用于關系型和非關系型數據源的接口。OLE DB的兩個基本結構是OLE DB提供程序(Provider)和OLE DB用戶程序(Consumer)。
ADO(ActiveX Data Object),ActiveX數據對象,它建立在OLE DB之上。ADO是一個OLE DB用戶程序。使用ADO的應用程序都要間接地使用OLE DB。ADO簡化了OLE DB,提供了對自動化的支持,使得像VBScript這樣的腳本語言也能夠使用ADO訪問數據庫。
由于ADO具有面向對象的特點,利用ADO技術來訪問訪問數據庫,其實就是利用ADO的對象來操縱數據庫,此處用到的ADO的三個核心對象。其一是Connection對象,它表示了到數據庫的連接,管理應用程序和數據庫之間的通信。Recordset和Command對象都有一個ActiveConnection屬性,該屬性用來引用Connection對象。另一個是Command對象,它被用來處理重復執行的查詢,或處理需要檢查在存儲過程調用中的輸出或返回參數的值的查詢。第三個就是Recordset對象,它被用來獲取數據。Recordset對象存放查詢的結果,這些結果由數據的行(稱為記錄)和列(稱為字段)組成。每一列都存放在Recordset的Fields集合中的一個Field對象中。如此便實現了用戶應用程序與數據庫之間的數據通信,即VC++與Microsoft Access數據庫之間的數據通信。
原子滑車的結構相當復雜,設計過程中如果要制造實物樣機需要好幾個月的時間,在Pro/E下通過二次開發技術,設計人員可以直接選擇所需的零部件(如圖2所示為自動生成的側導輪軸),能夠快速實現原子滑車相關零部件的設計更新以及裝配干涉檢查等,從而減少設計人員的工作量,縮短設計周期,降低企業開發成本。該方法同樣適用于其他游樂設施的快速數字化設計。

圖2 自動生成的部件圖
[1] Shih Zen-Chung.Proceedings-Virtual Reality Annual International Symposium[J].Virtual roller coaster,2000(3):225-232.
[2] 鐘建琳.Pro/Engineer典型機械設計[M].北京:機械工業出版社,2002.
[3] 李世國.Pro/TOOLKIT程序設計[M].北京:機械工業出版社,2003.