国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Pro/E二次開(kāi)發(fā)的余量求解應(yīng)用程序設(shè)計(jì)

2020-11-12 10:38李文靜干為民
關(guān)鍵詞:二次開(kāi)發(fā)葉輪菜單

李文靜 干為民 徐 波

1(江蘇省特種加工重點(diǎn)實(shí)驗(yàn)室(常州工學(xué)院) 江蘇 常州 213032) 2(常州大學(xué)機(jī)械工程學(xué)院 江蘇 常州 213164)

0 引 言

常用的CAD/CAM軟件功能多樣且強(qiáng)大,但不能滿足特定用途的設(shè)計(jì)要求。若能基于此類軟件進(jìn)行針對(duì)產(chǎn)品的二次開(kāi)發(fā),將能顯著提升現(xiàn)有的生產(chǎn)效率。 “二次開(kāi)發(fā)”就是基于類似UG、Pro/E的軟件系統(tǒng),開(kāi)發(fā)出有針對(duì)性的,將軟件本地化的程序的過(guò)程。目前,國(guó)內(nèi)外有許多專家學(xué)者都對(duì)Pro/E的二次開(kāi)發(fā)進(jìn)行了研究。張峰[1]以弧面狀的凸輪機(jī)械手產(chǎn)品為研究對(duì)象,利用Pro/Program模塊對(duì)Pro/E進(jìn)行二次開(kāi)發(fā),實(shí)現(xiàn)了產(chǎn)品模型的結(jié)構(gòu)參數(shù)化設(shè)計(jì),提高了設(shè)計(jì)效率和設(shè)計(jì)質(zhì)量。王冰冰等[2]研究了Pro/E軟件二次開(kāi)發(fā)的包裝機(jī)械的參數(shù)化設(shè)計(jì)和實(shí)施方法,通過(guò)在系統(tǒng)中輸入?yún)?shù),可以自動(dòng)生成三維實(shí)體模型和二維工程圖,從而提高設(shè)計(jì)效率。劉穎等[3]研究了Pro/E二次開(kāi)發(fā)在圓柱齒輪減速器建模中的應(yīng)用,并闡述了Pro/Toolkit二次開(kāi)發(fā)的基本步驟,詳細(xì)介紹了源文件編譯,可執(zhí)行文件的生成、注冊(cè)和運(yùn)行等關(guān)鍵技術(shù)。Hsu等[4]以Pro/E軟件為平臺(tái),通過(guò)編程C語(yǔ)言開(kāi)發(fā)了一套裝配設(shè)計(jì)分析和產(chǎn)品概念設(shè)計(jì)系統(tǒng),系統(tǒng)通過(guò)五個(gè)模塊實(shí)現(xiàn)了自動(dòng)化產(chǎn)品。Haapala等[5]利用Pro/E建立了頭骨的三維模型,并賦予其質(zhì)量屬性,如密度、表面積和慣性矩,然后編制了相應(yīng)的Pro/Toolkit應(yīng)用程序以標(biāo)記兩個(gè)肌肉集合的位置,最后創(chuàng)建了一個(gè)3D同胚掃視眼和頭部運(yùn)動(dòng)系統(tǒng)。

電解加工具有工具無(wú)損耗和加工過(guò)程無(wú)切削應(yīng)力的特性,故經(jīng)常采用該方式加工復(fù)雜的葉輪類零件[6]。整體葉輪粗加工后,其葉片呈不規(guī)則曲面,與預(yù)期達(dá)到的圖紙上的尺寸還有一定的差距。本文二次開(kāi)發(fā)的模塊程序就是為了簡(jiǎn)化測(cè)量加工后零件余量大小,從而生成誤差報(bào)告,為后續(xù)的加工提供了很大的便捷。二次開(kāi)發(fā)的程序不僅可以縮短測(cè)量的周期,而且大大提高測(cè)量的精度,更是后續(xù)加工過(guò)程的一個(gè)重要的環(huán)節(jié)。

