摘要:本文探討并建立了具有GUI的城市任意形狀給水環狀管網的可視化計算模型。在 平臺下,水管網將幾何建模、可視矩陣生成、化計管網計算及結果分析一體化。城市利用可視化思想,水管網使管網計算過程簡化,可視提高了工作效率。化計
關鍵詞:給水管網 平差算法 可視化 Matlab
引言
城市給水管網系統是城市保障工業生產和群眾生活的重要體系之一。運用計算機及其應用軟件來解決管網優化調度問題,水管網提高管理效率,可視節約運行費用,化計是城市當前給水系統新理論、新技術發展研究的水管網基本方向。國內外科研工作者已經做了大量工作并取得了相應的可視成果。但需要較多的經驗,且操作上存在諸多不便。本文以為開發平臺,采用面向對象的可視化編程技術建立城市給水管網計算模型。根據管網的結構參數(管網圖形、管段直徑和長度、阻力系數、節點流量等)計算出各管段流量和水頭損失等。在此基礎上,還可以得到各節點的水壓以及水源點供水壓力等參數,從而全面了解管網的工作狀況,并對管網的優化調度,改建擴建,制訂發展規模等提供科學依據。
1 管網平差算法優選及程序實現
為提高供水可靠性,城市給水管網通常建設為環狀。環狀管網的水力計算方法有很多種,常見的有求解環方程,求解節點方程,求解管段方程等。但計算過程都必須符合下面兩個條件:
⑴節點流量必須平衡,即應滿足連續性方程:
⑵閉合環路內水頭損失必須平衡,即應滿足能量方程:
式(1)和式(2)中,為銜接矩陣,為回路矩陣,為結點流量,為管段水頭損失,為管段流量。環狀網在初分流量時已經符合條件(1)的要求,但在確定管徑并計算得到管段水頭損失以后,往往不能同時滿足(1)、(2)的要求。因此,環狀網水力計算過程就是在已定管徑的基礎上,重新分配管段流量,不斷計算,不斷調整,直至符合上述水力條件為止。
目前已有的各種軟件包各具特色,但基本算法都是對連續性方程、能量方程和管段壓降方程的求解。一般的,計算機求解時都采用解節點方程的方法,其優點是輸入數據少,大部分工作如擬定管段初始流量,生成銜接矩陣和系數矩陣等都由計算機自動完成。但存在節點數大,方程數多,系數矩陣很大,求解算法較復雜等缺點。通過對比發現,解環方程編程效率高于解節點方程。因為環數遠小于節點數,環方程數少于節點方程數,系數矩陣大大縮小,迭代次數也減少,很大程度上提高了計算機計算速度并能節省存儲空間。只要在編程過程中,根據已知條件,解決好自動擬定管段初始流量,自動生成系數矩陣等問題,該法就完全具備了解節點方程法的優點。所以本可視化模型以解環方程法為基礎。
環狀管網的解環方程方法常用的是hardy-cross法(平差法)。其基本思路是在管網計算時,各管段初始流量分配后,求出管段水頭損失。如每環各管段水頭損失和(閉合差)不為零,則對該環各管段引入校正流量,兩環的公共管段須同時計及兩環的校正流量。然后按Q的算各管段水頭損失,重復計算直到各環閉合差接近零為止,其流程圖見 圖1。
顯然,hardy-cross法的效率很大程度取決于方程式(1)和(2)中的銜接矩陣的構建方法以及各管段流量的初值給定方法。另外,管網的結構圖的建立和各管段的計算所需信息的輸入方式也會影響計算效率。為此,本文采用Matlab作為開發平臺,在可視化操作環境下,以圖形的形式建網結構圖,并輸入節點和管段的各種信息。在此基礎上,由計算機根據管網的幾何形狀,自動生成銜接矩陣并賦予管段初始流量。初始流量分配不當將增加迭代次數,甚至可能導致計算不收斂。因此,合理分配初始流量是很重要的。根據幾何關系,環狀管網中的管段數P,節點數J和環數L存在如下關系:P=J+L-1,而連續性方程(1)的獨立方程只有J-1個,顯然運用連續性線性方程解管段流量時將有無數組解,要求唯一解將要補充其他方程,增加了編程的工作量。本文以 Matlab中特有的PINV函數找出一組恰當的解作為初分流量,較好地解決了這一問題。多次實踐證明,運用該法計算得到的結果與實際情況相當吻合。
在進行可視化操作繪制管網結構圖的過程中,我們將管段圖形概化為直線,沿線流量簡化到節點,并且節點流量由用戶自由輸入。建立環路時規定用戶按逆時針方向繪制管線直到閉合成環結束,根據各個環路的拓撲結構,構造管段的拓撲關系。完成所有環路的建立以后,計算機按已存儲的節點與管段的圖形學關系,即可直接建立回路矩陣和銜接矩陣。
2 軟件開發平臺及管網計算的可視化編程
是一個既可以進行分析計算,又能進行數據可視化的高效操作平臺,可以方便的建立具有用戶圖形界面(GUI)的參數輸入、數值計算、結果分析調整一體化的仿真環境。利用其專業的繪圖工具,快速的建網模型并得到所期望的數值圖形解。有關Matlab語言本身及建立GUI應用程序的方法和具體開發過程,可閱讀相關文獻[3]。
在進行用戶界面GUI設計時,研發人員一般應遵守三個原則:第一是簡單化,即界面結構清晰,層次分明,操作方便;第二是一致性。界面各部分功能應相互匹配,不產生抵觸;第三是人性化,界面要友好,符合人們的正常邏輯思維方式和使用習慣。
本文將GUI 設計成四個區域(見圖2)。最上方是下拉菜單區,右側是主操作區,左上方是圖形區,左下方是節點編輯區。下拉式菜單占據空間小,信息多;缺點是調用麻煩。根據這些特性,把不常調用的命令置于其中,如文件存儲和打開,圖形縮放,坐標系調整等。主操作區系列操作按鍵實現最主要的和頻繁調用的命令。主操作區又分為四個子區。子區一設有addNode和delNode按鍵,用于添加和刪除節點,加點時給出節點號,刪除節點時剩余節點號自動調整;子區圖2 軟件界面。
二設有addCircle和delCircle按鍵,用于添加和刪除環路。添加環路時在環的形心位置給出環標號,該標號具有重要意義,是環路刪除時用于尋找對象的標志;子區三設有setNodeQ和setLineProp按鍵,用以給節點和管段賦予計算用的初始值;子區四有calculate、showHf和showQ按鍵,前者用于管網水力平差計算,后兩者以可視化方式給出各管段的水頭損失和流量。左下方節點編輯區用于實現節點坐標的修改及鍵盤輸入。以上GUI中各個元素(按鍵、編輯框、菜單等)利用Matlab中開發工具GUIDE、PROPEDIT、MENUEDIT進行設定。Matlab 6.5 開發環境下,系統自動生成與各個元素相對應的callback函數框架。實現程序功能的關鍵工作是編寫這些元素所要完成的處理函數,即GUI 的處理代碼編寫。
在編寫函數處理代碼的過程中,要使程序真正達到簡潔、高效,除了思路上要清晰外,下面兩個問題也很值得重視。第一是如何解決函數間的相互聯系,確保數值正確傳遞的問題。用戶圖形界面上的元素表面上似乎是獨立的,內部卻有著緊密的聯系,后面很多工作往往涉及到前面的基礎。函數間數值的傳遞,Matlab 6.5下可用handles命令來解決,無須像以前那樣用findobj命令來查找句柄,使用起來相當方便;第二個問題是函數結構化、一體化思想。編程過程中,可將多處使用的代碼用一個通用子函數編寫,以供直接調用。如本文中管網重繪代碼,在管網構建、平差計算以及計算結果可視化中多次用到,可寫成子函數形式。使程序更加簡潔,易于閱讀、查找錯誤和修改,減少程序之間的影響,提高可靠性。
基于以上思路,本文設計了具有GUI 的城市給水管網結果可視化計算模型,它具有按鍵和鼠標操作的全部功能,集建網模型,參數賦值,計算,結果可實視化為一體。可進行局部縮放,對管網結構和各種參數能作出任意修改,使用起來相當方便。圖3、圖4為利用本文模型計算所得的結果。
圖 3 管網水頭損失平差計算結果 圖 4 管網流量平差計算結果