自動導(dǎo)入管網(wǎng)圖的燃氣管網(wǎng)水力計算程序開發(fā)

摘 要

摘要:介紹了AutoCAD的DXF文件(圖形交換文件)數(shù)據(jù)格式特點,利用DXF文件作為數(shù)據(jù)接口,為燃氣管網(wǎng)水力計算程序開發(fā)了管網(wǎng)拓撲結(jié)構(gòu)圖自動導(dǎo)入功能。該方法可根據(jù)管道屬性導(dǎo)入管網(wǎng)

摘要:介紹了AutoCAD的DXF文件(圖形交換文件)數(shù)據(jù)格式特點,利用DXF文件作為數(shù)據(jù)接口,為燃氣管網(wǎng)水力計算程序開發(fā)了管網(wǎng)拓撲結(jié)構(gòu)圖自動導(dǎo)入功能。該方法可根據(jù)管道屬性導(dǎo)入管網(wǎng)圖,簡化管道數(shù)據(jù)輸入過程。通過實例進行了驗證。
關(guān)鍵詞:燃氣管網(wǎng);水力計算;自動繪圖;管網(wǎng)拓撲結(jié)構(gòu)圖;圖形交換文件
Development of Gas Network Hydraulic Calculation Program with Automatic Import of Network Topology Map
ZHANG Ning,XIE Donglai
AbstractThe data format of AutoCAD drawing exchange file(DXF)is introduced.Using DXF file as data interface,the automatic import function of network topology map is developed for hydraulic calculation program of gas network.The program can import the network topology map according to the pipeline attribute and simplify the data input process.It is verified by a case.
Key wordsgas network;hydraulic calculation;automatic drawing;network topology map;drawing exchange file(DXF)
   隨著我國能源結(jié)構(gòu)的調(diào)整,越來越多的用戶開始使用清潔、高效的管輸天然氣。燃氣管網(wǎng)水力計算是進行管網(wǎng)設(shè)計和運行的理論基礎(chǔ),是順利完成輸配任務(wù)的保證。計算機應(yīng)用的普及促使水力計算程序替代了原始的手工平差計算[1]。目前,應(yīng)用比較直觀、方便的程序是通過面向?qū)ο蟮恼Z言(如VC)編寫,用戶可以在窗口利用鼠標(biāo)點擊繪制管段,輸入計算參數(shù),得到結(jié)果。但是,當(dāng)管網(wǎng)規(guī)模越來越龐大時,這種輸入方法不僅費時、費力,還極易出錯,因此有必要在水力計算程序中開發(fā)管網(wǎng)拓撲結(jié)構(gòu)圖自動導(dǎo)入功能。
1 水力計算程序功能
    目前已有利用Visual C++開發(fā)的水力計算程序,可以在可視化界面中由用戶利用鼠標(biāo)點擊繪制管網(wǎng)計算圖。在管段和節(jié)點附近的空間范圍內(nèi)雙擊鼠標(biāo)左鍵,彈出相應(yīng)對話框,輸入管段和節(jié)點參數(shù),實現(xiàn)管網(wǎng)和數(shù)據(jù)的緊密結(jié)合。同時程序具有管段刪除、截斷、改變顏色、流向等編輯功能,方便管網(wǎng)的新建和改建。并利用解節(jié)點方程組法對單氣源與多氣源、高中壓與低壓、環(huán)狀與枝狀管網(wǎng)進行快速、準(zhǔn)確的水力計算,并可將結(jié)果自動標(biāo)注在水力計算圖中[2]。本文在此程序基礎(chǔ)上開發(fā)管網(wǎng)拓撲結(jié)構(gòu)圖的自動導(dǎo)入功能。
