基于NX二次开发的三维弹簧快速设计方法
2020-04-07
(1.中国兵器装备研究院, 北京 102209; 2.中国兵器工业第二〇八研究所, 北京 102202)
0 引言
NX是Siemens PLM Software公司出品的一个产品开发解决方案,通过为用户提供面向设计、仿真和制造的高性能集成解决方案,实现整个产品开发过程的转型[1]。
弹簧由于能吸收振动和冲击能量,且具有自动复位的功能,所以弹簧广泛应用于液压阀门、车辆减振装置、冲压设备的复位机构和枪械、火炮等机械设备中。随着数字化设计与制造技术的迅速发展,弹簧零件的手工设计步骤繁琐、工作量比较大并且容易出错,效率低、成本高,已不能满足新的设计模式与生产模式需要。
弹簧的设计计算属常规设计,但在三维模型设计过程中,计算繁琐,建模复杂,较适合CAD开发,因此利用三维CAD技术开发弹簧模型自动生成工具是必要的,也是可行的。
结合当前制造行业三维CAD的应用状况,选择基于NX软件进行三维弹簧设计软件开发,提高弹簧设计质量和效率。利用三维弹簧设计软件,输入相关参数,软件进行几何参数计算,几何参数通过驱动弹簧设计模板生成三维弹簧模型,并进行变形处理。
通过二次开发,直接提供特征参数输入界面,通过参数的交互输入,进行几何参数计算,并驱动设计模板生成三维零件模型,简化了零件设计流程,规范了零件特征结构,节省设计时间,提高工作效率[2-3]。
本文在论述了基于C#的NX10二次开发的环境设置、二次开发窗体设计以及二次开发的程序调试等模块设置,以矩形压缩弹簧为例,进一步说了基于C#的NX10二次开发方法及机械零件参数化设计的实现过程。
1 基于C#的NX二次开发主要技术
1.1 二次开发环境设置
在NX众多的二次开发技术中,NX Open API是NX提供的一个高级二次开发编程语言工具集,几乎所有能在NX界面上的操作都可以调用相应的NX Open API函数来实现,并同NX进行无缝连接,从而扩展NX的功能,使其更具专业化[4-5]。其中C#是面向对象的编程语言,作为一种解释性语言,编译的程序可以在32位与64位系统中完美运行,而且其操作方便易懂、语法简明。
二次开发环境设置主要包括开发工具配置和开发环境设置。
1.1.1 开发环境设置
基本环境变量:环境变量在NX的运行过程中有着重要的应用,一些环境变量在安装NX之后便已经设置。其中最常用的基本环境变量包括:
UGII_BASE_DIR:NX安装的文件夹路径;
UGII_ROOT_DIR:NX安装文件夹中UGII的位置;
UGS_LICENSE_SERVER:28000@#######(IP地址或主机名);
UGII_LANG:ENGLISH。
其它常用的环境变量在ugii_env_ug.dat文件中定制。该文件默认位于UGII_ROOT_DIR目录下。用户可以修改同目录下的ugii_env.dat文件。添加一些环境变量覆盖已有的环境变量以控制NX的运行方式该文件可以通过环境变量UGII_ENV_FILE进行设定。
命令行环境变量设置:编辑%UGII_BASE_DIR%/UGOPEN/ufvars.bat,设定MS VC Dir到正确目录。具体配置如下所示:
Rem Your might install them in a different location.
Rem
Rem set MSVCDir=C:/Program Files/Microsoft Visual Studio/VC98
Rem set MSVCDir=C:/Program Files/Microsoft Visual Studio .NET/Vc7
Rem set MSVCDir=C:/Program Files/Microsoft SDK
Rem NX7
Rem set MSVCDir=C:/Program Files/Microsoft Visual Studio 8/VC
Rem set MSVCDir=C:/Program Files(x86)/Microsoft Visual Studio 8/VC
Rem set MSVCDir=C:/Program Files/Microsoft Visual Studio 9/VC
Rem set MSVCDir=C:/Program Files(x86)/Microsoft Visual Studio 9/VC
Rem NX8.0/NX8.5 wntx64
Rem set MSVCDir=C:/Program Files/Microsoft Visual Studio 10/VC
Rem NX8.0/NX8.5 wntx32
Rem set MSVCDir=C:/Program Files(x86)/Microsoft Visual Studio 10/VC
Rem NX9.0/NX10.0 wntx64
Rem set MSVCDir=C:/Program Files/Microsoft Visual Studio 11/VC
Rem NX9.0/NX10.0 wntx32
Rem set MSVCDir=C:/Program Files(x86)/Microsoft Visual Studio 11/VC
1.1.2 应用向导创建
开发工作开始前需对NX10.0以及Visual Studio 2010进行配置。Project Wizard是NX为用户提供的向导自动生成开发工程的工具,其VC#开发向导保存在%UGII_BASE_DIR%/UGOPEN/vs_files/VC#目录下,复制%UGII_BASE_DIR%/UGOPEN/vs_files/VC#/CSharp Projects文件夹中所有的文件到Microsoft Visual Studio2010/VC#/CSharp Projects目录中;复制%UGII_BASE_DIR%/UGOPEN/vs_files/VC#/VC#Wizards文件夹中所有的文件到Microsoft Visual Studio2010/VC#/VC#Wizards目录中。
在NX10.0命令提示符窗口执行“devenv”运行VS2010,在Visual C#工程模板中选择NX10 Open C# Wizard向导创建工程。
图1 向导创建
利用向导创建的程序由“引用”和“主程序”两部分组成:其中“引用”中包含了NX自带的函数库(如NXOPEN.dll等)和程序中的数据包(如System等)。“主程序”的默认名称为mycalss.cs,主要负责执行程序的开始、调用及结束。调用的程序一般写在窗体程序中,窗体通过主程序激活。
1.2 二次开发窗体设计
采用NX Block UI Styler制作对话框,使用Block UI Styler可以生成包含文本输入、参数输入、目标选择、按钮响应、图片插入等要素的对话框,完全支持NX操作。创建对话框后,生成C#语言源程序代码文件(.cs文件)与NX对话框文件(.dlx文件)。其中.cs文件需要通过API进行编译,生成动态链接库即可以在NX中执行的.dll文件。
通过 Block UI Styler设计的对话框文件是后缀名为“dlx”的文件通常称其为DLX文件。从文件格式上来说.DLX档是一个标准的XML文件,包含了在运行时构建对话框的所有信息客户应用程序使用了DLX对话框文件和编译生成的DLL文件一样,都需要放置在开发根目录的 Application路径下,提供给NX运行时加载使用。
Block UI Styler用户接口主要包含以下几个部分:菜单工具栏,配置对话框,包括布局设计器,属性编辑器,代码生成管理器。
组块目录如图2所示。
图2 组块目录
1.3 二次开发程序调试
第一次运行程序调试时,需要将程序附加到NX进程中,在“工具”选项下选择“附加到进程”。
在弹出的窗口中,选择NX10进程,单击“附加”完成。此时,运行调试命令,程序将启动NX10软件,同时程序将自动生成动态链接库文件(*.dll)。激活NX10,按下Ctrl+U,将弹出调试串口,选择动态链接库文件,完成调试操作。
图3 调试串口
程序调试没有问题后,需要对应用程序进行签名后,才能正式发布,应用程序签名主要包括:添加NXSigningResource.res到方案中,编译成功后,执行SignDotNet.exe,也可以设定在方案中的Post-Bulid event来自动执行签名。
2 开发实例
2.1 程序结构
弹簧设计向导工具在NX建模环境下具备快速打开的接口,并能方便的选择所需设计的弹簧零件向导工具。提供与NX一致的交互式、向导式用户界面,并通过指定矢量和点指定弹簧在三维NX CAD模型空间的位置,包括矩形压缩弹簧、矩形拉伸弹簧、扭簧、多股压缩弹簧、多股拉伸弹簧和片簧等六种类型的定义、参数的输入界面、几何参数的计算结果显示界面。利用交互式用户界面,通过对弹簧名称的定义、弹簧位置的确定、弹簧参数化的输入以及显示结果的检查,将自动生成矩形拉伸弹簧三维模型,并同时完成对弹簧三维模型的变形处理[6],以上六类弹簧的输入输出参数如表1~6所示。
表1 矩形压缩弹簧输入输出参数
表2 矩形拉伸弹簧输入输出参数
续表2
输入参数输出结果3)圆钩环压中心7)螺旋角提供如下参数的输入:8)K1)中间直径2)垂直边长3)平行边长4)有效圈数
表3 扭簧输入输出参数
表4 多股压缩弹簧输入输出参数
表5 多股拉伸弹簧输入输出参数
表6 片簧输入输出参数
典型弹簧设计向导结构方案如图4所示。
图4 设计向导结构
2.2 接口
在NX环境中,创建典型弹簧三维设计、弹簧简化视图的接口,方便调用。
2.3 逻辑流程图
在NX建模环境中,选择“典型弹簧三维设计”菜单,在弹出的下拉菜单中选择“XX簧”,或者在“典型弹簧三维设计”工具条中选择“XX簧”图标,即可进入相应的弹簧向导界面;
在弹簧向导界面中“名称与位置”步骤,在“弹簧名称”控件中输入弹簧的名称,在“指定矢量”和“指定点”控件中选择弹簧旋转的方向及放置位置;
进入“输入参数”步骤界面,进行一些参数的选择或者输入,在“旋向”控件中可选择“左旋”或者“右旋”。在“弹簧样式”中可选择“矩形”或者”圆柱形”,在“端部结构”控件中,选择“并紧磨平”、“并紧不磨平”、“不并紧”三种端部情况。然后在“输入参数”中输入:中间直径、自由高度、有效圈数等弹簧参数;
进入“显示结果”步骤界面,在此步骤中,可以查看弹簧的相关输入参数及一些计算参数,若符合设计要求,点击完成即可生成相应的弹簧三维模型。若不符合则可以点击“上一步”进行参数修改,生成相应的弹簧三维模型。
图5 典型弹簧三维设计逻辑流程图
2.4 设计实例
以矩形压缩弹簧为实例,主要包括建立弹簧相关参数表达式,创建弹簧三维模型,进行二次程序开发。矩形压缩弹簧按钢丝旋转方向可分为左旋和右旋,按弹簧横截面可分为圆柱形截面和矩形截面,按端部结构可分为端部不并紧、端部并紧、端部并紧并磨平。在进行参数表达式建立以及二次开发时,都要能够满足。
建立弹簧相关参数表达式,基于表达式驱动创建弹簧三维模型。
图6 参数表达式
主要包括创建项目、编写代码、进行程序编辑与调试、编制菜单文件,进行程序注册。
其中源代码最主要的就是建立程序与表达式之间的联系,使用C#语言与NX Open API完成表达式与程序之间关系的建立,主要代码如下:
stringarraylist01[1] = "输入参数:";
stringarraylist01[2] = "弹簧中径D = " + eD.GetProperties().GetDouble("Value").ToString();
stringarraylist01[3] = "垂直边长a = " + ea.GetProperties().GetDouble("Value").ToString();
stringarraylist01[4] = "平等边长b = " + eb.GetProperties().GetDouble("Value").ToString();
stringarraylist01[5] = "自由高 H0= " + eH0.GetProperties().GetDouble("Value").ToString();
stringarraylist01[6] = "有效圈数n = " + en.GetProperties().GetDouble("Value").ToString();
stringarraylist01[7] = "总圈数 n1= " + en1.GetProperties().GetDouble("Value").ToString();
编制菜单文件:
VERSION 143
EDIT UG GATEWAY_MAIN_MENUBAR
AFTER UG HELP
!MENU INTEGRAT
CASCADE_BUTTON_MENU_CLASSIC_PART_DESIGN
LABEL 典型弹簧三维设计
!END_OF_MENU
END_OF AFTER
MENU_MENU_CLASSIC_PART_DESIGN
BUTTON BTN SPRING_Rectangle_Cylinder_Compression
LABEL 矩形压缩弹簧
BITMAP Rectangle_Cylinder_Compression_Spring.bmp
ACTIONS Rectangle_Cylinder_Compression_Spring _cs.dll
基于上述创建的表达式,利用NX的规律曲线命令创建弹簧螺旋线,如图7所示。
图7 螺旋线视图
利用草图命令创建弹簧矩形截面,再利用扫掠命令创建弹簧实体模型,如图8所示。
图8 截面及实体视图
2.5 实验结果与分析
二次开发调试完成后,可形成弹簧设计向导,本次以矩形压缩弹簧为例,首先分析矩形弹簧的主要参数如下。
弹簧丝截面尺寸:垂直轴向方向的垂直边长a,平行轴向方向的边长b,其对角线长度为d;
弹簧外径D:弹簧的最大外径;
弹簧内径D1:弹簧的最小内径;
弹簧中径D2:弹簧的平均直径,计算公式为:D2=(D+D1)÷2=D1+a=D-a。
有效圈数n:弹簧能保持相同节距的圈数。
支撑圈数n2:为了使弹簧在工作时受力均匀,保证轴线垂直端面,制造时,常将弹簧两端并紧。并紧的圈数仅起支撑作用,称为支撑圈。一般有1.5、2 T、2.5 T,常用的是2 T。
总圈数n1:有效圈数与支撑圈的和。即n1=n+n2。
自由高H0:弹簧在未受外力作用下的高度。
其次明确弹簧的计算输出参数,主要包括螺距、展开长度、螺旋角、曲度系数。
展开长度:绕制弹簧时所需钢丝的长度。L≈πD2(2+n)。
设定其几何参数为:中间直径20 cm、垂直边长1 cm、平行边长4 cm、自由高度65 cm、有效圈数6、总圈数8;其特性参数为:工作高度1为59 cm、工作高度2为54 cm、试验高度为51 cm、工作载荷1为15 N、工作载荷2为30 N、试验载荷为39 N。
根据输入的弹簧参数进行理论计算,可生成螺距t=9.83 mm、展开长度L=502.65 mm、螺旋角α=8.9、曲度系数K=1.32,随后即可在NX环境内生成具体弹簧模型。
3 结论
从图9可以看出,应用此设计程序建成的矩形压缩弹簧符合设计输入要求,其三维标注的参数与理论计算保持一致,且能便捷的生成二维简化弹簧图。
图9 弹簧视图
本文应用基于C#的NX OPEN API二次开发的方法以及三维零件参数化设计,最终实现了矩形压缩弹簧、矩形拉伸弹簧、扭簧、多股压缩弹簧、多股拉伸弹簧和片簧等6种弹簧的快速设计以及弹簧简化视图。目前,已经在实际产品设计过程中得到了应用和验证,大幅减少了设计师的重复劳动,有效提升了常用弹簧设计效率和质量。