城市燃气管网水力计算软件的开发

摘 要

摘要:以AutoCAD为平台,采用VB二次开发技术实现燃气管网管段节点坐标的读取,自动生成燃气管网水力计算图;采用VC++可视化编程语言,编制了城市燃气管网水力计算软件。关键词:燃气管

摘要:以AutoCAD为平台,采用VB二次开发技术实现燃气管网管段节点坐标的读取,自动生成燃气管网水力计算图;采用VC++可视化编程语言,编制了城市燃气管网水力计算软件。
关键词:燃气管网;水力计算;软件
Development of Hydraulic Calculation Software for City Gas Network
DING Guo-yu,TIAN Guan-san,AN Jun-qing,WANG Lei
AbstractBased on AutoCAD,the reading of section node coordinates of gas network is realized by VB secondary development technology,and the hydraulic calculation drawing of gas network is automatically generated. The hydraulic calculation software for city gas network is programmed by VC++ visual programming language.
Key wordsgas network;hydraulic calculation;software
    随着城市的发展,燃气管网的规模越来越大,结构越来越复杂,水力计算需要处理的数据越来越多,准确、快速地生成水力计算图,实现水力计算与AutoCAD图形的无缝结合成为提高燃气管网水力计算效率的重要途径。本文以AutoCAD为平台,采用VB二次开发技术,采用Vc++6.0可视化编程语言编制了燃气管网水力计算软件,大大减小了燃气管网水力计算的工作量,提高了工作效率。
1 AutoCAD的VB二次开发机理
   AutoCAD作为一种具有高度开放结构的CAD平台软件,提供了强大的二次开发环境。目前,AutoCAD二次开发工具主要有Object ARX、Visual LISP、VB等编程语言[1],考虑到程序的易用性、普及性以及与其他图形软件的接口等因素,本文采用vB对AutoCAD进行二次开发,实现燃气管网水力计算图的自动生成。
    ① ActiveX Object技术
    ActiveX是微软的一项技术标准,在Windows系统的统一管理下协调不同的应用程序,实现程序间的相互通信、相互控制,VB通过引用应用程序提供的ActiveX Object,实现应用程序的二次开发[2]。ActiveX Object是由一系列对象按一定的层次组成的一种对象结构,每一个对象代表了AutoCAD中一个明确的功能,如绘制图形对象、定义块和属性等。AetiveX具备的绝大多数AutoCAD功能,均以方法和属性的方式被封装在ActiveX对象中,通过引用各种对象的方法、属性,实现对AutoCAD的二次开发。
   ② ActiveX对象模型
   AutoCAD ActiveX提供了各种封装有AutoCAD功能的对象,所有的对象都具有一定的层次关系,根据其在AutoCAD中的功能,可以采用树形结构表示,称之为对象模型(Object Model),本文在AutoCAD二次开发中所用的主要对象模型见图1。
 
   Application对象:AutoCAD ActiveX中的根对象,是所有对象的基础,处于最高层。为了得到一个特定对象必须从Application对象进行逐级引用。
    Documents对象:AutoCAD控制图形文件的直接对象,可以通过Application的Active Documents的属性返回。在Documents对象中AutoCAD引入了集合的概念,与VB中的集合一样,这些集合都支持Add、Item方法与Count属性。Add方法可以向该集合中添加一个对象,Item(x)可以得到该集合中的第x个对象,Count属性可以得到该集合中对象的个数等。
   Documents对象下面有Model Space(模型空间)及Layers(图层)等一系列对象集合。Model Space是图形文件中的图形实体集合,如Line(直线),每个实体均可通过相应对象的属性进行操作,改变或得到相应的参数,如直线坐标。Layers是图层集合,通过对Layers对象的引用可以得到图层集合的子对象,如Layer。
