夏文杰 吳凱亮
摘 要:本文針對(duì)目前CAD軟件具備的三維尺寸標(biāo)注功能,結(jié)合整車廠對(duì)于零件尺寸測(cè)量的需求,基于三維標(biāo)注功能探討測(cè)點(diǎn)集成開(kāi)發(fā)系統(tǒng)設(shè)計(jì),詳細(xì)闡述了相關(guān)技術(shù),并通過(guò)實(shí)例測(cè)試驗(yàn)證了技術(shù)的可行性,以期為相關(guān)學(xué)者的研究提供參考。
關(guān)鍵詞:三維標(biāo)注;測(cè)點(diǎn);NX Open
中圖分類號(hào):TB21;TP391.72 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1003-5168(2018)20-0024-04
Research on Integrated Development of 3D Tagging
Function and Measuring Points
XIA Wenjie WU Kailiang
(SAIC General Motors Co., Ltd.,Shanghai 201206)
Absrtact: In view of the three dimensional dimensioning function of CAD software, this paper discussed the design of the integrated development system of measuring point based on the three-dimensional annotation function combined with the requirement of the whole vehicle factory for part size measurement, and expounded the related technology in detail, and validated the feasibility of the technology through the case test, in order to provide reference for the relevant scholars' research.
Keywords: three dimensional annotation;measurement point;NX Open
隨著計(jì)算機(jī)輔助繪圖技術(shù)的進(jìn)步,目前,產(chǎn)品的尺寸信息定義已經(jīng)從早期的手工繪圖轉(zhuǎn)變?yōu)橛?jì)算機(jī)二維繪圖。而CAD/CMA系統(tǒng)的廣泛應(yīng)用,則需要將產(chǎn)品的尺寸信息、制造工藝信息等標(biāo)注在三維模型上,通過(guò)產(chǎn)品三維模型將設(shè)計(jì)過(guò)程傳遞至生產(chǎn)加工過(guò)程,打通設(shè)計(jì)、制造和測(cè)量的三維數(shù)據(jù)鏈。
三維標(biāo)注技術(shù)改變了傳統(tǒng)以工程圖為主要制造依據(jù)的模式。而三維數(shù)字化實(shí)體模型作為輔助參考依據(jù)的制造模式,一方面可直觀表達(dá)產(chǎn)品的制造工藝信息;另一方面,使得三維實(shí)體模型成為生產(chǎn)制造過(guò)程的唯一依據(jù),避免了生產(chǎn)數(shù)據(jù)不一致、信息共享程度低、圖紙管理成本高等一系列問(wèn)題,引領(lǐng)了產(chǎn)品設(shè)計(jì)制造一體化的趨勢(shì)[1-3]。目前,主流CAD軟件均提供三維標(biāo)注功能,如UG的PMI模塊,CATIA的Functional Tolerancing & Annotation模塊,以及Solidworks的Dimxpert模塊等。
實(shí)際生產(chǎn)制造過(guò)程中,為了評(píng)價(jià)零件的尺寸狀態(tài),需要對(duì)零件的形面進(jìn)行測(cè)量。但是,由于目前測(cè)量設(shè)備的限制及出于經(jīng)濟(jì)性考慮,暫時(shí)難以完全實(shí)現(xiàn)。測(cè)點(diǎn)是根據(jù)圖紙尺寸的要求,結(jié)合生產(chǎn)工藝,用于監(jiān)控/反映產(chǎn)品和工藝尺寸特性的測(cè)量點(diǎn)。通過(guò)對(duì)零件具有尺寸要求的形面上測(cè)點(diǎn)的測(cè)量,來(lái)評(píng)價(jià)和反映零件的整體尺寸狀態(tài),可以提高測(cè)量效率,降低測(cè)量成本。測(cè)點(diǎn)的制作過(guò)程中需要輸入產(chǎn)品的尺寸信息,需要耗費(fèi)大量的人力成本,而且容易出現(xiàn)輸入信息錯(cuò)誤。基于此,本文基于三維標(biāo)注功能進(jìn)行測(cè)點(diǎn)集成開(kāi)發(fā)系統(tǒng)設(shè)計(jì)。
1 NX二次開(kāi)發(fā)工具簡(jiǎn)介
UG的二次開(kāi)發(fā)工具主要有:UG/Open API、UG/Open GRIP、UG/Open Menuscript和UG/Open UlStylertll。這4種開(kāi)發(fā)工具各有特點(diǎn)。
第一,UG/Open API 。UG/OPEN API又被稱User Function,其是一種基于C語(yǔ)言的NX二次開(kāi)發(fā)API,包含了多達(dá)3 000個(gè)的C函數(shù),又由于其是直接基于NX內(nèi)部代碼建立的,所以功能覆蓋率很高,適用于企業(yè)的大型復(fù)雜高級(jí)的二次開(kāi)發(fā),但其需要有C語(yǔ)言和軟件工程等技術(shù)的支持,相對(duì)地,學(xué)習(xí)難度也較大。
第二,UG/Open GRIP。UG/Open GRIP是一種交互式圖形編程語(yǔ)言,其程序具有很高的運(yùn)行效率,學(xué)習(xí)起來(lái)較為簡(jiǎn)單且不會(huì)常駐內(nèi)存中,這些特點(diǎn)使得得其到開(kāi)發(fā)人員的青睞。但是,其能實(shí)現(xiàn)的NX功能較小,所以只適用于一些簡(jiǎn)單的程序二次開(kāi)發(fā),有較大的局限性。
第三,UG/Open UIStyler。UG/Open UIStyler是用來(lái)創(chuàng)建對(duì)話框的專用模塊。使用UG/OpenUIStyle可以非常方便地、快捷地創(chuàng)建與UG風(fēng)格完全一致的對(duì)話框。UIStyle模塊所支持的控件種類豐富,且在儲(chǔ)存對(duì)話框文件的同時(shí),會(huì)自動(dòng)生成與對(duì)話框相對(duì)應(yīng)的后綴為.c文件和.h文件,大大節(jié)省了用戶的開(kāi)發(fā)時(shí)間。UG/OpenUIStyle最大的優(yōu)點(diǎn)在于開(kāi)發(fā)的對(duì)話框風(fēng)格與UG一致,符合用戶一貫的習(xí)慣[4]。
第四,UG/Open MenuScript。UG/Open Menuscript用來(lái)定制菜單的專用模塊,其允許用戶使用ASCII文件方便靈活地編輯UG系統(tǒng)的菜單,或?yàn)橛脩魟?chuàng)建的應(yīng)用程序定義自己的菜單。由于在二次開(kāi)發(fā)中的自定義菜單設(shè)計(jì)工具只有UG/Open MenuScript,因此,要設(shè)計(jì)一套完整的人機(jī)交互系統(tǒng),UG/Open MenuScript是開(kāi)發(fā)必用工具。
2 測(cè)點(diǎn)集成開(kāi)發(fā)系統(tǒng)設(shè)計(jì)
測(cè)點(diǎn)是根據(jù)圖紙的要求,結(jié)合生產(chǎn)工藝,用于監(jiān)控/反映產(chǎn)品和工藝尺寸特性的測(cè)量點(diǎn)。測(cè)點(diǎn)在NX里面用一個(gè)箭頭表示,建立在三維數(shù)模中邊、面、孔和槽等幾何元素上,測(cè)點(diǎn)屬性中需要輸入圖紙中的尺寸信息,如圖1所示。
2.1 算法流程圖
本系統(tǒng)的核心算法是測(cè)點(diǎn)自動(dòng)查找相關(guān)聯(lián)PMI信息的搜索算法。這是本文最為關(guān)鍵的部分,其流程圖如圖2所示。
具體步驟如下。①通過(guò)數(shù)模中生成的測(cè)點(diǎn)屬性,在程序中獲取測(cè)點(diǎn)關(guān)聯(lián)的幾何體,并且要智能地獲取其他相關(guān)的拓?fù)湫畔5]。例如,選擇一條邊時(shí),需要獲取其所屬的面和體。②基于測(cè)點(diǎn)關(guān)聯(lián)的數(shù)模,搜索PMI信息所在的部件,并且靜態(tài)打開(kāi)。這里涉及要用正則表達(dá)式進(jìn)行字符串匹配。③從PMI部件出發(fā),循環(huán)當(dāng)前部件中的PMI信息,并且建立以幾何元素為索引值的數(shù)據(jù)字典,保存在當(dāng)前內(nèi)存中[6]。需要注意的是,圖2中所說(shuō)的數(shù)據(jù)庫(kù)是指內(nèi)存中數(shù)據(jù)字典的結(jié)構(gòu)。④從數(shù)據(jù)字典出發(fā),去匹配當(dāng)前用戶選擇的幾何元素,從而獲取PMI信息。⑤利用NX的屬性賦值模塊,將相關(guān)PMI信息賦值到對(duì)應(yīng)的測(cè)點(diǎn)中[7]。
2.2 系統(tǒng)的代碼設(shè)計(jì)
2.2.1 全局變量的設(shè)置和調(diào)用。程序的參數(shù)化主要體現(xiàn)在變量的調(diào)用賦值上,程序中的全局變量設(shè)置至關(guān)重要[8-10]。以下2個(gè)全局變量分別表示當(dāng)前的工作部件及當(dāng)前的顯示部件,沒(méi)有這2個(gè)變量,程序?qū)o(wú)法完成任何操作。
public static Part workPart;
public static Part displayPart;
程序的入口和出口函數(shù)如下:
extern void ufsta (char *param, int *retcode, int rlen)
{
if ( (UF_initialize()) != 0)
return;
//CHANGE_cbs/CHANGE_CB_COUNT在函數(shù)外定義,這里簡(jiǎn)化
UF_STYLER_create_dialog ( "XXM_VCT_VC.dlg",
CHANGE_cbs, /* Callbacks from dialog */
CHANGE_CB_COUNT, /* number of callbacks*/
NULL, /* This is your client data */
&response );
UF_terminate();
return;
}
extern int ufusr_ask_unload (void)
{
/* unload immediately after application exits*/
return ( UF_UNLOAD_IMMEDIATELY );
}
2.2.2 基本操作函數(shù)的定義。測(cè)點(diǎn)系統(tǒng)中調(diào)用了很多NX API中自帶的函數(shù),接下來(lái)將介紹程序中一些重要的基本操作的函數(shù)。
Find PMI Part And Make Work If Necessary ()函數(shù):用于獲取PMI的相關(guān)部件,需要字符串匹配部件名。
bool FindPMIPartAndMakeWorkIfNecessary( tag_t* savedWorkedPart )
{
tag_t displayPartTag = UF_PART_ask_display_part();
tag_t rootPart = UF_ASSEM_ask_root_part_occ( displayPartTag );
std::vectorallComponents;
CollectAllPartOccs(rootPart, allComponents);
char partName[512] = {""};
int count = 0;
for ( int i = 0; i < allComponents.size(); i++ )
{
tag_t inst = UF_ASSEM_ask_inst_of_part_occ( allComponents[i] );
if (inst == NULL_TAG) continue;
bool matched = false;
char attrString[100]="";
UF_ASSEM_ask_part_name_of_child(inst,partName);
// Get Part Name from the attribute
if(attr_find_string(inst,"DB_PART_NO",attrString)==0)
{
matched = MatchPMICompName(attrString, false);
}
else
{
//Get the part name from the real part
matched = MatchPMICompName(partName, true);
}
if( matched )
{
// 把找到的部件變成工作部件,此處簡(jiǎn)化。
break;
}
}
return true;
}
Find All Numbers From String ()函數(shù):正則表達(dá)式進(jìn)行字符串匹配。
void FindAllNumbersFromString(std::string str, std::vector& numVector)
{
const std::tr1::regex pattern("((\\d)+\\.(\\d)+|(\\d)+)");
//尋找整數(shù)值或者帶小數(shù)的值
std::smatch result;
std::string::const_iterator start = str.begin();
std::string::const_iterator end = str.end();
while(std::regex_search(start, end, result, pattern))
{
numVector.push_back(result[0]);
start = result[0].second; }
}
3 實(shí)驗(yàn)驗(yàn)證與分析
基于NX Open工具開(kāi)發(fā)的測(cè)點(diǎn)制作工具用戶界面如圖3所示,應(yīng)用本文所開(kāi)發(fā)的UG功能模塊,實(shí)現(xiàn)了測(cè)點(diǎn)與EGD&T中PMI標(biāo)注模塊信息的自動(dòng)讀取及測(cè)點(diǎn)與產(chǎn)品尺寸信息的相互關(guān)聯(lián)(見(jiàn)圖4),減少了與不正確尺寸信息輸入造成的產(chǎn)品質(zhì)量誤判。通過(guò)把尺寸信息輸入到測(cè)點(diǎn)文件中,減少了后游測(cè)量環(huán)節(jié)重復(fù)輸入信息的環(huán)節(jié),提高了生產(chǎn)效率[11-15]。
參考文獻(xiàn):
[1]周秋忠,查浩宇.基于三維標(biāo)注技術(shù)的數(shù)字化產(chǎn)品定義方法[J].機(jī)械設(shè)計(jì),2011(1):33-36.
[2]盧鵠,韓爽,范玉青.基于模型的數(shù)字化定義技術(shù)[J].航空制造技術(shù),2008(3):78-81.
[3]張寶源,席平.三維標(biāo)注技術(shù)發(fā)展概況[J].工程圖學(xué)學(xué)報(bào),201l(4):74-79.
[4]董正衛(wèi),田立中,付宜利.UG/OPEN API編程基礎(chǔ)[M].北京:清華大學(xué)出版社,2002.
[5]王一成,張樹(shù)仁.UG二次開(kāi)發(fā)中數(shù)據(jù)庫(kù)的建立方法[J].長(zhǎng)春大學(xué)學(xué)報(bào),2011(12):1-4.
[6]唐鑫輝,秦小英,崔洪斌,等.NET環(huán)境下利用UG/NXOpen和UG/Journal對(duì)UG的二次開(kāi)發(fā)[J].現(xiàn)代制造工程,2011(4):60-76.
[7]荀曉云,顏昌翔.基于UG二次開(kāi)發(fā)的諧波減速器的參數(shù)化設(shè)計(jì)[J].機(jī)械傳動(dòng),2012(4):53-57.
[8]平朗,韓江.基于UG/OPEN的蝸桿傳動(dòng)參數(shù)化系統(tǒng)開(kāi)發(fā)[J].機(jī)械設(shè)計(jì)與制造,2009(11):123-125.
[9]游安弼.用C#二次開(kāi)發(fā)UGNX[J].現(xiàn)代機(jī)械,2007(2):79-82.
[10]劉海軍,耿忠德,田偉,等.基于UG食品擠壓機(jī)中螺桿的三維參數(shù)化造型設(shè)計(jì)[J].機(jī)械,2008(8):31-40.
[11]黃勇,張博林,薛運(yùn)鋒.UG 二次開(kāi)發(fā)與數(shù)據(jù)庫(kù)應(yīng)用技術(shù)與典型范例[M].北京:電子工業(yè)出版社,2008.
[12]張俊華,姜好德.UG二次開(kāi)發(fā)技術(shù)在企業(yè)標(biāo)準(zhǔn)件數(shù)據(jù)庫(kù)建立中的應(yīng)[J].煙臺(tái)大學(xué)學(xué)報(bào)(自然科學(xué)與工程版),2004(2):146-151.
[13]張美峰,廖文和,劉長(zhǎng)毅.基于特征造型的尺寸智能標(biāo)注的研究[J].機(jī)械制造與自動(dòng)化,2005(2):78-80.
[14]劉軍強(qiáng),王劍斐,馬新廠,等.三維零件圖尺寸的自動(dòng)標(biāo)注[J].西安工業(yè)大學(xué)學(xué)報(bào),2009(6):526-530.
[15]安恒,閏光榮,雷毅,等.基于GB/T 24734的三維自動(dòng)標(biāo)注[J].北京航空航天大學(xué)學(xué)報(bào),2012(3):416-421.