基于AutoCAD二次开发的配管料单统计方法研究

2015-06-24 21:56李广鑫刘吉飞程久欢胡晓明杨公升廉立伟
科技创新与应用 2015年19期

李广鑫 刘吉飞 程久欢 胡晓明 杨公升 廉立伟

摘 要:为解决配管概算料单人工统计效率较低的问题,研究基于AutoCAD二次开发的配管料单自动统计方法。应用VBA语言进行二次开发,使AutoCAD与Excel互相通讯,实现交互式自动化统计程序。AutoCAD中开发的管线号赋值程序,可将管线号信息批量赋值给阀门管件,完成管线与阀门管件信息的关联。Excel中开发的统计程序,可对AutoCAD输出的阀门管件料单,按照规定的格式及排序要求,自动完成统计。此方法使工作自动化,准确、省时、提高工作效率,节约人力成本。

关键词:AutoCAD二次开发;VBA;配管料单;设计自动化

引言

目前常规的配管料单统由人工读图纸逐个统计,并按照材料的不同规格,统计汇总,存在劳动繁琐,耗时耗力、易出错的缺点。CAD(Computer Aided Design计算机辅助设计)技术是先进技术转化为先进生产力的典型代表,是实现制造业信息化的基础,已成为衡量一个国家设计水平的重要标志。其在功能和角色等方面需求的不断变化使得CAD软件必须不断的更新进步。AutoCAD二次开发技术对企业提高设计效率、优化设计方案、减轻技术人员劳动强度、缩短设计周期,对设计和生产领域生产力的解放起到了关键性的作用。

VBA全称为Visual Basic for Applications,可提供类似Visual Basic(VB)的丰富开发功能。VBA和VB的主要差别是VBA和AutoCAD在同一进程空间中运行,提供面向对象的、非常快速的编程环境[1-3]。对象是所有ActiveX应用程序的主要构造块,每一个显示的对象均精确代表一个AutoCAD组件,AutoCAD ActiveX接口中有许多不同类型的对象。AutoCAD ActiveX接口使用户能够从AutoCAD的内部或外部以编程方式来操作AutoCAD[4-5]。VBA也向其他支持VBA的应用程序(例如Excel)提供应用程序集成[6-10],因此,AutoCAD可以和Excel相互操作。

1 技术方案分析

1.1 技术思路

AutoCAD是应用最为广泛的工程软件,Excel应用程序的数据处理及统计分析功能非常强大,两软件本身都集成了VBA开发环境,提供二次开发功能。

VBA提供了以Visual basic为基础的面向对象的开发特性以及程序接口,通过VBA编程,基于ActiveX技术,实现AutoCAD与Excel应用程序进行通信及数据共享,如图1所示。

1.2 技术实施方案

P&ID(Piping and Instrumentation Diagram)图中,配管管件及阀门以块的形式存在,且管件与块标识一一对应,本软件通过对P&ID图纸中块信息的读取,以块标识为索引,筛选、统计出配管料单;其中,关键技术为阀门管件尺寸磅级信息的获得,通过将管线号与管线上阀门管件批量关联,获得尺寸、磅级等信息。将读取的料单信息,在Excel中进行二次统计并排序,输出料单。

2 关键程序方案

2.1 管线号框选赋值程序方案

开发出框选赋值功能,框选管线号和要赋值的块(如图2所示),可将管线号赋值给框选内所有块的属性值,用于出料单时从中抽取管件的尺寸和磅级信息,流程图如图3所示。

2.2 管线号框选赋值程序

Sub assig() '赋值

Dim sss As AcadSelectionSet

Dim ent As AcadEntity

Dim str As String

Dim varAttributes As Variant

ThisDrawing.Utility.prompt vbCrLf &"选择一个管线号和要赋值的块(可框选、多选),右键结束:"

On Error Resume Next

Set sss = ThisDrawing.SelectionSets("ss1")

If Err Then Set sss = ThisDrawing.SelectionSets.Add("ss1")

sss.Clear

sss.SelectOnScreen

For Each ent In sss

If TypeOf ent Is AcadText And InStr(1, ent.TextString, "-") Then

str = ent.TextString

End If

Next

For Each ent In sss

If TypeOf ent Is AcadBlockReference Then

varAttributes=ent.GetAttributes

