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

摘 要

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

摘要:以AutoCAD為平臺(tái),采用VB二次開發(fā)技術(shù)實(shí)現(xiàn)燃?xì)夤芫W(wǎng)管段節(jié)點(diǎn)坐標(biāo)的讀取,自動(dòng)生成燃?xì)夤芫W(wǎng)水力計(jì)算圖;采用VC++可視化編程語言,編制了城市燃?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ī)模越來越大,結(jié)構(gòu)越來越復(fù)雜,水力計(jì)算需要處理的數(shù)據(jù)越來越多,準(zhǔn)確、快速地生成水力計(jì)算圖,實(shí)現(xiàn)水力計(jì)算與AutoCAD圖形的無縫結(jié)合成為提高燃?xì)夤芫W(wǎng)水力計(jì)算效率的重要途徑。本文以AutoCAD為平臺(tái),采用VB二次開發(fā)技術(shù),采用Vc++6.0可視化編程語言編制了燃?xì)夤芫W(wǎng)水力計(jì)算軟件,大大減小了燃?xì)夤芫W(wǎng)水力計(jì)算的工作量,提高了工作效率。
1 AutoCAD的VB二次開發(fā)機(jī)理
   AutoCAD作為一種具有高度開放結(jié)構(gòu)的CAD平臺(tái)軟件,提供了強(qiáng)大的二次開發(fā)環(huán)境。目前,AutoCAD二次開發(fā)工具主要有Object ARX、Visual LISP、VB等編程語言[1],考慮到程序的易用性、普及性以及與其他圖形軟件的接口等因素,本文采用vB對AutoCAD進(jìn)行二次開發(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通過引用應(yīng)用程序提供的ActiveX Object,實(shí)現(xiàn)應(yīng)用程序的二次開發(fā)[2]。ActiveX Object是由一系列對象按一定的層次組成的一種對象結(jié)構(gòu),每一個(gè)對象代表了AutoCAD中一個(gè)明確的功能,如繪制圖形對象、定義塊和屬性等。AetiveX具備的絕大多數(shù)AutoCAD功能,均以方法和屬性的方式被封裝在ActiveX對象中,通過引用各種對象的方法、屬性,實(shí)現(xiàn)對AutoCAD的二次開發(fā)。
   ② ActiveX對象模型
   AutoCAD ActiveX提供了各種封裝有AutoCAD功能的對象,所有的對象都具有一定的層次關(guān)系,根據(jù)其在AutoCAD中的功能,可以采用樹形結(jié)構(gòu)表示,稱之為對象模型(Object Model),本文在AutoCAD二次開發(fā)中所用的主要對象模型見圖1。
 
   Application對象:AutoCAD ActiveX中的根對象,是所有對象的基礎(chǔ),處于最高層。為了得到一個(gè)特定對象必須從Application對象進(jìn)行逐級引用。
    Documents對象:AutoCAD控制圖形文件的直接對象,可以通過Application的Active Documents的屬性返回。在Documents對象中AutoCAD引入了集合的概念,與VB中的集合一樣,這些集合都支持Add、Item方法與Count屬性。Add方法可以向該集合中添加一個(gè)對象,Item(x)可以得到該集合中的第x個(gè)對象,Count屬性可以得到該集合中對象的個(gè)數(shù)等。
   Documents對象下面有Model Space(模型空間)及Layers(圖層)等一系列對象集合。Model Space是圖形文件中的圖形實(shí)體集合,如Line(直線),每個(gè)實(shí)體均可通過相應(yīng)對象的屬性進(jìn)行操作,改變或得到相應(yīng)的參數(shù),如直線坐標(biāo)。Layers是圖層集合,通過對Layers對象的引用可以得到圖層集合的子對象,如Layer。
2 管段節(jié)點(diǎn)坐標(biāo)的提取
   在AutoCAD繪圖前期,建立一個(gè)名為“GasNet”的圖層,所有燃?xì)夤芫W(wǎng)的繪制都在這個(gè)圖層中進(jìn)行;管網(wǎng)繪制完成后,遍歷圖層集合,得到“GasNet”圖層;遍歷“GasNet”圖層中所有圖形實(shí)體,得到管段對象(Line),讀取管段節(jié)點(diǎn)坐標(biāo),并將管段節(jié)點(diǎn)坐標(biāo)存入管段鏈表口1中。其開發(fā)步驟如下:
   ① 啟動(dòng)VB,建立項(xiàng)目文件,引入AtuoCAD對象庫:在VB編程環(huán)境中,選擇“工程”\&;引用”命令,打開“引用”對話框,選擇AutoCAD2004 TypeLibrary復(fù)選框。
    ② 在項(xiàng)目中添加窗體、控件等,并編寫相應(yīng)程序代碼。
   a. 引入AtuoCAD應(yīng)用程序?qū)ο?。AutoCAD ActiveX中對象的引用是通過對象變量完成的,首先聲明變量類型,然后用Set語句將對象引用賦給變量,部分代碼如下:
    Dim Acadapp as AcadApplication’聲明AutoCAD應(yīng)用程序?qū)ο?/span>
    Set Acadapp 2 CreateObject(”AutoCAD.Application”)’啟動(dòng)AutoCAD
    b. 引用AutoCAD應(yīng)用程序?qū)ο蟮南录墝ο蟆Mㄟ^AutoCAD應(yīng)用程序?qū)ο?Application)的屬性和方法,逐級訪問下級對象,如下面語句通過AutoCAD應(yīng)用程序?qū)ο笞兞?Acadapp)的ActiveDocument屬性訪問Model Space,再通過Model Space對象的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’定義直線對象
   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對象。當(dāng)不再使用被引用的對象時(shí),要將其設(shè)置為Nothing,及時(shí)釋放該對象所占有的系統(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)的編號(節(jié)點(diǎn)③);另1個(gè)函數(shù)用來計(jì)算管段鏈表中已標(biāo)注的管段節(jié)點(diǎn)編號的最大值。
   ② 基本思路[3]
   計(jì)算管段鏈表中已標(biāo)注的管段節(jié)點(diǎn)編號的最大值。對管段鏈表進(jìn)行遍歷,求得當(dāng)前需要標(biāo)注的管段節(jié)點(diǎn)與已標(biāo)注的管段節(jié)點(diǎn)的距離,若滿足要求,則當(dāng)前管段節(jié)點(diǎn)編號等于相應(yīng)的管段節(jié)點(diǎn)編號;若不滿足要求,則當(dāng)前管段節(jié)點(diǎn)編號等于已標(biāo)注的管段節(jié)點(diǎn)編號的最大值加1。水力計(jì)算圖自動(dòng)生成過程見圖2。
 
4 城市燃?xì)夤芫W(wǎng)水力計(jì)算軟件設(shè)計(jì)
   本軟件采用VC++6.0可視化編程語言基于模塊化設(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開發(fā)精彩實(shí)例教程[M].北京:清華大學(xué)出版社,2004.
[2] 李榮廷,王秀玲,張水弟.Active Automation在AutoCAD二次開發(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] 魯國文,馮良.基于AutoCAD的燃?xì)夤芫W(wǎng)水力計(jì)算和自動(dòng)繪圖系統(tǒng)的研究[J].上海煤氣,2006,(1):26-29.
[8] 王蕾,李帆.AutoCAD在燃?xì)夤こ讨茍D中的開發(fā)應(yīng)用[J].煤氣與熱力,2004,24(11):614-616.
 
(本文作者:丁國玉1 田貫三2 安俊卿3 王磊2 1.北京市城市規(guī)劃設(shè)計(jì)研究院 北京 100045;2.山東建筑大學(xué)熱能工程學(xué)院 山東濟(jì)南 250101;3.德州市建筑規(guī)劃勘察設(shè)計(jì)研究院 山東濟(jì)南 250101)