李之圆,吴群彪,,梁 涛,陈 涛,方海峰,
(1.江苏科技大学机电与动力工程学院,江苏 张家港 215600) (2.江苏科技大学苏州理工学院,江苏 张家港 215600)
减速器作为独立的闭式传动装置连接原动机和工作机,用来增大转矩和降低转速,满足不同的工作需求。减速器的种类很多,按照传动类型可分为齿轮减速器、蜗杆减速器、行星减速器以及它们互相组合而成的减速器。按照传动级数可以分为单级减速器和多级减速器;按照齿轮形状可以分为圆柱齿轮减速器、圆锥齿轮减速器和圆锥圆柱齿轮减速器;按照传动的布置形式可以分为展开式、分流式和同轴式减速器。
国外首先使用个人计算机进行参数化建模与界面实现,并且取得了令人瞩目的成就。Chugunov等[1]研究了SolidWorks二次开发程序在实际应用和优化方面的一些问题,对参数化建模与界面实现进行了比较全面的概述;Yu[2]系统阐述了基于SolidWorks的参数化设计和智能化装配的工作原理与简单的开发方法;Reddy等[3]基于SolidWorks API开发了一套智能化的轴承设计数据库。
目前,国内关于SolidWorks二次开发的研究主要是使用SolidWorks自带的二次开发语言VBA进行各种简单零件加工程序的开发。顾忠新等[4]在减速器箱体类零件的参数化设计中使用SolidWorks自带的VBA工具设计了一款能够快速创建减速器箱体零件的窗口程序,但程序比较简单,只能实现箱体零件的快速建模,不能实现箱体零件的自动化装配;柏子刚[5]利用SolidWorks开发了一款简易软件进行压缩机连杆类零件的快速参数化设计;印立康等[6]利用SolidWorks进行了中型钢设计的二次开发研究。
国内除了利用VBA进行了一些简单零件体的二次开发,还进行了一些关于复杂系统和运动仿真方面的深入研究。刘勋[7]基于SolidWorks进行了带式输送机机架CAD(computer aided design)/CAE(computer aided engineering)系统的开发与研究;汪志军[8]基于SolidWorks二次开发进行了带式输送机CAD系统的研究;赵方舟[9]基于SolidWorks进行了计算机辅助公差优化设计的研究。
VBA比较适合制作一些简单的或者是个人工作用的小工具,VBA编程比C#复杂,VBA所用到类库少,且加载麻烦,而C#编程简单且功能比VBA功能更加全面,因此本文着重介绍C#语言的使用。
本文运用开发工具Visual Studio中的C#编写控制台程序,再用编写好的程序实现SolidWorks的二次开发。
SolidWorks二次开发的工作原理是:通过调用不同的API函数打开SolidWorks以进行不同的操作,如创建坐标系、绘制草图、拉伸实体、对称阵列等等。API工具保证不同应用之间用同一种编程语言进行交互,传递参数,并且这种语言编写的代码在两个程序之间能够互相通过数据传递确保二次开发的程序能成功运行,如C#语言对应的API函数保证了Microsoft.NET平台与SolidWorks三维软件之间的交互与二次开发程序的顺利运行。除了调用相应的API函数外,在SolidWorks与其他平台进行交互与共同开发时,还需要添加相应的引用协议,如在进行二次开发之前,需要添加Microsoft.NET平台与SolidWorks三维软件的引用协议SolidWorks. Interop.sldworks.dll和SolidWorks.Interop.swconst.dll。SolidWorks二次开发工作过程如图1所示。
图1 SolidWorks二次开发工作过程
二次开发的减速器箱体设计程序包含3个窗体界面,其中主界面是程序打开后展现的首个界面,包括1个装配完成状态下的减速器箱体二维示意图和6个按钮控件,6个按钮分别为“打开SolidWorks”“箱体设计”“箱盖设计”“打开装配体”“生成工程图”“退出”。主界面设计如图2所示。
图2 二级减速器箱体设计软件主界面
减速器箱体装配体的示意图通过图片框应用(PictureBox)实现。在进行二次开发时,根据实际图片大小和整个开发窗口的大小,将图片框位置设置为(22,30),图片框大小设置为448×336,将图片来源设置为存放减速器箱体装配体二维示意图的文件夹,并且选择经过调整和修饰的图片。
通过主窗口界面上的箱体设计按钮,链接到箱体设计的子界面上,进行箱体数据的采集与录入。箱体设计界面如图3所示。
图3 箱体设计的子界面
减速器箱体设计的子界面包含25个标签控件(Label)、25个文本框控件(TextBox)和3个按钮控件(Button)。其中,标签控件用来设置提示文本,文本框控件用来录入数据,按钮控件用来执行保存数据、建立箱体三维零件、绘制二维工程图与关闭当前箱体设计子窗口等操作。
在完成箱体的设计之后,用户返回主界面,再通过主界面上的箱盖设计按钮,链接到箱盖设计的子界面上,进行箱盖数据的采集与录入。箱盖设计界面如图4所示。
图4 箱盖设计的子界面
箱盖设计子界面一共包含9个标签控件(Label)、9个文本框控件(TextBox)和3个按钮控件(Button)。与箱体设计界面类似,标签控件用来设置提示文本,文本框控件用来录入数据,创建三维图按钮控件用来绘制三维模型,绘制工程图按钮用来绘制对应工程图并且进行标注,退出按钮用来关闭当前子界面并返回主界面。
在SolidWorks二次开发中,API函数中包含一个通用sldwork对象,sldwork对象存在一个通用的文档对象ModelDoc2,可以通过SolidWorks API函数将SolidWorks中的零件体、装配体和工程图3种文档赋给文档ModelDoc2,然后运用ModelDoc2中的方法对3种文档进行修改与调整。
3.1.1预备工作
进行零件体的SolidWorks二次开发时,首先要根据零件体文档的存储地址找到对应的零件体文档,然后将零件体文档赋给文档ModelDoc2,再使用ModelDoc2包含的方法对零件体的各种参数进行修改。以箱盖零件体为例,箱盖零件体的参数来源比较复杂,一部分是从箱体零件上提取的,另一部分是从箱盖设计界面上提取的,首先需要对这些数据进行处理,然后再使用这些数据驱动箱盖零件进行修改。
创建箱盖三维模型之前需要先提取箱体的部分参数,将箱体文档赋给ModelDoc2所创建的对象。根据箱体文档的存储目录,将箱体文档赋给ModelDoc2类对象SWPartDoc,对应步骤和代码如下。
1)打开文档,判断进程:
open_swfile("",getProcesson("SLDWORKS"), "SldWorks.Application");
2)文件目录赋值:
int IntError=-1;
int IntWraning=-1;
string filepath1=ModleRoot+@"箱体.SLDPRT";
3)打开对应路径下的文档,并将这文档赋给SwPartModelDoc2:
SwPartDoc=swApp.OpenDoc6(filepath1,(int)swDocumentTypes_e.swDocPART,(int)swOpenDocOptions_e.swOpenDocOptions_LoadModel, "", ref IntError, ref IntWraning);
3.1.2尺寸驱动法使用
箱体的参数赋给ModelDoc2类对象SWPartDoc,运用ModelDoc2中的方法获得箱体所包含的数据,例如下箱体尺寸部分代码见表1。
表1 下箱体尺寸的部分代码
3.1.3后续工作
在修改完草图尺寸之后,箱盖的三维零件并不会发生改变,还需要使用代码重新编辑箱盖的零件体,才能改变箱盖零件三维模型的尺寸。
在重新编辑完零件体之后,按照输入的尺寸使用尺寸驱动法生成箱盖零件体,如图5所示。
图5 箱盖零件体
SolidWorks二次开发的另一项重要功能是绘制工程图,并且实现自动化标注,这项功能能够极大节省设计人员绘制二维图的时间,设计人员可以在二次开发生成的工程图的基础之上,进行简单的修改与零件剖视图的生成,快速完成零件体与装配体的二维图绘制。
利用SolidWorks生成零件体的工程图并进行修改的方法与三维模型的修改与装配方法类似,需要先打开零件体的工程图,其步骤和代码如下。
1)打开文档,判断进程:
open_swfile("", getProcesson("SLDWORKS"), "SldWorks.Application");
2)文件目录赋值:
int IntError=-1;
int IntWraning=-1;
string filepath2=ModleRoot+@"盖.SLDDRW";
3)创建一个新的ModelDoc2的文档用来存放打开工程图:
ModelDoc2 SwDrawDoc=swApp.OpenDoc6(filepath2,int)swDocumentTypes_e.swDocDRAWING,(int)swOpenDocOptions_e.swOpenDocOptions_LoadModel, "", ref IntError, ref IntWraning);
4)重新编辑工程图:
SwDrawDoc.EditRebuild3();
在生成的基础零件图上,开发者可以预先进行一些简单的参数标注,标注样式如图6所示。使用者还可以根据具体情况,在基础零件图上再增加或者删除一些参数,以满足自己的设计要求。
零件体工程图的标注包含了很多细节,如图7所示是箱盖零件体俯视图的局部展示。
图6 零件体三视工程图
图7 零件体工程图局部展示
与3.1.1相同,步骤和代码如下。
1)打开文档,判断进程:
open_swfile("", getProcesson("SLDWORKS"), "SldWorks.Application");
2)文件目录赋值:
式中:GNOx为澳斯麦特炉产生的氮氧化合物质量;B为消耗的粉煤量,暂定4 700 kg/h;β为燃料中氮的转化率,25%;N为燃料中的含氮量,某冶炼厂燃煤中含氮量为1.29%。
int IntError=-1;
int IntWraning=-1;
string filepath1=ModleRoot+@"减速器.SLDASM";
3)创建一个新的ModelDoc2的文档用来存放打开装配体:
ModelDoc2SwAssemDoc = swApp.OpenDoc6(filepath1,(int)swDocumentTypes_e.swDocASSEMBLY,(int)swOpenDocOptions_e.swOpenDocOptions_LoadModel, "", ref IntError, ref IntWraning);
以一组装配基准为例,说明配合驱动的方法,首先定义两个零件体上需要配合的特征,然后选择合适的装配方法进行装配,步骤和代码如下。
1)定义需要装配的一组基准对应的SelectByID2的字符串名称:
#region 装配一对基准;
2)清空选择集后,选中基准面:
string MateBaseName2="RectangleWireConnectFace@PlugBottomBox-1@PowerStrip";
3)清空选择集后,选中基准面:
swAssemModleDoc.Extension.SelectByID2(MateBaseName1, "PLANE", 0, 0, 0, false, 1, null, 0);
4)在选择集中附加选择与之配对的基准: swAssemModleDoc.Extension.SelectByID2(MateBaseName2, "PLANE", 0, 0, 0, true, 1, null, 0);
5)添加两个基准之间距离为20 mm的距离配合:
int x=-1;
Mate2 SwMate = SwAssem.AddMate5(5, 1, true, 0.02, 0.02, 0.02, 0, 0, 0, 0, 0, false, true, 0, out x);
6)配合也是特征,将其转化为特征对象:
Feature swMateFeature=(Feature)SwMate;
7)配合特征重命名:
if (swMateFeature !=null)
{
swMateFeature.Name="测试距离配合";
}
#endregion
利用SolidWorks生成零件体工程图并进行修改,需要先打开装配体的工程图,步骤和代码如下。
1)打开文档,判断进程:
open_swfile("", getProcesson("SLDWORKS"),
"SldWorks.Application");
2)文件目录赋值:
int IntError=-1;
int IntWraning=-1;
string filepath2=ModleRoot+@"减速器.SLDDRW";
3)创建一个新的ModelDoc2的文档用来存放打开的工程图:
ModelDoc2 SwDrawDoc=swApp.OpenDoc6 (file path2, (int)swDocumentTypes_e.swDocDRAWING, (int)swOpenDocOptions_e.swOpenDocOptions_LoadModel, "", ref IntError, ref IntWraning);
4)重新编辑工程图:
SwDrawDoc.EditRebuild3();
在生成的基础装配图上,开发者可以预先进行一些简单的参数标注,标注样式如图8所示。使用者也可以根据具体情况,在基础装配图上再增加或者删除一些参数,以满足自己设计的要求。
图8 装配体三视工程图
装配体工程图的标注包含了很多细节,如图9所示是减速器箱体主视图的局部展示。
图9 装配体工程图局部展示
本文运用C# 语言结合API函数对SolidWorks进行二次开发,设计了一款能在Windows系统中独立运行的减速器箱体设计软件,该软件能够实现减速器箱体零件的快速参数化建模和工程图生成,并能够实现自动化装配和生成装配图。本文的方法能够大大提高减速器箱体的设计效率,并可为其他复杂曲面结构的参数化建模与装配提供具有参考意义的思路。