基于三维标注功能的测点集成开发系统设计研究
2018-09-10夏文杰吴凯亮
夏文杰 吴凯亮
摘 要:本文针对目前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.