本文介紹了以C,C++語言為工具,在Pro/ENGINEER上利用Pro/TOOLKIT進行藥筒快速建模二次開發的方法,並給出了藥筒快速建模快速設計應用實例。
【關鍵字】 註冊檔? 藥筒? 特徵? 快速建模
1 引言
??? 傳統的藥筒設計是一個相當煩瑣的過程,設計人員被動地往返於公式和手冊之間,借助計算器一點一點地計算。這當中有任何失誤都必須從頭再來,即使計算過程中 沒有任何失誤,當計算結果不合適時,一切也必須從頭再來。一個熟練的設計人員,在藥筒設計過程中,簡單的計算一遍就需要一個星期以上時間。如何使這一設計 過程變的簡單、直觀,對設計人員來說十分迫切。針對這一問題,本文給出了基於Pro/ENGINEER快速建模並結合炮用發射藥筒理論設計的約束條件,給 出了快速設計的方法及實例。
2 炮用發射藥筒結構分析及建模的約束方程
?
??? 藥筒的設計與火炮、彈丸及裝藥設計密切相關。本文以配製式火炮為例。藥筒的設計主要受藥室形狀及彈丸結構限制[1]。
???????????? 圖 1 火炮藥室結構示意圖?????????????
主要結構尺寸計算公式如下:
f1 :? Dk=Dd-2U0k???? f2 :? Lk=(0.20 ? 0.30)d???? f3 :? d k=Dk-2tk
f4 :? Dy=Dj????????? f7 :? Dj=Da-2U0j??????????? f8 :? Ly=La
f9 :? td=(0.06 ? 0.15)Dj???????????????????????? f10 : ty=Sp-x0
式中:
Dk—筒口部外徑;?????????????????? U0k—口部初始間隙;
dk—口部內徑;??????????? la —接際部初始間隙;???????????
Dj—接際部直徑;?????????????????? Lk—口部長度
U0j—接際部初始間隙;????????????? Ly—筒體外部長度
td—底部厚度;??????????????????? ty.—底緣厚度;
Sp—炮栓鏡面至藥室尾端面距離;??? x0—藥筒地平面與栓體鏡面的初始間隙;
??? 這些方程中共有12個已知參數(Dd、U0k、d、Dj、U0x、lb、la、Da 、U0j? 、La、Sp、x0)和8個未知參數(Dk、dk、Dy、Dj、Ly、td、ty、Lk),已知參數由設計者給定。當改變了已知參數時未知參數也隨之改 變。????????????????????
??? 可以通過約束圖利用圖解法解出未知變數[2]。藥筒的結構尺寸示意圖如圖3所示。
圖2 方程約束網路圖
圖3 藥筒的結構尺寸示意圖
3 快速建模實現方法
??? 快速建模就是通過輸入參數,由Pro/ENGINEER系統快速產生模型的過程,模型的相關屬性也可自動給出。Pro/ENGINEER提供了強大的用戶 二次開發套裝程式Pro/Toolkit,通過它可以直接對Pro/ENGINEER的資料庫進行操作。本文即以Pro/Toolkit為開發工具,實現了 藥筒的快速設計與建模。Pro/ENGINEER的快速建模二次開發包括以下幾部分[3]。
3.1? 使用者介面
??? 使用者介面是人機交互的介面,它包括功能表及功能表檔兩部分。菜單檔副檔名為*.mnu或*.aux。*.mnu功能表完全獨立於已有菜單,*.aux則附加於已有菜單。功能表檔有固定格式,每組資料分三行,每一個功能表按鈕對應一組資料。菜單檔為純文字檔。
3.2? 資訊檔
??? 資訊檔包括了類型無關功能表以及資料登錄提示等所有文本資訊,它和功能表檔一樣,也是使用表單的形式,每四行為一組。使用表結構的好處是當需要改動程式顯示時,可以只改動資訊檔,而不必改動原程式。
3.3? 程式介面
在Pro/Toolkit中,其函數結構一般如下:
User_Appone()??????? {????????????? }??????????? 使用者功能函數
User_Apptwo()??????? {????????????? }
......
User_initialize()?????? {?? ......?????? }?????????? 程式入口
User_terminate()?????? {???? ......???? }??????????? 程式出口
??? 其中,入口函數和出口函數是必須的,其他函數則是使用者定義函數,用以實現一定的功能。
3.4? 註冊檔
??? 註冊檔用以指明程式運行模式、資源位置以及程式運行版本等。其中,運行方式包括多執行緒和動態連接庫兩種。第一種方法的好處是調試比較容易。第二種方法的優點是運行速度較快,生成的檔比較小。
3.5? 編譯平臺
??? 程式的編譯需要協力廠商編譯平臺,如TC、Mircosoft C等。選用了Mircosoft公司的Visual C++ 6.0作為編譯平臺。利用Visual C++ 6.0的強大功能使得資料管理方便,調試輕鬆直觀[4]。
4 藥筒的快速建模
??? (1)在參數輸入方面,使用了功能表結合對話方塊的方式,參數輸入方便直觀。功能表結構如圖4所示。Yaotong Design是在Pro/ENGINEER的Part功能表上添加的系統功能表,這樣既可以實現用戶特定功能,又可以利用Pro/ENGINEER平臺的強大 功能,方便用戶設計。在模型的實現方面,採用了基於UDF的二次開發技術,可以顯著地降低開發的工作量,提高開發靈活性。
圖4 藥筒設計功能表系統
??? (2)模型的介面程式和實現程式。以下為藥筒快速建模程式入口和出口,它註冊了功能表檔以及回應函數。
user_initialize()
{?int menu_id ,err;
ProMenuFileRegister("PART","part.?????? mnu",&menu_id);???????
ProMenuAuxfileRegister("PART","part.aux",&menu_id);????????????????????????
err=ProMenubuttonActionSet("part","_YaotongDesign",(ProMenubuttonAction)UserYaotongSystem,NULL,0);????????????????
return(0); }
void user_terminate(){} ;?
以下為藥筒建模實現程式,它定義了UDF檔及驅動參數等。
UserYaotongCreate(){? ......
ProStringToWstring(data.name,"yaotongudf.gph");???????? 指定UDF檔
?data.n_var_dims=15;
?data.var_dims=(Pro_udf_var_dim*)calloc(15,sizeof(Pro_udf_var_dim));
?ProStringToWstring(data.var_dims[0].name,"YTJ_zg");???變數賦值
?data.var_dims[0].type=PROUDFVAR_DIM;
?data.var_dims[0].value=_YTJ_zg;??
??? ......
?data.n_references=0; ???????指定參考基準????
?data.dependency=PROUDFDEP_INDEPENDENT;????指定模型獨立性
?prodb_create_group(p_model,&data,NULL,NULL,0);???創建模型
?ProWindowRepaint(PRO_VALUE_UNUSED);????顯示模型
?free(data.var_dims);
?return(0);? }
通過以上方法產生的模型如圖5所示。
圖5 藥筒實體模型
圖6 藥筒幾何參數輸入介面
??? 在藥筒模型生成以後,可以通過以下兩種方法修改編輯藥筒的尺寸:(1)可以直接用滑鼠按兩下需要修改的特徵,選中需要修改的尺寸即可進行互動式尺寸修改和編 輯。修改後的效果可以迅速從模型上反映出來。(2)通過幾何參數輸入對話方塊輸入要修改結構的尺寸數值來完成對尺寸的修改。參數輸入對話方塊如圖6所示,直接 輸入需要修改參數的新數值即可。???????????????????????????????????????????????
5 結束語
??? 利用快速建模技術,可以大幅度提高設計效率,減輕設計人員的勞動強度,縮短產品設計週期,可使產品的設計變的直觀、輕鬆,可在產品設計的初期易於發現設計缺陷。產品可以方便地通過PDM系統進行管理。??????








