任小龍 宋國春
(北京石油化工工程有限公司西安分公司,西安 710075)
VBA程序接口在儀表設(shè)計中的應(yīng)用
任小龍 宋國春
(北京石油化工工程有限公司西安分公司,西安 710075)
基于VBA 二次開發(fā)工具,給出AutoCAD PID圖自動生成儀表索引表和坐標(biāo)文件自動生成儀表位置圖的設(shè)計思路與主要程序。實際應(yīng)用結(jié)果表明:該程序可極大地減少設(shè)計儀表時的工作量和人為誤差。
VBA程序 儀表設(shè)計 儀表索引表 位置圖 AutoCAD
VBA(Visual Basic for Applications)是一種基于ActiveX技術(shù)的面向?qū)ο蟮膽?yīng)用程序開發(fā)工具,目前許多流行通用的應(yīng)用軟件,如AutoCAD及Office等都內(nèi)置了VBA開發(fā)工具,其強大的功能為各軟件的二次開發(fā)提供了一個很好的平臺。利用VBA對AutoCAD及Excel等辦公軟件進(jìn)行二次開發(fā),可以成百上千倍地提高繪圖工作效率。VBA在各行各業(yè)的專業(yè)制圖工作中均有廣泛運用。
對于石油化工行業(yè)中的儀表設(shè)計,繪制儀表索引表、儀表位置圖是一項非常重要的工作,目前工程公司的儀表設(shè)計軟件中采用INtools軟件的較少,而采用Office及AutoCAD等操作軟件者居多。因此在沒有專業(yè)軟件的幫助下,手工填寫儀表索引表、繪制儀表位置圖工作就顯得非常繁瑣。此外,設(shè)計圖完成后如果工藝或管道專業(yè)設(shè)計發(fā)生變化,對儀表文件產(chǎn)生聯(lián)鎖反應(yīng),則這些圖紙都會有影響,即便一個很小的改變(如一條管線的變化)也要重新繪制整張圖紙。因此,開發(fā)專業(yè)軟件提高儀表設(shè)計工作效率成為一種經(jīng)濟、有效的首選方式[1]。筆者介紹一種基于VBA的二次開發(fā)程序模塊,用以從AutoCAD PID圖和坐標(biāo)文件中自動生成儀表索引表和位置圖,提高設(shè)計工作效率、減少人為誤差。
1.1 AutoCAD PID圖自動生成儀表索引表
儀表索引表是儀表專業(yè)設(shè)計的基礎(chǔ)性文件,傳統(tǒng)做法是根據(jù)AutoCAD PID圖等工藝條件,人為判斷回路類型,然后手動完成索引。如果要實現(xiàn)計算機自動生成索引表,則有兩個問題需要解決:從AutoCAD PID圖獲取所需的儀表信息至Excel表格;利用獲取的儀表信息按照規(guī)定的順序判斷回路類型并生成索引表。
1.1.1建立AutoCAD和Excel之間的通信
為了將AutoCAD PID圖中的儀表信息反映到Excel中,需要建立AutoCAD和Excel之間的通信[2],在此,筆者基于ActiveX自動化技術(shù)采用內(nèi)置函數(shù)來實現(xiàn)。在VBA編程中,首先聲明一個指定類ID的對象變量,并用Create Object函數(shù)創(chuàng)建Excel引用。引用當(dāng)前激活狀態(tài)Excel中的索引表程序如下:
Dim Excelapplication As Excel.Application
Dim Excelworkbook As Workbook
Dim Excelworksheet As Worksheet
Set Excelapplication=GetObject(,"excel.application")
Set Excelworkbook=Excelapplication.ActiveWorkbook
Set Excelworksheet=Excelapplication.ActiveWorkbook.Sheets("索引表")
1.1.2創(chuàng)建并定義儀表塊
利用AutoCAD的塊功能建立標(biāo)準(zhǔn)儀表塊并定義必要的屬性,如儀表功能號、回路號、儀表類型及信號類型等,具體見表1。由于就地、PLC及DCS等儀表圖標(biāo)的不同需分別建立塊。在繪制PID圖時儀表專業(yè)需要工藝專業(yè)密切合作,儀表專業(yè)向工藝專業(yè)提交標(biāo)準(zhǔn)儀表塊,工藝人員負(fù)責(zé)填寫儀表功能號、回路號及管道號等,儀表和信號類型待工藝提交后由儀表專業(yè)填寫。
表1 AutoCAD建立的標(biāo)準(zhǔn)儀表塊屬性
注:儀表圖標(biāo)中的橫線可不集成在塊中,這樣可根據(jù)儀表功能選擇是否為虛線。
1.1.3從AutoCAD PID圖中提取儀表信息至Excel
為了將AutoCAD PID圖中的儀表信息提取至Excel,AutoCAD提供了兩種方式。首先利用VBA編寫程序,主要代碼如下:
Set adSS=ThisDrawing.SelectionSets.Item("xzj")′創(chuàng)建選擇集“adSS”
Set adSS=ThisDrawing.SelectionSets.Add("xzj")′添加對象至選擇集
For Each elem In adSS′遍歷選擇集
If StrComp(Elem.EntityName,"AcDbBlockReference",1)=0 Then′判斷是否為塊對象
If Elem.HasAttributes Then Array=Elem.GetAttributes′獲取屬性
If Elem.Name="DCS" then′判斷塊名是否為DCS儀表塊
Excelworksheet.Cells(i,1)=Array(0).TextString′讀取屬性值輸出至Excel表格
其次,AutoCAD還支持一種較為簡便的圖形化屬性提取方法。在AutoCAD界面中點擊菜單→工具→屬性提取,彈出提取向?qū)Р⒏鶕?jù)所選塊和屬性導(dǎo)出至Excel文件。但這種方法的弊端是AutoCAD PID圖中所含塊不同,導(dǎo)出的表格列屬性數(shù)量也會變化,不便于后續(xù)程序自動生成儀表索引。
1.1.4儀表信息排序與生成索引表
從AutoCAD中獲取儀表信息至Excel后,可以按照字母順序排序,如此生成的索引信息按類型和位號依次排列整齊且便于查找。Excel VBA程序逐條讀取儀表位號[3],根據(jù)不同位號的功能標(biāo)志生成不同的回路。程序從第一個字符開始判斷,一直判斷到最后一位功能號為止。功能號根據(jù)ISA 5.1設(shè)定[4],如FICA為F(流量)、I(顯示)、C(調(diào)節(jié))、A(報警)。需要注意的是,塊屬性需要根據(jù)儀表是否是本安型來判斷是否需要增加安全柵。同時,由于塊屬性引入PID圖號,因此可將多張PID圖放于同一文件中一次生成索引,從而簡化操作、提高效率。
1.2利用坐標(biāo)文件自動生成儀表位置圖
由于VBA程序開發(fā)接口是互通的也是雙向的,因此AutoCAD VBA可以非常方便地讀取Excel中的坐標(biāo)數(shù)據(jù),從而為其自動生成儀表位置圖提供可行性[5]。利用坐標(biāo)文件自動生成儀表位置圖的具體開發(fā)流程如圖1所示。
圖1 利用坐標(biāo)文件自動生成儀表位置圖的開發(fā)流程
1.2.1開發(fā)方法
通常儀表坐標(biāo)由管道專業(yè)PDS(Plant Design System)軟件獲取,但它只包括儀表位號和位置坐標(biāo)信息,無法判斷儀表具體類型,這就需要結(jié)合儀表索引表進(jìn)行數(shù)據(jù)整合,整合后的具體數(shù)據(jù)信息見表2。
表2 結(jié)合索引表整合后的數(shù)據(jù)信息
首先對儀表位置圖中不同的圖形儀表、閥門分別建立塊,如溫度、壓力、流量、液位及閥門塊等。其中,相同功能、不同類型的表也需要分開,如渦街、電磁及差壓式流量計等。塊的屬性包括儀表位號、標(biāo)高、接線箱號和電纜號信息。RADAR塊位置圖例如圖2所示,其中接線箱號需要根據(jù)現(xiàn)場儀表的布置情況手動填入。
圖2 RADAR塊位置圖例
根據(jù)坐標(biāo)數(shù)據(jù)插入儀表塊[6]。在獲取坐標(biāo)數(shù)據(jù)后,儀表塊可通過AutoCAD二次開發(fā)的簡單命令流對應(yīng)插入,主要代碼如下:
Dim BlockReference As AcadBlockReference′定義塊對象
Set BlockReference=ThisDrawing.ModelSpace.InsertBlock(插入點坐標(biāo),插入塊名稱,XScal,YScal,ZScal,Angle)′在模型空間中插入塊對象,其中Scal為插入塊的三維比例,可根據(jù)實際調(diào)整;Angle為圖塊插入時的旋轉(zhuǎn)角度
插入儀表塊填入屬性值。varAttributes=Block Reference.GetAttributes是用于存儲圖塊Block Reference屬性的變體數(shù)組,varAttributes用圖塊對象的Get Attributes方法獲得插入圖塊的屬性,然后逐個更改屬性值:
varAttributes(0).textstring=Excelworksheet.Cells(i,1)
varAttributes(1).textstring=Excelworksheet.Cells(i,2)
1.2.2注意的問題
為保證儀表位置與廠區(qū)布置圖AutoCAD坐標(biāo)相對應(yīng),需要找到數(shù)據(jù)和圖形的對應(yīng)關(guān)系。最簡單的方法就是在PDS中選取任意一個基點,然后將廠區(qū)布置圖的基點移至AutoCAD的絕對坐標(biāo),這樣插入的儀表塊位置是基于同一坐標(biāo)體系的,避免了轉(zhuǎn)換坐標(biāo)的問題。
由于Excel表格中包含所有的儀表信息,因而應(yīng)根據(jù)各裝置的分層情況通過儀表三維坐標(biāo)中的z坐標(biāo)設(shè)置數(shù)據(jù)過濾分層撒點。
利用該VBA程序自動生成的儀表位置圖在榆林靖邊和神木某項目中投入運用后,設(shè)計人員在完成儀表選型后可直接生成索引表,校核人員只需核對PID圖是否有誤或有無變化而不需要核對是否與PID圖不符,為自校和校核贏得寶貴時間,在一定程度上保證了設(shè)計文件的質(zhì)量,而且生產(chǎn)質(zhì)量大幅提高,在節(jié)省時間、減少人為錯誤的同時,提高了工作效率,為保證整個工程進(jìn)度打下了良好基礎(chǔ)。
筆者利用VBA對AutoCAD及Excel等辦公軟件進(jìn)行二次開發(fā),采用面向?qū)ο蟮某绦蛟O(shè)計方案,設(shè)計了自動生成儀表索引表和儀表位置圖程序模塊。實際應(yīng)用表明,筆者開發(fā)的VBA程序方便靈活,包含設(shè)計文件的所有要素,可以高效、快速、準(zhǔn)確地生成索引表和位置圖,且對于設(shè)計方案改變造成的返工工作量很小。
[1] 郭非,范琳,付榮申,等.利用Office VBA自動生成相關(guān)儀表設(shè)計文件[J].石油化工自動化,2012,48(4):63~65.
[2] 張帆.AutoCAD VBA二次開發(fā)教程[M].北京:清華大學(xué)出版社,2006.
[3] 伍云輝.完全手冊:Excel VBA辦公應(yīng)用開發(fā)詳解[M].北京:電子工業(yè)出版社,2008.
[4] ANSI/ISA-5.1-2009,Instrumentation Symbols and Identification[S].North Carolina:The ISA Standards and Practices Department,2009.
[5] 梁騰偉.用AutoCAD VBA自動生成儀表位置圖[J].化工自動化及儀表,2015,42(4):430~432.
[6] 邱榮茂,王大鳴,張濤,等.基于VBA的線路縱斷面圖的自動繪制[J].工程圖學(xué)學(xué)報,2010,31(2):26~32.
ApplicationofVBAProgramInterfaceinInstrumentDesign
REN Xiao-long,SONG Guo-chun
(Xi’anCompanyofBeijingPetrochemicalEngineeringCo.,Ltd.,Xi’an710075,China)
Basing on VBA development tools, making use of AutoCAD PID and PDS coordinate files to automatically generate instrument index and instrument location plan was presented to show that this procedure can greatly reduce the workload and the error in designing the instrument.
VBA program, instrument design, instrument index, location plan, AutoCAD
TH865
B
1000-3932(2016)02-0144-04
2015-06-25