郭书英,赵立胜,李世杰,胡雪松,秦兆杰
(河北电力装备有限公司,河北 邯郸 056000)
当前,随着产品设计信息化的不断发展,企业需要提升三维CAD系统的设计效率,应用参数化的设计方法,是减少设计重复性工作,提高设计效率的很好途径。参数化设计就是将三维模型的设计实现数字化,通过更改某一主参数,带动其他参数信息发生变化,进而使用程序驱动模型发生变化[1]。
本研究采用SolidWorks软件与Excel相结合的方法来实现零部件参数化设计。首先将零部件的特性尺寸信息提取到Excel表格中,其次根据设计的需求,筛选出控制三维模型形状和特征的参数信息,然后再设置参数信息之间的逻辑关系,最后通过程序控制这些参数驱动三维模型更新,实现零部件的参数化设计。
对SolidWorks软件的二次开发,主要是通过其自带的API接口实现,这些API接口具有很好的兼容性,与其他的开发软件能够实现无缝衔接,同时也提供了功能函数的使用方法、属性以及相关应用案例。Excel的宏功能与SolidWorks的API接口相结合,能够访问并操作SolidWorks,实现SolidWorks的二次开发。
SolidWorks二次开发的方式有两种,第一种是基于自动化技术,通过EXE形式的开发,可制定人机友好互动界面,便于用户操作;第二种是基于组建对象模型,即开发完成程序后,再生成DLL文件,作为一个插件嵌入到SolidWorks软件的应用界面上。EXE软件独立运行,出现问题时,不对SolidWorks产生影响,利于提升用户的体验;DLL插件不稳定,就会干扰SolidWorks的正常运行,严重影响用户的体验。
SolidWorks三维软件是当前最流行的三维CAD软件之一,也是国内外用户较多的软件之一。SolidWorks API接口为用户提供了大量的OLE对象以及对象的应用方法和应用案例,具体的关系层次如图1所示。由图1可知,SolidWorks API是由上至下的分层树结构,在调用SolidWorks API 功能时,首先需要利用SldWorks为接入口,与SolidWorks实现连接,访问SolidWorks API,然后调用与其相关的子对象的属性和方法[2]。
SolidWorks软件操作简单方便,也具有良好的开放性,为用户提供了C#、C++、VB、Visual Basic、Delphi等多种编程语言的二次开发接口,利于对其进行二次开发。VBA的编程比较简单,利于对SolidWorks进行二次开发;C++主要用于做底层驱动,应用时主要与硬件相结合;C#主要应用于大规模系统的开发。
SolidWorks自带宏录制功能,可以将用户的操作以VBA的代码记录下来,通过查看宏代码能够找到需求的功能代码,同时Excel可直接运行VBA代码,并且能够将SolidWorks的三维模型的参数信息提取并显示到表格中,直观性强,操作方便,因此适合采用Excel作为SolidWorks的二次开发工具[3]。Excel具备数据处理功能,利用这一功能设置参数信息间的关联关系,实现参数信息的联动修改,再利用这些参数信息驱动模型发生相应变化,从而实现参数化的设计,具体流程如图2所示。
图1 SolidWorks的对象层次体系
图2 SolidWorks二次开发零件参数化设计实现流程图
本节内容主要说明如何实际开发一个零部件实现参数化设计的过程,并附有相关的程序代码。此种开发的方法可用于多种产品,范围广,适用性强,以KYN28高压柜中的避雷器安装板三维模型为例,展示其实现参数化设计的整个过程[4]。
首先在Excel的宏模块中定义需要用到的关键词,代码如下:
Public swApp As Object, swModel As Object, swFeatMgr As Object
Public selData As Object, selMgr As Object
Public lstatus As Long, lWarnings As Long, lErrors As Long
Public swFileTYpe As Integer
实现Excel与SolidWorks连接并激活窗口的代码如下:
Set swApp = CreateObject("SldWorks.Application")
Set swModel = swApp.ActiveDoc
Excel与SolidWorks完成连接,打开目标三维模型后,则需要提取模型的参数信息,实现此功能的相关代码如下:
Set swDispDim = swFeat.GetFirstDisplayDimension
Set swDim = swDispDim.GetDimension
Set swDispDim = swFeat.GetDisplayDimension(swDispDim)
三维模型的参数信息提取完成后,需要将结果输出到Excel的表格中,实现此功能的部分代码如下:
Range("B4")="主参数"
Range("B5")="参数名称"
Range("G5")=swFeat.GetFirstDisplayDimension
Range("G6")=swFeat.GetNextDisplayDimension(swDispDim)
三维模型的参数信息输出完成后,根据实际的设计需求,利用Excel本身数据处理功能设置参数信息之间的关联关系,实现参数信息的联动修改,如图3所示。
图3 避雷器安装板模型参数信息图
Excel表格上的三维模型参数信息实现联动修改后,利用这些参数信息驱动模型更新,实现零件的参数化设计,驱动模型变化的相关代码如下:
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Dim myModelView As Object
Set myModelView = Part.ActiveView
Part.Parameter(“D1@草图1"& strFileName).SystemValue=d/1000
Part.Parameter(“D1@草图22"& strFileName).SystemValue=d/1000
利用Excel驱动避雷器安装板三维模型发生变化,如图4所示。
图4 Excel驱动避雷器安装板三维模型变化
本文阐述了利用Excel二次开发SolidWorks实现零部件参数化设计的方法和具体流程。实现零部件参数化设计的方法简单,可扩展性强,无需维护代码,便于设计人员的使用,可以减少设计的重复性工作,提高设计效率。该参数化设计基于Excel与SolidWorks软件,编程简单,通用性较强,利于开发,为开发人员提供了SolidWorks的二次开发新思路。