1. 引言
计算机辅助设计简称CAD,是英文Computer Aided Design的缩写。它是指工程技术人员以计算机为工具进行设计的全过程:包括资料检索、方案构思、计算分析、工袒嫱己捅嘀萍际跷募等,是随着计算机、外围设备及其软件的发展而形成的一种综合性高新技术。现代切削加工正朝向高速、高效和高精度方向发展,这对机床结构和性能提出了越来越高的要求,如高转速、大功率、宽调速范围、低噪音、动态性能好、可靠性高等。而机床主传动系统是机,设计中的关键,因此,如何适应市场需求,在复杂多变市场经济中,快速高质地设计制造出市场所需的切削加工设备是制造行业实力、科技水平的体现。 所以将计算机辅助设计(CAD)技术应用到机床设计当中一直是众多厂家追求的目标。我国以前的机床设计多用绘图板,进行手工绘制,,样工作量往往会很大,造成开发的周期过长,而且设计过程中容易出错。因此,如何把计算机应用到机床设计中去,如何开发出一套通用的、行之有效的机床主传动系统设计软件,是我们写本文的动机所在。
2.面向对象的程序设计方法
面向对象(Object-oriented)作为一个概念起先是软件系统设计与实现的一种新方法,由于这种思维方法的巨大优势已使得它在其它的各个领域也产生了越来越广泛的影响。
面向对象方法是一种围绕现实世界概念来建造对象模型的全新的表示现实物体,解决问题的方法。它的可扩充性和可重用性极大的提高了系统的开发速度,它通过对设计参数的封装与隐藏,设计与实现分离来控制软件的复杂性和可维护性。
面向对象方法学的中心是围绕着对象、类、消息、继承性、多态性和动态联编等概念、机制和原理展开的。其中,对象、类是这一方法的核心,消息闪接它们的纽带,继承性是这一方法的独特贡献,而多态性和动态编联使这一方法更加完美。
面向对象的方法学认为:客观世界是由各种“对象”所组成,任何事物都是对象,每个对象都有自己的运行规律和内部状态。通过类比,具有相同特征和功能的对象形衫啵ü槟桑,每个对象都属于某个“对象类”,都是该对象类的一个实例。不同对象的组合及相互作用就构成了我们要研究、分析和构造的客观系统。对象类之间可以通过继承关系构成类的层次结构,“子类”可以直接继承“父类”的性质和功能(演绎)啥对象之间通过消息相互作用,消息就是通知对象去完成一个允许作用于该对象的操作,该对象将如何完成这个操作的细节被封装在类的定义中,对外界是隐蔽的。
面向对象的分析就是用面向对象的思想来研究问题,并按现实世界的本来面目构造出一个反映问题本质的模桑该模型说明了系统必须做什么,而不是如何做,即做的细节。面向对象的设计就是构造一个问题求解的模型。由于分析模型是用面向对象的方法建立的,它与软件解的结构相似,因此,面向对象的设计是对分析模型的加细(描述对象及其关系是怎样的),以及构造实现中所涉及对象的过伞
面向对象的方法提供了比结构化方法更自然、更合理的概念及技术,而且,它的抽象性、封装性、继承性、多态性等都比结构化方法更为优越,从而使其成为一种更有力的工具和方法。
3.面向数控机床主传动系统的程序设计
根据面向对象方法的基本原理,建立数控车床主传动系统的概念模型,使用VC作为程序设计的开发工具。由于数控车床主传动系统的设计部分主要是一种参数化设计的过程,因此程序主要以人机交互的方式来完成这项工作。针对这一特点,我把整个系统划分为许多界面,并把这些界面作为实体抽象为一定的对象类。
整个系统的对象类大致如下:
对象类1: 电机型号对话框
对象类2: 变速箱变速级数对话框
对象类3: 传动比对话框
对象类4: 传动3菔对话框
对象类5: 齿轮材料对话框
对象类6: 齿轮模数(按接触)对话框
对象类7: 齿轮模数(按弯曲)对话框
对象类8: 齿轮模数(标准)对话框
对象类9: 同步齿形带计算功率属性页
对象类10:同步齿形带模数属性页
O罄11:大小带轮直径属性页
对象类12:同步齿形带齿数属性页
对象类13:轴径估算对话框
根据上述基本对象类,进一步将数控机床主传动系统的设计部分划分为四个子系统:
根据以上所得基于面向对象分析的系统模型、结构,可直接得到程序的模块分解。有上述的4个子系统,很容易设计出该系统的程序设计部分的总体模块结构。
(1) 运动设计模块
在这一模块中,主要完成确定机床电机型号、机床极限转速、变速级数、传动副传动比及齿轮齿数的工作。
(2) 齿轮设计模块
在这一模块中,主要完成传动齿轮材料和热处理方式的选择、按接触疲劳强度计算传动齿轮模数、按弯曲疲劳强度计算传动齿轮模数及
数圆整的工作。
(3) 同步齿形带模块
在这一模块中,主要完成确定计算功率、齿形带模数、齿形带速比、大小带轮齿数和直径、齿形带宽度及带轮中心距和齿形带齿数的工作。
(4) 轴径估算模块
在这一模块中,主要完成确定车床最
加工直径、一般传动轴直径估算、主轴前轴颈直径估算、主轴后轴颈直径估算及主轴平均内径估算的工作。
根据上述各对象类之间的关系及对系统的模块化划分,同时为了保证设计过程中各对象类的数据传递的有效性。在对象类设计时,首先给每一个对象类封装一部分与该对象类相关的数据成员(属性)。然后在程序中声明与每个对象类相对应的结构体(Struct),结构体包含了与对象类中封装的数据成员一一对应的变量。这些结构体中的变量,在初始化对象类,对象类之间进行数据传递以及保存重要的设计参数的方面都起着非常重要的作用。最后只要在“文档”类中为每个结构体定义一个对象,利用Visual C++中“文档”类和“视”类的一些重要方法来完成这些工作。下图表示了数据之间的组织关系。这些工作也可以直接通过类的对象而不是利用结构体的对象来完成,但出于组织上的协调和管理上的方便,依靠中间桥梁的思想来组织数据和传递数据。
下面以一个具体例子来说明这工作原理:
1.数据封装
l 对象类1:电机型号对话 类名:ACMotorSelectDlg
class ACMotorSelectDlg : public CDialog
{
// Construction
public:
CNCLatheDesignView* pView; // 视类对象(指针型)
CNCLatheDesignDoc* pDoc; // 文档类对象(指针型)
int index; // 交流电机功率列表框选择索引
float power[7]; // 交流电机额定功率数组
long basespeed[7]; // 交流电机额定转速数组
long maxspeed[7]; // 交流电机最高转速数组
ACMotorSelectDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(ACMotorSelectDlg)
enum { IDD = IDD_ACMOTOR_SELECT };
CListBox m_powerlist;
CString m_information;
long m_ebspeed;
long m_emaxspeed;
float m_epower;
//}}AFX_DATA
};
l 对象类2:变速级数对话框 类名:GearShiftSelectDlg
class GearShiftSelectDlg : public CDialog
{
// Construction
public:
CNCLatheDesignView* pView; // 视类指针对象
CNCLatheDesignDoc* pDoc; // 文档类指针对象
double nj; //主轴计算转速
double Rn; // 主轴调速范围
double Rnp; // 主轴恒功率调速范围
double Rp; // 电机恒功率调速范围
GearShiftSelectDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(GearShiftSelectDlg)
enum { IDD = IDD_GEARSHIFT_SELECT };
CButton m_calculate;
float m_inputmaxspeed;
float m_inputminspeed;
int m_twoshift;
CString m_spispeedrange;
CString m_motspeedrange;
//}}AFX_DATA
};
这两段程序代码都封装了对象类1和对象类2各自所需要的成员变量,在这些成员变量中有两个成员变量CNCLatheDesignView* pView和CNCLatheDesignDoc* pDoc,它们是一种介质。通过这种介质与“文档”类CNCLatheDesignDoc(从CDocument类派生而类)中定义的结构体对象进行联系,从而可以使对象类引用属于自己的结构体或是与其它对象类相关联的结构体中变量。在这两段程序代码中,定义在 // Dialog Data和//}}AFX_DATA之间的成员变量是与对话框中的控件相联系的,用来描述各个控件的状态和数值,同时也依靠这些成啾淞客ü介质与结构体中的变量进行数据通讯。
4.数据库技术在机床主传动系统设计中的应用
传统的机床主传动系统设计需要查找大量的数据,这样会使设计的工作量很大,如何把设计中所需的基础数据组织到一起,构建一个紧凑、高效的数据库,来缩嗖檎沂奔洌提高效率,是我们在软件设计开发过程中要解决的一个重要环节。
VC包含了两个相互独立的数据库访问系统:ODBC(开放数据库互联)和DAO(数据访问对象)。在本程序中利用的是ODBC标准。ODBC是基于SQL(结构化查询语言)的标准。利用这种语言,可以实嗍据库的操作。
在本程序中利用了VC中的CDatabase类和CRecordset类来实现具体的操作。在实际访问数据库之前,首先要建立一个可以使用的数据库。结合本设计的要求,利用SQL(Structured Query Language)软件建立了一个具体的数据库,在这一数据库中包含了两张数据表:一张是存放各种常用传动比适用齿数的数据表,另一张是存放齿轮材料和热处理发式的数据表。
数据库建立完毕后,用数据源管理器(在Windows控制面板中)使应用程序与数据源建立连接,指定为ODBC方式访问数据库,并选择将要访问的数据表,这样应用程序就可以访问数据库中的数据资源。
这些工作完成之后,就可以在应用程序中加入相应的代码来执行数据库操作。在程序中首先从CRecordset类中派生出它的子类,一个是Summation类,一个是Material类,通过这两个子类分别来访问数据库中的两张数据表。然后适用子类的Open()函数、MoveFirst()函数、MoveNext()函数等方法以及利用SQL中的SELECT语句来来实现具体的功能。
部分程序代码如下:
1.检索传动组中各级传动副不同传动比所具有的相同齿数和语句
summation.m_strFilter="(传动比="+string1+" or 传动比="+string2+" or 传动比="+string3+" or 传动比="+string4") and 齿数和 in ( select 齿数和 "+" from 各种常用传动比的适用齿数 where 传动比="+string1+" and 齿数和 "+" in (select 齿数和 from 各种常用传动比的适用齿数 where 传动比="+string2+ " and 齿数和 "+" in (select 齿数和 from 各种常用传动比的适用齿数 where 传动比="+string3+" and 齿数和 "+" in (select 齿数和 from 各种常用传动比的n用齿数 where 传动比="+string4+"))))";
2.打开数据库,查询与检索语句设置条件相关数据和关闭数据库语句
if (summation.IsOpen())
{
summation.Close();
}
summation.Open();
if (summation.IsBOF())
{
return false ;
}
summation.MoveFirst();
m_summation1=0;
CComboBox* pcombobox=(CComboBox*) GetDlgItem(IDC_SUMMATION1);
while( !summation.IsEOF())
{
if (summation.m_column1==m_trasmitone )
{
string1.Format("%d",summation.m_column2);
pcombobox->InsertString(-1,string1);
}
summation.MoveNext();
}
summation.Close();
5.结束语
本文通过面向对象思想在数控机床主传动系统中应用,对CAD技术在机床设计中进行了探讨,并将数据库技术引入机床设计中去,大大简化了设计人员的工作量,实践证明该CAD软件具有一定的可行性和通用性。
参考文献:
[1] 胡庆彬,黄石生.结构化和面向对象程序设计方法的探讨技扑慊应用研究,1998,(1):56~58
[2] 戴曙.金属切削机床设计.北京:机械工业出版社,1990
[3] DAVID J.KRUGLINSKI,Inside Visual C++.Microsoft Press,1996