吳凱亮
基于UG二次開發的DTS名義值測量
吳凱亮
(上汽通用汽車有限公司,上海 201206)
文章主要介紹基于UG二次開發的DTS名義值測量,本系統基于西門子的先進CAD設計平臺NX之上開發的系統。以NX11和Visual Studio 2010作為運行和開發平臺的,C、C++為開發語言,使用Block UI Styler為界面設計工具,NXOpen則提供了開發所需的應用程序包(API)。系統可以通過獲取整車FVML(Finish Vehicle Measurement Location)文件包含的信息,通過用戶選擇文檔中對應的零件特征,實現自動測量數模名義值及對應截面,并與FVML定義的數值進行對比。
汽車制造;DTS;NXOpen
汽車制造生產的發展帶來了人民生活水平的提高,但隨著整車制造工藝能力的提升,用戶對于汽車外觀的視覺感官質量的要求也不斷提高。整車開發過程中,車身零部件之間的間隙、面差的設計標準,以及由間隙、面差衍生的外觀尺寸匹配控制要素,如平行度、對稱度、對齊度、R角控制以及感知質量指數等要求會集成在DTS(Dimensional Technical Specifications)文件中。外觀DTS直接面對用戶靜態評價,是汽車外觀造型的重要組成部分,同時也是汽車工藝水平的最終體現。
整車項目開發過程中為了定量地分析DTS在數模及整車中的狀態,會將DTS相關要求細化到FVML文檔中。項目前期虛擬評估過程中,需要檢查數模間的尺寸狀態是否與DTS文件定義要求一致,確保數模釋放狀態符合要求。
基于NXOpen的DTS名義值測量工具是以NX11和Visual Studio 2010作為運行和開發平臺的,C、C++為開發語言,使用Block UI Styler為界面設計工具,NXOpen則提供了開發所需的應用程序包(API)[1]。系統可以通過獲取整車FVML(Finish Vehicle Measurement Location)文件包含的信息,通過用戶選擇文檔中對應的零件特征,實現自動測量數模名義值及對應截面,并與FVML定義的數值進行對比。
DTS名義值檢查過程中,需要按照FVML文件中定義的數模坐標制作截面,測量截面間的設計間隙及面差。不同零件直接的造型不同,導致測量的截面間隙及面差有不同的結果。DTS名義值測量工具需要解決自動讀取制作截面的坐標信息,生成截面,然后自動測量出相應的數值及截面,如圖1所示。

圖1 DTS測量需求示意圖
通過對開發需求相關分析,所開發系統的需求已經基本明確。工具開發工程需要設置讀取FVML文檔接口;獲取FVML文檔中對應的From Panel和To Panel信息;NX調取截面坐標,制作截面;工具根據截面特征,自動調用對應的測量算法,完成間隙和面差計算;最后完成測量結果標注及截面輸出,相應步驟如下圖2所示。