2 管段节点坐标的提取
   在AutoCAD绘图前期,建立一个名为“GasNet”的图层,所有燃气管网的绘制都在这个图层中进行;管网绘制完成后,遍历图层集合,得到“GasNet”图层;遍历“GasNet”图层中所有图形实体,得到管段对象(Line),读取管段节点坐标,并将管段节点坐标存入管段链表口1中。其开发步骤如下:
   ① 启动VB,建立项目文件,引入AtuoCAD对象库:在VB编程环境中,选择“工程”\&;引用”命令,打开“引用”对话框,选择AutoCAD2004 TypeLibrary复选框。
    ② 在项目中添加窗体、控件等,并编写相应程序代码。
   a. 引入AtuoCAD应用程序对象。AutoCAD ActiveX中对象的引用是通过对象变量完成的,首先声明变量类型,然后用Set语句将对象引用赋给变量,部分代码如下:
    Dim Acadapp as AcadApplication’声明AutoCAD应用程序对象
    Set Acadapp 2 CreateObject(”AutoCAD.Application”)’启动AutoCAD
    b. 引用AutoCAD应用程序对象的下级对象。通过AutoCAD应用程序对象(Application)的属性和方法,逐级访问下级对象,如下面语句通过AutoCAD应用程序对象变量(Acadapp)的ActiveDocument属性访问Model Space,再通过Model Space对象的Add方法,得到所有模型空间中所有直线的集合。
   Dim SSline As AcadSelectionSet’定义选择集
    Set SSline=Acadapp.ActiveDocument.SelectionSets.Add(”Line”)
    C.遍历所有直线,得到“GasNet”图层中的管段(Line)坐标。
    Dim retpt As Variant,retep As Variant’定义两个变体数据用以存放起点、终点坐标
   Dim retobj As AcadLine’定义直线对象
   For Each retobj In SSline’遍历所有直线
   If retobj.Layer=“GasNet”Then’判断直线是否在“GasNet”图层中
   retpt=retobj.StartPoint’得到起点坐标
   txtfile.write retpt(0)’输出起点x轴坐标
   txtfile.write(””)’输出空格
   txtfile.write retpt(1)’输出起点Y轴坐标
   retep=retobj.EndPoint’得到终点坐标
   txtfile.wrine(””)’输出空格
   txtfile.write retep(0)’输出终点x轴坐标
   txtfile.write(””)’输出空格
   txtfile.writeline retep(1)’输出终点Y轴坐标
   End If
   Next
   d. 释放AutoCAD对象。当不再使用被引用的对象时,要将其设置为Nothing,及时释放该对象所占有的系统资源。
    Set Acadapp=Nothing
3 燃气管网水力计算图的自动生成
   ① 函数设计
   首先将数据文件中的管段节点坐标读入数据链表中[3],然后设计2个函数,1个函数计算当前需要标注的管段节点与已标注的管段节点(如节点③)间的距离,若其满足要求,则返回相应管段节点的编号(节点③);另1个函数用来计算管段链表中已标注的管段节点编号的最大值。
   ② 基本思路[3]
   计算管段链表中已标注的管段节点编号的最大值。对管段链表进行遍历,求得当前需要标注的管段节点与已标注的管段节点的距离,若满足要求,则当前管段节点编号等于相应的管段节点编号;若不满足要求,则当前管段节点编号等于已标注的管段节点编号的最大值加1。水力计算图自动生成过程见图2。
 
4 城市燃气管网水力计算软件设计
   本软件采用VC++6.0可视化编程语言基于模块化设计,由管网输入、管网编辑、参数输入、管网计算和结果输出等模块组成。本软件具有以下特点:
   ① 管网输入支持鼠标绘图、AutoCAD导入和多种格式的航拍图的导入,可以准确、快速地生成水力计算图。
   ② 管网计算的核心程序是基于节点法[4~6]法编制的,保证了计算的稳定性,加快了收敛速度,提高了计算精度。
    ③ 实现了计算结果的Excel、AutoCAD输出[7、8],方便了水力计算书的生成,减少了水力计算的工作量,提高了燃气管网水力计算的效率。
参考文献:
[1] 张帆,郑立楷,王华杰.AutoCAD VBA开发精彩实例教程[M].北京:清华大学出版社,2004.
[2] 李荣廷,王秀玲,张水弟.Active Automation在AutoCAD二次开发中的应用[J].河北工业科技,2002,13(2):12-15.
[3] 彭继军,田贯三,刘燕.燃气管网水力计算图的计算机生成[J].山东建筑工程学院学报,2003,18(1):58-62.
[4] 田贯三,张增刚,江亿.城镇天然气管网水力分析数学模型与计算方法[J].天然气工业,2002,(5):96-97.
[5] 谢伟光.牛顿法在燃气管网节点压力计算中的应用[J].煤气与热力,1998,18(6):24-25.
[6] 严铭卿.城市燃气管网的计算机辅助设计[J].煤气与热力,1998,18(1):15-19.
[7] 鲁国文,冯良.基于AutoCAD的燃气管网水力计算和自动绘图系统的研究[J].上海煤气,2006,(1):26-29.
[8] 王蕾,李帆.AutoCAD在燃气工程制图中的开发应用[J].煤气与热力,2004,24(11):614-616.
 
(本文作者:丁国玉1 田贯三2 安俊卿3 王磊2 1.北京市城市规划设计研究院 北京 100045;2.山东建筑大学热能工程学院 山东济南 250101;3.德州市建筑规划勘察设计研究院 山东济南 250101)