APP下载

基于Solidworks 二次开发的发动机活塞参数化设计

2019-09-11刘金凤张现广

汽车实用技术 2019年16期
关键词:文本框数据表二次开发

刘金凤,张现广

(1.长安大学汽车学院,陕西 西安 710064;2.上海海事大学物流工程学院,上海 201306)

前言

活塞是汽车发动机的重要组成部件,在工作过程中承受较高的机械负荷和热负荷,因此其设计质量的优劣直接关系到发动机的工作可靠性,继而影响汽车的工作性能。随着计算机技术的不断发展,如同大多数机械零件的设计一样,汽车发动机活塞的设计过程中也广泛应用了CAD 技术。而在CAD 技术的实际应用中,参数化设计技术是目前主流的发展方向之一。参数化设计技术大多通过对某款三维设计软件(如Solidworks,Pro/E,CATIA,UG 等)进行二次开发,以实现在输入基本参数的情况下自动建立零件的三维模型。这种方法解决了传统设计方法在设计大量结构相似而几何参数不同的零件时重复工作量大的问题,提升了设计的工作效率。

1 Solidworks 二次开发技术

Solidworks 通过OLE 和COM 技术提供了丰富的官方应用程序接口(API)以方便用户通过二次开发对其功能进行定制。用户编写的程序通过API 可以访问Solidworks 的各种功能。

Solidworks 中所有的操作都包含在Solidworks API 对象的属性或者方法中。本课题的开发常用的为Sldworks 对象和ModelDoc2 对象。Sldworks 对象是最高层次的对象,Solid works 软件中对文件的打开、关闭、保存等操作包含在此对象的属性或者方法中,在编写二次开发程序时,首先应当声明的对象便是Sldworks;ModelDoc2 是Sldworks 对象的子对象,该对象的属性以及方法包含了参数修改、目标选取等操作。

