城市燃?xì)夤芫W(wǎng)水力計(jì)算軟件的開(kāi)發(fā)

摘 要

摘要:以AutoCAD為平臺(tái),采用VB二次開(kāi)發(fā)技術(shù)實(shí)現(xiàn)燃?xì)夤芫W(wǎng)管段節(jié)點(diǎn)坐標(biāo)的讀取,自動(dòng)生成燃?xì)夤芫W(wǎng)水力計(jì)算圖;采用VC++可視化編程語(yǔ)言,編制了城市燃?xì)夤芫W(wǎng)水力計(jì)算軟件。關(guān)鍵詞:燃?xì)夤?/p>

摘要:以AutoCAD為平臺(tái),采用VB二次開(kāi)發(fā)技術(shù)實(shí)現(xiàn)燃?xì)夤芫W(wǎng)管段節(jié)點(diǎn)坐標(biāo)的讀取,自動(dòng)生成燃?xì)夤芫W(wǎng)水力計(jì)算圖;采用VC++可視化編程語(yǔ)言,編制了城市燃?xì)夤芫W(wǎng)水力計(jì)算軟件。
關(guān)鍵詞:燃?xì)夤芫W(wǎng);水力計(jì)算;軟件
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
    隨著城市的發(fā)展,燃?xì)夤芫W(wǎng)的規(guī)模越來(lái)越大,結(jié)構(gòu)越來(lái)越復(fù)雜,水力計(jì)算需要處理的數(shù)據(jù)越來(lái)越多,準(zhǔn)確、快速地生成水力計(jì)算圖,實(shí)現(xiàn)水力計(jì)算與AutoCAD圖形的無(wú)縫結(jié)合成為提高燃?xì)夤芫W(wǎng)水力計(jì)算效率的重要途徑。本文以AutoCAD為平臺(tái),采用VB二次開(kāi)發(fā)技術(shù),采用Vc++6.0可視化編程語(yǔ)言編制了燃?xì)夤芫W(wǎng)水力計(jì)算軟件,大大減小了燃?xì)夤芫W(wǎng)水力計(jì)算的工作量,提高了工作效率。
1 AutoCAD的VB二次開(kāi)發(fā)機(jī)理
   AutoCAD作為一種具有高度開(kāi)放結(jié)構(gòu)的CAD平臺(tái)軟件,提供了強(qiáng)大的二次開(kāi)發(fā)環(huán)境。目前,AutoCAD二次開(kāi)發(fā)工具主要有Object ARX、Visual LISP、VB等編程語(yǔ)言[1],考慮到程序的易用性、普及性以及與其他圖形軟件的接口等因素,本文采用vB對(duì)AutoCAD進(jìn)行二次開(kāi)發(fā),實(shí)現(xiàn)燃?xì)夤芫W(wǎng)水力計(jì)算圖的自動(dòng)生成。
    ① ActiveX Object技術(shù)
    ActiveX是微軟的一項(xiàng)技術(shù)標(biāo)準(zhǔn),在Windows系統(tǒng)的統(tǒng)一管理下協(xié)調(diào)不同的應(yīng)用程序,實(shí)現(xiàn)程序間的相互通信、相互控制,VB通過(guò)引用應(yīng)用程序提供的ActiveX Object,實(shí)現(xiàn)應(yīng)用程序的二次開(kāi)發(fā)[2]。ActiveX Object是由一系列對(duì)象按一定的層次組成的一種對(duì)象結(jié)構(gòu),每一個(gè)對(duì)象代表了AutoCAD中一個(gè)明確的功能,如繪制圖形對(duì)象、定義塊和屬性等。AetiveX具備的絕大多數(shù)AutoCAD功能,均以方法和屬性的方式被封裝在ActiveX對(duì)象中,通過(guò)引用各種對(duì)象的方法、屬性,實(shí)現(xiàn)對(duì)AutoCAD的二次開(kāi)發(fā)。
   ② ActiveX對(duì)象模型
   AutoCAD ActiveX提供了各種封裝有AutoCAD功能的對(duì)象,所有的對(duì)象都具有一定的層次關(guān)系,根據(jù)其在AutoCAD中的功能,可以采用樹形結(jié)構(gòu)表示,稱之為對(duì)象模型(Object Model),本文在AutoCAD二次開(kāi)發(fā)中所用的主要對(duì)象模型見(jiàn)圖1。
 
   Application對(duì)象:AutoCAD ActiveX中的根對(duì)象,是所有對(duì)象的基礎(chǔ),處于最高層。為了得到一個(gè)特定對(duì)象必須從Application對(duì)象進(jìn)行逐級(jí)引用。
    Documents對(duì)象:AutoCAD控制圖形文件的直接對(duì)象,可以通過(guò)Application的Active Documents的屬性返回。在Documents對(duì)象中AutoCAD引入了集合的概念,與VB中的集合一樣,這些集合都支持Add、Item方法與Count屬性。Add方法可以向該集合中添加一個(gè)對(duì)象,Item(x)可以得到該集合中的第x個(gè)對(duì)象,Count屬性可以得到該集合中對(duì)象的個(gè)數(shù)等。
   Documents對(duì)象下面有Model Space(模型空間)及Layers(圖層)等一系列對(duì)象集合。Model Space是圖形文件中的圖形實(shí)體集合,如Line(直線),每個(gè)實(shí)體均可通過(guò)相應(yīng)對(duì)象的屬性進(jìn)行操作,改變或得到相應(yīng)的參數(shù),如直線坐標(biāo)。Layers是圖層集合,通過(guò)對(duì)Layers對(duì)象的引用可以得到圖層集合的子對(duì)象,如Layer。
