摘要:介绍了参数化绘图的基本概念,同时介绍了使用VBA在Excel文件中调用AutoCAD实现参数化绘图的过程,为广大工程设计人员提供一种快速设计图纸的新方法。
关键词:VBA;铁心;参数化设计
1、引言
当前,随着计算机技术的高速发展,Excel和CAD在变压器行业内广泛应用。广大工程设计人员使用Excel进行变压器电磁方案的计算,并将电磁计算的结果通过CAD软件绘制成工程图。但是绝大多数工程设计人员只是单独的使用上述两个软件,没有将两个软件结合起来使用。本文主要介绍在Excel中使用VBA调用AutoCAD进行图纸的参数化设计,来告诉读者如何将Excel和CAD结合起来,提高工作效率和工作质量。
2、参数化绘图的概念
参数化绘图是通过软件编程实现用参数驱动CAD进行绘制图形的一种方式。传统的手动绘图方式是设计人员操作鼠标在计算机上将所有图形、标注、明细绘制出来。对于系列化的机电产品,其零件的结构形状基本相同,只是尺寸有所区别。采用传统的手动画图,所有图纸每次都需要重新绘制,工作量非常大;采用参数化绘图的话则可以一键绘制出所有定义好的图纸,能够极大的提高设计效率,并且杜绝人疲劳和疏忽产生的错误,提高设计质量。
3、Excel VBA与AutoCAD的连接
VBA(Visual Basic for Application)是一种程序设计语言,集成在具体的应用软件(宿主应用程序)中,为有效利用宿主应用软件功能和增加宿主应用软件的应用提供了强大的工具。很多大型商业软件像Office、AutoCAD、ANSYS等都提供了VBA开发工具。VBA简单易学,易于使用,非常适合工程人员结合自己的具体工作进行开发。
3.1、引用AutoCAD类型库
进入Excel VBA集成开发环境,选择“工具”|“引用”菜单项,打开如下图1的对话框,选中AutoCAD2006 Type Library(AutoCAD类型库,其版本与计算机上安装的AutoCAD版本有关系)。
图1 引用AutoCAD类型库
3.2、创建AutoCAD对象、启动AutoCAD
VBA连接AutoCAD可以通过GetObject和CreateObject函数,创建或者获得对ActiveX对象的应用,其实现代码为:
On Error Resume Next
Set acadApp = GetObject(, "AutoCAD.Application.16")
If Err Then
Err.Clear
Set acadApp = CreateObject("AutoCAD.Application.16")
If Err Then
MsgBox Err.Description
Exit Sub
End If
End If
连接到AutoCAD之后,就可以使用acadApp对象对AutoCAD进行操作。
4、程序开发
4.1、标准化工作。
在实际生产中,不同直径的铁心叠片图的图形很类似,只是数据有所不同,硅钢片片型为固定的几种。因此,通常对铁心进行标准化处理,将每个直径对应的级数、每级片宽、每级级厚等数据放到数据库中;将片型图形做成块,放到一个dwg文件中。
4.2、铁心绘图数据的获取。
因为一般的电磁计算文件都是Excel格式的文件,因此在Excel文件中新建一个铁心绘图的sheet(见图2),通过单元格引用的方式可以很方便的从电磁计算的sheet中获取产品型号、图号、铁心直径、窗高、等铁心叠片相关数据,不用再制作输入界面,降低了开发的难度,缩短了开发的时间,还能保证数据的正确性。
图2 铁心绘图sheet
4.3、程序的编制
首先,对绘图环境和绘图函数进行封装。这样可以提高代码的复用性、简洁性和可读性,提高程序的开发效率,减少代码的书写量,缩短开发时间。根据国家机械制图标准和企业标准化的要求,对图框、图层、字体样式、标注样式等绘图环境进行封装;对常见的绘图函数进行封装,如画线、画圆,创建文字、创建标注、创建填充、操作块等等。
基础工作完成之后,就可以进行铁心叠片图参数化绘图部分程序的代码的编写了。铁心叠片图分为技术要求、心柱截面、轭截面、铁心外形、片型、出尖示意、项号和明细等多个部分。前三个部分相对简单,可以通过画图加添加标注实现,后四个部分可以通过插入块的方式实现,在这里对片型图和明细的绘制进行简要说明。
片型图可以通过插入普通块的方式来实现,片型图块(见图3)放在前面提到的dwg文件中。插入块适合于图形不变的示意图,优点是减少代码的编写。下面的代码将插入普通块封装成了一个函数,调用这个函数就可以在指定位置插入一个普通块。
Public Function InsertBlock(ByVal pt1 As Variant, ByVal Name As String) As Variant
Dim blockRefObj As AcadBlockReference
Dim insertionPnt(0 To 2) As Double
Dim blockName As String
insertionPnt(0) = pt1(0): insertionPnt(1) = pt1(1): insertionPnt(2) = pt1(2)
blockName = Name
Set blockRefObj = acadApp.ActiveDocument.ModelSpace.InsertBlock(insertionPoint, blockName, 1, 1, 1, 0)
ZoomAll
End Function
图3 普通块(片型)
明细表为多行数据,可以通过插入属性块的方式来实现。属性块(见图4)和普通块类似,不同之处在于属性块块定义中可以添加多个属性值。下面的代码将插入属性块封装成了一个函数,调用这个函数就可以在指定位置插入一个属性块并写入属性值。
Public Function InsertAttBlock(ByVal pt1 As Variant, ByVal Name As String, ByVal XH As String, ByVal ID As String, ByVal B As String, ByVal L As String, ByVal Thick As String, ByVal PiecesNum As String, ByVal NetWeight As String) As Variant
Dim blockRefObj As AcadBlockReference
Dim insertionPnt(0 To 2) As Double
Dim blockName As String
insertionPnt(0) = pt1(0): insertionPnt(1) = pt1(1): insertionPnt(2) = pt1(2)
blockName = Name
Set blockRefObj = acadApp.ActiveDocument.ModelSpace.InsertBlock(insertionPoint, blockName, 1, 1, 1, 0)
ZoomAll
‘获得块参照的属性
Dim varAttributes as Variant
varAttributes = blockRefObj.GetAttributes
varAttributes(0).TextString = XH’项号
varAttributes(1).TextString = ID’片型ID
varAttributes(2).TextString = B’片宽B
varAttributes(3).TextString = L’片长L
varAttributes(4).TextString = Thick’厚度Thick
varAttributes(5).TextString = PiecesNum’每级片数PiecesNum
varAttributes(6).TextString = NetWeight’每级净重NetWeight
End Function
图4 属性块(明细表)
5、程序的运行和总结
程序运行在Excel+VBA+AutoCAD的环境下,在Excel中单击“参数化绘图”按钮,可以瞬间绘制完图纸。生成的图纸见图5。
图5 生成的叠片图
相对于其它编程语言而言,VBA简单易学,没有编程基础的人也能够快速入门,适合广大的工程人员使用。在加上在电磁计算Excel文件中开发,无需单独开发界面,数据直接来自电磁计算Sheet,降低了开发难度,节省了开发时间。通过本文的方法,工程设计人员能够较为容易开发出自己的应用程序,实现图纸的参数化设计,从而提高设计效率,减轻劳动强度并提高设计质量。
参考文献:
[1]管金云.变压器铁芯参数化绘图程序设计[J].电工技术,2002,11:19-19.
[2] 王耕,巫付专,贾贺强.用AutoCAD VBA实现变压器铁心片图的参数化设计[J].变压器,2007,44:20-23.
[3]张帆,郑立楷,王华杰.AutoCAD VBA开发精彩实例教程[M].北京:清华大学出版社,2004.
论文作者:凡新,徐吉福,王群伟,李小蓉
论文发表刊物:《电力设备》2018年第12期
论文发表时间:2018/8/6
标签:铁心论文; 参数论文; 属性论文; 图纸论文; 可以通过论文; 变压器论文; 电磁论文; 《电力设备》2018年第12期论文;