基于UG的汽车覆盖件小圆角识别二次开发
2019-03-06李丽芳陈开朗温媛媛
李丽芳,王 燕,陈开朗,温媛媛,郭 杰
上汽通用汽车有限公司(上海 201208)
1 引言
汽车外覆盖件大都设计了棱线特征,一方面,棱线有调节风阻的作用,汽车高速行驶时,气流能通过这些棱线增加行驶的稳定性;另一方面,棱线有增加刚度的作用,零件受到外力作用时,不会轻易发生变形褶皱。最重要的是,棱线设计对车的颜值有所影响,刚毅的棱线让汽车充满力量,流畅的棱线则彰显运动等等,美观的棱线设计会让人眼前一亮。
但是弧长偏小且夹角偏大的棱线采用常规的模具制造工艺不够清晰美观,不能很好的体现造型设计的意图,因此需采用特殊的制造工艺,冲压同步工程阶段需把这种棱线识别出来,本文称之为小圆角识别。一般情况下,需要肉眼识别分界点,使用UG自带命令在分界点处测量弧长和夹角,手动将测量结果输入报告,并根据测量结果标示红(特殊制造工艺)、黄(过渡)、绿(普通制造工艺),效率和准确率都较低。本文使用Visual Studio等二次开发工具,在UG中建立了快速测量和自动生成报告的人机交互界面,提高了小圆角识别的效率和准确率。
2 开发需求
UG打开零件片体,输入判断准则:夹角>X值,弧长<Y值,两条件同时满足呈现红色,反之呈现绿色。将以下结果输出到EXCEL当中,同一个项目的零件测量结果输出到同一个EXCEL,每个零件占用一个工作表。
2.1 输出图片
每个零件的棱线编号按照字母顺序设置,每条棱线的测量点按照棱线编号+数字设置,包括2个端点和2个过渡点,如图1所示。为避免每条棱线分段过多,最终只呈现4种状态中的一种:全红、全绿、红黄绿、红黄绿黄红(绿黄红黄绿)。其中,红色代表满足判断准则,绿色代表不满足判断准则,黄色为100mm长的过渡段。同时,为避免出现由于刚好处于临界值导致的红绿点交替现象,人机交互界面需给出夹角和弧长的公差设定窗口。
图1 棱线编号
2.2 输出数值
根据棱线上的编号点,将测量结果填到模板指定的单元格中。其中,2个端点填入夹角值和弧长值,2个过渡点填入坐标值,如图2所示。
图2 输出的数值
3 界面设计
界面设计主要考虑简洁、信息显示全面,方便操作等等,从而提高小圆角识别的效率。
首先选择测量的零件,可以选择1个,也可以选择多个;接着设置夹角的公差、弧长的公差以及过渡段的长度;接着输入每个零件的参数,包括料厚、所有的棱线、整个片体、测量取点的间隔等等;然后开始计算,如图3所示。
图3 输入界面
计算完毕后,选择需要输出的零件,接着选择零件中想要输出的颜色球和输出间隔,接着可以选择渲染模式、整车截图、想要输出到的文件等等,然后创建报告,如图4所示。
图4 输出界面
4 开发流程
本二次开发的过程主要是通过用户对不同零件的选择,以及对选择零件判断准则的输入,计算棱线的夹角和弧长。通过用户在人机交互界面上对显示内容的设置以及输出设置,使得用户可以获得详尽清晰的EXCEL模板报告,大大提高了用户手动操作的工作效率。整个核心流程图如图5所示。
图5 核心流程图
5 编写代码
本文使用C++语言结合2000多个API函数开发出想要的UG界面,开发时首先要创建NXOpenWizard,在Visual Studio环境中创建程序,链接UGNX,进行编译和调试,生成后缀名为dll的文件,在UG界面NXOpen中运行该文件,实现UG界面的二次开发。整个过程Visual Studio和UG的版本配置很重要,本文使用的是Visual Studio2013和NX11.0。
C++程序语言的书写格式自由度高,灵活性强,随意性大。为了提高程序的可读性,编写代码要规范,使程序结构清晰、明了,程序代码紧凑。本文整个程序的主要函数有:棱线连接、棱线和圆弧面的匹配、A面识别、求交线、求交点、符合性判断、输出报告设置等等。部分代码如下所示:
void PAT_BE209::CreateCheckReport()
{
//新建报告;
CString template_excel;
template_excel=CString(moduledir)+"Template\
PAT_BE209_Sharp_Feature_Line_Check_Report.xlsx";
int ExistOrNot=::GetFileAttributes(template_excel);
if(ExistOrNot==-1)
{
uc1601("template lost!",1);
return;
}
else
{
CoInitialize(NULL);
//创建Excel服务
CApplication app;
if(!app.CreateDispatch(_T("Excel.Application")))
{
uc1601("Unable to create Excel app!",1);
return;
}
//app.put_Visible(TRUE);
app.put_Visible(FALSE);
app.put_UserControl(TRUE);
//打开模板;
CWorkbook book;CWorkbooks books;CWorksheet sheet;CWorksheets sheets;
CRange range;CRange rColums;CRange rUsed;CRangeCell;CRanges ranges;
CExcelFont font;CBorders borders;CBorder border;CRangecols;
CRange column;CRange row;Cnterior interior;
COleVariant covOptional((long)
DISP_E_PARAMNOTFOUND,VT_ERROR);
books.AttachDispatch(app.get_Workbooks());
LPDISPATCH lpDisp=books.Open(template_excel,
covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,
covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional);
book.AttachDispatch(lpDisp);
}
6 结束语
本文通过Visual Studio2013搭建了NX的二次开发环境,并使用C++语言结合多个API函数开发出小圆角识别的UG界面。输入零件的棱线关键参数和判断准则,就可以自动取点测量并自动输出报告,不仅提高了识别的准确性,而且每个零件的识别时间从原来的45min缩短到了5min,大大提高了工作效率,为企业后续借助已有的标准和软件资源,拓展应用范围做出重要的铺垫。