任小龙 宋国春
(北京石油化工工程有限公司西安分公司,西安 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