孫永紅 ,陳 明 ,狄艷艷
(1. 國電南自 南京河海南自水電自動化有限公司,江蘇 南京 210061;2. 黃河水利委員會水文局,河南 鄭州 450004)
Library,DLL)是比較合適的方法。
水文預報系統(tǒng)通過建立數(shù)據(jù)庫、知識庫、方法庫、模型庫、圖形庫及綜合推理機,對未來一定預見期內的水文狀況做出預測,對防洪減災和水資源的優(yōu)化調度都具有積極的意義。
近年來,水文預報系統(tǒng)越來越廣泛地被應用到許多領域,如城市防洪、水庫調度等。水文預報是相當復雜的過程,受地理、氣候的影響比較大,且隨著氣候和地形地貌的變化,常常需要采用幾個模型進行預報并比較。這就要求預報系統(tǒng)具有兼容性和可擴展性。
現(xiàn)行的水文預報模型屬于以物理成因為基礎,具有一定經(jīng)驗性的范疇[1]。水文預報系統(tǒng)涉及的內容較多,從數(shù)據(jù)采集傳輸、解析存儲、運用水文模型進行計算到最終顯示發(fā)布,這些過程若采用同一種程序設計語言,難以發(fā)揮各自的優(yōu)勢。如 VB 易學易用,開發(fā)出來的軟件體積?。籚C 在底層功能和指針方面的支持較好;C# 適用于面向網(wǎng)絡的顯示和發(fā)布。
目前,VB 主要用于模型構建和計算,計算結果通過 ASP.Net 進行信息發(fā)布和與客戶端交互。要在整個系統(tǒng)中充分發(fā)揮各種語言的優(yōu)勢,充分利用現(xiàn)有的程序資源,使用動態(tài)鏈接庫(Dynamic Linking
DLL 一般以函數(shù)庫的形式供應用程序調用,其應用于水文預報系統(tǒng)的優(yōu)越性主要表現(xiàn)在以下幾個方面:
1)便于不同專業(yè)模塊的集成。不同專業(yè)集成系統(tǒng)往往涉及很多專業(yè)應用,不同的專業(yè)適合的語言可能不同, DLL 技術通過接口交互,使得不同專業(yè)模塊的集成成為可能。如:大壩安全評估、水文預報、水庫調度分屬不同專業(yè)模塊,但相互之間關系密切,水庫調度以水文預報結果為基礎,調度決策又要考慮到大壩安全,這些不同專業(yè)之間的相互調用可通過 DLL 完成。
2)便于系統(tǒng)升級。只需在程序升級時,替換庫函數(shù),不會影響系統(tǒng)其他部分。如:流域氣候或下墊面等因素發(fā)生變化,水文預報模型可能會跟著改變,此時只要將水文預報部分通過 DLL 替換掉,與之相關聯(lián)的其他專業(yè)模塊不受影響。
3)提高工作效率。不同語言編寫的應用程序都可以使用同一個 DLL,且 DLL 可與其他程序部分同時進行編程,可以縮短工期,提高效率。如:水文預報模塊只需提供給水庫調度模塊 DLL 函數(shù),使其得到洪水過程線即可,模塊內部程序不影響調用結構。因此各模塊可同步進行編程調試。
4)節(jié)約內存,提高系統(tǒng)運行速度。DLL 只有在被調用時才裝入內存運行,且多個程序使用相同的 DLL 時,只需在內存中裝載 1 次,這樣就節(jié)省數(shù)百兆甚至上千兆的內存開銷。
水文預報模型有多種,基本上都是由模型參數(shù)、輸入數(shù)據(jù)、計算流程、輸出數(shù)據(jù)等幾部分組成。
下面以水文預報系統(tǒng)的三水源新安江水文預報模型為例編寫 DLL。
在這個 DLL 中,包含了新安江模型水文預報的各個流程,從設置模型參數(shù)、讀取實測值到按時段計算,以及輸出計算結果。這些參數(shù)值和實測值以虛參數(shù)組的形式體現(xiàn),調用時,讀取數(shù)據(jù)庫中實際值或用戶輸入值作為實參數(shù)組進行調用,最后得到計算結果,這里應用的是洪水流量過程線。
1)步驟 1。啟動 VB6.0,新建工程,選擇ActiveX DLL,打開,工程名改為 XAJ,類模塊命名為 xinanjiang.dll,然后定義參數(shù),并計算:
Public Sub XAJ(xaj_p(15) As float, xaj_i(8) As float, xaj_c(3) As float, p( ) As float, ep( ) As float, qq( )As float, QR( ) As float, RR0 As float,N as integer)
其中:xaj_p(15)——設置模型參數(shù)名稱;
xaj_i(8)——設置模型參數(shù)值,可針對地理氣候條件交互設置,針對某個地區(qū)一般為常量;
xaj_c(3)——設置模型啟動時起始值,如根據(jù)前期天氣情況設置土壤墑情等值;
p( )——實時降雨量,模擬降雨量;
ep( )——實時蒸發(fā)量,模擬蒸發(fā)量;
qq( )——實時區(qū)間來水量,模擬區(qū)間來水量;
QR( )——計算出的流量;
RR0——初始流量;
N——實時數(shù)據(jù)數(shù)組的個數(shù)
Dim I as integer——設置 I 為循環(huán)變量(整數(shù)型)。
以下是計算過程,求出 QR( )數(shù)據(jù),返回
完成保存工作后,選擇“文件-生成 XAJ.dll”,確定。
2)步驟 2。文件-添加工程,選擇標準 EXE,打開,生成窗體 form1,改名為“測試窗口”,保存。添加測試窗體的目的是為了修改和調試 DLL。
3)步驟 3。工程-引用,在對話框中勾選“XAJ”,確定。
4)步驟 4。在 form1 的代碼窗口輸入:
5)步驟 5。將測試窗口工程設置為啟動工程。運行-啟動,程序自動將計算結果寫到相應數(shù)據(jù)文件中。這里計算結果是寫到 1 個 TXT 文件里,如果要寫到其他類型的數(shù)據(jù)庫中,只要在 DLL 中寫數(shù)據(jù)部分連接不同的數(shù)據(jù)庫,并按照相應字段寫入即可。
6)步驟 6。文件-保存工程組,組名改為XAJ。下次修改 DLL 時,打開 XAJ.vbg,修改后重新編譯生成 XAJ.dll,代替原來的 DLL 文件。調用時,重復步驟 3~5 即可。
ASP.Net 可以與傳統(tǒng) ASP 并行運行,但編程速度遠非 ASP 可比,用于創(chuàng)建更快、更強大和功能更全的 Web 應用程序[2]。
1)步驟 1。在開始-運行中輸入 regsvr32 C:WINDOWSsystem32 XAJ.dll,進行注冊。
2)步驟 2。在 Calculation.asp 中編寫代碼:
讀取數(shù)據(jù)庫:
數(shù)據(jù)表內容在界面上以表格形式顯示,如表1所示。
表1 數(shù)據(jù)表內容
計算時,可以直接采用默認值,也可以輸入?yún)?shù)值, 進行參數(shù)設置,
其他水文模型的創(chuàng)建和調用過程類似,核心就是通過函數(shù)調用進行數(shù)據(jù)的傳遞,實現(xiàn)水文預報計算、發(fā)布等多個過程的集成,使之成為一個有機的整體。
以上水文預報模型 .DLL 程序編寫和在 ASP.Net中的調用實例證明,使用 DLL 技術實現(xiàn)水文預報的方法是切實有效的。使用 DLL 技術不僅可以利用多種語言各自的優(yōu)勢,加快系統(tǒng)開發(fā)和運行速度,還能對程序的核心代碼進行封裝保護,使得系統(tǒng)更安全[3]、更易于維護和擴展。例如,在桃山水庫洪水預報系統(tǒng)中,一期工程采用大伙房產流模型和瞬時單位線作為水庫流域的產流預報和匯流模型,后來由于干流入庫控制水文站搬遷重建、河道漫灘嚴重,因此,二期工程中,洪水預報軟件進行了升級,增加了新安江模型和分段分層河道演算模型 .DLL。經(jīng)過對照預報,發(fā)現(xiàn)降雨量大于 100 mm時,大伙房模型比新安江模型合格率高一些;反之,降雨量小于 100 mm 時,大伙房模型比新安江模型合格率低一些。通過總結經(jīng)驗,提高了水文預報精度。使用了 DLL 技術后,系統(tǒng)沒有因為增加了模型而變得臃腫耗時,可見 DLL 技術對于多模型系統(tǒng)是比較有效的。
[1]林三益. 水文預報[M]. 2 版. 北京:中國水利水電出版社,2001: 4.
[2][美]G.Andrew Duthie. ASP.Net 程序設計[M]. 李萬倫,何蕾,趙海,譯. 北京:清華大學出版社,2002: 11-12.
[3]李明剛,肖健. ASP.Net Web 站點高級編程范例[M]. 北京:清華大學出版社,2004: 1-2.