夏文杰 吳凱亮
摘 要:本文針對目前CAD軟件具備的三維尺寸標注功能,結合整車廠對于零件尺寸測量的需求,基于三維標注功能探討測點集成開發系統設計,詳細闡述了相關技術,并通過實例測試驗證了技術的可行性,以期為相關學者的研究提供參考。
關鍵詞:三維標注;測點;NX Open
中圖分類號:TB21;TP391.72 文獻標識碼:A 文章編號: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
隨著計算機輔助繪圖技術的進步,目前,產品的尺寸信息定義已經從早期的手工繪圖轉變為計算機二維繪圖。而CAD/CMA系統的廣泛應用,則需要將產品的尺寸信息、制造工藝信息等標注在三維模型上,通過產品三維模型將設計過程傳遞至生產加工過程,打通設計、制造和測量的三維數據鏈。
三維標注技術改變了傳統以工程圖為主要制造依據的模式。而三維數字化實體模型作為輔助參考依據的制造模式,一方面可直觀表達產品的制造工藝信息;另一方面,使得三維實體模型成為生產制造過程的唯一依據,避免了生產數據不一致、信息共享程度低、圖紙管理成本高等一系列問題,引領了產品設計制造一體化的趨勢[1-3]。目前,主流CAD軟件均提供三維標注功能,如UG的PMI模塊,CATIA的Functional Tolerancing & Annotation模塊,以及Solidworks的Dimxpert模塊等。
實際生產制造過程中,為了評價零件的尺寸狀態,需要對零件的形面進行測量。但是,由于目前測量設備的限制及出于經濟性考慮,暫時難以完全實現。測點是根據圖紙尺寸的要求,結合生產工藝,用于監控/反映產品和工藝尺寸特性的測量點。通過對零件具有尺寸要求的形面上測點的測量,來評價和反映零件的整體尺寸狀態,可以提高測量效率,降低測量成本。測點的制作過程中需要輸入產品的尺寸信息,需要耗費大量的人力成本,而且容易出現輸入信息錯誤。基于此,本文基于三維標注功能進行測點集成開發系統設計。
1 NX二次開發工具簡介
UG的二次開發工具主要有:UG/Open API、UG/Open GRIP、UG/Open Menuscript和UG/Open UlStylertll。這4種開發工具各有特點。
第一,UG/Open API 。UG/OPEN API又被稱User Function,其是一種基于C語言的NX二次開發API,包含了多達3 000個的C函數,又由于其是直接基于NX內部代碼建立的,所以功能覆蓋率很高,適用于企業的大型復雜高級的二次開發,但其需要有C語言和軟件工程等技術的支持,相對地,學習難度也較大。
第二,UG/Open GRIP。UG/Open GRIP是一種交互式圖形編程語言,其程序具有很高的運行效率,學習起來較為簡單且不會常駐內存中,這些特點使得得其到開發人員的青睞。但是,其能實現的NX功能較小,所以只適用于一些簡單的程序二次開發,有較大的局限性。
第三,UG/Open UIStyler。UG/Open UIStyler是用來創建對話框的專用模塊。使用UG/OpenUIStyle可以非常方便地、快捷地創建與UG風格完全一致的對話框。UIStyle模塊所支持的控件種類豐富,且在儲存對話框文件的同時,會自動生成與對話框相對應的后綴為.c文件和.h文件,大大節省了用戶的開發時間。UG/OpenUIStyle最大的優點在于開發的對話框風格與UG一致,符合用戶一貫的習慣[4]。
第四,UG/Open MenuScript。UG/Open Menuscript用來定制菜單的專用模塊,其允許用戶使用ASCII文件方便靈活地編輯UG系統的菜單,或為用戶創建的應用程序定義自己的菜單。由于在二次開發中的自定義菜單設計工具只有UG/Open MenuScript,因此,要設計一套完整的人機交互系統,UG/Open MenuScript是開發必用工具。
2 測點集成開發系統設計
測點是根據圖紙的要求,結合生產工藝,用于監控/反映產品和工藝尺寸特性的測量點。測點在NX里面用一個箭頭表示,建立在三維數模中邊、面、孔和槽等幾何元素上,測點屬性中需要輸入圖紙中的尺寸信息,如圖1所示。
2.1 算法流程圖
本系統的核心算法是測點自動查找相關聯PMI信息的搜索算法。這是本文最為關鍵的部分,其流程圖如圖2所示。
具體步驟如下。①通過數模中生成的測點屬性,在程序中獲取測點關聯的幾何體,并且要智能地獲取其他相關的拓撲信息[5]。例如,選擇一條邊時,需要獲取其所屬的面和體。②基于測點關聯的數模,搜索PMI信息所在的部件,并且靜態打開。這里涉及要用正則表達式進行字符串匹配。③從PMI部件出發,循環當前部件中的PMI信息,并且建立以幾何元素為索引值的數據字典,保存在當前內存中[6]。需要注意的是,圖2中所說的數據庫是指內存中數據字典的結構。④從數據字典出發,去匹配當前用戶選擇的幾何元素,從而獲取PMI信息。⑤利用NX的屬性賦值模塊,將相關PMI信息賦值到對應的測點中[7]。
2.2 系統的代碼設計
2.2.1 全局變量的設置和調用。程序的參數化主要體現在變量的調用賦值上,程序中的全局變量設置至關重要[8-10]。以下2個全局變量分別表示當前的工作部件及當前的顯示部件,沒有這2個變量,程序將無法完成任何操作。
public static Part workPart;
public static Part displayPart;
程序的入口和出口函數如下:
extern void ufsta (char *param, int *retcode, int rlen)
{
if ( (UF_initialize()) != 0)
return;
//CHANGE_cbs/CHANGE_CB_COUNT在函數外定義,這里簡化
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 基本操作函數的定義。測點系統中調用了很多NX API中自帶的函數,接下來將介紹程序中一些重要的基本操作的函數。
Find PMI Part And Make Work If Necessary ()函數:用于獲取PMI的相關部件,需要字符串匹配部件名。
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 )
{
// 把找到的部件變成工作部件,此處簡化。
break;
}
}
return true;
}
Find All Numbers From String ()函數:正則表達式進行字符串匹配。
void FindAllNumbersFromString(std::string str, std::vector& numVector)
{
const std::tr1::regex pattern("((\\d)+\\.(\\d)+|(\\d)+)");
//尋找整數值或者帶小數的值
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 實驗驗證與分析
基于NX Open工具開發的測點制作工具用戶界面如圖3所示,應用本文所開發的UG功能模塊,實現了測點與EGD&T中PMI標注模塊信息的自動讀取及測點與產品尺寸信息的相互關聯(見圖4),減少了與不正確尺寸信息輸入造成的產品質量誤判。通過把尺寸信息輸入到測點文件中,減少了后游測量環節重復輸入信息的環節,提高了生產效率[11-15]。
參考文獻:
[1]周秋忠,查浩宇.基于三維標注技術的數字化產品定義方法[J].機械設計,2011(1):33-36.
[2]盧鵠,韓爽,范玉青.基于模型的數字化定義技術[J].航空制造技術,2008(3):78-81.
[3]張寶源,席平.三維標注技術發展概況[J].工程圖學學報,201l(4):74-79.
[4]董正衛,田立中,付宜利.UG/OPEN API編程基礎[M].北京:清華大學出版社,2002.
[5]王一成,張樹仁.UG二次開發中數據庫的建立方法[J].長春大學學報,2011(12):1-4.
[6]唐鑫輝,秦小英,崔洪斌,等.NET環境下利用UG/NXOpen和UG/Journal對UG的二次開發[J].現代制造工程,2011(4):60-76.
[7]荀曉云,顏昌翔.基于UG二次開發的諧波減速器的參數化設計[J].機械傳動,2012(4):53-57.
[8]平朗,韓江.基于UG/OPEN的蝸桿傳動參數化系統開發[J].機械設計與制造,2009(11):123-125.
[9]游安弼.用C#二次開發UGNX[J].現代機械,2007(2):79-82.
[10]劉海軍,耿忠德,田偉,等.基于UG食品擠壓機中螺桿的三維參數化造型設計[J].機械,2008(8):31-40.
[11]黃勇,張博林,薛運鋒.UG 二次開發與數據庫應用技術與典型范例[M].北京:電子工業出版社,2008.
[12]張俊華,姜好德.UG二次開發技術在企業標準件數據庫建立中的應[J].煙臺大學學報(自然科學與工程版),2004(2):146-151.
[13]張美峰,廖文和,劉長毅.基于特征造型的尺寸智能標注的研究[J].機械制造與自動化,2005(2):78-80.
[14]劉軍強,王劍斐,馬新廠,等.三維零件圖尺寸的自動標注[J].西安工業大學學報,2009(6):526-530.
[15]安恒,閏光榮,雷毅,等.基于GB/T 24734的三維自動標注[J].北京航空航天大學學報,2012(3):416-421.