1 Pro/E二次開(kāi)發(fā)方法及工作模式

Pro/E軟件是PTC在美國(guó)開(kāi)發(fā)的3D設(shè)計(jì)軟件,不僅具有參數(shù)化、相關(guān)化的特點(diǎn),而且具有更加細(xì)致而強(qiáng)大的設(shè)計(jì)、分析和制造功能,應(yīng)用比較廣泛[7]。其二次開(kāi)發(fā)主要有基于Pro/Toolkit、 Automation GATEWAY、J-Link、Pro/Web Link、VB API的五種二次開(kāi)發(fā)方法。本文選擇基于 Pro/Toolkit的二次開(kāi)發(fā)方法,該方法不僅可以自動(dòng)建模,還可以集成需要訪問(wèn)Pro/E數(shù)據(jù)或操作的外部應(yīng)用程序,而且可以擴(kuò)展軟件用戶界面,讓定制的流程無(wú)縫嵌入到用戶界面中[8]。

Pro/Toolkit有異步和同步兩種工作模式。異步模式的優(yōu)點(diǎn)是Pro/Toolkit應(yīng)用程序可以在Pro/E系統(tǒng)關(guān)閉時(shí)單獨(dú)運(yùn)行,但缺點(diǎn)是其程序代碼復(fù)雜且運(yùn)行速度較慢,因此通常不使用異步模式。在同步模式下,Pro/Toolkit應(yīng)用程序與Pro/E系統(tǒng)必須同步運(yùn)行,并且在Pro/E系統(tǒng)關(guān)閉時(shí)無(wú)法運(yùn)行。同步模式分為DLL和多進(jìn)程模式,Pro/Toolkit和Pro/E集成時(shí)采用的標(biāo)準(zhǔn)方法就是DLL模式[9]。由于Pro/Toolkit應(yīng)用程序在Pro/E系統(tǒng)上運(yùn)行,所以一般采用同步模式。

2 余量求解二次開(kāi)發(fā)過(guò)程

2.1 二次開(kāi)發(fā)設(shè)計(jì)流程

圖1為Pro/E二次開(kāi)發(fā)的余量求解的設(shè)計(jì)流程圖。首先,在安裝好的Pro/Toolkit中對(duì)DLL文件進(jìn)行創(chuàng)建和設(shè)置,其中包含關(guān)鍵的“庫(kù)文件”設(shè)置,若設(shè)置不對(duì)或缺少會(huì)導(dǎo)致后期出錯(cuò)。在二次開(kāi)發(fā)的整個(gè)流程中,最為關(guān)鍵的就是程序編譯,程序編寫主要分為三大模塊:導(dǎo)入模型、導(dǎo)入數(shù)據(jù)、誤差分析計(jì)算。其中誤差分析是本程序二次開(kāi)發(fā)的核心,其目的是對(duì)導(dǎo)入點(diǎn)進(jìn)行信息收集(主要是坐標(biāo)屬性信息),對(duì)葉片曲面進(jìn)行分解(可以看成無(wú)數(shù)的點(diǎn)組成),比對(duì)點(diǎn)到葉片距離最近的點(diǎn),并拾取出來(lái),轉(zhuǎn)換成點(diǎn)到點(diǎn)的距離計(jì)算,并得出測(cè)量結(jié)果。最后只要導(dǎo)入原設(shè)計(jì)模型和三坐標(biāo)測(cè)得的云點(diǎn)數(shù)據(jù),就可以直接計(jì)算出加工后零件尺寸與圖紙?jiān)O(shè)計(jì)尺寸的誤差,同時(shí)生成誤差數(shù)據(jù)表。

圖1 總體設(shè)計(jì)流程圖

2.2 二次開(kāi)發(fā)程序的準(zhǔn)備工作

