吴兴华的BLOG    http://wuxinghua.molds.cn
数据载入中......

数据载入中......
公告
数据载入中......

我的专题(分类)
数据载入中......

最新日志
数据载入中......

日志搜索
数据载入中......

链接
数据载入中......

Blog信息
数据载入中......




模具CAD/CAM常用软件
吴兴华 发表于:2010-9-15 9:08:34
模具CAD/CAM常用软件
第一节            各种流行的CAD/CAM软件
AutoCAD是应用最广泛的CAD软件,它优良的二次开发工具使其能够活跃在各类CAD专业领域。
CAXA是国产CAD/CAM软件,其初级产品CAXA电子图板具有较广泛的应用,可帮助设计人员进行零件图、装配图、工艺图表、平面包装的设计。
PICAD是另一种国产CAD软件产品,是参数化、集成化的计算机辅助设计系统,也是二维CAD支撑平台及交互式工程绘图系统。
开目CAD是基于微机平台的CAD和图纸管理软件。开目CAD支持多种几何约束种类及多视图同时驱动,具有局部参数化的功能,能够处理设计中的过约束和欠约束的情况。开目CAD实现了CAD、CAPP、CAM的集成。
高华CAD系列产品包括计算机辅助绘图支撑系统GHDrafting、机械设计及绘图系统GHMDS、工艺设计系统GHCAPP、三维几何造型系统GHGEMS、产品数据管理系统GHPDMS及自动数控编程系统GHCAM。
大恒通用机械CAD系统最早开发于1991年,是针对机械制造及设计行业的通用机械CAD系统。
Solidedge是三维CAD系统,它向用户提供了从三维零件建模,装配设计到最终的二维图制作的一整套完善的CAD工具。
SolidWorks是基于Windows的机械设计软件,是以Windows为平台,以SolidWorks为核心的各种应用的集成,包括结构分析、运动分析、工程数据管理和数控加工等。
金银花(Lonicera)系统主要应用于机械产品设计和制造中,它可以实现设计/制造一体化和自动化。
GS-CAD是一个基于微机、中文Windows95/NT平台的三维CAD系统。
MDT是Autodesk公司在PC平台上开发的三维机械CAD系统。它以三维设计为基础,集设计、分析、制造以及文档管理等多种功能为一体;为用户提供了从设计到制造一体化的解决方案。
Pro/Engineer简称Pro/E,是一个面向机械工程的CAD系统。PTC公司提出的单一数据库、参数化、基于特征、全相关的概念改变了机械CAD/CAE/CAM的传统观念。
UG-Ⅱ是一个集CAD、CAE和CAM于一体的机械工程辅助系统,UG-Ⅱ为用户提供了一个全面的产品建模系统。
SurfCAM是基于Windows的能够自动生成零件刀具轨迹,以及进行零件加工的NC代码,具有强大的通用后置处理模块的辅助制造软件。
Mastercam为PC级CAM软件。 Mastercam包括了铣削加工(milling),车削加工(turning),线切割加工(wire EDM)等主要模块,适用于机械设计与制造的各个领域。
Cimatron系统是以色列的CAD/CAM/PDM产品,该系统提供了比较灵活的用户界面,优良的三维造型、工程绘图,全面的数控加工,各种通用、专用数据接口以及集成化的产品数据管理。
I-DEAS是全世界制造业用户较广泛应用的大型CAD/CAE/CAM软件。
CATIA系统是在起源于航空工业的CADAM系统基础上扩充开发的CAD/CAM/CAE/PDM应用系统。
Euclid软件是为英法联合研制协和号超音速客机而开发的CAD软件。
DUCT软件是三维复杂形体造型设计与制造CAD/CAM软件。
第二节            通用CAD软件——AutoCAD
一、AutoCAD的二维绘图命令
二维绘图命令是AutoCAD的基础部分。无论二维图形如何复杂,都是由点、线、圆、圆弧等最基本的图形要素组成。
1. 点的输入
在各项CAD操作中,点的输入是最基本的操作,AutoCAD共有四种点的输入方式。
(1)  通过键盘输入点  通过键盘输入点的坐标值是一种精确的点输入方式,点的坐标值输入有三种坐标方式:绝对直角坐标(输入x,y)、相对直角坐标(输入@x,y)和相对极坐标(输入@r<a),可根据需要任意选取。
(2)  通过光标输入设备输入点  通过光标输入设备输入点的优点是方便和快捷。一般情况下,用光标输入设备输入点的坐标值是不精确的,通过AutoCAD的Snap功能,可以使输入点达到一定的精度。
(3)  利用目标捕捉功能输入点  这是利用光标输入设备精确输入点的一种方式,根据AutoCAD的Osnap功能,它可以精确捕捉到图形的特定点位置,例如线段的端点、中点,圆和圆弧的圆心及象限点,切点和垂足等等。
(4)  利用LISP函数输入点  利用LISP语言中的函数功能也可以输入点,这是自动绘制图形的基础,在AutoCAD二次开发中经常使用这种方式完成点的输入。
2.    直线的绘制
绘制直线的命令是LINE。一般只要输入直线的两个端点,即可生成直线。绘制好圆弧后,在LINE命令后直接键入回车,然后输入直线长度,可以在圆弧终点处绘制圆弧的切线。
3. 圆的绘制
绘制圆的命令是CIRCLE。圆的绘制参数是圆心和半径(或直径)。也可以根据需要绘制与其他图线相切的圆。
4. 圆弧的绘制
绘制圆弧的命令是ARC。与直线和圆相比,圆弧的绘制比较复杂,考虑到圆弧具有顺时针和逆时针两种方向,AutoCAD共安排了7种绘制圆弧的方法,其绘制参数分别为圆弧的①起点、中点、终点;②起点、圆心、终点;③起点、圆心、角度; ④起点、圆心、弧长;⑤起点、终点、角度;⑥起点、终点、半径;⑦起点、终点、起始方向。绘制与刚绘制的直线或圆弧相切的圆弧时,可以直接键入回车,然后输入圆弧终点,此时圆弧的起点即为前绘线段的终点,圆弧的起始方向即为前绘线段的终止方向。
5. 多段连线
多段连线(POLYLINE)是由直线和圆弧首尾相连组合成的复合线段,绘制多段连线采用PLINE命令,类同于绘制直线和圆弧。实践中常用PEDIT命令编辑直线和圆弧来得到多段连线。
二、图形编辑
AutoCAD提供的图形编辑方法能够有效地修改图形,并能够显著提高绘图效率。常用的图形编辑命令有删除(ERASE)、复制(COPY)、镜面对称复制(MIRROR)、阵列复制(ARRAY)、等距偏移复制(OFFSET)、移动(MOVE)、转动(ROTATE)、缩放(SCALE)、修剪(TRIM)、延伸(EXTEND)、倒角(CHAMFER)、倒圆角(FILLET)、分解(EXPLODE)和多段连线编辑(PEDIT)。熟练掌握这些图形编辑命令可以有效地提高AutoCAD应用水平。
三、其他功能
AutoCAD的其他功能还有图形显示、文字、剖面线、尺寸标注、图层管理、图块定义及调用、动画、三维图形、二次开发工具等。
第三节            AutoCAD的二次开发工具
一、        AutoCAD定制菜单
表3-1  菜单文件类型