2 管段節(jié)點(diǎn)坐標(biāo)的提取
   在AutoCAD繪圖前期,建立一個(gè)名為“GasNet”的圖層,所有燃?xì)夤芫W(wǎng)的繪制都在這個(gè)圖層中進(jìn)行;管網(wǎng)繪制完成后,遍歷圖層集合,得到“GasNet”圖層;遍歷“GasNet”圖層中所有圖形實(shí)體,得到管段對(duì)象(Line),讀取管段節(jié)點(diǎn)坐標(biāo),并將管段節(jié)點(diǎn)坐標(biāo)存入管段鏈表口1中。其開(kāi)發(fā)步驟如下:
   ① 啟動(dòng)VB,建立項(xiàng)目文件,引入AtuoCAD對(duì)象庫(kù):在VB編程環(huán)境中,選擇“工程”\&;引用”命令,打開(kāi)“引用”對(duì)話框,選擇AutoCAD2004 TypeLibrary復(fù)選框。
    ② 在項(xiàng)目中添加窗體、控件等,并編寫相應(yīng)程序代碼。
   a. 引入AtuoCAD應(yīng)用程序?qū)ο蟆utoCAD ActiveX中對(duì)象的引用是通過(guò)對(duì)象變量完成的,首先聲明變量類型,然后用Set語(yǔ)句將對(duì)象引用賦給變量,部分代碼如下:
    Dim Acadapp as AcadApplication’聲明AutoCAD應(yīng)用程序?qū)ο?/span>
    Set Acadapp 2 CreateObject(”AutoCAD.Application”)’啟動(dòng)AutoCAD
    b. 引用AutoCAD應(yīng)用程序?qū)ο蟮南录?jí)對(duì)象。通過(guò)AutoCAD應(yīng)用程序?qū)ο?Application)的屬性和方法,逐級(jí)訪問(wèn)下級(jí)對(duì)象,如下面語(yǔ)句通過(guò)AutoCAD應(yīng)用程序?qū)ο笞兞?Acadapp)的ActiveDocument屬性訪問(wèn)Model Space,再通過(guò)Model Space對(duì)象的Add方法,得到所有模型空間中所有直線的集合。
   Dim SSline As AcadSelectionSet’定義選擇集
    Set SSline=Acadapp.ActiveDocument.SelectionSets.Add(”Line”)
    C.遍歷所有直線,得到“GasNet”圖層中的管段(Line)坐標(biāo)。
    Dim retpt As Variant,retep As Variant’定義兩個(gè)變體數(shù)據(jù)用以存放起點(diǎn)、終點(diǎn)坐標(biāo)
   Dim retobj As AcadLine’定義直線對(duì)象
   For Each retobj In SSline’遍歷所有直線
   If retobj.Layer=“GasNet”Then’判斷直線是否在“GasNet”圖層中
   retpt=retobj.StartPoint’得到起點(diǎn)坐標(biāo)
   txtfile.write retpt(0)’輸出起點(diǎn)x軸坐標(biāo)
   txtfile.write(””)’輸出空格
   txtfile.write retpt(1)’輸出起點(diǎn)Y軸坐標(biāo)
   retep=retobj.EndPoint’得到終點(diǎn)坐標(biāo)
   txtfile.wrine(””)’輸出空格
   txtfile.write retep(0)’輸出終點(diǎn)x軸坐標(biāo)
   txtfile.write(””)’輸出空格
   txtfile.writeline retep(1)’輸出終點(diǎn)Y軸坐標(biāo)
   End If
   Next
   d. 釋放AutoCAD對(duì)象。當(dāng)不再使用被引用的對(duì)象時(shí),要將其設(shè)置為Nothing,及時(shí)釋放該對(duì)象所占有的系統(tǒng)資源。
    Set Acadapp=Nothing