在二次開(kāi)發(fā)工具包Pro/Toolkit安裝成功的基礎(chǔ)上,需創(chuàng)建和配置DLL文件。創(chuàng)建DLL文件需先創(chuàng)建一個(gè)項(xiàng)目MFC DLL文件,新建一個(gè)名稱AnalyticalTools的解決方案后完成MFC DLL文件的創(chuàng)建。然后,設(shè)置包含文件和庫(kù)文件,在“配置屬性”中“VC++目錄”中添加“包含目錄”,如圖2所示。將庫(kù)文件添加到“顯示以下內(nèi)容的目錄”中,如圖3所示,編輯“預(yù)處理器定義”,添加 PRO_USE_VAR_ARGS。最后,編輯“附加依賴庫(kù)”,完成二次開(kāi)發(fā)的準(zhǔn)備工作。

圖2 添加包含目錄

圖3 添加庫(kù)文件

2.3 創(chuàng)建菜單按鈕

1) 程序頭文件。在主文件中需添加Pro/Toolkit頭文件,常用的頭文件亦可添加,這樣無(wú)須在添加新的CPP文件時(shí)設(shè)置一次頭文件。如果使用了Pro/Toolkit對(duì)象函數(shù),則應(yīng)用程序必須包含ProToolkit.h頭文件。

2) 菜單按鈕的創(chuàng)建。余量求解的程序中有三個(gè)按鈕,分別是“加載葉輪模型”、“添加云點(diǎn)數(shù)據(jù)”和“點(diǎn)面測(cè)量分析”。菜單按鈕的創(chuàng)建也分為三個(gè)部分:(1) 添加菜單按鈕;(2) 讀取信息文本文件;(3) 添加父菜單。最后編寫信息文本文件,即按鈕的名稱。創(chuàng)建完成后如圖4所示。

int AnalyticalToolsmenu::menuAddexcute()

{return menuAdding();

}

//添加菜單按鈕

int AnalyticalToolsmenu::menuAdding()