菜单文件类型类型说明
.MNU原始 ASCII 菜单文件,即用户通常编辑或创建的文件。
.MNC已编译的菜单文件;一种二进制文件,包含用于定义菜单或其他界面元素的功能及外观的命令字符串和菜单语法。首次加载 MNU 文件时,AutoCAD 将编译此文件。
.MNR菜单资源文件;一种二进制文件,包含由菜单或其他界面元素使用的位图。AutoCAD 每次编译 MNC 文件时,均生成菜单资源文件。
.MNS源菜单文件;一种与 MNU 文件相同的 ASCII 文件,但是不包含注释或特殊格式。每次菜单文件的内容被更改时,AutoCAD 将修改源菜单文件。
.MNT菜单资源文件。仅在 MNR 文件无效(例如,只读)时生成该文件。
.MNL菜单 LISP 文件;包含菜单文件使用的 AutoLISP 表达式。当加载与菜单 LISP 文件具有相同文件名的菜单文件时,AutoCAD 会将菜单 LISP 文件加载至内存。
用文本编辑器打开ACAD.MNU文件观察菜单文件的结构,可以看到其内容包含如表3-2所示的几个区域。其中***POP1至***POP11定义了下拉菜单。菜单文件中包含的一些特殊字符的说明见表3-3。表3-2  ACAD.MNU文件的菜单区域及其功能
主菜单名称区数N功能用途
***MENUGROUP 菜单组
***BUTTONSn1~4定点设备按钮菜单
***AUXn1~4系统定点设备菜单
***POPn0~9990 对象捕捉快捷菜单1~16 基本型下拉菜单17~499 将menuload加入下拉菜单中500~999 快捷菜单区域
***TOOLBARS 工具栏定义
***IMAGE 图像菜单
***SCREEN 屏幕菜单
***TABLETn1~4数字化仪菜单
***HELPSTRINGS 辅助功能说明区(显示于状态区)
***ACCELERATORS 加速键定义
注意事项如果没有定义POP1~POP16,AutoCAD会自动插入2个预设的下拉菜单(File和Edit)
表3-3  菜单字符说明
字符说明
**子菜单
--菜单项分隔符
->引出子菜单
<-子菜单结束
~禁用菜单项的前缀符
!.给菜单项打上复选标记的前缀符
&指定菜单快速键,如S&ample显示为Sample,快捷键为a
/指定菜单快速键,如/aSample显示为Sample,快捷键为a
=*显示当前顶层的图像、下拉或快捷菜单
*^C^C重复项的前缀
$宏表达式的特殊字符
^CTRL
\暂停等候用户输入(不能用于加速键)
_转换AutoCAD命令及其后的关键字
+延续宏到下一行
RETURN
//注释行,不限行数,用作版权声明或注释
[]方括号内为菜单项名称
用文本编辑器打开ACAD.MNU文件,在pop11菜单后面插入图3-1所示的pop12菜单ASCII代码,将其保存在DCAD.MNU文件中,用AutoCAD的MENU命令加载DCAD.MNU后,可以看到下拉菜单在Help菜单项的后面增加了名为DCAD的一列新菜单,其效果如图3-2所示。方括号内的字符串构成了下拉菜单的显示内容,DCAD下拉菜单列中包含了“工艺性分析”、“排样”、“CAM”、“模板”和“模具标准件”5个子菜单。点取“CAM”子菜单中“3B指令”项,其对应的菜单项内容为“[3B指令]^C^C(load "dcad-ww")  w3b  ”。其中“[3B指令]”规定了菜单项显示文字为“3B指令”;“^C^C”相当于先从键盘输入两次CTRL-C以终止任何AutoCAD可能正在执行的命令,以便无障碍地执行后面的指令;“(load "dcad-ww")”的作用是加载LISP程序文件“dcad-ww.lsp”;“w3b”表示执行AutoCAD二次开发新建的命令“w3b”——从AutoCAD图形产生数控线切割机床3B加工指令程序。菜单项中的空格所起的作用相当于输入回车。 ***pop12[DCAD][输入清单]^C^C(load "dcad-i-2000")(if (null c:fdcad) (load "DCAD")) input[->工艺性分析]  [小孔]^C^C(load "dcad-b-2000-k") (load "DCAD") (load "Dcad-b") DCADBK  [孔距]^C^C(load "dcad-b-2000-jb") (load "DCAD") (load "Dcad-b") DCADBJB  [凸臂]^C^C(load "dcad-b-2000-tz") (load "DCAD") (load "Dcad-b") DCADBTZ  [窄槽]^C^C(load "dcad-b-2000-tz") (load "DCAD") (load "Dcad-b") DCADBTZ  [圆弧]^C^C(load "dcad-b-2000-y") (load "DCAD") (load "Dcad-b") DCADBY  [孔间壁厚]^C^C(load "dcad-b-2000-b") (load "DCAD") (load "Dcad-b") DCADBB  [<-复合模]^C^C(load "dcad-b-2000-f") (load "DCAD") (load "Dcad-b")) DCADBF[->排样]  [定搭边值]^C^C(load "dcad-l-2000-d") (load "DCAD") (load "dcad-l-2000") dbz  [单排排样]^C^C(load "dcad-l-2000-s") (load "DCAD") (load "dcad-l-2000") lay1  [<-多排排样]^C^C(load "dcad-l-2000-v") (load "DCAD") (load "dcad-l-2000")) LAYN[->CAM]  [3B指令]^C^C(load "dcad-ww") w3b  [穿孔代码]^C^C(load "dcad-ww") punch  [代码校验]^C^C(load "dcad-ww") check  [<-穿孔码转换3B指令]^C^C(load "dcad-ww") p2b[设计]^C^CDESIGN[->模板]  [上模座]^C^C(load "dcad-mb") (mb) smz  [垫板]^C^C(load "dcad-mb") (mb) db  [固定板]^C^C(load "dcad-mb") (mb) gdb  [卸料板]^C^C(load "dcad-mb") (mb) xlb  [凹模]^C^C(load "dcad-mb") (mb) am  [下模座]^C^C(load "dcad-mb") (mb) xmz  [下固定板]^C^C(load "dcad-pt") (mb) xgdb  [下垫板]^C^C(load "dcad-pt") (mb) xdb  [空心垫板]^C^C(load "dcad-mb") (mb) kxdb  [--]  [<-图框]^C^C(load "dcad-mb") tukuang[->模具标准件]  [模柄](if (null c:mb) (load "dcad-pt")) mb  [橡皮](if (null C:XP) (load "dcad-pt")) XP  [导柱](IF (NULL C:DZ) (LOAD "DCAD-PT")) DZ  [导套](IF (NULL C:DT) (LOAD "DCAD-PT")) DT  [导料板](IF (NULL C:DT) (LOAD "DCAD-PT")) DLB  [承料板](IF (NULL C:DT) (LOAD "DCAD-PT")) CLB  [卸料螺钉](if (null c:XLLD) (load "dcad-pt")) XLLD  [固定导销](IF (NULL C:DT) (LOAD "DCAD-PT")) GDDLX  [<-圆凸模](IF (NULL C:DT) (LOAD "DCAD-PT")) YTM[装配示意图]^C^C(load "dcad-z") zpt 图3-1  DCAD子菜单ASCII代码 二、LISP语言AutoCAD内嵌的两种LISP语言(AutoLISP和Visual LISP)是与AutoCAD结合最为完美的程序语言。AutoLISP是AutoCAD选用的第一个强有力的开发工具,从1985年问世的AutoCAD V2.18版本开始,一直沿用至今。AutoLISP是解释型语言,它的欠缺之处是运行效率较低,源程序缺乏保密性。针对AutoLISP的弱点,AutoCAD在其2000版本中又推出了具有高运行效率的编译型LISP语言——Visual LISP。Visual LISP在AutoLISP的基础上增加了源程序编辑环境、编译器以及一些增强函数。实际上,过去编写的AutoLISP程序都可以在Visual LISP中编译和运行,即Visual LISP能够完全兼容AutoLISP。(一)LISP语言简介LISP是英语LISt Processing 的缩写,意思是一种编制计算机程序的表处理语言。LISP语言1960年起源于美国麻省理工学院(MIT),是一种著名的人工智能计算机语言。与BASIC等其他计算机语言一样,LISP语言也有许多版本,现在使用最多的是COMMON LISP。AutoCAD软件中镶嵌的AutoLISP与COMMON LISP很接近,它增加了调用AutoCAD命令的功能和一些几何函数,并削减了COMMON LISP中一些不常用的函数。作为一种高级语言,LISP可以完成其他许多高级语言(如FORTRAN、BASIC、PASCAL、C等)能够完成的工作,诸如计算、逻辑判断、循环运算等等。LISP语言具有一些独特的优点,使它特别适用于人工智能和CAD领域,这也是AutoCAD在众多计算机语言中首先选择其作为开发工具的主要理由。表(List)在LISP语言中具有极其重要的意义。表是LISP语言的重要成份,它由若干个元素(Element)和一对圆括号组成。元素则包括表和原子(Atom)两种类型。原子指常数(Constant)或者符号变量(Variable)。表中的元素可以是表,因此表可具有嵌套结构。在LISP语言中,表既可以构成数据,也可以组成程序。如(0.5  1.2)和(1  5.3  3)都是用表的形式表示的数据。前者可以表示一个二维点,x坐标值为0.5,y坐标值为1.2。后者可以表示一个三维点,x坐标值为1,y坐标值为5.3,z坐标值为3。(1  2  5  8.2  “A”  9)可以表示一个六维向量,与其他计算机语言中的一维数组相当,但是表中元素的数据类型可以各不相同,而同一数组中各个数据的类型都必须相同。利用表的嵌套结构,容易获得类似的多维数组,但是其中各维的长度可以不相等,并且表中元素的数据类型可以各不相同,所以在表示数据时,表比其他计算机语言中的多维数组更显优越性。AutoCAD中的图形数据(包括类型、图层、颜色、线型、特征、坐标值等)都可采用表的形式表达。如AutoCAD中表达一根直线所用的表为((-1 . <Entity name: 24082f8>) (0 . "LINE") (330 . <Entity name: 2406cf0>) (5 . "2F7") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbLine") (10 187.701 -45.8475 0.0) (11 5.0 -45.8475 0.0) (210 0.0 0.0 1.0));表达一个圆所用的表为((-1 . < Entity name: 7ef50e80>) (0 . "CIRCLE") (330 . < Entity name: 7ef50cf8>) (5 . "88") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbCircle") (10 0.0 0.0 0.0) (40 . 10.0) (210 0.0 0.0 1.0))LISP语言的程序结构非常简单,它也是由表组成。LISP程序采用前缀形式:(元素0  元素1  元素2  …  )构成LISP程序时,表中元素0必为函数名称,其后的各个元素为该函数(元素0)的变量。LISP程序对字母的大小写是不加区分的。例如(+ 1 2)是一个LISP程序的例子,其中+为函数名,1和2为+函数的变量。LISP语言是一种函数型计算机语言,LISP语言拥有的功能是通过其函数表现出来的。(二)LISP函数LISP函数具有返回值和特定的功能。如上例中,函数返回值为3,函数+的特定功能是求和。各种类型的LISP函数用来完成LISP语言所有的功能,下面将一些最基本的LISP函数进行分类,以便大家能够对LISP语言及其在CAD中的应用有所了解。1.  代数运算函数代数运算函数用于完成代数运算,包括赋值函数(SETQ),四则运算函数(+、-、*、/),三角函数(SIN、COS、ATAN)以及其他代数函数(ABS、EXP、EXPT、SQRT)。代数运算函数的使用方法很容易掌握,唯一要注意的是LISP程序具有前缀结构的特点,各种函数运算都必须将函数名作为LISP表达式中最前面的元素。1) SETQ函数的格式为(SETQ  v1  e1  [v2  e2  …  vn  en])。其功能是将ei的计算值赋予变量vi,函数返回值为en的计算值。(注:方括号部分是可选项,以下同。)例如,(SETQ  x  1  y  (+  1  2))将常数1的计算值1赋予变量x,LISP表达式(+  1  2)的计算值3赋予变量y,函数返回值为3。2) +函数的格式为(+  n1  n2  [n3  …  nm])。其功能是对函数变量求和,函数返回值为变量之和:n1+n2+n3+…+nm。3) -函数的格式为(-  n1  [n2  n3  …  nm])。其功能是对函数变量求差。当m=1,函数只有一个变量n1时,函数返回值为0-n1,即-n1;当m≥2时,函数返回值为n1-(n2+n3+…+nm)。4) *函数的格式为(*  n1  n2  [n3  …  nm])。其功能是对函数变量求积,函数返回值为变量的乘积:n1·n2·n3·…·nm。5) /函数的格式为(/  n1  n2  [n3  …  nm])。其功能是求函数变量的商,函数返回值为n1  /(n2·n3·…·nm)。当/函数变量均为整型数时,函数返回值也为整型数;当函数变量中至少有一个为实型数时,函数返回值为实型数。例如,(/  3  2)的返回值为1,而(/  3  2.0)的返回值则为1.5。6) SIN函数的格式为(SIN  n)。其功能是求函数变量n的正弦值,函数返回n的正弦值。变量n的单位为弧度。例如,(SIN  (/  PI  2))的返回值为1.0,式中PI为LISP符号变量,表示圆周率π值。7) COS函数的格式为(COS  n)。其功能是求函数变量n的余弦值,函数返回n的余弦值。变量n的单位为弧度。用法与SIN函数相同。8) ATAN函数的格式为(ATAN  n1  [n2])。其功能是求反正切值arc tan n1 或 arc tan(n1/n2)。当只有一个函数变量时,函数返回值的范围为(-π/2,π/2),当存在2个函数变量时,函数返回值的范围为(-π,π]。函数返回值的角度单位为弧度。例如:(ATAN  0)      返回值0.0(ATAN  1)      返回值0.785(ATAN  1  1)  返回值0.785(ATAN  1  –1)    返回值2.356(ATAN  –1  1)  返回值-0.785(ATAN  –1  –1)    返回值-2.356(ATAN  1  0)      返回值1.5708(ATAN  –1  0)  返回值-1.5708(ATAN  0  –1)  返回值-3.14(ATAN  0  1)      返回值3.149) ABS函数的格式为(ABS  n)。其功能是求绝对值,函数返回n的绝对值。10) EXP函数的格式为(EXP  n)。其功能是求e的指数,函数返回en。11) EXPT函数的格式为(ESPT  m  n)。其功能是求m的指数,函数返回mn。12) SQRT函数的格式为(SQRT  n)。其功能是求 平方根,函数返回n的平方根。2.  自定义函数LISP语言提供了许多基本函数,称为内部函数或系统函数(如前述函数),利用这些函数可以直接编写LISP程序,例如tanα的LISP程序可编写为(/  (SIN  x)  (COS  x))。对于复杂的程序,直接利用基本函数编写程序并不是一个好方法,编写LISP程序更多是利用自定义函数来编写程序,反之,大多数LISP程序也都编写成为自定义函数的形式。自定义函数与其他语言中的子程序或函数最接近。自定义函数是用户自己定义的函数,又被称为用户函数或外部函数。自定义函数的使用和系统函数的使用方法是一致的,用户在使用方面不会感觉到两者的差异。自定义函数的格式为(DEFUN  name  ([A1  A2  …  AL]  [/  V1  V2  …  VM])  e1  e2  …  en)上表中第0个元素DEFUN是自定义函数的函数名,第1个元素name是符号变量,为自定义函数所定义的用户函数的名称。用户函数名称后是用户函数的变量表,变量表中的元素都是所定义的用户函数的局部变量,可分成以“/”分隔的两个部分,方括号表示可选项,表中“/”前的可选项[A1  A2  …  AL]为新设立的用户函数name的函数变量,表中另一可选项[/  V1  V2  …  VM]中的元素不是用户函数的函数变量,它们仅仅是用户函数name的局部变量。所谓局部变量是指仅仅在定义函数内部存在并起作用的变量,它对定义函数以外的程序无任何干扰。变量表可以是空表(即表中不包含任何元素)。变量表后面是函数定义体,决定了函数name的功能和返回值。函数name的返回值是en的计算结果。例如AutoLISP没有提供正切函数,用户可以利用自定义函数自行定义正切函数,定义正切函数的程序如下(DEFUN  tan  (x  /  y) (SETQ  y  (COS  x))(IF  (/=  y  0)  (/  (SIN  x)  y)))以上程序中tan是用户自行定义的正切函数名。x和y之间的符号“/”分隔开了局部变量中的自变量,“/”前的变量x是用户函数tan的自变量,也是该函数的局部变量,而“/”后的变量y是tan函数的局部变量,但不是tan函数的自变量。程序中的DEFUN、SETQ、IF、/=、/、SIN和COS都是AutoLISP的基本函数。调用正切函数(tan  0),返还的正切函数值为0.0。可以看到,用户自定义的正切函数的使用方法与LISP系统函数SIN或COS的用法相同。用户函数经一次定义后可无限次使用。用户在使用LISP语言的过程中,用自定义函数的方法可以逐渐积累自己的函数,从而使编程越来越方便。3.  分支结构分支结构在LISP语言中有二分支结构和多分支结构两种,与此相关的函数有:关系运算函数(=、/=、>、>=、<、<=、EQUAL),逻辑运算函数(AND、OR、NOT),二分支函数(IF)和归并(PROGN)函数以及多分支函数(COND)。1) 关系运算函数判断函数变量相互间是否符合函数所定义的相等或不等关系。=函数的格式为(=  e1  e2  …  en)。当函数变量e1、e2、…、en全部相等时,函数返回T,否则返回NIL。/=、>、>=、<和<=函数的用法也是相同的,其功能如同其函数名所示。EQUAL函数的格式为(EQUAL  e1  e2  [e3])。EQUAL用来比较两个实型数或表是否相等,相等时函数返回T,否则返回NIL。比较两个实型数e1和e2时,取一个很小的正数e3,其判断准则是当|e1-e2|≤e3 时函数返回T,否则返回NIL。2) AND函数的格式为(AND  e1  e2  …  en)。当函数变量e1、e2、…、en中全部有值时,函数返回T,否则返回NIL。3) OR函数的格式为(OR  e1  e2  …  en)。当函数变量e1、e2、…、en中至少有一个有值时,函数返回T,否则返回NIL。4) NOT格式为(NOT  e)。当函数变量e有值时,函数返回NIL,否则返回T。5) IF函数的格式是(IF  <判别式>  e1  [e2]),它的功能是实现程序的二分支结构。当判别式的结果为非NIL时,函数执行e1并返回e1的计算值,否则函数执行e2并返回e2的计算值,若可选项e2不存在,则函数结束运行,返回NIL。例如(SETQ  a  (GETREAL  “A=”)  c  (GETREAL  “C=”))(SETQ  x  (IF  (/=  a  0)  (/  c  a)))(SETQ  y  (IF  (>  a  0)  (+  c  a) (-  c  a)))6) PROGN函数的格式为(PROGN e1 e2 … en),它的功能是将若干个LISP表达式归并为一个LISP表达式,常用于IF函数内,以便使IF函数能够在e1和e2的格式规定中作更多的事情。7) COND函数的格式为(COND  (〈测试式1〉  e11  e12  …  e1i)(〈测试式2〉  e21  e22  …  e2j)                ……        (〈测试式m〉  em1  em2  …  emk))函数功能是实现多分支结构。COND函数的变量都为表,变量表中的第一个元素是测试式,其余元素是当测试结果为非NIL时顺序执行的LISP表达式。COND函数依次对测试式进行测试,当测试结果为非NIL时,顺序执行其后的LISP表达式。函数返回值为最后执行的表达式计算结果。变量表中可以只有一个元素,即可以只有测试式,此时的函数返回值为测试结果。例3-1  编写下列分段函数的LISP程序。
解1:可以利用COND函数处理该分段函数,编写程序如下A)编写程序(DEFUN L3-1-1 (x)(COND ((AND (> x –10) (<= x –6)) –2) ((AND (> x -6) (<= x –2)) –1) ((AND (> x –2) (<= x 2)) 0) ((AND (> x 2) (<= x 6)) 1) (T 2)))B)调用程序(SETQ n (L3-1-1 1))后函数L3-1-1返回0,并将该值赋予变量n。解2:利用COND函数顺序测试的特点,可以编写更简化的程序如下A)编写程序(DEFUN L3-1-2 (x)(COND ((<= x –10) 2) (<= x –6) –2) ((<= x –2) –1) ((<= x 2) 0) ((<= x 6) 1) (T 2)))B)调用程序(SETQ n (L3-1-2 1))后函数L3-1-2返回0,并将该值赋予变量n。4.  交互式输入函数交互式输入函数提供控制台输入,包括键盘输入和光标设备输入。交互式输入函数又称为GET族输入函数,该族函数均以字符GET开头。交互式输入函数包括整型数输入函数(GETINT)、实型数输入函数(GETREAL)、字符串输入函数(GETSTRING)、点输入函数(GETPOINT)、角度输入函数(GETANGLE)、距离输入函数(GETDIST)、关键字输入函数(GETKWORD)和初始化输入函数(INITGET)。交互式输入函数为专业软件的二次开发提供了与AutoCAD相同的交互界面,简化了软件的开发过程和推广工作。1) GETINT函数的格式为(GETINT  [提示信息])。其功能是输入整型数,函数返回值为从键盘输入的整型数。提示信息为字符串,用于输入时给出提示。2) GETREAL函数的格式为(GETREAL  [提示信息])。其功能是输入实型数,函数返回值为从键盘输入的实型数。3) GETSTRING函数的格式为(GETSTRING  [开关变量]  [提示信息])。其功能是输入字符串,函数返回值为从键盘输入的字符串。当不选用开关变量或开关变量无值时,输入字符串可以用空格或RETURN结束,输入字符串中无法包括空格。开关变量存在且有值时,则输入字符串中可以包含空格,但必须用RETURN结束字符串。AuotLISP通过这种方式,使字符串输入和AutoCAD在方式上保持一致。4) GETPOINT函数的格式为(GETPOINT  [pt]  [提示信息])。其功能是通过键盘或光标设备输入点。可选项pt是一个表示点的表,当pt存在时,移动光标会出现从pt到光标的连线(皮筋线),此时pt也作为相对坐标系的原点对采用相对坐标输入点产生作用。当pt不存在时,相对坐标系的原点由AutoCAD系统变量LASTPOINT决定。5) GETANGLE函数的格式为(GETANGLE  [pt]  [提示信息])。其功能是通过键盘或光标设备输入角度。函数返回值为表示角度的实型数,单位为弧度。Pt的作用同前。AuotLISP通过这种方式,使角度输入和AutoCAD在方式上保持一致。6) GETDIST函数的格式为(GETDIST  [pt]  [提示信息])。其功能是通过键盘或光标设备输入长度。函数返回值为表示距离的实型数。Pt的作用同前。AuotLISP通过这种方式,使长度输入和AutoCAD在方式上保持一致。7) GETKWORD函数的格式为(GETKWORD [提示信息])。其功能是通过键盘输入关键字。函数返回值定义为关键字的字符串。关键字由下面的INITGET函数定义。8) INITGET函数的格式为(INITGET [bits] [关键字])。其功能是控制GET×××函数的输入。bits为二进制概念的控制位,能够最大限度的减少输入错误。表3-4中,十进制数1(bit 0)防止空输入(ENTER);2(bit 1)防止0输入;4(bit 2)防止负数输入;8(bit 3)允许用户输入LIMITS规定界限以外的点;16(bit 4)(尚未使用);32(bit 5)使用虚线作皮筋线;64(bit 6)阻止Z坐标输入;128(bit 7)允许任意输入。关键字除了用于GETKWORD函数,还能够用于其他GET×××函数,扩大它们的使用范围。如关键字用于GETINT函数,能够使该函数根据输入内容返回整型数或关键字。而没有关键字时,GETINT函数只能够返回整型数。关键字是包含在双引号内的字符和数字,关键字之间用空格分隔,例如“Abc  Def”定义了Abc和Def两个关键字。关键字中的大写字母在输入时可以作为关键字的缩写。表3-4  控制位和输入函数的关系
函数关键字控制位
非空(1)(bit 0)非0(2)(bit 1)非负(4)(bit 2)非限制(8)(bit 3)用虚线(32)(bit 5)二维距离(64)(bit 6)任意输入(128)(bit 7)
GETINT
GETREAL
GETDIST
GETANGLE
GETPOINT
GETKWORD
INITGET函数只对其后的GET×××函数起一次作用。对于程序段(INITGET 7 “Abc Def”)(SETQ A(GETINT “A=”))运行时,输入空回车、0或负数,系统都会要求重新输入,只有在输入正数时程序才会将整型数赋予变量A。当输入a或abc时,程序会将关键字“Abc”作为字符串赋予变量A。而输入d或def时,程序则将“Def”赋予变量A。输入其他字母,程序也会要求重新输入,直至符合输入要求。例如,在AutoCAD绘圆命令CIRCLE执行时,有如下提示Command: circleSpecify center point for circle or [3P/2P/Ttr (tan tan radius)]:Specify radius of circle or [Diameter]:首先可以输入点或关键字,然后可以输入点、数值或关键字。同样的输入效果可以用以下LISP程序达到:(INITGET  1  “3P  2P  Ttr”)(SETQ  p(GETPOINT  “Specify center point for circle or [3P/2P/Ttr (tan tan radius)]:”)) (INITGET  7  “Diameter”)(SETQ  r  (GETDIST  p  “Specify radius of circle or [Diameter]:”))5.  字符串函数字符串函数专门用于处理字符串,包括字符串长度函数(STRLEN)、字符串链接函数(STRCAT)和子字符串函数(SUBSTR)。1) STRLEN函数的格式是(STRLEN  s)。函数变量是字符串,STRLEN函数的功能是求出字符串s的长度,即组成字符串s的字符个数,函数返回整型数。如(STRLEN  “abc”)返回3。2) STRCAT函数的格式是(STRCAT  s1  s2  …  sn)。它的功能是按变量顺序合并字符串s1 、s2 、… 、sn,函数返回合并后的字符串。如(STRCAT “abc” “def”)返回字符串“abcdef”。3) SUBSTR函数的格式是(SUBSTR  s  m  [n]),函数变量s为字符串,m和n为整型数。SUBSTR函数从字符串s中取出一部分作为函数的返回值。返回的子字符串从字符串s的第m个字符开始,其长度(字符数)为n 。若n不存在,则返回的子字符串从字符串s的第m个字符开始至字符串末尾。字符串排列顺序为从左到右,起首字符序号为1。如(SUBSTR  “Good  Morning”  6  3)返回字符串“Mor”,(SUBSTR  “Good  Morning”  6)返回字符串“Morning”。6.  表处理函数表处理函数是LISP语言中最具特色的一类函数,用来生成表(LIST函数)或对表进行各种操作,如往表中添加元素(CONS函数)、从表中删除元素(CDR函数和MEMBER函数)、提取表中元素(函数CAR、CADR函数、CADDR函数和NTH函数)、检索表中元素(ASSOC函数)、替换表中元素(SUBST函数)、合并表(APPEND函数)、颠倒表中元素顺序(REVERSE函数)等等,其他的表处理函数还有LENGTH、APPLY、MAPCAR、FOREACH等等。其中的APPLY函数和MAPCAR函数又被称为泛函数,即在原来函数自变量位置上出现了函数,这就大大增加了程序的适用性。1)  LIST函数的格式是(LIST  e1  e2  …  en)。它的功能是把e1、e2、…、en的计算值组成一个表。如(LIST  1  (+  1  2)  “A”)返回表(1  3  “A”)。2)  CONS函数的格式是(CONS  e  L),它的功能是把e的计算值加入表L中。如(CONS  (+ 1 2)  (LIST  1  2))返回表(3 1 2)3)  CDR函数的格式是(CDR  L),它的功能是去除表L中为首的元素,函数返回剩余的表。如(CDR  (LIST  1  2))返回表(2)。4)  MEMBER函数的格式是(MENBER  e  L), 它的功能是提取表L中e及其后面元素组成的表。如(MENBER  3 (LIST  1  2  3  4  5))返回表(3  4  5)。5)  CAR函数的格式是(CAR  L),它的功能是提取表L中第0个元素,函数返回该元素。如(CAR  (LIST  1  2  3))返回1。在CAD中常被用来提取点中的X坐标值。6)  CADR函数的格式是(CADR  L),它的功能是提取表L中第1个元素,函数返回该元素。如(CADR  (LIST  1  2  3))返回2。在CAD中常被用来提取点中的Y坐标值。7)  CADDR函数的格式是(CADDR  L),它的功能是提取表L中第2个元素,函数返回该元素。如(CADDR  (LIST  1  2  3))返回3。在CAD中常被用来提取点中的Z坐标值。8)  NTH函数的格式是(NTH  n  L),它的功能是提取表L中第n个元素,函数返回该元素。表中元素的排列顺序是从左到右,为首元素序号为0。如(NTH  2  (LIST  1  2  3  4))返回3。9)  ASSOC函数的格式是(ASSOC  e  L),它的功能是检索表L中包含以e值为起始元素的嵌套子表,函数返回检索到的子表。如(ASSOC  2  ‘((1  2) (2  3) (3  4)))返回以2为起始元素的嵌套子表(2  3)。10)            SUBST函数的格式是(SUBST  m  n  L),它的功能是用m取代表L中的n,函数返回更换后的表。如(SUBST  “QQ” “B” (LIST “A” “B” “AB” “B”))返回表(“A” “QQ” “AB” “QQ”)。11)            APPEND函数的格式是(APPEND  m  n),它的功能是合并表m和n,函数返回合并后的表。如(APPEND  (LIST  1  2)(LIST  3  4 ))返回表(1  2  3  4)。12)            REVERSE函数的格式是(REVERSE  L),它的功能是颠倒表中元素的顺序,函数返回颠倒元素顺序后的表。如(REVERSE (LIST  1  2  3  4))返回表(4  3  2  1)。13)            LENGTH函数的格式是(LENGTH  L),它的功能是求出表的长度(即表中元素的个数),函数返回表示元素数目的整型数。如(LENGTH (LIST  1  2  3  4))返回整型数4。7.  类型转换函数类型转换函数提供了变量和数据类型的相互转换,包括整型数和实型数互相转换函数(FIX和FLOAT)以及涉及字符串的转换函数(RTOS和READ)。1)  FIX函数用于将实型数转换成整型数,它的格式为(FIX  n)。2)  FLOAT函数用于将整型数转换成实型数,它的格式为(FLOAT  n)。3)  RTOS函数用于将数转换成一定格式的字符串,它的格式为(RTOS  n  [mode  [precision]])。可选项mode和precision都是整型数。mode表示转换格式,precision表示转换精度(小数点后的位数),mode含义如表3-5所示。当可选项缺省时,RTOS函数按照AutoCAD的缺省格式进行转换。表3-5 mode取值与转换格式的关系
mode转换格式
1科学计数制
2十进制
3英制工程制
4英制建筑制
5分数
4) READ函数的格式是(READ  s),其中s是可以包含空格的字符串。READ函数去除字符串s的双引号,并返回从中获得的第一个表或原子。如(READ  “HELLO”)返回符号变量HELLO(READ  “HE  LLO”)返回符号变量HE(READ  “123”)返回常数123(READ  “123  456  789”)返回常数123(READ  “(1  2  3)”)返回表(1  2  3)(READ “(1  2  3)  (4  5  6)”)返回表(1  2  3)8.  循环运算函数循环运算函数用于循环运算,包括无条件循环函数(REPEAT)和有条件循环函数(WHILE)。无条件循环是按照确定的循环次数进行循环运算,而有条件循环则是在每次运算前进行判断,根据判断结果确定是否进行循环运算。1) REPEAT函数的格式为(REAPEAT  n  e1  e2  …  em)其中n为整型数, e1 、e2 、…、em为LISP表达式。REPEAT函数的功能是无条件地按顺序对e1 、e2 、…、em进行n次循环运算,函数返回值为em最后一次的计算结果。2) WHILE函数的格式为(WHILE  <测试式>  e1  e2  …  em)WHILE函数首先对测试式进行测试,当测试结果为非NIL时,顺序执行e1、e2、…、em,然后再对测试式进行测试,直至测试结果为NIL时才停止循环运算,函数返回值为em最后一次的计算结果。例3-2  编写LISP程序求1+2+…+100解1:采用REPEAT函数编写程序A)编写程序(DEFUN  L3-2-1  (/  I  s)(SETQ  i  0  s  0)(REPEAT  100        (SETQ  i  (+  I  1)  s  (+  s  i))))B)调用函数(L3-2-1),函数返回5050。解2:采用WHILE函数编写程序A)编写程序(DEFUN  L3-2-2  (/  I  s)(SETQ  I  0  s  0)(WHILE (<  I  100)        (SETQ I  (+  I  1)                s  (+  s  I)        )))B)调用函数(L3-2-2),函数返回5050。 例3-3  求定积分:解:采用矩形法求解定积分。将定积分区域视为由n个等宽度小矩形组成,n个小矩形的面积之和为定积分值的近似值,小矩形的高度为sinx,宽度dx=1/n。A)编写程序(DEFUN  L3-3  (n  /  dx  s  x  y)  (SETQ dx  (/  1.0  n)          x  0  s  0  )  (REPEAT  n    (SETQ y  (*  x  (SIN  x))              x  (+  x  dx)              s  (+  s  (*  y  dx))    )  ))B)设n为100,调用函数(L3-3  100),函数返回定积分的近似值0.296973。9.  输入输出和文件处理函数除了前面提及的交互式输入函数外,AutoLISP语言还提供了输入大量数据的方式,即利用磁盘文件输入数据,输入函数为READ-LINE和READ-CHAR。输出函数可以将数据输出到显示屏幕或磁盘文件。常用的输出函数有PRINC。在处理磁盘文件时,需要先用OPEN函数打开文件,文件处理完毕后,再用CLOSE函数关闭文件。1) OPEN函数的功能是打开文件,对文件进行操作,函数返回文件指针。函数格式为(OPEN  name  mode),name是表示操作文件名的字符串,mode是表示文件操作方式的字符串,其定义如表3-6所示。表3-6 mode取值与文件操作方式的关系
mode状态
“r”读文件
“w”写文件
“a”添加数据
例如,程序段(setq  f  (open  “try.dat”  “r”))打开文件try.dat,并将其设为读状态,变量f为文件指针,开始时指向文件try.dat的头部,以后用输入函数读取数据时,文件指针随读取数据移动位置。2) CLOSE函数的格式为(CLOSE  f),其中f是表示文件指针的符号变量。它的功能是关闭打开的文件,函数返回NIL。使用CLOSE函数后,系统将缓冲区内的数据全部处理完毕后关闭文件,避免数据丢失。3) READ-LINE函数的格式为(READ-LINE  [f]),其中f是表示文件指针的符号变量。它的功能是从文件指针指向的文件中顺序读取一行数据。缺省项文件指针f不存在时,则从键盘输入读取数据。READ-LINE函数的返回值是字符串,读到文件底部时函数返回NIL。例3-4  设当前目录下有两个数据文件A.DAT和B.DAT,试编写程序,把B.DAT文件中的数据尾接到A.DAT文件之后。解:A)编写程序如下:(DEFUN  L3-4  ()(SETQ  fr  (OPEN  “B.DAT”  “r”)        fw  (OPEN  “A.DAT”  “a”)        s  (READ-LINE  fr))(WHILE  s        (PRINC  s  fw)        (PRINC  “\n”  fw)        (SETQ  s  (READ-LINE  fr)))(CLOSE  fr)(CLOSE  fw))B)调用程序:函数(L3-4)执行后,B.DAT文件中的数据就尾接到A.DAT文件原先数据的后面。程序运行时首先打开文件B.DAT和A.DAT,读取B.DAT文件中首行数据后进入循环,将读取数据和回车换行符添加写入A.DAT文件,然后再从B.DAT文件中继续读取数据,循环往复,一直到READ-LINE函数读取到B.DAT文件底部时,函数返回NIL并将其赋予变量s,则WHILE函数退出循环,关闭文件B.DAT和A.DAT后程序运行结束。4) PRINC函数格式为(PRINC  [e  [f]]),其中e是LISP表达式,f是表示文件指针的符号变量,用于输出至文件。F不存在,则输出至显示器。PRINC函数的功能是输出e的计算值。PRINC函数返回值为e的计算值。当函数没有变量时,即(PRINC)表示不显示函数返回值。PRINC函数输出字符串时不带双引号。可以用特殊字符进行控制,实现格式输出。特殊字符以\开始,后跟ASCII码,常用的特殊字符如表3-7所示。例如程序段(PRINC  “ABC”)向显示屏幕输出ABC,同时函数的返回值为“ABC”。 (PRINC  “\nABC”)先向显示屏幕输出回车换行符,然后输出ABC,函数的返回值为“\nABC”。表3-7  特殊字符
特殊字符\n\r\t\007\”\\
输出结果回车换行回车不换行TAB响铃\
10.            AutoCAD接口函数COMMAND函数的功能是在AutoLISP程序中执行AutoCAD命令。由于存在COMMAND函数,AutoLISP和Visual LISP程序可以调用几乎所有的AutoCAD命令,使得LISP灵活的程序功能和AutoCAD强大的图形功能得到完美的结合,专业计算和AutoCAD图形相得益彰,不仅能够大大提高AutoCAD的绘图效率,而且进一步拓展了AutoCAD的应用范围。COMMAND函数的格式为(COMMAND  [e1  e2  …  en])执行COMMAND函数时,按顺序把函数变量送出,作为AutoCAD命令及对命令提示的回答。因此,COMMAND函数变量的个数、顺序和类型必须与所调用的命令严格一致。函数变量可以是常数、变量及LISP表达式。不带变量的COMMAND函数,即(COMMAND),相当于在AutoCAD中使用CTRL-C。空字符串“”则相当于在AutoCAD中使用回车。一个COMMAND函数可以执行多项AutoCAD命令,一项AutoCAD命令也可以用多个COMMAND函数完成。在COMMAND函数变量中不允许出现GET族函数。例如输入圆心和直径绘制圆。程序1在一个COMMAND函数中执行CIRCLE和ZOOM两项AutoCAD命令,程序2则用两个COMMAND函数完成一项CIRCLE命令。程序1:(SETQ p (GETPOINT “Center point: ““)        d (GETDIST p “Diameter: “))(COMMAND “CIRCLE” p “D” d          “ZOOM” “E”)程序2:(SETQ p (GETPOINT “Center point: ““)(COMMAND “CIRCLE” p)(SETQ d (GETDIST p “Diameter: “))(COMMAND “D” d)(COMMAND “ZOOM” “E”)例3-5  在区间0~2π内绘制y = sinα的函数曲线。解:A)  编写程序如下:(DEFUN psin (x) (LIST x (SIN x)) ;定义函数psin,返回表示sin函数曲线上一点的表。(DEFUN NIHE (s e n f / d v p)    ;定义绘制任意函数曲线的函数NIHE  (SETQ d (/ (- e s) n)            ;s为初值,e为终值,n为逼近函数曲线所用的直线段数          v s                            ;f为定义曲线的函数,d为增量,v从初值变化到终值          p (f v)                    ;p为表示点的表  )(COMMAND “PLINE” p)                ;调用PLINE命令绘制多段连线  (REPEAT n                          ;进入循环    (SETQ v (+ v d) p (f v))(COMMAND p)                      ;绘制一个直线段  )                                  ;循环结束  (COMMAND)                        ;退出PLINE命令)B)  调用程序:调用函数(NIHE 0 (* 2 PI) 1000 psin),函数执行后,可以看到AutoCAD自动绘制出由1000根直线逼近的0至2π区间的sin函数曲线。11.            图形数据处理函数1986年,AutoCAD v2.52版本开放了图形数据库,使得CAD用户可以从CAD图形中提取与图形相关的数据。如此,表示切削加工的刀具运动轨迹图形可以轻易地用LISP程序转换成NC加工代码,也可以用LISP程序根据毛坯图形和零件轮廓图形自动产生刀具行走轨迹线,有限元网格划分的前处理也不再存在障碍。图形数据处理函数包括SSGET、SSNAME、SSLENGTH、ENTGET等函数。12.            QUOTE函数QUOTE函数是应用最广泛的LISP函数之一,它的格式为(QUOTE  e),功能是阻止对函数变量e进行求值计算。在LISP程序中常见的是QUOTE函数的简写格式’e。如果用赋值函数对变量a赋值:(SETQ  a  (+  1  2)),LISP会先对LISP表达式(+  1  2)进行求值计算,将计算结果赋予变量a,结果变量a的值为3。采用QUOTE函数阻止对LISP表达式(+ 1 2)进行求值计算,结果就不一样了,如程序段(SETQ  a  ’(+  1  2))执行后,a的值为(+  1  2),成为一个表变量。QUOTE函数常用来把一个表赋予一个变量,如(SETQ  a  ’(0.5  1.3))把表(0.5  1.3)赋予变量a。13.            APPLY函数APPLY函数不是一个实变函数,它具有泛函性质,它的格式为(APPLY  ’fun  L),其第一个函数变量是代表函数的函数名,另一个变量是表。APPLY函数将函数名移入表中,将其置于第0个元素的位置,然后对新表求值。如对于(APPLY  ’+  a),a的定义如前所述,相当于对(+  0.5  1.3)求值,函数返回值为1.8。14.            MAPCAR函数MAPCAR函数也不是一个实变函数,它也具有泛函性质,它的格式为(MAPCAR  ’fun  L1  L2  …  Ln),其第一个函数变量是代表函数的函数名,其它的变量都是表。MAPCAR函数用指定的函数处理表变量中相对应的元素,并以表的形式返回处理结果。如(MAPCAR  ’+  a  ’(1  2)),a的定义仍然同前所述,相当于(LIST  (+  0.5  1)  (+  1.3  2)),函数返回(1.5  3.3)。(三)LISP应用实例下面通过凸轮设计(与制造)的应用实例展示LISP语言是如何拓展AutoCAD应用范围的。1.  凸轮廓线的组成普通的凸轮廓线可以分成四段。1) 推程段:从动件跟随凸轮转动而上升,总上升行程为h,对应的凸轮转角为d1。2) 远休止段:从动件在距离凸轮旋转中心最远处停留不动,对应的凸轮转角为d2。远休止段凸轮廓线为一段圆弧,圆弧半径等于凸轮基圆半径r0加上从动件行程h。3) 回程段:从动件跟随凸轮转动而下降,总下降行程为h,对应的凸轮转角为d3。4) 近休止段:从动件在距离凸轮旋转中心最近处停留不动,对应的凸轮转角为d4。近休止段凸轮廓线为一段圆弧,圆弧半径等于凸轮基圆半径r0。对于凸轮从动件不同的运动规律,凸轮廓线推程段和回程段的函数曲线都不相同。凸轮从动件作等速运动时,推程段凸轮半径随转角d变化,变化规律为r=r0+h(d/d1)      0≤d≤d1回程段凸轮半径随转角d变化,变化规律为r=r0+h[1-(d/d3)]    0≤d≤d32.  凸轮绘制程序根据以上对凸轮廓线的分析,可以编制出如下的LISP程序:(DEFUN C:TULUN (/ r0 h d1 d2 d3 d4 n1 n3)        ;定义主函数C:TULUN  (SETQ r0 (GETREAL "基圆半径r0=")        ;以下输入凸轮参数          h (GETREAL "从动件行程H=")            d1 (GETREAL "推程角delta1=")            d2 (GETREAL "远休止角delta2=")            d3 (GETREAL "回程角delta3=")            d4 (- 360 D1 D2 D3)            n1 (GETINT "推程段拟合线段数n1=")            n3 (GETINT "回程段拟合线段数n3=")    )    (NIHE 0 d1 n1 s1)                            ;绘制推程段廓线  (COMMAND "ARC" "@" "C" "0,0" "A" d2)  ;绘制远休止段廓线  (NIHE (+ d1 d2) (+ d1 d2 d3) n3 s3)    ;绘制回程段廓线  (COMMAND "ARC" "@" "C" "0,0" "A" d4    ;绘制近休止段              "ZOOM" "E"                          ;显示整个绘制完毕的凸轮              "PEDIT" "L" "Y" "JOIN" "C" "-1E10,-1E10" "1E10,1E10" "" ""  )                                                  ;将组成凸轮廓线的线段链接成多段连线  (PRINC)                                        ;程序执行后不显示函数返回值)(DEFUN s1 (v / a a1 r x y)                  ;定义推程段函数  (SETQ a (/ (- v s) (- e s))          a1 (/ (* v PI) 180)          r (+ r0 (* h a))          x (* r (COS a1))          y (* r (SIN a1))  )  (LIST x y)                            ;函数返回表示函数曲线上一点的一个表)(DEFUN s3 (v / a a1 r x y)            ;定义回程段函数  (SETQ a (/ (- v s) (- e s))          a1 (/ (* v PI) 180)          r (+ r0 h (* -1 h a))          x (* r (COS a1))          y (* r (SIN a1))  )  (LIST x y)                                ;函数返回表示函数曲线上一点的一个表)上述程序由4个用户函数构成,即C:TULUN、NIHE、S1和S3。其中C:TULUN为主函数,具有输入凸轮参数和调用NIHE函数绘制凸轮廓线的功能;NIHE是例3-5中所列举的绘制任意函数曲线的函数,主函数调用时它绘制S1定义的推程段函数和S3定义的回程段函数曲线;S1函数定义了推程函数曲线,S3函数定义了回程函数曲线。主函数名为C:TULUN,在函数名TULUN前面加上C:,可以把自定义LISP函数转变为增添AutoCAD命令,即调用函数时不再需要使用圆括号。3.  凸轮绘制程序的使用在AutoCAD命令提示符状态下直接键入TULUN,随后根据提示逐项输入如下数值(底下划线部分为键入数值,非划线部分为程序提示):Command: TULUN基圆半径r0=30从动件行程H=10推程角delta1=120远休止角delta2=60回程角delta3=120推程段拟合线段数n1=100回程段拟合线段数n3=100 输入完毕后,AutoCAD立即自动绘制出如图3-3中所示的凸轮理论廓线。其中推程段是用100根直线逼近的等速运动规律凸轮廓线;远休止段是圆心为0,0,半径为40,角度为60°的圆弧;回程段是用100根直线逼近的等速运动规律凸轮廓线;近休止段是圆心为0,0,半径为30,角度为60°的圆弧。用AutoCAD的绘图功能还可以绘制出图中的其他图线,如用偏移复制(OFFSET)功能可以绘制出凸轮实际廓线。如果继续调用CAM程序,就可以从凸轮的实际廓线得到凸轮的数控加工程序,从而在数控机床上优质高效地制造出这个凸轮零件。第四节            新生代CAD软件——SolidWorksSolidWorks是SolidWorks公司推出的基于Windows的机械设计软件,是基于Windows平台的全参数化特征造型软件,它可以十分方便地实现复杂的三维零件实体造型、复杂装配和生成工程图。图形界面友好,用户易学易用。一、SolidWorks的三维设计功能介绍其主要功能特点如下:(1)操作界面友好(2)协同工作3D Content Central 是一个崭新的在线资源库,集成在SolidWorks内。用户可以通过此插件在互联网找到世界著名的零部件供货商,并下载库中的几百万个零部件。用户只需查询供应商的产品在线目录,直接下载三维实体模型,而不需要二次建模。(3)装配设计(4)工程图SolidWorks 提供了生成完整的、车间认可的详细工程图的工具。工程图是全相关的,当你修改工程图时,三维实体模型、各个视图、装配体都会自动更新。从三维实体模型中自动产生工程图,包括视图、尺寸和标注。(5)零件建模SolidWorks 提供了基于特征的实体建模功能。通过拉伸、旋转、抽壳、扫描、放样、阵列、镜像以及打孔、倒圆角、倒角等操作来实现产品的设计。通过对特征和草图的动态修改,用拖拽的方式实现实时的设计修改。三维草图功能为扫描、放样生成三维草图路径,或为管道、电缆等管线生成延伸路径。(6)曲面建模通过SolidWorks带控制线的扫描、放样、填充以及拖动可控制的相关操作产生复杂的曲面。可以直观地对曲面进行修剪、延伸、倒角和缝合等曲面的操作。二、SolidWorks的零件建模SolidWorks是基于特征的工程造型软件,所谓特征是一种用参数驱动的模型。特征之间可以相互堆砌,也可以相互剪切。特征造型就是应用各种特征来组合生成所需要零件的方法。SolidWorks提供了一系列特征造型工具供用户进行零件建模。表3-8中列出了SolidWorks提供的特征造型工具。表3-8  SolidWorks特征造型工具
特征(Feature)说    明
拉伸(Extrude)生成向一侧或两侧延伸的可具有拔模斜度的基体、凸台、切除或曲面
旋转 (Revolve)生成旋转的基体、凸台、切除或曲面
扫描 (Sweep)通过沿着一条路径移动截面轮廓来生成基体、凸台、切除或曲面。
放样 (Loft)通过在若干截面轮廓之间进行过渡来生成基体、凸台、切除或曲面
倒圆角(Fillet)在零件上生成一个内圆角或外圆角面
倒角(Chamfer)在所选的边线或顶点上进行倒角
拔模(Draft)以指定的角度斜削模型中所选的面
钻孔(Hole)在模型上生成各种类型的孔特征
缩放(Scale)对零件或曲面进行比例缩放
抽壳(Shell)形成空心零件
加厚(Thicken)为所选曲面加厚度
筋(Rib)特殊类型的拉伸特征
圆顶 (Dome)将平面转变为预定高度的圆顶
特型 (Shape)通过展开、约束或拉紧所选曲面在模型上生成一个变形曲面
阵列(Pattern)阵列复制所选的源特征
镜像(Mirror)镜像复制所选的特征或所有特征
型腔(Cavity)用一个零件减去另一个零件
连接(Join)两个零件相连接
分割(Split)对一个零件进行分割