圖2 工具開發流程圖
2.3.1讀取相關模板信息
為了讀取FVML文件中的相關信息到測量工具的用戶界面中,需要分別調用以下函數完成相關操作:
通過getExcelSheetInformation()方法獲取excel路徑下sheet的相關信息,集成excel,讀取Excel Sheet信息
rowTableValue.rowNumber = i;
rowTableValue.panelLabel = strPanel;
rowTableValue.fromDescription = strFrom;
rowTableValue.toDescription = strTo;
rowTableValue.dtsNom = strDTSNom;
rowTableValue.specType = strSpecType;
rowTableValue.postionStr = strPostion;
rowInformation.push_back(rowTableValue);/
添加信息到自定義結構_fvmlCheckTable_info
typedef struct
{ int rowNumber;
string panelLabel;
string fromDescription;
string toDescription;
string dtsNom;
string specType;
string postionStr;
vector
vector
vector
tag_t planeTag;
tag_t pmiTag;
string measureResult;
}FVMLCheck_info_t,*FVMLCheck_info_p_t;
_fvmlCheckTable_info.insert(pair
插入信息到UI列表
for(iter=fromtoMap.begin();iter!=fromtoMap.end();iter ++)
{//fill the sheet information to the table Node* newGroup Node=tree_controlPanelInformation-> Create Node("");
tree_controlPanelInformation->InsertNode (newGroup Node, newSheetNode,NULL,Tree::NodeInsertOptionLast);
newGroupNode->SetColumnDisplayText((panelColumn)fromDes,iter->first.c_str());
newGroupNode->SetColumnDisplayText((panelColumn)toDes,iter->second.c_str());}
2.3.2選擇參考對象,自動推斷類型,通過NX標準控件,選擇面和導引線
if(face_select1->GetSelectedObjects().empty() ||face_select2->GetSelectedObjects().empty() )
{
CheckDTS::theUI->NXMessageBox()->Show("Block Styler", NXOpen:: NXMessageBox:: DialogTypeError, "Please make sure you selected the from and to panel faces!");
return 0;}
NXString calTypeStr = getCalculationType (face_select1- >GetSelectedObjects(),face_select2->GetSelectedObjects());
691 輸尿管膀胱連接部狹窄合并結石的處理 陳耀武,周 青,孟 軍,曾 志,楊 波,王 原,舒 暢,朱云海
vector
for (int i = 0; i < allNodes.size();i++)
{
allNodes.at(i)->SetColumnDisplayText((calColumn)AnalysisMethod,calTypeStr);
}
2.3.3計算分析階段
創建截交平面–根據輸入的坐標位置,生成坐標平面
createPositonDatumPlane(string inputStr,DatumPlane* & positionPlane)
進行截面交點計算 -通過生成的平面,和選擇的對象計算截交線
createSectionPoint (NXOpen:: TaggedObject *curve, NX Open::DatumPlane*datumPlane,Features::SectionCurve* &sec -tionPointFeature, vector< NXOpen:: TaggedObject*> &Section Points)
創建最小距離算法1 – 點到面的最小距離
createDistancePointToFace(NXOpen::Point * point, Face * face, Measure*&Md, tag_t &p1Tag, tag_t &p2Tag, NXOpen:: Line*&measureLine)
創建最小距離算法2-兩個對象集之間的最小距離
createDistancePointBetweenSets (NXOpen:: Point * point, Features::Feature * FeatureSets2,Measure * &Md,tag_t &p1Tag, tag_t &p2Tag,NXOpen::Line *&measureLine)
2.3.4后處理,保存數據到Excel,并清理過程數據
SaveInfoToExcel(vector
創建PMI
createPMI(Node*selectNode,NXOpen::CartesianCoordinateSystem *&cartesianCoordinateSystem)
創建圖片
CreateImage(Node* selectNode,int width,int height,char* imageNameStr)
這期間需要進行隱藏對象操作
showSectionCurvesOnly(selectNode,modelingView1,allNeedShowObjects);
使用創建圖片功能進行圖片創建
UF_DISP_create_framed_image(imagePath,UF_DISP_JPEG,UF_DISP_ORIGINAL,leftConer,width,height);
計算結果保存
保存數據
excel.SetCellText(atoi(rowStr.GetText()),MEASUREVALUE_COL,measureValueStr.GetText());
插入圖片
excel.InsertPicture(positionX,positionY,imagePath.GetText(),excelImageWidth,excelImageHeight);
positionX = positionX + excelImageWidth + 100;
刪除緩存圖片
//delete the temporary files
deleteImageFile((char*)imagePath.GetText());
本文是以基于NXOpen的DTS名義值檢查工具的設計實現為流程順序,詳細介紹了系統各功能的實現,從當前社會現狀出發,完成了從需求分析到概要設計、詳細設計、程序代碼編寫和運動分析校驗的設計流程。同時又詳盡地闡述了利用NXOpen API進行二次開發的實現過程。系統能夠穩定地運行,并嚴格遵循了操作簡單,界面友好的設計初衷,實現了參數化建模,系統各處都有容錯機制,工具用戶界面如下圖3所示。

圖3 用戶操作界面
[1] 丁柱,劉其洪,黃建行.基于UG二次開發的鞋楦參數化設計[J].科學技術與工程,2011,11(14):3214-3218.
Development of DTS nominal measurement based on UG customization
Wu Kailiang
( SAIC-GM, Shanghai 201206 )
This paper introduces the development of DTS nonimal measurement based on UG customization.This system is using NX11,Visual Studio 2010 as operation and development platform, NX 11 provide Block UI Styler as interface design tool and API development package. DTS measurement tool will read FVML information. When operators select part feature defined in FVML, Tool will measure math data nominal and output measure result.
Automobile manufacturing;DTS;NXOpen
10.16638/j.cnki.1671-7988.2021.03.005
U461.99
A
1671-7988(2021)03-18-03
U461.99
A
1671-7988(2021)03-18-03
吳凱亮(1989-),男,工程師,就職于上汽通用汽車有限公司。