2 AutoCAD的DXF文件數(shù)據(jù)格式
2.1 DXF文件簡介
    目前,燃氣管道圖大多用AutoCAD軟件繪制,其儲存格式有DWG、DWS、DWT、DXF四種。其中前三種文件格式為二進制形式,不便于數(shù)據(jù)內(nèi)容的查看,只適合于AutoCAD程序本身的儲存使用。DXF是一種ASCⅡ文本文件,它包含對應(yīng)的DWG文件的全部信息,可以利用文本編輯器來查看其數(shù)據(jù)內(nèi)容,通過它可以很方便與第三方軟件形成良好的數(shù)據(jù)互讀。
2.2 DXF文件的數(shù)據(jù)格式
    DXF文件的基本構(gòu)造形式是由代碼和關(guān)聯(lián)值組成的數(shù)據(jù)對。代碼(通常稱為組碼)表明數(shù)值的類型,關(guān)聯(lián)值則表明具體數(shù)值的大小。每個組碼和關(guān)聯(lián)值在DXF文件中都單獨成行。
    DXF文件由多個段組成,每個段以組碼“0”和字符串“SECTION”開頭,其后是組碼“2”和表示段名的字符串(如ENTITIES),段中間用定義其元素的組碼和關(guān)聯(lián)值組成,段尾使用組碼“0”和字符串“ENDSECT”結(jié)束。
    DXF文件段完整結(jié)構(gòu)包括以下7部分:
    HEADER段:包含有關(guān)圖形的總體信息,它由AutoCAD數(shù)據(jù)庫版本號和一些系統(tǒng)變量組成。
    CLASSES段:包含應(yīng)用程序定義的類的信息,這些類的實例出現(xiàn)在數(shù)據(jù)庫的BLOCKS、ENTITLES和OBJECTS段中。
    TABLES段:包含應(yīng)用程序標(biāo)志表、塊參照表、標(biāo)注樣式表、圖層表、線型表、文字樣式表、用戶坐標(biāo)系表、視圖表、視口配置表的定義。
    BLOCKS段:包含構(gòu)成圖形中每個塊的塊定義。
    ENTITIES段:包含圖形中的繪圖實體。
    OBJECTS段:包含圖形中的非圖形對象。除圖元、符號表記錄以及符號表以外的所有對象都儲存在此段。
    THUMBNAILIMAGE段:包含圖形的預(yù)覽圖像數(shù)據(jù)[3~5]。
3 可自動導(dǎo)入管網(wǎng)拓撲結(jié)構(gòu)圖的計算程序
3.1 DXF文件中管道數(shù)據(jù)的儲存
    實現(xiàn)燃氣管網(wǎng)拓撲結(jié)構(gòu)圖的自動導(dǎo)入,即通過線段的圖層、顏色、線型、線寬等屬性信息確定所選擇的管道,讀取它們的起點與終點坐標(biāo),然后在水力計算程序中繪制。其中最為關(guān)鍵的步驟是對管道的起點和終點坐標(biāo)的準(zhǔn)確查找。根據(jù)AutoCAD的繪圖原則,線段都是繪制于某一圖層上,當(dāng)圖層中線段的顏色、線型、線寬等屬性信息與圖層自身預(yù)定義的圖形屬性相同(通常稱為隨圖層)時,線段的上述屬性數(shù)據(jù)沒有在用于儲存圖形對象信息的ENTITIES段的AcDbEntity子段中表達,而是作為圖層的一般屬性數(shù)據(jù)儲存在圖層所在的TABLES段。這時如果根據(jù)線段屬性數(shù)據(jù)對管道進行查找時,就需要首先在TABLES段中找到圖層自身預(yù)定義的線段屬性的組碼和關(guān)聯(lián)值,如果所需查找的管段顏色、線型、線寬的數(shù)據(jù)和圖層自身預(yù)定義的圖形屬性相符合,再在AcDbEntity段中找到此線段的起點和終點坐標(biāo);當(dāng)圖層中線段的顏色、線型、線寬等屬性信息與圖層自身預(yù)定義的屬性信息不相同時,線段屬性數(shù)據(jù)的組碼和關(guān)聯(lián)值就儲存在AcDbEntity段中,可直接在此段中查找。根據(jù)管道屬性查找坐標(biāo)時,為防止有效數(shù)據(jù)的遺漏,需要逐行讀取儲存的數(shù)據(jù),根據(jù)線段屬性數(shù)據(jù)的儲存方式的不同,定位于TABLES或AcDbEntity段,再找到相應(yīng)管道的起點和終點坐標(biāo)。