SolidWorks的基本特征建立在二维草图的基础上,而二维草图又建立在基准平面之上。
建立一个零件的实体建模文件时,具有三个初始的相互正交的基准平面——前视面、俯视面和右视面。可以从基准平面派生出其他基准平面。派生的基准平面可以和原先的基准平面平行并相隔一定距离,也可以与原先的基准平面构成一定的旋转角度。从已经生成的三维实体中的平面或特征点也可以派生出基准平面。
草图有二维草图和三维草图之分,二维草图应用广泛,是建立基本特征的基础,三维草图仅用于产生扫描路径等不多的场合。二维草图创建于基准平面,由直线、圆弧、圆、椭圆、样条曲线、中心线和文字等图形构成。在二维草图的图形中可以建立起尺寸约束和几何约束。所谓尺寸约束是指通过改变尺寸来改变图形,即尺寸驱动图形。几何约束包括水平、垂直、平行、正交、相切、相等、同圆心、对称等。在绘图时会自动生成一些几何约束,也可以在修改图形时增加和删除几何约束。二维草图的绘制类同于AutoCAD,并兼容AutoCAD命令,但由于具有尺寸驱动图形的功能,二维草图的图形绘制比AutoCAD更胜一筹。SolidWorks 2003增添了二维草图自动标注尺寸的新功能,使得二维草图的绘制更加便捷。在二维CAD层面上,SolidWorks图形和AutoCAD是可以互相转换的。
SolidWorks的零件实体建模通过以下特征造型工具完成。
(1)  拉伸(Extrude)特征  以一个二维草图为基础,将二维草图沿一个垂直方向或同时沿另一相反方向拉伸成三维实体。拉伸时可以设置拔模斜度。在三维实体上去除材料的拉伸特征称为拉伸切除。
(2)  旋转(Revolve)特征  通过环绕中心线旋转二维草图轮廓线来生成三维实体。在三维实体上去除材料的旋转特征称为旋转切除。
(3)  扫描(Sweep)特征  通过沿着一条二维草图或三维草图指定的路径移动二维草图生成三维实体,可以通过引导线来控制三维实体的中间形状。
(4)  放样(Loft)特征  连接多个二维草图上的截面构成三维实体。
上述4个特征均建立在草图基础之上,可以利用来生成零件三维实体的基体,所以又称为基本特征。表3-8中列出的其他特征则用来对三维实体进行操作,不一定需要草图。
(5)  倒圆角(Fillet)特征  用来对三维实体进行倒圆角操作。
(6)  倒角(Chamfer)特征  用来对三维实体进行倒角操作。
(7)  拔模(Draft)特征  用来生成拔模斜度。
(8)  钻孔(Hole)特征  分成简单直孔和异形孔。简单直孔特征可以在三维实体上制作一个直圆孔。异形孔特征用于生成螺孔等,它包含两个草图,其中一个草图包含表示孔数量和位置的点,另一个草图包含表示孔形状的图形。修改上述第一个草图可以改变孔的数量和位置,修改上述第二个草图可以改变孔的形状。
(9)  缩放(Scale)特征  用来对三维实体或曲面进行比例缩放。可以在各个方向比例均匀地进行缩放,x、y、z方向的缩放比例也可以各不相同。
(10)            抽壳(Shell)特征  去除零件内部的材料,生成空心零件,空心零件可以有若干个面敞开,对应于各个面的壁厚也可不同。
(11)            加厚(Thicken)特征  用来处理曲面,把曲面生成一定的厚度,使之变为实体模型。
(12)            筋(Rib)特征  用来产生筋板,对塑料件设计很有用。筋特征建立在草图基础之上。
(13)            圆顶(Dome)特征  将平面拉伸成一定高度的球面或椭球面。
(14)            特型(Shape)特征  在三维实体上生成具有可控曲面的实体,可以用点(草图点、端点、顶点等)、草图、边线和曲线对曲面形状进行控制。
(15)            阵列(Pattern)特征  对选定特征进行阵列复制,共有线性阵列、圆周阵列、曲线阵列、草图阵列和表格阵列5种形式。线性阵列对选定特征沿一个方向或两个方向作线性分布阵列复制。圆周阵列对选定特征作圆周分布阵列复制。曲线阵列对选定特征沿曲线分布进行阵列复制。草图阵列对选定特征根据草图上点的位置进行阵列复制。表格阵列则根据表格数据定义的位置对选定特征进行阵列复制。
(16)            镜像(Mirror)特征  对已有特征或三维实体作镜像复制,产生对称于所选平面的镜像实体。
(17)            型腔(Cavity)特征  用一个零件减去另一个零件,常用来产生模具型腔和型芯。
(18)            连接(Join)特征  把两个零件连接成一个零件。
(19)            分割(Split)特征  把一个零件分割开。
三、SolidWorks的曲面和曲线特征
除了上述零件建模特征外,SolidWorks还具有丰富的曲面和曲线特征,用于辅助零件建模。
1. 曲面特征
曲面是没有厚度的一种几何图元。
生成曲面的方法有
①用闭环草图或基准面上的闭环边线生成平面;
②从草图拉伸、旋转、扫描和放样生成曲面,方法与零件建模相同;
③从已有的曲面或零件面生成等距曲面;
④从零件实体产生中面;
⑤生成圆角曲面;
⑥生成填充曲面;
⑦复制曲面;
⑧从输入文件得到曲面,如从IGES格式文件得到曲面。
修改曲面的方法有
①延伸曲面;
②裁剪曲面;
③延展曲面;
④移动曲面;
⑤删除曲面;
⑥替换曲面;
⑦缝合曲面。
曲面用于零件建模的场合有
①选取曲面的边线和顶点作为扫描的引导线和路径;
②加厚曲面来生成实体或切除实体;
③缝合曲面并加厚使包围区域成为实体;
④隐藏或显示实体和曲面;
⑤曲面作为拉伸实体的终止条件;
⑥用曲面作为实体的替换面。
2. 曲线特征
曲线是无宽度和厚度的一种几何图元。
除了二维草图中的平面曲线外,我们还有下列几种三维曲线:
①从草图投影到模型面或曲面上的投影曲线;
②由曲线、草图线和模型边线组合生成的组合曲线;
③用曲线工具生成的螺旋线或涡状线;
④从草图曲线投影到模型面上生成的分割线;
⑤通过模型点或自由点的样条曲线。
曲线可以用于零件实体建模,如将曲线用作扫描时的路径和引导线、放样时的引导线、拔模时的分割线,等等。
四、SolidWorks的装配体
SolidWorks支持自下而上和自上而下两种设计装配体的方法,也可以结合两种方法设计一个装配体。
自下而上的设计方法属于归纳设计方法,它先生成组成装配体的所有零部件,然后将它们插入装配体中,根据各个零部件间的配合关系将它们组装起来。这种方法的优点是零部件的独立设计,相互关系及重建行为比较简单。用户可以专注于单个零件的设计工作。
自上而下的设计方法属于演绎设计方法,它从装配体中开始设计,用户可以从一个零件的几何体来定义另一个零件。自上而下的设计次序一般以布局草图为设计的开端,然后定义固定的零件位置、基准面等,参考这些定义来设计零件。自上而下的设计方法更符合经典的设计思想,突出零件之间的相互联系。
SolidWorks的装配体操作有插入零部件、移动和旋转零部件、装配零部件、检测装配效果及产生爆炸效果图。
插入零部件可以把已经生成的SolidWorks零件或装配体插入到装配体中。插入后的零部件可用鼠标拖动及旋转以便装配。零件的装配关系分为平面配合与圆柱面配合两种方式。平面配合有共面、平行、垂直和角度四种关系。圆柱面配合有轴线共线、平行、垂直和角度四种关系。SolidWorks可以对装配体进行干涉检测,检查装配面的间隙和干涉情况。SolidWorks还可以完成装配体的爆炸效果图来充分展现零件之间的装配过程。
五、SolidWorks的工程图
对于已经生成的零件实体和装配体,SolidWorks具有工程图的功能。工程图可以编辑图样格式,生成标准三视图,生成轴测视图、模型视图等命名视图以及派生视图。SolidWorks提供了多种类型的派生视图。对于视图的某一部分,如果因为图形太小而不能清楚表达,用户可以生成一个局部视图来放大这一部分。借助于剖切线,可以生成常用的全剖视图、半剖视图、阶梯剖视图、旋转剖视图、断开的剖视图和局部剖视图。在所选视图的左边、右边、上边或下边可以生成投影视图。对于现有视图的直边,能够产生向该边垂直方向投影的辅助视图。对于现有视图中的平面,能够产生向该平面垂直方向投影的相对视图。
SolidWorks可以把构筑零件特征时的尺寸带入到工程图中,尺寸标注的类型有常用尺寸、基准尺寸、尺寸链、参考尺寸、倒角尺寸等。形位公差、表面粗糙度和技术要求等被作为注解加入到工程图中。工程图、装配体和零件实体之间的尺寸是互相关联的,修改其中任一尺寸,其他两个文件中的尺寸及其几何形状都会发生同样的改动,这样就保证了设计数据的一致性。
装配体的工程图可以自动生成零件明细表,插入零件序号。零件明细表会跟随装配体添加、删除或替换零部件自动更新变化。
六、SolidWorks的模具设计插件
MoldBase是SolidWorks的模具设计插件,它能够在用SolidWorks进行模具设计时提供标准的模架,并快速完成模具设计。
利用MoldBase很快就可以完成标准模架的三维设计。模具设计师只需要选择供应商、模架类型、尺寸规格、模板厚度以及其他参数就可以生成模架的三维模型实体。设计师的精力可以集中在模具设计的关键处,如型腔和型芯的设计、流道和浇口的安排、冷却管道的布置等。
MoldBase能够提供国际一流模架生产厂商的标准模架,如DME、Superior、PCS、HASCO、Progressive等。
除了完整的装配模架以外,MoldBase还提供大量的模具标准件,例如:螺栓、顶杆、顶管、定位环、A型模板、B型模板、返回杆、圆柱销、圆锥销、直导套、带肩导套、注口套、支承柱、轴衬等。
MoldBase还为模具设计提供了常用的造型特征:平底沉孔、埋头螺孔、螺纹、穿过若干模板的系列孔、管接头、管螺纹孔等。
SolidWorks 2004提供给模具设计师新的工具来消除耗时的工作。新的凹模和凸模命令使得两个主要模具零件设计实现了自动化。用户只需制定好模具钢材的尺寸,SolidWorks就会自动完成剩下的工作。过切分析在生产模具前能够自动检测潜在的问题,节省了模具制造工厂的时间和金钱。新的表面合模命令能够自动定位和封闭凹模和凸模。厚度分析工具能够检测模型的各个部分,避免流体经过模具受限制的部位或避免成品的缺陷。新的工具可以自动创建分模线,分模表面和有效的排气孔。
七、SolidWorks的其他功能
SolidWorks提供的钣金设计能力,可以直接使用各种类型的法兰、薄片等钣金特征。正交切除、角处理以及边线切口等处理手法,使钣金操作变得非常容易。同样对于冷冲压模具设计,弯曲件的展开也变得非常简便易行。
SolidWorks首创将结构分析的功能嵌在CAD环境中。COSMOSXpress模块使得用SolidWorks软件进行设计的工程师可以直接对设计的零件进行有限元分析,对产品的性能进行评估,而不必花费大量的时间和金钱去制造昂贵的样机。
SolidWorks能够直接模拟机械机构运动干涉的情况,减少了建造样机所需的时间和费用。驱动机械运动的模型有:电动机、弹簧、重力等,同时还具有记录和播放的功能。
PhotoWorks能够非常快地将SolidWorks的零件和装配体渲染成美观的具有真实效果的图片。
Toolbox是一个容易操作的标准件软件。用Toolbox可立即查阅所有的标准件库,可以在很短的时间内选出正确的标准件,并将其放到正确的位置。
Piping能够对气体和液体传输设备中的管道设计进行优化,你可以充分利用三维CAD软件SolidWorks独有的功能和灵活性,方便、自动地进行管道设计。
PDMWorks通过电子仓库提供了一种有效的途径来保护文档安全,PDMWorks提供的可靠与安全的系统让用户放心存放与共享项目的文档。电子仓库允许设计团队系统地共享文档,对电子仓库进行检入、检出操作,避免错误的覆盖文档或在错误的版本上浪费时间。PDMWorks所提供的安全层次远远胜过了仅仅通过网络共享文件夹的工作环境。只有授权用户才能通过PDMWorks的界面来访问电子仓库,与普通的网络或本地的文件夹不同的是,PDMWorks能保护你的文档免受非法的覆盖或删除。
阅读全文 | 回复
数据载入中......
  站点首页 | 博客日志 | 博客注册 | 博客登陆
Powered by blog © Copyright 2004-2008. All rights reserved.