李廣鑫 劉吉飛 程久歡 胡曉明 楊公升 廉立偉
摘 要:為解決配管概算料單人工統(tǒng)計效率較低的問題,研究基于AutoCAD二次開發(fā)的配管料單自動統(tǒng)計方法。應(yīng)用VBA語言進行二次開發(fā),使AutoCAD與Excel互相通訊,實現(xiàn)交互式自動化統(tǒng)計程序。AutoCAD中開發(fā)的管線號賦值程序,可將管線號信息批量賦值給閥門管件,完成管線與閥門管件信息的關(guān)聯(lián)。Excel中開發(fā)的統(tǒng)計程序,可對AutoCAD輸出的閥門管件料單,按照規(guī)定的格式及排序要求,自動完成統(tǒng)計。此方法使工作自動化,準(zhǔn)確、省時、提高工作效率,節(jié)約人力成本。
關(guān)鍵詞:AutoCAD二次開發(fā);VBA;配管料單;設(shè)計自動化
引言
目前常規(guī)的配管料單統(tǒng)由人工讀圖紙逐個統(tǒng)計,并按照材料的不同規(guī)格,統(tǒng)計匯總,存在勞動繁瑣,耗時耗力、易出錯的缺點。CAD(Computer Aided Design計算機輔助設(shè)計)技術(shù)是先進技術(shù)轉(zhuǎn)化為先進生產(chǎn)力的典型代表,是實現(xiàn)制造業(yè)信息化的基礎(chǔ),已成為衡量一個國家設(shè)計水平的重要標(biāo)志。其在功能和角色等方面需求的不斷變化使得CAD軟件必須不斷的更新進步。AutoCAD二次開發(fā)技術(shù)對企業(yè)提高設(shè)計效率、優(yōu)化設(shè)計方案、減輕技術(shù)人員勞動強度、縮短設(shè)計周期,對設(shè)計和生產(chǎn)領(lǐng)域生產(chǎn)力的解放起到了關(guān)鍵性的作用。
VBA全稱為Visual Basic for Applications,可提供類似Visual Basic(VB)的豐富開發(fā)功能。VBA和VB的主要差別是VBA和AutoCAD在同一進程空間中運行,提供面向?qū)ο蟮摹⒎浅?焖俚木幊汰h(huán)境[1-3]。對象是所有ActiveX應(yīng)用程序的主要構(gòu)造塊,每一個顯示的對象均精確代表一個AutoCAD組件,AutoCAD ActiveX接口中有許多不同類型的對象。AutoCAD ActiveX接口使用戶能夠從AutoCAD的內(nèi)部或外部以編程方式來操作AutoCAD[4-5]。VBA也向其他支持VBA的應(yīng)用程序(例如Excel)提供應(yīng)用程序集成[6-10],因此,AutoCAD可以和Excel相互操作。
1 技術(shù)方案分析
1.1 技術(shù)思路
AutoCAD是應(yīng)用最為廣泛的工程軟件,Excel應(yīng)用程序的數(shù)據(jù)處理及統(tǒng)計分析功能非常強大,兩軟件本身都集成了VBA開發(fā)環(huán)境,提供二次開發(fā)功能。
VBA提供了以Visual basic為基礎(chǔ)的面向?qū)ο蟮拈_發(fā)特性以及程序接口,通過VBA編程,基于ActiveX技術(shù),實現(xiàn)AutoCAD與Excel應(yīng)用程序進行通信及數(shù)據(jù)共享,如圖1所示。
1.2 技術(shù)實施方案
P&ID(Piping and Instrumentation Diagram)圖中,配管管件及閥門以塊的形式存在,且管件與塊標(biāo)識一一對應(yīng),本軟件通過對P&ID圖紙中塊信息的讀取,以塊標(biāo)識為索引,篩選、統(tǒng)計出配管料單;其中,關(guān)鍵技術(shù)為閥門管件尺寸磅級信息的獲得,通過將管線號與管線上閥門管件批量關(guān)聯(lián),獲得尺寸、磅級等信息。將讀取的料單信息,在Excel中進行二次統(tǒng)計并排序,輸出料單。
2 關(guān)鍵程序方案
2.1 管線號框選賦值程序方案
開發(fā)出框選賦值功能,框選管線號和要賦值的塊(如圖2所示),可將管線號賦值給框選內(nèi)所有塊的屬性值,用于出料單時從中抽取管件的尺寸和磅級信息,流程圖如圖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 &"選擇一個管線號和要賦值的塊(可框選、多選),右鍵結(jié)束:"
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 "賦值結(jié)束"
sss.Delete
End Sub
2.3 圖紙料單輸出方案
管線號框選賦值閥門管件后,命令直接讀取整張圖紙,將閥門管件料單自動存儲到Excel中,管件的尺寸、磅級等信息根據(jù)關(guān)聯(lián)的管線號,自動提取,程序流程圖如圖4所示。
2.4 料單統(tǒng)計程序
開發(fā)的料單統(tǒng)計程序,可將相同規(guī)格閥門管件合并,并按照要求格式篩選出最終料單,主要代碼如下:
Sub pipingmaterials()' 料單統(tǒng)計程序
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
'下面自動設(shè)置篩選過濾
Call shaixuan
Cells(1, 10).Select
End Sub
3 結(jié)束語
開發(fā)的程序,在岐口18-1項目及荔灣3-1項目中成功應(yīng)用,由于項目圖紙量大,應(yīng)用此軟件,節(jié)約工時約2/3。
(1)文章通過VBA編程,基于ActiveX技術(shù),對AutoCAD及Excel進行二次開發(fā),實現(xiàn)AutoCAD與Excel應(yīng)用程序通信及數(shù)據(jù)共享,完成配管料單自動統(tǒng)計程序的開發(fā)。
(2)對AutoCAD進行的二次開發(fā),開發(fā)的管線號賦值程序,可將管線信息批量賦值給AutoCAD中閥門管件,完成管線與閥門管件信息的關(guān)聯(lián),并自動讀取圖紙中閥門管件料單,存儲到Excel中;對Excel進行的二次開發(fā),可對AutoCAD輸出的閥門管件料單,按照規(guī)定的格式及排序要求,自動完成統(tǒng)計。
(3)編制完成的程序,在海洋石油平臺項目配管料單統(tǒng)計中得到成功應(yīng)用,準(zhǔn)確、省時、提高工作效率,節(jié)約人力成本。
參考文獻
[1]武妍.基于VBA的AutoCAD二次開發(fā)系統(tǒng)的研究與應(yīng)用[D].太原理工大學(xué)圖書館,太原理工大學(xué),2008.
[2]田堂存.AutoCAD二次開發(fā)中多行文本替換技術(shù)的研究[J].電腦知識與技術(shù),2013,11(9):215-217.
[3]吳利明,李金勇.VBA在AutoCAD中的二次開發(fā)[J].湖南學(xué)院學(xué)報,2010,31(2):77-79.
[4]王永輝,胡青泥,李紅彩.AutoCAD二次開發(fā)方法的研究[J].計算機應(yīng)用系統(tǒng),2007,3:94-97.
[5]張明勇,楊波.基于AutoCAD二次開發(fā)的齒輪工程圖自動生成技術(shù)研究[J].機床與液壓,2011,39(4):20-22.
[6]徐昌革,戈俊,廖志偉.Excel二次開發(fā)在物探數(shù)據(jù)處理中的應(yīng)用[J].江西煤炭科技,2011,2:105-106.
[7]徐先文,張純根,張亞明,等.ExcelVBA二次開發(fā)在動力觸探數(shù)據(jù)處理分析中的應(yīng)用[J].施工技術(shù),2012,41:239-241.
[8]朱向榮.基于ExcelVBA的常用測量計算問題解決方案[J].地理空間信息,2013,11(5):131-133.
[9]任律,肖毅,王飛.ExcelVBA在安全監(jiān)測數(shù)據(jù)處理中的應(yīng)用[J].水電勘測設(shè)計,2008,4:24-27.
[10]宋正東,蘇先科.EXCELVBA編程在公路工程計量支付中的應(yīng)用[J].交通科技,2013,1:130-133.