基于SolidWorks二次开发的球阀阀体参数化设计
2020-04-22张小鹏王洪申王学丰
张小鹏,王洪申,王学丰
(1. 兰州理工大学 机电工程学院,甘肃 兰州 730050; 2. 维都利阀门有限公司,浙江 温州 325024)
0 引言
SolidWorks是一款基于windows的三维CAD软件,因其具有操作简单、易学易用的特点而广泛运用于各行各业[1]。阀门是工业生产中不可缺少的流体设备之一。球阀被广泛应用在石油炼制、长输管线、化工、造纸、制药等行业。在国家标准中定义球阀为阀杆带动球体、球体绕球阀轴线作旋转运动的一类阀门[2]。球阀形状特点是结构相对固定,同类球阀拓扑结构具有高度一致性,产品型号具有系列化特征,是进行参数化设计的理想对象。通过二次开发三维软件的方法将同一型号的阀门参数归纳、整理,并通过可视化窗口统一输入,自动生成三维模型,可提高阀门的设计效率,降低开发成本,缩短新产品的开发周期。
1 球阀的结构及工作原理
球阀是带有圆形通道的启闭件,通过手柄绕垂直于通道的轴线旋转,球体随着阀杆的转动从而达到启闭通道的作用[3]。设计时,阀体的流道孔中心与球体(启闭作用)流道中心对准时为全开状态,通过阀杆传力将球体绕转轴转动90°时,球阀将处于完全关闭状态,如图1所示。球阀的结构使得它有以下几点优点:
1) 因球阀左右通道相同,故其安装位置相对自由,介质的流向可以任意给定,流体阻力小;
2) 结构简单,密封性能良好且容易维修;
3) 球阀适用于经常操作、启闭迅速方便的场合,适用范围广。
图1 球阀工程图
2 SolidWorks二次开发原理和关键技术
SolidWorks的应用程序接口(application program interface,API)是一个基于对象的嵌入与链接(object linking and embedding, OLE)或组件对象模型(component object model, COM)的编程接口[4]。目前对于SolidWorks的二次开发大概分为两种,SolidWorks内置宏和微软的Visual Studio(支持VB.NET、C#、C++)。SolidWorks API是一个多层次的自上而下的树形网络结构,如图2所示。因此,对于SolidWorks类对象的访问也是通过自上而下访问的方法。SldWorks是根目录对象类,位于应用程序的底层,是访问SolidWorks API所有对象的入口[5]。本文使用SolidWorks-API-SDK 2016提供的接口,通过Microsoft Visual Studio 2010进行二次开发。
图2 SolidWorks API接口对象
3 球阀阀体参数化设计
3.1 二次开发流程
基于SolidWorks的二次开发思路有两种,一种是完全程序化参数建模,这种方法是一种自下而上的建模方法,由最底层的点、线、面构成图形,该方法的缺陷是若零件较为复杂,则编程量太大,且专业要求较高。另一种方法是在三维模型的基础上驱动尺寸,这种方法是一种自上而下的建模方法,即在保证零件结构不发生变化的情况下,建立好零件模板,运行时只需指定尺寸值,由尺寸自动定位到相应的尺寸变量。该方法的优点是编程量少,特征间约束由模型自动产生,采用这种方法可以利用SolidWorks自身的参数化及编程技术优势,因此所需编写的程序代码相对简单[6]。图3为阀门参数化流程。
图3 阀门参数化设计流程
3.2 阀体的三维建模
作为参数化设计的基础,零件的三维建模显得尤为重要,建模的方法及顺序会直接影响参数化设计的结果。为确保参数化的正确性,在建模过程中必须要添加合理的约束,以实现参数的全约束,包括几何约束和工程约束。几何约束分为结构约束和尺寸约束,如长度、宽度、角度等约束为尺寸约束;如平行、垂直等指几何元素之间的拓扑关系的约束为结构约束[7]。绘制完成后,在特征树中右键单击【注解】,选中显示特征尺寸,并在【立即视图工具栏区】选中显示尺寸名称,也可以通过设计需要改变名称。在球阀的设计过程中,涉及的主要参数包括法兰尺寸、壁厚、球阀结构长度等,将这些参数作为全局变量,如表1所示。
表1 全局参数 单位:mm
全局变量可以用于驱动尺寸作为唯一的数值,通过SolidWorks自带的方程式功能将参数之间建立关联,在SolidWorks中方程的形式是:因变量=自变量。
例如在方程式“D9@草图1”=“D8@草图1” / 2中,系统会根据尺寸D8求解尺寸D9,一旦方程式写好并应用到模型之后,尺寸D9就不能直接修改,方程式建立完成之后的模型如图4所示。
图4 建立模型
3.3 配置及创建系列零件表
在SolidWorks软件中,配置管理器是SolidWorks中非常独特的一部分功能,它提供了简便的方法来开发和管理一组尺寸不同、特征相似的一系列零件。在工具栏【插入】中点击设计表,在弹出的对话框中选择上一步的全局尺寸作为参数添加到设计表中,如图5所示。
图5 系列零件表
4 系统实现
根据上述步骤,通过SolidWorks二次开发接口,对配置管理进行二次开发,创建人机交互对话框,输入参数生成不同尺寸的零件,从而实现参数化。
4.1 新建项目
在SolidWorks二次开发过程中,非模态对话框创建的过程如下:
1) 插入一个新的对话框,ID默认即可;
2) 可以直接双击对话框空白处或者在右键为对话框添加类,在弹出的类对话框中输入类名(BallDlg),点击确定;
3) 在工程.cpp文件中添加包含对话框头文件的语句#include “FirstDlg.h”,并添加非模态对话框的初始化代码:
BallDlg dlg=new BallDlg (AfxGetMainWnd());
4) 将设计好的对话框与SldWorks对象联系起来,即为对话框添加成员函数。
在BallDlg.h中定义:
voidgetSW(ISldWorks *Sw);
在BallDlg.cpp中声明:
void BallDlg::getSW(ISldWorks *Sw)
this->ball_iSldWorks_dlg=Sw;
}
4.2 添加对话框控件
添加如图6所示控件,在资源管理器选项卡bitmap中,将球阀阀体的位图加入到界面中。为生成三维图按钮添加事件处理程序,关键代码如4.3节所述。
图6 球阀参数输入界面
4.3 程序及函数说明:
UpdateData(TRUE);
CComBSTRfileName(_T("..\ball valve.SLDPRT")); //打开文件
CComPtr
VARIANT_BOOL retval=VARIANT_TRUE;
计划建设是执行实施的基础,执行实施是评价检查的前提,评价检查是优化改进的关键,上一环是下一环有序开展的先决条件。优化改进阶段是内控闭环建设的核心和关键点,是内控闭环形成的重要环节。
m_iSldWorks_dlg->OpenDoc6(fileName,swDocPART,Options,NULL,&Errors,&Warnings,&m_iModelDoc); //打开文件
CComPtr
CComPtr
m_iModelDoc->get_ConfigurationManager(&pConfigurationManager); //获得配置名
CString a0=L"D1@草图2";
CString a1=L"D111@草图14";
CString a2=L"D2@草图14";
……
pConfigurationManager->ISetConfigurationParams ( Name, paramCount, paramNames, paramValues, &retval);
m_iModelDoc->ViewZoomtofit( ); //视图设定
在本程序中,首先输入配置的名称和各尺寸的参数值,获得当前模型的配置管理器对象并使用程序接口添加一个新的配置,然后通过程序更改三维模型的参数,实现零件的参数化设计。表2说明了在SolidWorks API函数中打开文件函数OpenDoc6各参数的意义。
表2 SldWorks->OpenDoc6各参数的说明
4.4 添加菜单
在Addmenus()函数中,将自动生成的代码改为
hret = icmdGroup->AddCommandItem2(L“阀体参数化”, -1, L“阀体参数化对话框”, L“阀体参数化”, 0, callback, enable, MAIN_ITEM_ID1, menuToolbarOption, &cmdIndex0)。
4.5 异常处理
在程序中增加条件语句,对其进行判断,不仅可以有效地提示用户出现错误的类型和位置,还可以通过return()函数实现跳转,避免SolidWorks出现运算错误而重启。例如:
If(swPart=NULL)
{
AfxMessageBox(“阀体参数化设计失败!”);
Return;
}
4.6 编译并加载.DLL文件到SolidWorks
将设计好的阀体参数输入到可视化界面中,尺寸参数通过从人机交互界面读取并驱动模型得到如图7所示结果。
图7 运行结果
5 结语
本文介绍了在visual studio 2010环境下开发动态连接库的方法,最终将编译生成的DLL文件注册到SolidWorks软件中,实现了基于SolidWorks平台的球阀阀体参数化设计,使同类球阀的设计难度降低,加快产品的设计效率。