1、1AUTOCAD 的二次开发软件在数铣一体化教学中的应用摘 要:本文探讨 AUTOCAD2004 的二次开发软件 VLisp 及 VBA 在数控铣一体化教学中的实际应用。VLisp 可以用来扩展数控加工零件的参数化设计绘制功能,VBA 可以用来实现参数化的刀路仿真,很多功能两者都可以实现。为了让学生更好地完成数控铣一体化学习,为了使教学过程更加清晰明了,我充分利用 AUTOCAD2004 的二次开发软件,在实际教学中取得了不错的效果。关键词:VLisp,VBA,数控铣,教学,参数化1. 绪论一体化教学已成为当今中高职学校教学模式的新趋势。数控铣一体化是数控专业的中高职学生在技校期间的一门重要课
2、程,该课程学习效果的好坏直接关系到中高级数控铣操作工的考证、中高级CAM 程序员的考证、数控铣方向毕业设计的完成、数控铣相关工作岗位的面试老师在教学过程中为了讲好各个知识点,从理论到实际操作都不能有一丝马虎,然而尽管如此,还是有很多学生对一些知识点无法理解或理解不透彻,于是老师们会借助一些辅助手段更好地完成知识点的讲解,比较常用的手段有利用 PowerPoint制作幻灯片演示,利用 Flash MX 制作动画演示,利用专门的仿真软件进行仿真演示,利用 AUTOCAD 边画图边讲解,利用MasterCAM、CAXA、 UG 等工具直接画图及设置刀路,播放操作视频,实操演示等。2多一种教学手段便多
3、一分讲解效果,除了以上手段外,我发现利用 AUTOCAD2004 的二次开发软件 VLisp 及 VBA 可以更好地辅助教学,VLisp 可以用来扩展数控加工零件的参数化设计绘制功能,VBA 可以用来实现参数化的刀路仿真,很多功能两者都可以实现,而这些功能中的参数化效果是其他手段望尘莫及的。2. VLisp 及 VBA 简介VLisp 是 Visual Lisp 的缩写,LISP(全名 List Processor,即链表处理语言)是由 约翰麦卡锡在 1960 年左右创造的一种基于 演算的函数式编程语言。Visual Lisp 是 AutoCAD 自带的一个集成的可视化 AutoLisp 开发
4、环境,最早的 AutoLisp 程序需要用文本编辑工具如记事本等编辑,然后在 AutoCAD 中加载调试,很不方便。从AutoCAD 2000 开始,有了集成的开发环境:Visual Lisp。作为开发工具,Visual Lisp 提供了一个完整的集成开发环境(IDE ) ,包括编译器、调试器和其他工具,可以实时调试 AutoLisp 命令。Visual Lisp 具有自己的窗口和菜单,但它并不能独立于 AutoCAD 运行。VBA 是基于 Visual Basic 发展而来的,它们具有相似的语言结构。90 年代早期,使应用程序自动化还是充满挑战性的领域.对每个需要自动化的应用程序,人们不得不
5、学习一种不同的自动化语言。例如:可以用 EXCEL 的宏语言来使 EXCEL 自动化,使用 WORD BASIC 使 WORD 自动化,等等。微软决定让它开发出来的应用程序共享一种通用的自动化语言Visual Basic For Application(VBA),可以认为 VBA 是非常流行的应用程序开发语言 Visual Basic 的子集。3实际上 VBA 是寄生于 VB 应用程序的版本。3. 用 VBA 编程解释刀具半径补偿与加工余量的关系3.1 准备工作在计算机上安装 AutoCAD2004 程序,事实上 2000 以上版本都可以。AutoCAD2004 打开后点击菜单【工具 】【宏】
6、【Visual Basic 编辑器 】 ,或按快捷方式 ALT+F11 打开 VBA 编程界面,通过菜单插入模块和用户窗体后【工程资源管理器】窗口如图 1,可以看出【AutoCAD 对象 】 、 【窗体】和【模块 】三个部分是相互关联的,我们的任务之一就是设计窗体并为窗体添加程序代码,任务之二就是添加应用程序代码。图 1. 【工程资源管理器】窗口3.2 添加窗体及控件鼠标左键双击【工程资源管理器】窗口中的树状分支【UserForm1 】并通过菜单【视图】打开【工具箱】 ,将【属性】窗口中【caption】的“UserForm1”改为“外形加工” ,窗体屏幕显示如图2。4图 2. 窗体及【工具箱
7、】现在就可以在窗体上添加标签控件(单击控件工具箱中的图标) 、文字框控件(单击控件工具箱中的图标 ) 、图象控件(单击控件工具箱中的图标 ,设置好大小后,单击【属性】窗口“Picture”右侧的图标 打开【加载图片】对话框,选择事先创建好的相关图片即可) 、命令按钮控件(单击控件工具箱中的图标 ) ,各控件的内容、大小、颜色等通过【属性】窗口中的各个参数来设置。各控件添加后的效果如图 3 所示。图 2. 添加控件后的【外形加工】窗体3.3 为窗体添加程序代码为了能从窗体输入数据,需要为窗体和控件添加程序代码。双击窗体,出现了几乎与代码窗口一样的窗口界面,但左右上角的组5合框内容则完全不同了,左
8、上角是窗体及控件对象组合框,右上角是事件组合框,如图 3 所示。图 3. 左右上角组合框首先把对象“UserForm”初始化,在事件框中选择 Initialize,并在 Initialize 的过程框架内加入下列代码:Private Sub UserForm1_Initialize()UserForm1.TextBox1.Text = “ 加载“TextBox1”控件并将其“Text”置空UserForm1.TextBox2.Text = “UserForm1.TextBox3.Text = “UserForm1.TextBox4.Text = “UserForm1.TextBox1.SetF
9、ocus = “End Sub以上程序的主要作用是加载并将文字框控件置空,SetFocus 的作用是聚焦“TextBox1” 控件。接下来给 4 个变量赋值并给两个按钮“确定”和“ 取消” 添加程序代码如下,效果如图 4 所示:Private Sub CommandButton1_Click()L1 = Val(UserForm1.TextBox1.Text) 将“TextBox1” 控件的 “Text” 属性值赋给 L1L2 = Val(UserForm1.TextBox2.Text)r = Val(UserForm1.TextBox3.Text)m = Val(UserForm1.Text
10、Box4.Text)Unload Me 卸载窗体Call mill 调用“mill”过程,按输入的参数画图End SubPrivate Sub CommandButton2_Click()Unload Me 卸载窗体End Sub6图 4. 窗体过程代码窗口3.4 在代码窗口编辑应用程序代码此处的应用程序代码分三个小部分,分别是“定义公共变量” 、“创建一个加载窗体的过程” 和“创建一个绘制示意图的过程”,具体代码如下:Public l1 As Double, l2 As Double, r As Double, m As Double 定义公共的双精度型变量Public Sub mill_m
11、ain() 创建公共的子过程UserForm1.Show 调用窗体End SubPublic Sub mill() 创建公共的子过程Dim p1 As Variant 定义变体型变量Dim p2(0 To 2) As Double, p3(0 To 2) As Double, p4(0 To 2) As Double, p5(0 To 2) As DoubleDim p6(0 To 2) As Double, p7(0 To 2) As Double, p8(0 To 2) As Double, p9(0 To 2) As DoubleDim p10(0 To 2) As Double, p1
12、1(0 To 2) As Double, p12(0 To 2) As Double, p13(0 To 2) As DoubleDim p14(0 To 2) As Double, a1 As Double, a2 As DoubleDim lineobj As AcadLine, arcobj As AcadArcp1 = ThisDrawing.Utility.GetPoint(, “零件左下角定位:“) 以下是计算各个点坐标p2(0) = p1(0) + l1: p2(1) = p1(1) p3(0) = p2(0): p3(1) = p2(1) + l2p4(0) = p3(0) -
13、 l1: p4(1) = p3(1)p5(0) = p1(0) - 10 - r - m: p5(1) = p1(1) - 10 - r - mp6(0) = p1(0): p6(1) = p1(1) - m - rp7(0) = p2(0) + m + r: p7(1) = p6(1)7p8(0) = p7(0): p8(1) = p3(1) + r + mp9(0) = p4(0) - r - m: p9(1) = p8(1)p10(0) = p9(0): p10(1) = p5(1)p11(0) = p1(0) - m: p11(1) = p1(1) - mp12(0) = p2(0)
14、+ m: p12(1) = p2(1) - mp13(0) = p3(0) + m: p13(1) = p3(1) + mp14(0) = p4(0) - m: p14(1) = p4(1) + ma1 = 0: a2 = 6.28 以下在模型空间创建直线对象Set lineobj = ThisDrawing.ModelSpace.AddLine(p1, p2): lineobj.color = acRedSet lineobj = ThisDrawing.ModelSpace.AddLine(p2, p3): lineobj.color = acRedSet lineobj = ThisDr
15、awing.ModelSpace.AddLine(p3, p4): lineobj.color = acRedSet lineobj = ThisDrawing.ModelSpace.AddLine(p4, p1): lineobj.color = acRedSet lineobj = ThisDrawing.ModelSpace.AddLine(p5, p6): lineobj.color = acGreenSet lineobj = ThisDrawing.ModelSpace.AddLine(p6, p7): lineobj.color = acGreenSet lineobj = Th
16、isDrawing.ModelSpace.AddLine(p7, p8): lineobj.color = acGreenSet lineobj = ThisDrawing.ModelSpace.AddLine(p8, p9): lineobj.color = acGreenSet lineobj = ThisDrawing.ModelSpace.AddLine(p9, p10): lineobj.color = acGreenSet lineobj = ThisDrawing.ModelSpace.AddLine(p11, p12)Set lineobj = ThisDrawing.Mode
17、lSpace.AddLine(p12, p13)Set lineobj = ThisDrawing.ModelSpace.AddLine(p13, p14)Set lineobj = ThisDrawing.ModelSpace.AddLine(p14, p11)以下在模型空间创建圆弧对象Set arcobj = ThisDrawing.ModelSpace.AddArc(p5, r, a1, a2): arcobj.color = acBlueSet arcobj = ThisDrawing.ModelSpace.AddArc(p6, r, a1, a2): arcobj.color = a
18、cBlueSet arcobj = ThisDrawing.ModelSpace.AddArc(p7, r, a1, a2): arcobj.color = acBlueSet arcobj = ThisDrawing.ModelSpace.AddArc(p8, r, a1, a2): arcobj.color = acBlueSet arcobj = ThisDrawing.ModelSpace.AddArc(p9, r, a1, a2): arcobj.color = acBlueSet arcobj = ThisDrawing.ModelSpace.AddArc(p10, r, a1,
19、a2): arcobj.color = acBlueEnd Sub在 VBA 中应用 AUTOCAD 命令Public Sub command()ThisDrawing.SendCommand “_rectang“ 定义函数”c:sin” (setq sp (getpoint “起点:“) ;输入起点“sp”(setq r (getint “输入幅值:“) ;输入幅值整数 r(setq h (getreal “输入周期:“) ;输入周期实数 h(setq xs (nth 0 sp) ;分离起点“sp”的 x 分量(setq ys (nth 1 sp) ;分离起点“sp”的 y 分量(setq
20、pt1 sp) ;将“sp ”的值赋给点“pt1 ”(setq x 0.0) ;x 初始化为 0(setq y 0.0) ;y 初始化为 0(setq dx(/ h 180) ;计算 x 增量12(setq i 1) ;i 初始化为 1(while(= i 180) ;开始循环(setq x (+ x dx) ;计算下一点的 x(setq y (* r (sin(* x(/ 6.28 h) ;计算下一点的 y(setq xe (+ x xs) ;计算平移后的 x(setq ye (+ y ys) ;计算平移后的 y(setq pt2 (list xe ye) ;构造点表(command “li
21、ne“ pt1 pt2 “) ;从点“pt1”画到点“pt2”(setq pt1 pt2) ;把当前的“pt2 ”赋给“pt1”(setq i (+ 1 i) ;循环记数器加 1 (command “) ;中止画线命令 程序检查无误后保存为 sin.lsp 到硬盘,然后回到 AutoCAD 界面,点击菜单【工具】【AutoLisp】【加载】 ,系统弹出对话框如图9 所示,选择 sin.lsp 后点 【加载】按钮,此时 AutoCAD 命令提示行提示为“命令: _appload 已成功加载 sin.LSP”,在命令提示行输入“sin ”并按空格键,显示该命令可以正常使用了。图 9. VLisp
22、程序的加载13根据提示任意给出起点、幅值和周期,就可以得到相应的正弦曲线了,譬如给出幅值为 60,周期为 200 后得到的正弦曲线如图 10所示。在实际教学中,各种复杂的曲线方程变化多端,但此时实现起来却并不难,变的只是公式,将上述程序中的公式稍作变化就可以满足各种需求,且其参数化特点更加增强了我们设计的灵活性。5. 小 结以上只是针对 AUTOCAD2004 的二次开发软件 VLisp 及 VBA在数控铣一体化教学中的实际应用各列举了一个例子,并不能完全体现 VLisp 及 VBA 的强大功能,随着数控铣一体化教学对教师越来越高的要求,充分利用 VLisp 及 VBA 的强大功能促进教学已经
23、刻不容缓,事实上 VLisp 及 VBA 编程已被用到“图形编程 ”领域,即通过“图形交互界面”就可以得到数控加工代码,当然也可以用来仿真,相信随着更深入地学习,我也可以达到这个水平。参考文献:1 张振宇,刘彦国 AutoCAD 二维图形数控自动编程系统的设计,兰州工业高等专科学校学报,2002.22 张振宇,用 Visual C+ 6.0 可视化设计 AutoCAD 对话框的方法, 兰州工业高等专科学14校学报.2002.43 张振宇,梁补女,刘彦国,用 ObjectARX 开发 AutoCAD2000 功能,兰州工业高等专科学校学报,2003.14刘林,AutoCAD2008 中文版高级应用教程,华南理工大学出版社,2008.3