林昌华,邢海斌
(重庆理工大学重庆汽车学院,重庆 400054)
在机械CAD中,无论是设计计算或是参数化绘制图形,往往都需要引用有关的数据信息,这些信息既有公式表达的数据,又有线图或数表等形式表达的数据,如经验数表、实验曲线、各种标准和规范等[1-2]。在传统的设计中,这些数据往往是以查阅设计手册或工具书的形式获得的。在计算机辅助设计中,就必须对这些数据资料作相应的处理,以便程序运行时计算机能按照设计要求自动检索和引用。本文主要针对复杂数据的程序化问题,介绍数据处理的一些简捷实用方法和应用。
机械设计中,很多参数通常以数表的形式给出,如V带型号与截面尺寸的关系、平键剖面尺寸与轮毂和轴颈之间的关系等。这些数据共同的特点就是参数之间的函数关系难以用数学公式来表达,因而在CAD过程中,需要针对各种情况对数据进行相应的处理[3-5]。
根据自变量数量,数表可分为一维数表和二维数表等。其程序化最常用的方法就是将一维、二维数表数据以表的形式直接编入程序中。因为AutoLISP语言本身就属于表处理语言,所以在处理表数据方面非常方便。
表1所示为普通V带的基准长度Ld及带长修正系数KL数据,基准长度为标准长度系列,要求根据已经确定的V带型号和初步计算出的带长Lc来确定带长修正系数 KL[6]。
表1 普通V带的基准长度系列及带长修正系数KL
由于带长修正系数KL值对应不同的带型号,其位置、数据个数和大小均有所不同,很难用数学公式来表达。利用AutoLISP编程及表处理功能,分别将V带基准长度系列和带型号对应的带长修正系数KL值建立在函数变量引用表中。程序运行时根据带长初步计算值Lc进行检索,取最接近计算值的基准长度Ld。带长修正系数KL则由带型号和基准长度共同确定。由于KL对应于不同的带型号具有不同的位置和数据个数,因而首先要针对不同的型号检索出相应的系数表,再根据Ld所处的位置检索出修正系数KL。如果Ld不在带型号所在区间,则应给出错误信息,如“带长Ld超出带型号所在范围!查不到带长修正系数KL!”。具体编程[7]:
(defun ldkl(dx lc);定义带型号和带长计算值为变参的函数;
首先建立基准长度标准系列引用表:
其次建立带型号对应的带长修正系数KL值数据表:
检索带长计算值最接近的基准长度及位置:
检索带型号对应的基准长度系列:
假设取带型号为“C”,带长初值 Lc=892,由于C型号在该长度段没有对应的带长修正系数,故执行函数(LdKL“C”892),返回结果:“带长 Ld超出带型号所在范围!查不到带长修正系数 KL!”。
如果带型号为“C”,带长初值Lc=2 892,执行函数(LdKL“C”2 892)后,返回结果 Ld=2 800,KL=0.95。
在机械设计数据中,有很多参数间的关系是用线图来表示的,如图1所示的齿轮动载系数曲线,就表明了齿轮动载系数与速度和制造精度的关系。线图的程序化处理通常有2种途径:一是将线图离散化后存入数表,再进行前述的数表程序化处理;二是将线图通过插值或拟合变成公式,再将公式编入程序执行[8]。
图1 齿轮动载系数Kv
插值法的基本思想是:设法构造一个简单的函数y=p(x),作为曲线函数f(x)的近似表达式,然后计算p(x)的值以得到f(x)的近似值,使得
成立。
插值方法有线性插值和非线性插值。在某些情况下,线性插值的误差较大,难以满足设计要求,为了提高插值精度,可采用非线性的多点插值方法。多点插值又称为拉格朗日插值,当插值节点取n=3时,就得到二次插值多项式,即抛物线插值[9]。若插值节点取n,则拉格朗日插值多项式的一般表达式为[10]
以图1中齿轮精度为8级的动载系数曲线为例,要求根据齿轮的线速度V确定其动载系数Kv[11]。对该曲线进行处理时可在该曲线上取出7个点,分别将其坐标值赋给表变量xi和yi,然后通过多项式插值确定自变量相对应的函数值。程序编制:
应用举例:设齿轮线速度V=15 m/s,执行该函数(fx15),将得到动载系数值y(x)=1.32。
说明:所编制的多项式插值程序是一个通用程序,其中数表xi、yi中的数据可以根据具体情况更换,坐标点数可多于7点,也可少于7点,基本上没有限制。
前述方法是将数据资料编入程序,使用起来方便、快捷,但缺陷是数据依赖于程序而存在,若要修改数据,则要修改程序,各程序之间所需相同数据资料无法共享。因此,对于数据量较大,且需要共享的数据,采用数据文件是较好的一种方式。数据文件有固定的存取格式,既可在各种文本编辑器中建立,又可通过程序运行自动产生,而数据文件的管理和数据的检索则可利用AutoLISP程序语言中的函数或文件管理功能来实现。
数据文件的建立格式取决于数据的类型和对应的检索数据方法,通常采用的数据文件保存为后缀为“dat”的文本格式,检索方法为表处理关键字对应法,即根据关键字检索对应的数据。如一维数据类型的文件格式:
该数据文件的第1排为变量表,表中的每一个变量对应后面各排数据表中的数据,每个表中的第1个元素为关键字。检索时根据关键字找到数据文件中相应的数据表,再将数据表中的数据依次赋给对应的变量。
这类数据类型很常见,可定义一个通用的检索函数来检索数据并给变量赋值。检索函数定义[12]:
再例如根据带轮几何图形关系图(图2)及数据表建立 CAD文件夹下的数据文件为“dlvc.dat”,数据建立:
该数据文件使用检索函数js的检索过程为调用:(js"d:/cad/dlvc.dat"“B”)
返回:("B"3.5 10.8 7.5 12.5 19 14 38)
图2 带轮几何参数
同时表中的数据已赋给数据文件首表中的各个变量中,如查询 “!ha”,将显示其值为3.5。
将数据存入一个独立于程序的数据文件中,使数据和应用程序分开,程序运行时,可按需要打开相应的数据文件检索数据。优点是应用程序简洁,占用内存量大大减少,数据更改也方便;缺点是数据的操作仍离不开应用程序,两者之间并未实现完全独立。
在机械设计过程中,要查阅和检索的数据信息、图表、线图等的形式是千变万化的,上面所举的只不过是比较典型的一些例子。从这些例子可见,工程数据的处理具有很大的灵活性,同一种数据资料可以采用多种方式编程处理。在具体处理时遵循的原则:在保证数据精确可靠的前提下,尽可能寻找简练的方式,在编程时多费点功夫,使用起来就显得方便、快捷。
[1]濮良贵,纪明刚.机械设计[M].8版.北京:高等教育出版社,2006:4-21.
[2]许天羽,郑婷婷,戴赛帅.基于VB的高速艇航速预报程序开发[J].重庆理工大学学报:自然科学版,2011,25(2):34 -36
[3]乔爱科.机械CAD软件开发实用技术教程[M].北京:机械工业出版社,2008:2-10.
[4]闫洁,江开勇.马达外壳盒形拉深件成型模拟与冲压级进模设计[J].重庆理工大学学报:自然科学版,2011,25(9):25 -28
[5]许桎樟,李强,赵君官.基于ADAMS的软导引结构特性分析[J].四川兵工学报,2011(6):28-30.
[6]万小利,高志.计算机辅助机械设计[M].北京:机械工业出版社,2005:22-28.
[7]刘银远.AutoLISP(10.0版)教程[M].北京:希望电脑公司,1991,37 -40.
[8]李志宏.使用AutoLISP程序进行数据文件处理[J].林业建设,2008(4):61-62.
[9]李建霞,肖启敏.非图形数据结构在AutoLISP程序设计中的应用[J].煤矿机械,2004(3):62-64.
[10]王汉财,金银玉.浅谈AUTOLISP在数据入库过程中的应用[J].吉林测绘,2009(4):54-56.
[11]姜松,姚敬,吴应兵.CAD平台下用AutoLISP进行图形数据检查软件开发[J].科技信息,2008(5):67-68.
[12]张汉春,廖金才.AutoLisp在管线数据转换中的应用[J].广东科技,2009(20):65.