任小龍 宋國春
(北京石油化工工程有限公司西安分公司,西安 710075)
VBA程序接口在儀表設計中的應用
任小龍 宋國春
(北京石油化工工程有限公司西安分公司,西安 710075)
基于VBA 二次開發工具,給出AutoCAD PID圖自動生成儀表索引表和坐標文件自動生成儀表位置圖的設計思路與主要程序。實際應用結果表明:該程序可極大地減少設計儀表時的工作量和人為誤差。
VBA程序 儀表設計 儀表索引表 位置圖 AutoCAD
VBA(Visual Basic for Applications)是一種基于ActiveX技術的面向對象的應用程序開發工具,目前許多流行通用的應用軟件,如AutoCAD及Office等都內置了VBA開發工具,其強大的功能為各軟件的二次開發提供了一個很好的平臺。利用VBA對AutoCAD及Excel等辦公軟件進行二次開發,可以成百上千倍地提高繪圖工作效率。VBA在各行各業的專業制圖工作中均有廣泛運用。
對于石油化工行業中的儀表設計,繪制儀表索引表、儀表位置圖是一項非常重要的工作,目前工程公司的儀表設計軟件中采用INtools軟件的較少,而采用Office及AutoCAD等操作軟件者居多。因此在沒有專業軟件的幫助下,手工填寫儀表索引表、繪制儀表位置圖工作就顯得非常繁瑣。此外,設計圖完成后如果工藝或管道專業設計發生變化,對儀表文件產生聯鎖反應,則這些圖紙都會有影響,即便一個很小的改變(如一條管線的變化)也要重新繪制整張圖紙。因此,開發專業軟件提高儀表設計工作效率成為一種經濟、有效的首選方式[1]。筆者介紹一種基于VBA的二次開發程序模塊,用以從AutoCAD PID圖和坐標文件中自動生成儀表索引表和位置圖,提高設計工作效率、減少人為誤差。
1.1 AutoCAD PID圖自動生成儀表索引表
儀表索引表是儀表專業設計的基礎性文件,傳統做法是根據AutoCAD PID圖等工藝條件,人為判斷回路類型,然后手動完成索引。如果要實現計算機自動生成索引表,則有兩個問題需要解決:從AutoCAD PID圖獲取所需的儀表信息至Excel表格;利用獲取的儀表信息按照規定的順序判斷回路類型并生成索引表。
1.1.1建立AutoCAD和Excel之間的通信
為了將AutoCAD PID圖中的儀表信息反映到Excel中,需要建立AutoCAD和Excel之間的通信[2],在此,筆者基于ActiveX自動化技術采用內置函數來實現。在VBA編程中,首先聲明一個指定類ID的對象變量,并用Create Object函數創建Excel引用。引用當前激活狀態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創建并定義儀表塊
利用AutoCAD的塊功能建立標準儀表塊并定義必要的屬性,如儀表功能號、回路號、儀表類型及信號類型等,具體見表1。由于就地、PLC及DCS等儀表圖標的不同需分別建立塊。在繪制PID圖時儀表專業需要工藝專業密切合作,儀表專業向工藝專業提交標準儀表塊,工藝人員負責填寫儀表功能號、回路號及管道號等,儀表和信號類型待工藝提交后由儀表專業填寫。

表1 AutoCAD建立的標準儀表塊屬性
注:儀表圖標中的橫線可不集成在塊中,這樣可根據儀表功能選擇是否為虛線。
1.1.3從AutoCAD PID圖中提取儀表信息至Excel
為了將AutoCAD PID圖中的儀表信息提取至Excel,AutoCAD提供了兩種方式。首先利用VBA編寫程序,主要代碼如下:
Set adSS=ThisDrawing.SelectionSets.Item("xzj")′創建選擇集“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界面中點擊菜單→工具→屬性提取,彈出提取向導并根據所選塊和屬性導出至Excel文件。但這種方法的弊端是AutoCAD PID圖中所含塊不同,導出的表格列屬性數量也會變化,不便于后續程序自動生成儀表索引。
1.1.4儀表信息排序與生成索引表
從AutoCAD中獲取儀表信息至Excel后,可以按照字母順序排序,如此生成的索引信息按類型和位號依次排列整齊且便于查找。Excel VBA程序逐條讀取儀表位號[3],根據不同位號的功能標志生成不同的回路。程序從第一個字符開始判斷,一直判斷到最后一位功能號為止。功能號根據ISA 5.1設定[4],如FICA為F(流量)、I(顯示)、C(調節)、A(報警)。需要注意的是,塊屬性需要根據儀表是否是本安型來判斷是否需要增加安全柵。同時,由于塊屬性引入PID圖號,因此可將多張PID圖放于同一文件中一次生成索引,從而簡化操作、提高效率。
1.2利用坐標文件自動生成儀表位置圖
由于VBA程序開發接口是互通的也是雙向的,因此AutoCAD VBA可以非常方便地讀取Excel中的坐標數據,從而為其自動生成儀表位置圖提供可行性[5]。利用坐標文件自動生成儀表位置圖的具體開發流程如圖1所示。