3.2 自動導(dǎo)入管網(wǎng)圖功能的實現(xiàn)方法
    在程序自動導(dǎo)入之前,首先要對繪制管道的AutoCAD文件進行前期處理。程序的查找范圍為圖1所示導(dǎo)入管網(wǎng)簡圖命令對話框中的管段屬性下拉列表中列出的圖層的名稱(導(dǎo)入管網(wǎng)圖層1、導(dǎo)入管網(wǎng)圖層2)、線段的顏色(紅色、藍色、白色)、線型(直線、虛線、點劃線)、線寬(0.mm、0.6mm1、0.9mm)。如果需要導(dǎo)入管道的屬性信息不在上述可選范圍內(nèi),需要在AutoCAD中對管道屬性進行前期修改,使得需要查找的管道屬性在上述可選范圍之內(nèi)。然后把通用的DWG文件另存為DXF文件。
 

    在燃氣水管網(wǎng)力計算程序中打開導(dǎo)入管網(wǎng)簡圖命令對話框,選擇導(dǎo)入線段的圖層、顏色、線型、線寬等屬性信息。其中圖層作為線段存在的基礎(chǔ),為必選項;其他3項可以根據(jù)進一步由管道屬性精確查找的需要選擇其中1項。
    圖2為管道的起點和終點坐標(biāo)的查詢流程圖。程序首先打開儲存管網(wǎng)信息的DXF文件,調(diào)用VC的ReadString命令逐行讀取管網(wǎng)數(shù)據(jù)。當(dāng)查詢到儲存線段信息的AcDbEntity段,找到線段的圖層名組碼,如果組碼的關(guān)聯(lián)值與導(dǎo)入管網(wǎng)簡圖命令對話框的選定值相同,接著判斷此圖層中線段是否全部導(dǎo)入,如果全部導(dǎo)入,定位于AcDbEntity段下的AcDbLine子段,讀取線段的起點和終點坐標(biāo);如果還需要根據(jù)圖層中線段的屬性信息進一步進行篩選,則首先需要判斷是根據(jù)線段的顏色、線型、線寬3個屬性中哪個屬性進行選擇。例如選擇的是顏色屬性,首先判斷線段的顏色是否隨圖層設(shè)置,如果隨圖層設(shè)置,在TABLES段中,尋找圖層名的組碼,確定組碼的關(guān)聯(lián)值與選定值相同的圖層,接著尋找此圖層名下線段的顏色的組碼,如果組碼的關(guān)聯(lián)值與選定值相同,在AcDbLine段中找到此線段,然后讀取起點和終點坐標(biāo);如果線段的顏色不隨圖層設(shè)置,則直接在AcDbLine段中根據(jù)管道顏色找到該線段的起點和終點坐標(biāo)即可[6~7]
  所有查詢到的與導(dǎo)入管網(wǎng)簡圖命令對話框相關(guān)的管道的起、終點坐標(biāo)儲存在一個文件中,燃氣管網(wǎng)水力計算程序讀取此文件中數(shù)據(jù),利用VC的MoveTo( )函數(shù)定位于管道的起點,LineTo( )函數(shù)繪制直線連接到端點,同時在線段的中點繪制從起點指向終點的流向三角形。
3.3 管道長度的測量
    如果管道在AutoCAD圖中按照實際長度繪制,程序可以根據(jù)管道的起點和終點坐標(biāo)利用直角三角形的勾股定理自動計算管道的長度。當(dāng)實際管長與繪制管長的比例系數(shù)不為1時,可在圖1所示對話框中輸入相應(yīng)的比例系數(shù)轉(zhuǎn)化得到,管長作為計算參數(shù)自動輸入程序中供水力計算使用。