3 燃?xì)夤芫W(wǎng)水力計(jì)算圖的自動(dòng)生成
   ① 函數(shù)設(shè)計(jì)
   首先將數(shù)據(jù)文件中的管段節(jié)點(diǎn)坐標(biāo)讀入數(shù)據(jù)鏈表中[3],然后設(shè)計(jì)2個(gè)函數(shù),1個(gè)函數(shù)計(jì)算當(dāng)前需要標(biāo)注的管段節(jié)點(diǎn)與已標(biāo)注的管段節(jié)點(diǎn)(如節(jié)點(diǎn)③)間的距離,若其滿足要求,則返回相應(yīng)管段節(jié)點(diǎn)的編號(hào)(節(jié)點(diǎn)③);另1個(gè)函數(shù)用來(lái)計(jì)算管段鏈表中已標(biāo)注的管段節(jié)點(diǎn)編號(hào)的最大值。
   ② 基本思路[3]
   計(jì)算管段鏈表中已標(biāo)注的管段節(jié)點(diǎn)編號(hào)的最大值。對(duì)管段鏈表進(jìn)行遍歷,求得當(dāng)前需要標(biāo)注的管段節(jié)點(diǎn)與已標(biāo)注的管段節(jié)點(diǎn)的距離,若滿足要求,則當(dāng)前管段節(jié)點(diǎn)編號(hào)等于相應(yīng)的管段節(jié)點(diǎn)編號(hào);若不滿足要求,則當(dāng)前管段節(jié)點(diǎn)編號(hào)等于已標(biāo)注的管段節(jié)點(diǎn)編號(hào)的最大值加1。水力計(jì)算圖自動(dòng)生成過(guò)程見(jiàn)圖2。
 
4 城市燃?xì)夤芫W(wǎng)水力計(jì)算軟件設(shè)計(jì)
   本軟件采用VC++6.0可視化編程語(yǔ)言基于模塊化設(shè)計(jì),由管網(wǎng)輸入、管網(wǎng)編輯、參數(shù)輸入、管網(wǎng)計(jì)算和結(jié)果輸出等模塊組成。本軟件具有以下特點(diǎn):
   ① 管網(wǎng)輸入支持鼠標(biāo)繪圖、AutoCAD導(dǎo)入和多種格式的航拍圖的導(dǎo)入,可以準(zhǔn)確、快速地生成水力計(jì)算圖。
   ② 管網(wǎng)計(jì)算的核心程序是基于節(jié)點(diǎn)法[4~6]法編制的,保證了計(jì)算的穩(wěn)定性,加快了收斂速度,提高了計(jì)算精度。
    ③ 實(shí)現(xiàn)了計(jì)算結(jié)果的Excel、AutoCAD輸出[7、8],方便了水力計(jì)算書的生成,減少了水力計(jì)算的工作量,提高了燃?xì)夤芫W(wǎng)水力計(jì)算的效率。
參考文獻(xiàn):
[1] 張帆,鄭立楷,王華杰.AutoCAD VBA開(kāi)發(fā)精彩實(shí)例教程[M].北京:清華大學(xué)出版社,2004.
[2] 李榮廷,王秀玲,張水弟.Active Automation在AutoCAD二次開(kāi)發(fā)中的應(yīng)用[J].河北工業(yè)科技,2002,13(2):12-15.
[3] 彭繼軍,田貫三,劉燕.燃?xì)夤芫W(wǎng)水力計(jì)算圖的計(jì)算機(jī)生成[J].山東建筑工程學(xué)院學(xué)報(bào),2003,18(1):58-62.
[4] 田貫三,張?jiān)鰟?,江億.城鎮(zhèn)天然氣管網(wǎng)水力分析數(shù)學(xué)模型與計(jì)算方法[J].天然氣工業(yè),2002,(5):96-97.
[5] 謝偉光.牛頓法在燃?xì)夤芫W(wǎng)節(jié)點(diǎn)壓力計(jì)算中的應(yīng)用[J].煤氣與熱力,1998,18(6):24-25.
[6] 嚴(yán)銘卿.城市燃?xì)夤芫W(wǎng)的計(jì)算機(jī)輔助設(shè)計(jì)[J].煤氣與熱力,1998,18(1):15-19.
[7] 魯國(guó)文,馮良.基于AutoCAD的燃?xì)夤芫W(wǎng)水力計(jì)算和自動(dòng)繪圖系統(tǒng)的研究[J].上海煤氣,2006,(1):26-29.
[8] 王蕾,李帆.AutoCAD在燃?xì)夤こ讨茍D中的開(kāi)發(fā)應(yīng)用[J].煤氣與熱力,2004,24(11):614-616.
 
(本文作者:丁國(guó)玉1 田貫三2 安俊卿3 王磊2 1.北京市城市規(guī)劃設(shè)計(jì)研究院 北京 100045;2.山東建筑大學(xué)熱能工程學(xué)院 山東濟(jì)南 250101;3.德州市建筑規(guī)劃勘察設(shè)計(jì)研究院 山東濟(jì)南 250101)