支持OLE 和COM 技术的编程语言(VB/VB.net、C++、C#等)都可以用来进行Solidworks 二次开发[1]。C#是目前较为流行的编程语言之一,相对简单易学且功能强大,适合作为Solidworks 二次开发的编程语言[2]。

Solidworks 本身自带有宏录制工具,通过宏录制可以记录下相关操作的宏代码,然后删除宏代码中一些辅助操作的代码(如缩放,视图转换等),即可使用。这种方法可以快速地获取相关操作所用到的Solidworks API 对象中的方法或属性,特别适合初学者。

Solidworks 二次开发产生的应用程序有两种形式:AddIn插件形式以及独立的EXE 程序形式。前者作为插件集成到Solidworks 中,后者独立于Solidworks,跨进程调用Solid-works API。后者在运行时较为稳定,因此本课题开发独立的EXE 程序形式。

基于Solidworks 二次开发的参数化设计方法有两种:编程驱动法与尺寸驱动法[3]。前者是将整个零件模型的绘制过程用代码描述,从无到有地生成模型。这种方法需要编程大量的代码,且对计算机性能要求比较高;后者是预先定义一个零件模板,并将该模板的尺寸参数设定为变量,通过改变这些变量的赋值来快速地生成一系列结构相似但尺寸不同的零件。这种方法代码量少且执行效率高,因此本课题选用尺寸驱动法。

2 发动机活塞的结构分析

图1 活塞结构示意图

发动机活塞的设计中的重要结构参数有:活塞高度、活塞外径、火力岸高度、环岸高度、压缩高度、裙部高度以及销孔内径等[4],如图1 所示。此外,活塞外径与其他结构参数尺寸之间应当满足一定的比例关系[5],如表1 所示。

表1 活塞结构参数代号及其比例关系

表1 中的参数为参数化设计的变量,此外,为加强活塞头部的设计细节,额外选取第一环岸高度c1 以及第二环岸高度c2 作为设计变量[6]。

3 活塞参数化设计系统的实现

3.1 人机交互界面的设计

依据本课题的设计需求,用户应当能够通过活塞参数化设计系统的人机交互界面建立与Solidworks 软件的连接、加载活塞的模型、输入活塞的关键尺寸参数、对活塞参数库进行存取以及生成新的活塞模型等操作。

完成后的人机交互界面如图2 所示。在进行参数化设计之前,用户先通过界面上侧的菜单栏相关命令进行打开Solidworks 软件以及加载活塞的模型等准备工作;完成准备工作后,结合界面中部的活塞参数尺寸示意图,在界面左侧的文本框中输入相关的参数,或者通过下拉框选取活塞参数库中的尺寸参数,当文本框填写完成后,即可生成新的活塞模型,或者将输入的参数存储到活塞参数库中。

图2 活塞参数化设计系统人机交互界面

3.2 系统与Solidworks 的连接

由于参数化设计系统是独立的应用程序,与Solidworks分属两个独立的进程,因此需要实现系统对Solidworks 的跨进程调用。

当Solidworks 处于关闭状态时,通过菜单栏的“打开Solidworks”选项即可完成Solidworks 的启动。相关的实现代码如下:SldWorks swApp = null;//声明一个SldWorks 对象swApp = new SldWorks();//实例化SldWorks 对象swApp.Visible = true;// Solidworks 窗口可见

当Solidworks已经处于打开状态时,需要获取Solidworks的进程,实现代码为:

get_swProcess("",getProcesson("SldWorks"),"Sldworks.Application");//获取solidworks 进程get_swProcess 与get Processon 函数的详细定义见参考文献[7]。

3.3 活塞模板的加载

基于尺寸驱动的参数化设计方法需要加载预先设计好的活塞零件模板(为保证该模板的重用性,应当将模板的文件属性设定为“只读”。),相关的代码如下:

string filepath = @"D:汽车实用技术活塞Piston. SLD-PRT"; // 活塞模板的保存文件路径 int IntError = -1,IntWraning = -1;

swApp.OpenDoc6(filepath, 1, (int)swOpenDocOptions_e.swOpenDocOptions_LoadModel, "", IntError, IntWraning);//Sldworks 对象中的OpenDoc6 方法

3.4 尺寸约束的实现

为保证用户输入的数值符合表1 中的比例关系,可以对与活塞直径参数有关联的文本框内容进行控制,以活塞高度参数对应的文本框为具体实现方式如下:

if (textBox2.Text != "")//当文本框内容不为空时进行约束

{

if (0.6 * Convert.ToDouble(textBox1.Text) > Convert.ToDouble(textBox2.Text) || Convert.ToDouble(textBox1.Text) <Convert.ToDouble(textBox2.Text))//约束条件

{

MessageBox.Show("输入的活塞高度值不符合比例关系!");//弹出提示

textBox2.Clear();//清空文本框

}

}

3.5 模型参数的修改

基于尺寸驱动的参数化设计方法最核心的内容便是对活塞零件模板的尺寸参数进行修改。ModelDoc2 对象包含了代表草图尺寸参数的属性,通过对这些属性的修改即可完成对草图尺寸参数的修改,继而通过重建模型即可完成对零件模板的修改。

下面以活塞高度的尺寸修改为例来说明具体实现代码:

double H = Convert.ToDouble(textBox2.Text);//将输入值传递到变量H 中。

ModelDoc2 SwPartDoc = (ModelDoc2)swApp.ActiveDoc;//声明一个ModelDoc2 对象。

SwPartDoc.Parameter("D3@草图 1").SystemValue=H/1000.0;//修改参数。D3@草图1 表示草图1 中代号为D3 的尺寸参数;参数的默认单位为m,而设计时往往以mm 为单位,因此需要单位换算。

SwPartDoc.EditRebuild3();//重建模型。

3.6 基于SQL Server 2008 的活塞参数库

3.6.1 数据表的设计

在名为" Piston "的数据库中建立一个" PistonParameter "的数据表。数据表的第一个字段" ID "为活塞的型号,其余字段代表图4 中的各个参数。由于字段值大小写不敏感,因此参数h 和d 分别的字段分别为hh 和dd。数据表各字段的属性如表2 所示。此外,SQL Server 2008 字段没有double 类型,在这里可以用float 类型代替。

表2 数据表字段及属性

3.6.2 参数库的读取

当用户通过界面中的下拉框选取活塞的型号时,该型号对应的各个参数便会自动地填充到界面对应的文本框中。

(1)首先,建立与数据库" Piston "的连接[8]:

string constr = "Server=localhost;database= Piston; Integra-ted Security=True";//SQL 字符串语句;

SqlConnection con = new SqlConnection(constr);//建立连接。

(2)建立连接后,在" PistonParameter "数据表中查询所选取型号对应的参数:

sql_str = "select D,H,H1,H2,hh1,c1,c2,dd from PistonPara-meter where ID ='" + comboBox1.SelectedValue.ToString() +"'";//SQL 查询语句;

SqlDataAdapter myda = new SqlDataAdapter(sql_str, con);//实例化SqlDataAdapter 对象。

(3)然后将查询到数据填充到一个DataSet 对象中:DataSet myds = new DataSet(); //实例化DataSet 对象;myda.Fill(myds, " PistonParameter ");//数据填充。

(4)最后,将DataSet 对象中的数据填充到文本框中,以参数活塞直径" D "的填充为例,代码为:

textBox1.Text = myds.Tables[0].Rows[0]["D"].ToString()。

3.6.3 参数库参数的添加

用户可以将自行输入到文本框中的参数存储到现有参数库中,具体实现方式如下:

(1)首先查询整个数据表,并将所查询到的数据填充到一个DataSet 对象中,该过程的代码与3.6.2 中的步骤(1)~(3)类似,不再赘述,唯一不同的是SQL 查询语句变为:

sql_str = "select ID,D,H,H1,H2,hh1,c1,c2,dd from Piston-Parameter";

(2)然后在DataSet 对象保存的数据表中新建一行,并写入新的参数:

DataRow mydr = myds.Tables[0].NewRow();//新建一行;

string str = Interaction.InputBox("型号需为纯数字", "请输入型号", "", -1, -1);//提示用户输入型号;

mydr["ID"] = int.Parse(str);//将输入的型号存为"ID"字段;

mydr["D"] = textBox1.Text;// 将输入的活塞直径存为"D"字段。

(3)最后更新数据库:

SqlCommandBuilder myscb = new SqlCommandBuilder(myda);

myds.Tables[0].Rows.Add(mydr);//把新建的一行加入到数据表中;

myda.Update(myds, " PistonParameter ");//更新数据库中的数据表。

4 结语

在对汽车发动机活塞结构进行分析的基础上,借助Solidworks 官方的二次开发API,在Visual Studio 2010 开发环境下利用C#语言开发了汽车发动机活塞的参数化设计系统,并依托SQL Server 2008 建立了活塞零件的参数库。用户可以根据设计需求自行输入参数,或者调用参数库中的参数快速建立活塞产品的三维模型,提升了设计效率。此外,用户可以将符合设计需求的参数存储到参数库中,实现设计数据的有效管理。

猜你喜欢

文本框数据表二次开发
AutoCAD 与PDMS 二次开发在三维复杂形体设计建模上的应用
巧用文本框实现PPT多图片排版
例谈对高中数学教材中习题的二次开发
湖北省新冠肺炎疫情数据表(2.26-3.25)
湖北省新冠肺炎疫情数据表
湖北省新冠肺炎疫情数据表
PPT文本框的另类应用
浅谈CAD软件二次开发的方法及工具
例谈课本习题的“二次开发”
图片动画玩异样