圖1 利用坐標文件自動生成儀表位置圖的開發流程
1.2.1開發方法
通常儀表坐標由管道專業PDS(Plant Design System)軟件獲取,但它只包括儀表位號和位置坐標信息,無法判斷儀表具體類型,這就需要結合儀表索引表進行數據整合,整合后的具體數據信息見表2。

表2 結合索引表整合后的數據信息
首先對儀表位置圖中不同的圖形儀表、閥門分別建立塊,如溫度、壓力、流量、液位及閥門塊等。其中,相同功能、不同類型的表也需要分開,如渦街、電磁及差壓式流量計等。塊的屬性包括儀表位號、標高、接線箱號和電纜號信息。RADAR塊位置圖例如圖2所示,其中接線箱號需要根據現場儀表的布置情況手動填入。

圖2 RADAR塊位置圖例
根據坐標數據插入儀表塊[6]。在獲取坐標數據后,儀表塊可通過AutoCAD二次開發的簡單命令流對應插入,主要代碼如下:
Dim BlockReference As AcadBlockReference′定義塊對象
Set BlockReference=ThisDrawing.ModelSpace.InsertBlock(插入點坐標,插入塊名稱,XScal,YScal,ZScal,Angle)′在模型空間中插入塊對象,其中Scal為插入塊的三維比例,可根據實際調整;Angle為圖塊插入時的旋轉角度
插入儀表塊填入屬性值。varAttributes=Block Reference.GetAttributes是用于存儲圖塊Block Reference屬性的變體數組,varAttributes用圖塊對象的Get Attributes方法獲得插入圖塊的屬性,然后逐個更改屬性值:
varAttributes(0).textstring=Excelworksheet.Cells(i,1)
varAttributes(1).textstring=Excelworksheet.Cells(i,2)
1.2.2注意的問題
為保證儀表位置與廠區布置圖AutoCAD坐標相對應,需要找到數據和圖形的對應關系。最簡單的方法就是在PDS中選取任意一個基點,然后將廠區布置圖的基點移至AutoCAD的絕對坐標,這樣插入的儀表塊位置是基于同一坐標體系的,避免了轉換坐標的問題。
由于Excel表格中包含所有的儀表信息,因而應根據各裝置的分層情況通過儀表三維坐標中的z坐標設置數據過濾分層撒點。
利用該VBA程序自動生成的儀表位置圖在榆林靖邊和神木某項目中投入運用后,設計人員在完成儀表選型后可直接生成索引表,校核人員只需核對PID圖是否有誤或有無變化而不需要核對是否與PID圖不符,為自校和校核贏得寶貴時間,在一定程度上保證了設計文件的質量,而且生產質量大幅提高,在節省時間、減少人為錯誤的同時,提高了工作效率,為保證整個工程進度打下了良好基礎。
筆者利用VBA對AutoCAD及Excel等辦公軟件進行二次開發,采用面向對象的程序設計方案,設計了自動生成儀表索引表和儀表位置圖程序模塊。實際應用表明,筆者開發的VBA程序方便靈活,包含設計文件的所有要素,可以高效、快速、準確地生成索引表和位置圖,且對于設計方案改變造成的返工工作量很小。
[1] 郭非,范琳,付榮申,等.利用Office VBA自動生成相關儀表設計文件[J].石油化工自動化,2012,48(4):63~65.
[2] 張帆.AutoCAD VBA二次開發教程[M].北京:清華大學出版社,2006.
[3] 伍云輝.完全手冊:Excel VBA辦公應用開發詳解[M].北京:電子工業出版社,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].工程圖學學報,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