{

OTK::pfcUICommand uicmd;

uicmd.SetMsgFile(_T(″AnalyticalTools_msg.txt″));

//讀取信息文本文件

uicmd.parent_designate(″AnalyticalToolsMenubar″,″AnalyticalTools_Menubar″,″Utilities″);

//添加父菜單

//信息文本文件:

AnalyticalTools_Menubar

Creo2 Wizard

#

AnalyticalToolschildmenu0

AnalyticalToolschildmenu0

加載葉輪模型

#

?

圖4 菜單按鈕的創(chuàng)建

2.4 導(dǎo)入模型模塊

“加載葉輪模型”按鈕的開(kāi)發(fā)其實(shí)質(zhì)是對(duì)原有功能“打開(kāi)文件”的調(diào)用,先添加菜單按鈕,再去調(diào)用已有函數(shù)按鈕ProCmdModelOpen,可以實(shí)現(xiàn)打開(kāi)選擇模型的模塊。

uicmd.Designate(″AnalyticalTools_child_action0″,″AnalyticalToolschildmenu0″,″AnalyticalToolschildmenu0-help″,″button.gif″,AnalyticalToolschildmenu0action);

//添加菜單按鈕0

void Designate(IN CharPtr action_name,IN CharPtr Label,IN CharPtr pHelp,IN CharPtr icon,IN MyFunction func,IN MyuiCmdAccessFn acc=uiAccess )

//對(duì)Designate的定義

//菜單按鈕0的主函數(shù):

extern ProError AnalyticalToolsmenu::AnalyticalToolschildmenu0action()

{

return ProMacroLoad(L″~Command ′ProCmdModelOpen′;″);

//調(diào)用函數(shù)按鈕ProCmdModelOpen使用“摘要”樣式

}

2.5 導(dǎo)入點(diǎn)云文件模塊

導(dǎo)入點(diǎn)云文件模塊其實(shí)質(zhì)和打開(kāi)模型模塊的實(shí)質(zhì)相似,是對(duì)按鈕“導(dǎo)入”的調(diào)用,故與打開(kāi)模型模塊程序編寫類似,只是改變要調(diào)用的函數(shù)按鈕。

exter ProError AnalyticalToolsmenu::AnalyticalToolschildmenu1action()

{return ProMacroLoad(L″~Command ′ProCmdModelImpAppendNew′;″);}

//調(diào)用已有函數(shù)按鈕

ProCmdModelImpAppendNew

2.6 余量求解模塊

余量求解模塊是本次二次開(kāi)發(fā)程序的核心,依舊是先創(chuàng)建菜單按鈕,這與先前模塊一致,再對(duì)菜單按鈕的主要函數(shù)進(jìn)行編寫這是關(guān)鍵一步。主要分為以下幾個(gè)部分:

(1) 對(duì)輸入的pts云點(diǎn)數(shù)據(jù)文件進(jìn)行添加:

ProError getfeats(ProFeature p_feat,ProError status,ProAppData app_data)

{ProArrayObjectAdd((ProArray*)app_data, PRO_VALUE_UNUSED, 1, &p_feat);

//將指定位置的對(duì)象添加到數(shù)組中,或者將一個(gè)對(duì)象追加

//到數(shù)組的末尾

return (status);}

(2) 對(duì)輸入點(diǎn)進(jìn)行特征收集:

ProError getfeats(ProFeature p_feat,ProError status,ProAppData app_data) {ProArrayObjectAdd((ProArray*)app_data, PRO_VALUE_UNUSED, 1, &p_feat);return (status);} extern ProError ProArrayObjectAdd (ProArray* p_array,int index,int n_objects,void* p_object); For example, if you want to insert one integer in an integer array, call the function as follows: ProArrayObjectAdd (&int_array, 0, 1, (void *)&int_val);

(3) 收集模型上云點(diǎn)投影的基準(zhǔn)點(diǎn):

ProError getGeoms(ProGeomitem*geom,ProError err,ProAppData data)

{err=ProArrayObjectAdd((ProArray*)data, PRO_VALUE_UNUSED, 1, (void*)geom);

return err;

}

ProError featGeomsCollect (ProFeature*feat, vector &p_POINT_data)

{ProError status;

ProFeature *p_data;

Int nsize=0;

status=ProArrayAlloc(0,sizeof(ProGeomitem),1,(ProArray*)&p_data);

status=ProFeatureGeomitemVisit(feat, PRO_POINT, (ProGeomitemAction)getGeoms, NULL, (ProAppData)&p_data);

//對(duì)項(xiàng)目進(jìn)行編譯

ProArraySizeGet((ProArray)p_data, &nsize);

for(int i=0; i < nsize; i++)

{p_POINT_data.push_back(p_data[i]);}

return ProArrayFree((ProArray*)&p_data);

}

(4) 對(duì)話框顯示數(shù)據(jù):

class SolidOutlineUI

public: static void UI_Create()

{char *dialog_name=″SolidOutline″;

int ActiveDialog_status;

ProError err;

err=ProUIDialogCreate(dialog_name,dialog_name );

(5) 對(duì)固定面ID的拾?。?/p>

ProError status;

ProSelection surface_sel, cansel;

ProModelitem surface_item;

//信息過(guò)濾函數(shù)

surface_item.id=11626;

//面ID

surface_item.type=PRO_SURFACE;

//模型曲面

surface_item.owner=Curmdl;

(6) 如果不成功手動(dòng)選取面:

status=ProSelectionAlloc(NULL, &surface_item, &surface_sel); if (status !=PRO_TK_NO_ERROR) {ProError err;ProSelection *p_Selection;int n_sels; err=ProSelect(″surface″,1, NULL, NULL, NULL, NULL,&p_Selection,&n_sels); if (err !=PRO_TK_NO_ERROR||n_sels==0)

{return;} ProSelectionCopy (p_Selection[0], &surface_sel); } vector p_POINT_data; for(int i=1; i

Pro2dPnt uv1, uv2;

Pro3dPnt xyz1, xyz2;

(7) 對(duì)應(yīng)面的最短距離坐標(biāo)顯示:

CString strHead[]={L“面坐標(biāo)”,L“點(diǎn)坐標(biāo)”,“測(cè)量值”};

int Widths[]={ 11, 11, 7 };

TableHeadSet(dialog, ″Table1″,p_POINT_data.size(), 3, strHead, Widths ); for(int i=0; i < p_POINT_data.size();i++) {status=ProSelectionAlloc(NULL, &p_POINT_data[i], &cansel);if (status==PRO_TK_NO_ERROR)

{status=ProSelectionDistanceEval(surface_sel, cansel, uv1, uv2, xyz1, xyz2, &distance);

//計(jì)算兩個(gè)點(diǎn)之間的距離

(8) 對(duì)話框輸出表格建立:

private:static ProError TableItemTextSet(IN char* dialog_name,

IN char* TitleName,

IN int row,

IN int column,

IN CString ItemText)

{

ProCharLine strtmp, strtmp1;

sprintf_s(strtmp,″col%d″,column);

sprintf_s(strtmp1,″row%d″,row);

return ProUITableCellLabelSet(dialog_name, TitleName, strtmp1, strtmp, (wchar_t*)(LPCTSTR)ItemText);}

//設(shè)置表單元格中包含的文本

(9) 對(duì)話框表格的劃分:

for(int i=0; i < column; i++)

{names[i]=(char *)calloc(PRO_NAME_SIZE, sizeof(char));

labels[i]=(wchar_t *)calloc(PRO_PATH_SIZE, sizeof(wchar_t));

sprintf_s(strtmp,″col%d″,i+1);strcpy(names[i],strtmp);

wcscpy(labels[i],(wchar_t*)(LPCTSTR)pHead[i]);

}

status=ProUITableColumnnamesSet(dialog_name, TitleName,column, names);

//表格分列

status=ProUITableColumnlabelsSet(dialog_name, TitleName,column, labels);

//設(shè)置表格中每列標(biāo)簽的名稱

ProUITableColumnwidthsSet(dialog_name, TitleName, column, pHeadWidths);

//設(shè)置表格中每列的寬度

?

ProUITableShowgridSet(dialog_name, TitleName, pGrid);

return status;}}

//表格顯示

2.7 其他輔助程序模塊

最后,還需編寫一些輔助程序如注冊(cè)文件程序和菜單圖標(biāo)程序。菜單圖標(biāo)如圖5所示。

NAME AnalyticalTools

startup dll

EXEC_FILE AnalyticalTools_dirPRO_MACHINE_TYPEAnalyticalTools.dll

TEXT_DIR AnalyticalTools_dir ext

allow_stop true

DELAY_START false

revision Wildfire

END

//注冊(cè)文件

Button.gif

//菜單圖標(biāo)文件

圖5 菜單圖標(biāo)

3 程序的配置與運(yùn)行

在以上設(shè)置完成基礎(chǔ)上,再在“資源管理器”項(xiàng)目中生成程序,生成程序如圖6所示,然后對(duì)程序進(jìn)行調(diào)試,調(diào)試結(jié)果如圖7所示。

圖6 生成程序

圖7 程序調(diào)試成功

調(diào)試成功后需進(jìn)行創(chuàng)建快捷啟動(dòng)方式,創(chuàng)建程序如下:

@echo off

set AnalyticalTools_dir=..

set lang=chs

start″″″E:Program FilesPTCCreo 2.0Parametricinparametric.exe″

Exit

//創(chuàng)建快捷方式

4 電解加工整體葉輪葉片余量求解實(shí)例

4.1 三坐標(biāo)機(jī)采集點(diǎn)云坐標(biāo)

運(yùn)用三坐標(biāo)測(cè)量機(jī)進(jìn)行數(shù)據(jù)采集, 得到點(diǎn)云數(shù)據(jù), 對(duì)粗加工后葉輪葉片用三坐標(biāo)機(jī)進(jìn)行劃線測(cè)量取點(diǎn),如圖8所示,得到點(diǎn)云坐標(biāo)。由于人為或隨機(jī)因素在測(cè)量過(guò)程中的影響,測(cè)量中存在不穩(wěn)定噪聲點(diǎn),文件需要點(diǎn)轉(zhuǎn)換,并且去除不滿足的點(diǎn)。對(duì)云點(diǎn)坐標(biāo)進(jìn)行處理并轉(zhuǎn)換成可以導(dǎo)入Pro/E點(diǎn)文件.pts格式文件,轉(zhuǎn)換后的.pts格式點(diǎn)文件如圖9所示。

圖8 劃線測(cè)量

圖9 處理后點(diǎn)云數(shù)據(jù)

4.2 余量求解實(shí)際應(yīng)用

針對(duì)電解加工后的整體葉輪葉片進(jìn)行余量求解,打開(kāi)“工具”菜單欄,子菜單為二次開(kāi)發(fā)程序菜單,包含“加載葉輪模型”“加載點(diǎn)云數(shù)據(jù)”“點(diǎn)面測(cè)量分析”三個(gè)按鈕。第一步,點(diǎn)擊按鈕“加載葉輪模型”,加載完成后如圖10所示。第二步,點(diǎn)擊“加載點(diǎn)云數(shù)據(jù)”即導(dǎo)入之前的.pts格式的點(diǎn)云文件,加載完成后如圖11所示。第三步,點(diǎn)擊“點(diǎn)面測(cè)量分析”,由于一個(gè)葉片是由至少兩個(gè)曲面組成,所以葉輪葉片存在正面與反面的誤差求解。選擇需要測(cè)量的曲面,葉片正反面余量求解的結(jié)果如圖12所示。

圖10 加載葉輪模型

圖11 加載點(diǎn)云數(shù)據(jù)

圖12 整體葉輪葉片余量求解結(jié)果

4.3 余量求解結(jié)果分析

一般誤差分析方法,針對(duì)簡(jiǎn)單的有規(guī)則形狀零件可以直接用現(xiàn)有的測(cè)量工具測(cè)量,但數(shù)據(jù)不精確,而復(fù)雜的零件如整體葉輪葉片之類曲面結(jié)構(gòu)較多的零件會(huì)利用算法來(lái)進(jìn)行測(cè)量,工作量較大且易出錯(cuò)。相比之下,二次開(kāi)發(fā)余量求解程序響應(yīng)快,只需很短的時(shí)間就可以得到結(jié)果并且不易出錯(cuò)。

5 結(jié) 語(yǔ)

本文以Pro/E2.0為平臺(tái),基于開(kāi)發(fā)語(yǔ)言VC++6.0,以Pro/Toolkit為二次開(kāi)發(fā)工具,使用編譯平臺(tái)VS2010,開(kāi)發(fā)出一套能在Pro/E中實(shí)現(xiàn)粗加工模型到設(shè)計(jì)模型的余量計(jì)算的應(yīng)用程序,并成功地應(yīng)用在電解加工整體葉輪中,代替?zhèn)鹘y(tǒng)的誤差分析方法,大大縮短測(cè)量周期,提高加工效率,降低生產(chǎn)成本,成為后續(xù)加工設(shè)計(jì)的重要組成部分。

猜你喜歡
二次開(kāi)發(fā)葉輪菜單
大型絞吸挖泥船短排距葉輪研發(fā)及適應(yīng)性研究
AutoCAD 與PDMS 二次開(kāi)發(fā)在三維復(fù)雜形體設(shè)計(jì)建模上的應(yīng)用
高比速混流泵葉輪切割特性分析及試驗(yàn)研究
葉輪結(jié)構(gòu)對(duì)離心壓縮機(jī)性能的影響
半轉(zhuǎn)葉輪水輪機(jī)偏航機(jī)構(gòu)設(shè)計(jì)與優(yōu)化
中國(guó)新年菜單
淺談CAD軟件二次開(kāi)發(fā)的方法及工具
例談?wù)n本習(xí)題的“二次開(kāi)發(fā)”
本月菜單
ANSYS Workbench二次開(kāi)發(fā)在汽車穩(wěn)定桿CAE分析中的應(yīng)用