3.4 節(jié)點自動編號
由于水力計算節(jié)點方程組求解的需要,程序?qū)?jié)點自動進行編號。首先對第一條管段起點編號1,終點編號2。在進行此后管段節(jié)點編號時,計算當(dāng)前管段前所有節(jié)點的最大編號,當(dāng)前管段與之前管段的節(jié)點坐標(biāo)依次進行比較,如果兩者相同,說明兩點重合,節(jié)點編號為坐標(biāo)相同點的編號;如果不相同,節(jié)點編號為當(dāng)前節(jié)點編號的最大值加1[8]。
4 自動導(dǎo)入管網(wǎng)圖實例
    圖3為AutoCAD的DWG格式燃氣管網(wǎng)圖,實線為現(xiàn)有燃氣管道,虛線為需要擴建的管道。在導(dǎo)入管網(wǎng)圖之前,首先在AutoCAD程序中把管道所在的圖層名改為“導(dǎo)入管網(wǎng)圖層1”,然后用“Drawing”文件名把管網(wǎng)圖另存為DXF格式的文件,保存在電腦“桌面”。打開水力計算應(yīng)用程序,點擊選單欄中的“導(dǎo)入管網(wǎng)”選項,打開如圖1所示對話框,在“選擇圖層”下拉選項中選取“導(dǎo)入管網(wǎng)圖層1”,然后點擊“確定”,則程序會按照電腦“桌面”上名為“Drawing”的DXF文件中“導(dǎo)入管網(wǎng)圖層1”圖層下的管道坐標(biāo)自動繪制管網(wǎng)。全部管道導(dǎo)入計算程序并對管
    道節(jié)點自動編號的示意圖見圖4。若只需要選擇性地導(dǎo)入圖3中實線管道,打開圖1所示對話框,在選擇圖層“導(dǎo)入管網(wǎng)圖層1”時,還需要選擇“線型”按鈕,并相應(yīng)選取“實線”選項,管道選擇性導(dǎo)入計算程序并對管道節(jié)點自動編號的示意圖見圖5。
 

5 結(jié)語
    利用AutoCAD的DXF數(shù)據(jù)格式為燃氣管網(wǎng)水力計算程序開發(fā)了管道的自動導(dǎo)入功能,該方法能夠準(zhǔn)確、迅速地把管網(wǎng)拓撲結(jié)構(gòu)圖移植到計算程序中,并自動計算管段長度,可以大大減輕輸入工作量,對于大型、特大型管網(wǎng),效果更加明顯。
參考文獻:
[1] 姜東琪,杜建梅,崔建華,等.燃氣管網(wǎng)水力計算及水力計算圖的繪制[J].煤氣與熱力,2001,21(5):453-455.
[2] 張寧,解東來,田貫三,等.多氣源燃氣管網(wǎng)水力計算程序的開發(fā)[J].煤氣與熱力,2009,29(6):B05-B08.
[3] 梁雪春,宋德明.AutoCAD二次開發(fā)技術(shù)指南[M].北京:清華大學(xué)出版社,2001.
[4] 余承飛,方勇.AutoCAD二次開發(fā)技術(shù)[M].北京:人民郵電出版社,1999.
[5] 王子茹,任清波.基于VC++的DXF數(shù)據(jù)文件接口的研究[J].廈門理工學(xué)院學(xué)報,2007,15(1):26-30.
[6] 劉天立.基于DXF實現(xiàn)C語言與AutoCAD接口[J].哈爾濱理工大學(xué)學(xué)報,2001,6(4):60-62.
[7] 劉傳亮,陸建德.AutoCAD DXF文件格式與二次開發(fā)圖形軟件編程[J].微機發(fā)展,2004,14(9):101-104.
[8] 左麗麗,吳長春.燃氣管網(wǎng)水力計算節(jié)點及管段編號的探討[J].煤氣與熱力,2005,25(3):36-39.
 
(本文作者:張寧 解東來 華南理工大學(xué) 化學(xué)與化工學(xué)院 廣東廣州 510641)