王皓宇 何定全 杨继伟 鹿小亮 郑万清 葛源坤
摘要:为提高工作效率,基于NX平台,研究了一种非参数圆孔实现参数化的方法。对本研究所采用的NX二次开发方式进行了分析,通过定制菜单按钮动作,实现顺序调用基于NXOpen C++开发的动态链接库文件和宏文件。同时,基于MenuScript脚本语言,在标准菜单栏和工具条中添加了定制菜单栏和工具条方便程序动态调用,通过在UIStyler模块中定制对话框实现程序的人机交互与参数传递,联合NXOpen C++和宏命令编写了非参数圆孔的参数化程序。在单基准面和多基准面非参数圆孔实现参数化的实例中,通过与传统参数化方式对比,采用本研究的程序化方法均用时较少。经分析和计算,得出:本文研究的非参数圆孔实现参数化的方法,能有效实现模型大批量非参数圆孔的参数化,能提高工作效率约50%。
关键词:NX二次开发;参数化;圆孔;宏命令;C++
中图分类号:TP311.1 文献标志码:A doi:10.3969/j.issn.1006-0316.2023.03.004
文章编号:1006-0316 (2023) 03-0021-06
A Parametric Approach to Nonparametric Circular Hole Based on NX Secondary Development
WANG Haoyu,HE Dingquan,YANG Jiwei,LU Xiaoliang,ZHENG Wanqing,GE Yuankun
( Sichuan Jiuzhou Electric Appliance Group Co., Ltd., Mianyang 621000, China )
Abstract:In order to improve the work efficiency, based on the NX platform, a non-parametric circular hole parameterization method is studied. The NX secondary development method adopted in this study is analyzed, and the dynamic link library files and macro files developed based on NXOpen C++ are called sequentially by customizing the menu button actions. At the same time, based on the MenuScript scripting language, a custom menu bar and a toolbar are added to the standard menu bar and the tool bar to facilitate the dynamic call of the program, the human-computer interaction and parameter transfer of the program are realized by customizing the dialog box in the UIStyler module, and a parametric program for the non-parametric circular hole is written through NXOpen C++ and macro command. In the case of parameterization of single-base and multi-base non-parametric circular holes, compared with the traditional parameterization method, the programming method in this study takes less time. Through the analysis and calculation, it is concluded that the method of realizing the parameterization of non-parametric circular holes studied in this paper can effectively realize the parameterization of large-scale non-parametric circular holes in the model, and can improve the work efficiency by about 50%.
Key words:NX secondary development;parameterization;round hole;macro command;C++
在實际机械设计中,对于大型复杂的机械结构,常采用协同化设计方法。在协同设计过程中,由于各设计人员使用的三维设计软件各不相同,一般采用STP或X_T的中间格式文件实现数据传递,而这种数据传递方式主要传递结构的拓扑数据,没有传递设计的各项参数,不方便后续设计更改和参数优化[1-2]。
随着计算机辅助设计(Computer Aided Design,CAD)的发展,各三维结构设计软件为满足用户需求,开放了软件接口(Application Programming Interface,API)[3-4]。本文根据企业结构设计人员的需求,以提高工作效率为目的,基于NX软件平台,研究了非参数化圆孔实现参数化的方法。
1 NX二次开发技术
NX实现二次开发的主要方式包括:GRIP(Graphics Interactive Programming,图形交互编程)、NXOpen C\C++、MenuScript、UIStyler、KF(Knowledge Fusion,知识熔接技术)和调用宏命令等。虽二次开发方式众多,但最终还是归结于调用内部C/C++ API执行相关操作[5]。
1.1 GRIP和KF
二者均是面向对象的解释性编程语言,简单易学,对编程基础要求较低,但功能均没有NXOpen C\C++全面。GRIP几乎可以执行UG界面下所有的图形交互操作,采用GRIP二次开发可以提高客户在交互界面的操作效率。KF是一种基于知识驱动的开发方式,可用于智能CAD系统的开发[6-7]。
1.2 NXOpen C\C++
NXOpen C\C++提供的API包含一系列的过程与函数,是所有二次开发方式中功能最齐全的,且可通过相关API调用其他二次开发方式生成的执行文件实现联合开发。常通过API调用UIStyler生成的用户定义对话框文件*.dlg或*.dlx,实现人机交互式操作。
1.3 MenuScript和UIStyler
MenuScript是一种用于用户定制开发的菜单脚本语言,遵循特定的语法规则,可实现对标准菜单栏和工具条的增添、删除和更改[8-9]。为实现与用户交互式操作,可采用UIStyler模块定制用户对话框,类似MFC(Microsoft Foundation Classes,微软基础类库)形式的定制模式,且UIStyler模块内部集成了大量NX风格的控件,能实现大部份交互操作,不仅能生成对话框文件*.dlg或*.dlx,同时能生成指定编程语言的调用源文件和头文件[10]。
1.4 宏命令
在NX二次开发过程中,对于某个功能是NX自带的,但又需要配合二次开发的程序文件来使用,便可通过调用宏命令实现,极大提高开发效率,减少开发错误率。调用宏命令一般是通过调用包含宏命令的宏文件来执行相关操作。主要有两种调用宏文件的方式:一是在二次开发的源程序文件中采用相关API调用;二是通过菜单按钮顺序调用[11]。
2 非参数圆孔实现参数化的方法
对于非参特征,要实现参数化,只能通过特征重建的方式。传统方式实现非参圆孔的参数化主要流程如图1所示,
首先建立孔位的基准点,再删除非参圆孔所包含的面,最后建立圆孔特征。对于多个圆孔,如果有类似阵列和镜像等关联性质的,可适当采用此方法,但在射频前端模块设计中,一般圆孔不具有关联性质且数量庞大,如采用传统方式,需手动对模型中每个非参圆孔重复上述流程,这极大降低了设计人员的工作效率。对于重复的工作流程,一般采用批量化的方式进行简化。本文对可批量化实现非参数圆孔参数化的方法进行研究。
如果只是简单地将图1所示流程进行批量化处理,则在创建圆孔特征的过程中,需要手动编写孔特征程序,并采用UIStyler模块设计圆孔特征的对话框。通过NX自带的孔特征对话框可知,重新生成圆孔特征的对话框需要大量控件,且造成了开发资源的浪费。而采用批量创建基准点,同时删除构成圆孔的所有面,再通过定制按钮的动作调用宏文件,启动NX自带的孔特征命令完成批量操作,则能极大提高设计开发效率,同时充分利用了NX自带的孔特征命令。
基于以上分析,完成非参圆孔参数化流程如图2所示。
其中,参数输入流程调用UIStyler模块定制参数输入对话框,程序主体采用NXOpen C++调用相关API实现操作,通过定制菜单栏和工具条,实现该程序与NX软件无缝链接。
2.1 定制菜单栏和工具条
通过定制菜单栏和工具條,可方便用户直接调用二次开发程序。与一般的菜单按钮执行单一的ACTIONS(动作)不同,在本研究方法中,菜单按钮需依次调用程序主体动态链接库文件(*.dll)和创建孔特征的宏文件(*.macro)。因此,按钮的ACTIONS需要采用/POST设置在调用*.dll文件后调用*.macro文件。具体程序如下:
VERSION 120 !版本号
EDIT UG_GATEWAY_MAIN_MENUBAR !对主框架进行编辑
AFTER UG_HELP!在“帮助”后进行编辑
CASCADE_BUTTON MyModeTool !添加下联式菜单
LABEL 自建建模工具 !标签
END_OF_AFTER !结束编辑
BUTTON UnparamHolesCreateParamHoles!添加按钮
LABEL 非参孔转参数孔 !按钮标签
MESSAGE 选择非参孔转为参数孔 !按钮提示
BITMAP 非参孔创建参数孔 !按钮位图
ACTIONS *.dll !按钮执行的标准动作
END_OF_MENU
MODIFY !对按钮进行修改
BUTTON UnparamHolesCreateParamHoles
ACTIONS/POST createholes.macro !按钮执行完标准动作后继续调用宏文件
END_OF_MODIFY
启动NX主程序,打开建模模块时,定制菜单栏和工具条如图3和图4所示。
2.2 定制参数输入对话框
在实际模型中,含有多类型的面,需要用户选择性输入相关圆孔面。为方便选择圆孔,将选择过滤器设置为仅选择圆柱面,圆孔包含的其余面通过NXOpenC++相关API完成自动集成。对话框(图5)同时需要输入基准面,以实现转换过程中自动更改基准面,如图6所示,基准面1和基准面2分别为方块的上下表面,选择不同基准面,在转换过程中可实现对圆孔的基准面更改。
2.3 NXOpen C++过程
NXOpen C++程序流程如图7所示,根据用户输入的圆柱面,自动集成圆孔所有面并删除,同时在基准平面上创建圆孔基准点,为后续调用宏文件创建孔特征提供草图依据。圆孔所有面自动集成过程为workPart→ScRuleFactory()→CreateRuleFaceBossPocket(Face, true),其中CreateRuleFaceBossPocket()方法表示选择槽孔的所有面,槽孔的种子面储存在Face变量中。删除面的过程需定义一个NXOpen::Features:: DeleteFaceBuilder类,并添加自动集成的所有面,当执行类中Commit()方法时,完成删除面操作。
创建圆孔基准点有两种方式。方式一:循环圆柱面的两圆弧边,当边位于基准面内时,通过圆弧边创建圆心点即为基准点。方式二:提取圆柱面中心线,其与基准平面的交点即为基准点。当圆孔为通孔时,方式一可实现基准面变换;当圆孔为非通孔时,方式一无法实现基准面变换,则采用方式二来创建基准点,提取圆柱面中心线需创建NXOpen::Features:: VirtualCurveBuilder类,中心线与基准平面的交点通过草图工具“相交”所对应的NXOpen:: SketchIntersectionPointBuilder类实现。创建中心线与基准平面交点的部分代码如下:
NXOpen::SketchIntersectionPoint *nullNXOpen_SketchIntersectionPoint(NULL);
std::vector
std::vector
NXOpen::CurveDumbRule *curveDumbRule1;//每条中心线对应的规则
std::vector
NXOpen::NXObject *nullNXOpen_NXObject(NULL);
NXOpen::Point3d POINT; //基准平面参考点
std::vector
std::vector
for (int i = 0; i { sketchIntersectionPointBuilder[i] = workPart->Sketches()->CreateIntersectionPointBuilder(nullNXOpen_SketchIntersectionPoint); section[i] = sketchIntersectionPointBuilder[i]->Rail(); //仅通过曲线与草图相交创建点 section[i]->SetAllowedEntityTypes(NXOpen::Section::AllowTypesOnlyCurves); curves[0] = LinesArray[i];//分别传递每条中心线 curveDumbRule1 = workPart->ScRuleFactory()->CreateRuleBaseCurveDumb(curves); rules2[0]=curveDumbRule1; section[i]->AddToSection(rules2, LinesArray[i], nullNXOpen_NXObject, nullNXOpen_NXObject,POINT, NXOpen::Section::ModeCreate, false); sketchIntersectionPointBuilder[i]->UpdateData(); features[i]= sketchIntersectionPointBuilder[i]->CommitFeature(); sketchIntersectionPointBuilder[i]->Destroy(); } theSession->ActiveSketch()->Deactivate(NXOpen::Sketch::ViewReorientFalse, NXOpen::Sketch::UpdateLevelModel); //退出草图 为方便用户统计,可调用模态化窗口反馈给用户相关信息。其代码如下: char out_num[256]; sprintf(out_num,"您选择了 %d 个圆柱面!",num_of_lines); theUI->NXMessageBox()->Show("统计", NXOpen::NXMessageBox::DialogTypeInformation, out_num); 3 方法运用实例 3.1 单基准面非参圆孔参数化 以某射频连接器安装面板(图8)为例,该模型由电路设计人员导出,储存为STP的中间格式文件,模型包含两类孔共128个,现需将大孔调整为直径为4.9 mm的通孔,将小孔调整为M1.6的螺纹孔。根据分析,有三种方式重建圆孔,分别为:采用传统方式逐一重建圆孔(逐一法)、采用矩阵方式重建圆孔(矩阵法)以及本研究所述方式重建圆孔(程序法)。在64位16G内存的电脑中,基于NX10.0软件分别采用三种方式对非参数圆孔参数化,参数化结果如图9所示,耗时统计如表1所示。 由表1可知,在本模型中相较于逐一法,程序法所用时间约为其1/5,建模效率提升了约80%;相较于矩阵法,程序法所用时间约为其1/2,建模效率提升了约50%。矩阵法虽然省去了手动逐一重建圆孔的过程,但测量矩阵间距同样耗费时间,程序法只需输入要重建的圆孔,即可自动化实现参数化重建。 3.2 多基准面非参圆孔参数化 以某天线测试转台底架(图10)为例,底架四周均有直径为2.5 mm的通孔,现将其参数化为M3的螺纹孔。同样采用逐一法和程序法参数化圆孔,相比于矩阵法,镜像法更适用于本实例,因此,用镜像法代替矩阵法参与对比,所用时间如表2所示。 由表2可知,在本模型中逐一法和镜像法所用时间几乎相等,而程序法所用时间约为这二者的1/2,建模效率提升了50%以上。 4 结语 分析了NX二次开发技术的主要途径,并基于参数化设计,研究了一种将非参圆孔参数化的方法。基于NX平台编写了非参圆孔批量实现参数化的程序,实现了利用定制按钮顺序调用动态链接库文件和宏文件,将非参圆孔的参数化过程程序化。经实例验证,工作效率提高了约50%。本文的研究是一次完整的NX二次开发流程,不仅为非参模型实现参数化提供了一种指导方法,同时也为设计人员提高结构建模效率提供借鉴。 参考文献: [1]王小明,王耕耘,张文明,等. 基于知识与UG二次开发的吊具参数化设计系统[J]. 机械工程与自动化,2016(1):83-85. [2]Liu Xinhua,Li Qi,Liu Youhui,et al. Development of a Rapid Design System for Aerial Work Truck Subframe with UG Secondary Development Framework[J]. Procedia Engineering,2011(15):2961-2965. [3]項辉宇,周哲人,马丽萍,等. UG NX 二次开发在CAD模型离散中的应用[J]. 机床与液压,2020,48(5):146-149. [4]王志雄. 基于UG的焊缝自动清理软件开发和应用[J]. 现代制造技术与装备,2020(5):121-122. [5]唐康林. Siemens NX二次开发[M]. 北京:电子工业出版社,2021. [6]李明新,李斌. UG NX 二次开发在产品图样标准化管理中的应用[J]. 现代制造工程,2016(10):26-50. [7]潘泓谊,刘淑梅,毛欣然. 基于 UG 二次开发的GRIP标准件库制作系统研究[J]. 现代制造技术与装备,2021(4):64-65. [8]李丽芳,王燕,陈开朗,等. 基于UG的汽车覆盖件小圆角识别二次开发[J]. 模具制造,2019(12):7-10. [9]侯永涛,丁向阳. UG/Open二次开发与实例精解[M]. 北京:化学工业出版社,2007. [10]赵玉善,郭慧. 基于NX/Open的悬挂式爬坡输送线的碰撞检测仿真系统开发[J]. 图学学报,2015(6):950-954. [11]张乐林,祝锡晶,叶林征. 基于UG二次开发的参数化建模方法[J]. 计算机系统应用,2016(1):146-149. [12]张伟,刘葵,谢正武,等. 基于UG宏程序后置处理的二次开发技术研究[J]. 新技术新工艺,2022(2):52-56. 收稿日期:2022-04-02 作者简介:王皓宇(1994-),男,四川广元人,硕士研究生,主要研究方向为天线雷达结构设计与仿真、CAD/CAE软件二次开发,E-mail:601531072@qq.com。