varAttributes(0).TextString =str

End If

Next

i=0

For Each ent In sss'判断赋值是否成功

If TypeOf ent Is AcadBlockReference Then

varAttributes=ent.GetAttributes

If varAttributes(0).TextStrin

g="" Then i=i+1

End If

Next

If i Then MsgBox"有參照,参照未赋值"

ThisDrawing.Utility.prompt "赋值结束"

sss.Delete

End Sub

2.3 图纸料单输出方案

管线号框选赋值阀门管件后,命令直接读取整张图纸,将阀门管件料单自动存储到Excel中,管件的尺寸、磅级等信息根据关联的管线号,自动提取,程序流程图如图4所示。

2.4 料单统计程序

开发的料单统计程序,可将相同规格阀门管件合并,并按照要求格式筛选出最终料单,主要代码如下:

Sub pipingmaterials()' 料单统计程序

Dim Arr, i&, x$

Dim d, k, t

Set d = CreateObject("Scripting.Dictionary")

Sheet1.Activate

Arr=[a1].CurrentRegion

For i=2 To UBound(Arr)

x=Arr(i, 1) & "," & Arr(i, 2) & "," & Arr(i, 3)

d(x)=d(x)+Arr(i, 4)

Next

k=d.keys

t=d.items

[J1].Resize(1, 4)=Application.Index(Arr, 1, 0)

[J2].Resize(d.Count)=Application.Transpose(k)

Application.DisplayAlerts=False

[J2].Resize(d.Count).TextToColumns Destination:=[J2],Comma:=True

Application.DisplayAlerts=True

[M2].Resize(d.Count)=Application.Transpose(t)

Range("J:m").HorizontalAlignment=Excel.xlCenter

Range("J:J").EntireColumn.AutoFit

Range("A1:M1").Font.Bold=True

Rows(2).Select

ActiveWindow.FreezePanes=True

'下面自动设置筛选过滤

Call shaixuan

Cells(1, 10).Select

End Sub

3 结束语

开发的程序,在岐口18-1项目及荔湾3-1项目中成功应用,由于项目图纸量大,应用此软件,节约工时约2/3。

(1)文章通过VBA编程,基于ActiveX技术,对AutoCAD及Excel进行二次开发,实现AutoCAD与Excel应用程序通信及数据共享,完成配管料单自动统计程序的开发。

(2)对AutoCAD进行的二次开发,开发的管线号赋值程序,可将管线信息批量赋值给AutoCAD中阀门管件,完成管线与阀门管件信息的关联,并自动读取图纸中阀门管件料单,存储到Excel中;对Excel进行的二次开发,可对AutoCAD输出的阀门管件料单,按照规定的格式及排序要求,自动完成统计。

(3)编制完成的程序,在海洋石油平台项目配管料单统计中得到成功应用,准确、省时、提高工作效率,节约人力成本。

参考文献

[1]武妍.基于VBA的AutoCAD二次开发系统的研究与应用[D].太原理工大学图书馆,太原理工大学,2008.

[2]田堂存.AutoCAD二次开发中多行文本替换技术的研究[J].电脑知识与技术,2013,11(9):215-217.

[3]吴利明,李金勇.VBA在AutoCAD中的二次开发[J].湖南学院学报,2010,31(2):77-79.

[4]王永辉,胡青泥,李红彩.AutoCAD二次開发方法的研究[J].计算机应用系统,2007,3:94-97.

[5]张明勇,杨波.基于AutoCAD二次开发的齿轮工程图自动生成技术研究[J].机床与液压,2011,39(4):20-22.

[6]徐昌革,戈俊,廖志伟.Excel二次开发在物探数据处理中的应用[J].江西煤炭科技,2011,2:105-106.

[7]徐先文,张纯根,张亚明,等.ExcelVBA二次开发在动力触探数据处理分析中的应用[J].施工技术,2012,41:239-241.

[8]朱向荣.基于ExcelVBA的常用测量计算问题解决方案[J].地理空间信息,2013,11(5):131-133.

[9]任律,肖毅,王飞.ExcelVBA在安全监测数据处理中的应用[J].水电勘测设计,2008,4:24-27.

[10]宋正东,苏先科.EXCELVBA编程在公路工程计量支付中的应用[J].交通科技,2013,1:130-133.