鐘建琳,常 城,王紅軍
(北京信息科技大學(xué),北京 100192)
原子滑車(又名過山車)作為游樂設(shè)備在我國已有很多游樂場所使用,盡管原子滑車在國內(nèi)的研究、制造不過十余年,但目前國內(nèi)已有一些單位如北京實寶來游樂設(shè)備制造有限公司、華北礦山冶金機械廠和上海煤炭機械研究所等具有生產(chǎn)原子滑車的能力。為縮短設(shè)計開發(fā)周期,提高設(shè)計效率,利用Pro/E軟件開發(fā)原子滑車相關(guān)零部件庫,這樣在設(shè)計某個零件或部件時,只需要輸入相關(guān)的參數(shù),系統(tǒng)能夠自動生成該零件或部件的三維模型,因此,可以減少重復(fù)勞動,提高設(shè)計效率。參數(shù)化是建庫的基礎(chǔ),美國PTC公司開發(fā)的CAD/CAM軟件Pro/E功能強大,在國內(nèi)外機械、汽車、家電、航空航天等領(lǐng)域得到廣泛應(yīng)用。該軟件近年來在我國的各企業(yè)正逐步地得到廣泛應(yīng)用,以尺寸驅(qū)動、基于特征、單一全關(guān)聯(lián)的數(shù)據(jù)庫等優(yōu)點深受廣大設(shè)計人員的推崇和喜愛。
原子滑車設(shè)備主要由主體滑行結(jié)構(gòu)、提升機、滑車、站臺、制動系統(tǒng)、氣動系統(tǒng)、電控系統(tǒng)、設(shè)備基礎(chǔ)組成[1]。原子滑車一般共有6節(jié)車廂,可坐24人,車輛間由連接軸聯(lián)接,車廂內(nèi)為每位乘客設(shè)有壓肩安全杠和二次安全帶,另外兩車中間還裝有2條φ12.5的鋼絲繩做安全保護?;囋O(shè)有承重輪、側(cè)導(dǎo)向輪、底輪和防倒裝置。從站臺上發(fā)車,經(jīng)過提升機,使滑車提升到一定高度,在勢能作用下,依靠慣性沿軌道滑行?;囘\行過程中產(chǎn)生的加速度、離心力及失重感使游客在驚險刺激的感覺中體現(xiàn)極限的樂趣。游樂設(shè)施原子滑車的設(shè)計屬于單件,為了提高設(shè)計和制造效率,迫切需要產(chǎn)品實現(xiàn)參數(shù)化設(shè)計。下面以滑車中的輪軸為例加以介紹。
根據(jù)原子滑車所要實現(xiàn)的運動情況將輪軸設(shè)計為三種,分別是承重輪軸、側(cè)導(dǎo)輪軸和側(cè)掛輪軸。承重輪軸是起承重的作用,并帶動車體在軌道上行駛,一般由大滑輪、支撐大滑輪的軸、滑輪與軸之間連接所用軸承、防塵圈、端蓋和罩等組成。側(cè)導(dǎo)輪軸是導(dǎo)向和承受轉(zhuǎn)彎時的離心力作用,側(cè)導(dǎo)輪軸一般包括大滑輪、支撐大滑輪的軸、小滑輪、支撐小滑輪的軸、軸承、防塵圈、端蓋和罩等。側(cè)掛輪軸是一個類似安全輪的作用,在小車翻越圓環(huán)時由于離心力的大小不同,軌道對小車施加的支持力的方向就不同,當(dāng)離心力比小車重力小時,小車會在重力作用下下落,這時側(cè)掛輪軸就起作用了。側(cè)掛輪軸的零部件與側(cè)導(dǎo)輪軸類似。
Pro/E下的二次開發(fā)有多種不同的方法:JLink、Pro/Toolkit、Pro/Program、族表、用戶自定義特征等等。其中,J-Link是PTC公司提供的二次開發(fā)工具,它是基于Java語言的,用戶可以通過Java編程從而實現(xiàn)在Pro/E中添加所需要的功能。Pro/Toolkit是PTC公司提供的基于Pro/E的開發(fā)工具包,支持在Windows操作系統(tǒng)中使用C和C++語言設(shè)計程序。它為用戶或第三方軟件商提供了龐大的C語言函數(shù)庫,用戶借助該庫可以通過C或C++程序代碼擴充Pro/E系統(tǒng)的功能,開發(fā)用戶自己的應(yīng)用程序模塊,可訪問Pro/E數(shù)據(jù)、實現(xiàn)與Pro/E的無縫集成,并滿足用戶的特殊要求。Pro/Program是Pro/E中由類似Basic的語言構(gòu)成的,Pro/E中的每個模型都有相應(yīng)的Pro/Program程序,用戶可修改該程序,系統(tǒng)運行修改過的程序后,可以通過人機交互來控制系統(tǒng)的參數(shù)、特征尺寸及是否顯示特征等。族表在Pro/E中是通過電子表格來管理的,是由表格驅(qū)動的,先將通用零件建立為父零件,然后在父零件的基礎(chǔ)上控制各參數(shù)來生成派生零件。由此可見族表主要用于管理具有相同或相近結(jié)構(gòu)的零件,特別是管理標(biāo)準(zhǔn)件。用戶自定義特征可用來建立特定產(chǎn)品中的特定結(jié)構(gòu),用戶可以根據(jù)產(chǎn)品特征來快速生成幾何模型。
原子滑車相關(guān)零部件的參數(shù)化設(shè)計綜合利用了Pro/E中的族表、Pro/Program功能和用戶自定義特征來建立零部件庫,然后通過數(shù)據(jù)庫管理相關(guān)數(shù)據(jù),采用VC++語言運用Pro/Toolkit工具包進行二次開發(fā),采用動態(tài)鏈接庫(DLL)方式來實現(xiàn)Pro/E系統(tǒng)、Pro/Toolkit應(yīng)用程序與VC++應(yīng)用程序三者之間的通信。這種方法程序運行速度快并且兼容性好。
原子滑車相關(guān)零部件的參數(shù)化設(shè)計過程可分為三個主要步驟:運用Pro/E建立原子滑車零部件的基本模型,系統(tǒng)整體界面設(shè)計,數(shù)據(jù)庫設(shè)計。
原子滑車中的相關(guān)零部件可以分為標(biāo)準(zhǔn)件和非標(biāo)準(zhǔn)件。標(biāo)準(zhǔn)件是指采用國家標(biāo)準(zhǔn)和行業(yè)標(biāo)準(zhǔn)的零件。非標(biāo)準(zhǔn)件主要有底盤、車體、輪架、連接器、承重輪、底輪、側(cè)導(dǎo)向輪、壓肩安全杠和防倒裝置等。對于標(biāo)準(zhǔn)件及重復(fù)性高、相似性大的零部件,可以使用原始樣本零件(Generic part)及族表來簡化建模工作。
在建立原子滑車相關(guān)零部件三維模型的時候,可以利用樣本零件和族表來代表同一類型或相似類型的零件。需要該零件的時候只要調(diào)出族表內(nèi)其名稱,便可以自動生成一個按照族表所示尺寸比例的零件。Pro/E中的族表是相似零件、組件或特征的集合,集合中的元素在大小或詳細(xì)特征等一兩個方面略有不同。使用族表可以從零件文件中生成各種相似的零件,而沒必要去重新建模,節(jié)省時間又節(jié)省保存文件所需的硬盤空間[2]。
族表本質(zhì)上是電子數(shù)據(jù)表,由行和列組成。可以創(chuàng)建和修改族表。族表包含:基本對象,族的所有成員都建立在它的基礎(chǔ)上;尺寸和參數(shù),特征數(shù),自定義特征名,組件成員名都被選作是表驅(qū)動的(以后稱之為項目);由表產(chǎn)生的所有族成員(即實例)的名稱和每一個表驅(qū)動項目的相應(yīng)值。
行包含實例及其相應(yīng)的值;列用于項目。列標(biāo)題包括實例名和表所選擇的所有尺寸、參數(shù)、特征名、成員和組的名稱。尺寸用名稱列出,相關(guān)的符號名(如果有的話)列在它下面的線上。參數(shù)也用其名稱列出。特征按特征編號列出,其下面的行顯示相關(guān)的特征類型或特征名稱。
原始樣本模型位于表的第一行。原始樣本模型只能通過修改真實零件,隱藏或恢復(fù)特征來改變;不能通過編輯族表來改變原始樣本模型。
對于每一個實例,可以定義是否在實例中應(yīng)用特征、參數(shù)、或組件名。其方法是通過指出它是否出現(xiàn)在實例中(Y或N),或提供一個數(shù)值(如果是尺寸的話)來實現(xiàn)。所有尺寸單元必須有一個相對應(yīng)的值,可以是一個數(shù)或星號(*),星號(*)則表示使用原始樣本模型的值。對于每一個實例來說,沒有包含在族表中的所有原始樣本模型特性都自動生成。
運用Pro/Toolkit二次開發(fā)技術(shù)在Pro/E中添加菜單有兩種不同的方法。方法之一是向Pro/E的菜單欄中添加菜單條;另一方法則是向菜單管理器中添加模式菜單[3]。此處采取第一種方法向Pro/E的菜單欄中添加菜單條。
創(chuàng)建菜單條的方法是直接調(diào)用ProMenubarAdd()函數(shù)向Pro/E添加所需的菜單,同時建立新建菜單的信息文件。信息文件屬于ASCII碼文件,其中包含有菜單項以及菜單項提示等信息,可以用字處理軟件或VC++集成開發(fā)環(huán)境來建立,要求以純文本格式保存。該信息文件每四行為一組,第一行是Pro/E系統(tǒng)可識別的關(guān)鍵字,關(guān)鍵字必須與使用該信息文件函數(shù)中的相關(guān)字符串相同;第二行是在菜單項或菜單項提示上顯示的文字;第三行是另一語言的譯文,可以空著;第四行是當(dāng)前的Pro/E版本,也可以空著不填。例如:在user_initialize()初始化函數(shù)中添加以下代碼:
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菜單欄“工具”菜單右側(cè)添加了一個菜單項——“零部件庫”。同理可以用ProMenubarmenuMenuAdd()函數(shù)向“零部件庫”菜單項下面添加下拉式子菜單。之后可以調(diào)用Pro/Toolkit下的ProMenubarmenuPushbuttonAdd()函數(shù)來設(shè)置菜單的相應(yīng)動作。然后制作Makefile工程文件,該文件包含了生成的可執(zhí)行文件或動態(tài)鏈接庫的名稱,如果采用多進程工作模式,則需要將源文件編譯生成可執(zhí)行文件,如果采用動態(tài)鏈接庫工作模式,則要將源文件生成動態(tài)鏈接庫。此處采用動態(tài)鏈接庫模式,在VC++環(huán)境下編譯調(diào)試該動態(tài)鏈接庫后即生成Pro/Toolkit應(yīng)用程序。該應(yīng)用程序在Pro/E中運行前要進行注冊。注冊文件用來向Pro/E系統(tǒng)傳遞應(yīng)用程序的信息,格式如下:
name<應(yīng)用程序名稱>
startup<工作模式Spawn或dll>
exec_file<生成的可執(zhí)行文件或動態(tài)鏈接庫的位置>
text_dir<菜單文件和窗口信息文件位置>
revision<所使用的Pro/E版本號>
end<結(jié)束>
應(yīng)用程序可以手工注冊也可以自動注冊。手工注冊要在啟動Pro/E之后在“工具”菜單下選擇“輔助應(yīng)用程序”子菜單,之后在彈出的對話框中單擊“注冊”按鈕注冊即可。自動注冊要將該注冊文件以protk.dat保存并放在Pro/E的啟動目錄下,運行Pro/E后,注冊文件中的Pro/Toolkit應(yīng)用程序就可以自動注冊。注冊成功之后單擊“啟動”按鈕便可以運行用戶的應(yīng)用程序。
對話框是應(yīng)用軟件不可缺少的用戶界面之一。Pro/E中有兩種完全不同的對話框設(shè)計方法:一種方法是利用Pro/Toolkit提供的用戶接口對話框技術(shù),可以設(shè)計出與Pro/E系統(tǒng)具有相同風(fēng)格的對話框。該方法可以充分利用Pro/Toolkit提供的用戶對話框操作函數(shù)和Pro/E資源設(shè)計出與Pro/E界面風(fēng)格一致的對話框。但是該技術(shù)是用文本文件的形式來定義對話框的,不能直觀地反映界面的布局,設(shè)計、修改和調(diào)試都非常困難。另一種方法是在VC++環(huán)境中采用微軟基礎(chǔ)類庫(MFC:Microsoft Foundation Class)技術(shù)來設(shè)計對話框,該方法“所見即所得”,非常直觀。VC++中使用MFC可視化技術(shù)創(chuàng)建對話框過程如下:先使用應(yīng)用程序向?qū)ppWizard創(chuàng)建Pro/Toolkit應(yīng)用程序基本框架,之后在AppWizard創(chuàng)建的并與工程文件同名的CPP文件中添加user_initializ()和user_terminate()函數(shù),最后在VC集成開發(fā)環(huán)境選擇“insert”菜單中“Resourse”菜單項的“insertResourse”對話框來創(chuàng)建對話框。圖1所示為利用MFC技術(shù)設(shè)計的對話框。
圖1 用MFC技術(shù)設(shè)計的對話框
在建立原子滑車常用零部件庫的過程中,各個零部件的參數(shù)值各不一樣,需要有一個統(tǒng)一管理的模塊對參數(shù)值進行管理。因此,要為每一個零部件建立一張參數(shù)表,然后在數(shù)據(jù)庫中集中管理。該數(shù)據(jù)庫較為簡單,可以采用Microsoft Access。訪問數(shù)據(jù)庫的方式如下:
ODBC(Open Database Connectivity),開放數(shù)據(jù)庫互連。ODBC是上個世紀(jì)八十年代末九十年代初出現(xiàn)的技術(shù),它為編寫關(guān)系數(shù)據(jù)庫的客戶軟件提供了一種統(tǒng)一的接口。ODBC提供一個單一的API,可用于處理不同數(shù)據(jù)庫的客戶應(yīng)用程序。使用ODBC API的應(yīng)用程序可以與任何具有ODBC驅(qū)動程序的關(guān)系數(shù)據(jù)庫進行通信。
DAO(Data Access Object),數(shù)據(jù)訪問對象。DAO就是一組Microsoft Access/Jet數(shù)據(jù)庫引擎的COM自動化接口。DAO不像ODBC那樣是面向C/C++程序員的,它是微軟提供給Visual Basic開發(fā)人員的一種簡單的數(shù)據(jù)訪問方法,用于操縱Access數(shù)據(jù)庫。
RDO(Remote Data Object),遠(yuǎn)程數(shù)據(jù)對象。由于RDO直接調(diào)用ODBC API,而不是像DAO那樣通過Jet引擎,所以可以為使用關(guān)系數(shù)據(jù)庫的應(yīng)用程序提供更好的性能。
OLE DB,對象鏈接與嵌入數(shù)據(jù)庫。OLE DB在兩個方面對ODBC進行了擴展:①OLE DB提供了一個數(shù)據(jù)庫編程的COM接口;②OLE DB提供了一個可用于關(guān)系型和非關(guān)系型數(shù)據(jù)源的接口。OLE DB的兩個基本結(jié)構(gòu)是OLE DB提供程序(Provider)和OLE DB用戶程序(Consumer)。
ADO(ActiveX Data Object),ActiveX數(shù)據(jù)對象,它建立在OLE DB之上。ADO是一個OLE DB用戶程序。使用ADO的應(yīng)用程序都要間接地使用OLE DB。ADO簡化了OLE DB,提供了對自動化的支持,使得像VBScript這樣的腳本語言也能夠使用ADO訪問數(shù)據(jù)庫。
由于ADO具有面向?qū)ο蟮奶攸c,利用ADO技術(shù)來訪問訪問數(shù)據(jù)庫,其實就是利用ADO的對象來操縱數(shù)據(jù)庫,此處用到的ADO的三個核心對象。其一是Connection對象,它表示了到數(shù)據(jù)庫的連接,管理應(yīng)用程序和數(shù)據(jù)庫之間的通信。Recordset和Command對象都有一個ActiveConnection屬性,該屬性用來引用Connection對象。另一個是Command對象,它被用來處理重復(fù)執(zhí)行的查詢,或處理需要檢查在存儲過程調(diào)用中的輸出或返回參數(shù)的值的查詢。第三個就是Recordset對象,它被用來獲取數(shù)據(jù)。Recordset對象存放查詢的結(jié)果,這些結(jié)果由數(shù)據(jù)的行(稱為記錄)和列(稱為字段)組成。每一列都存放在Recordset的Fields集合中的一個Field對象中。如此便實現(xiàn)了用戶應(yīng)用程序與數(shù)據(jù)庫之間的數(shù)據(jù)通信,即VC++與Microsoft Access數(shù)據(jù)庫之間的數(shù)據(jù)通信。
原子滑車的結(jié)構(gòu)相當(dāng)復(fù)雜,設(shè)計過程中如果要制造實物樣機需要好幾個月的時間,在Pro/E下通過二次開發(fā)技術(shù),設(shè)計人員可以直接選擇所需的零部件(如圖2所示為自動生成的側(cè)導(dǎo)輪軸),能夠快速實現(xiàn)原子滑車相關(guān)零部件的設(shè)計更新以及裝配干涉檢查等,從而減少設(shè)計人員的工作量,縮短設(shè)計周期,降低企業(yè)開發(fā)成本。該方法同樣適用于其他游樂設(shè)施的快速數(shù)字化設(shè)計。
圖2 自動生成的部件圖
[1] Shih Zen-Chung.Proceedings-Virtual Reality Annual International Symposium[J].Virtual roller coaster,2000(3):225-232.
[2] 鐘建琳.Pro/Engineer典型機械設(shè)計[M].北京:機械工業(yè)出版社,2002.
[3] 李世國.Pro/TOOLKIT程序設(shè)計[M].北京:機械工業(yè)出版社,2003.