DLL技术在水文预报系统中的应用

2012-04-30 01:57孙永红狄艳艳
水利信息化 2012年4期
关键词:调用水文计算结果

孙永红 ,陈 明 ,狄艳艳

(1. 国电南自 南京河海南自水电自动化有限公司,江苏 南京 210061;2. 黄河水利委员会水文局,河南 郑州 450004)

0 引言

Library,DLL)是比较合适的方法。

水文预报系统通过建立数据库、知识库、方法库、模型库、图形库及综合推理机,对未来一定预见期内的水文状况做出预测,对防洪减灾和水资源的优化调度都具有积极的意义。

近年来,水文预报系统越来越广泛地被应用到许多领域,如城市防洪、水库调度等。水文预报是相当复杂的过程,受地理、气候的影响比较大,且随着气候和地形地貌的变化,常常需要采用几个模型进行预报并比较。这就要求预报系统具有兼容性和可扩展性。

现行的水文预报模型属于以物理成因为基础,具有一定经验性的范畴[1]。水文预报系统涉及的内容较多,从数据采集传输、解析存储、运用水文模型进行计算到最终显示发布,这些过程若采用同一种程序设计语言,难以发挥各自的优势。如 VB 易学易用,开发出来的软件体积小;VC 在底层功能和指针方面的支持较好;C# 适用于面向网络的显示和发布。

目前,VB 主要用于模型构建和计算,计算结果通过 ASP.Net 进行信息发布和与客户端交互。要在整个系统中充分发挥各种语言的优势,充分利用现有的程序资源,使用动态链接库(Dynamic Linking

1 DLL 技术的优越性

DLL 一般以函数库的形式供应用程序调用,其应用于水文预报系统的优越性主要表现在以下几个方面:

1)便于不同专业模块的集成。不同专业集成系统往往涉及很多专业应用,不同的专业适合的语言可能不同, DLL 技术通过接口交互,使得不同专业模块的集成成为可能。如:大坝安全评估、水文预报、水库调度分属不同专业模块,但相互之间关系密切,水库调度以水文预报结果为基础,调度决策又要考虑到大坝安全,这些不同专业之间的相互调用可通过 DLL 完成。

2)便于系统升级。只需在程序升级时,替换库函数,不会影响系统其他部分。如:流域气候或下垫面等因素发生变化,水文预报模型可能会跟着改变,此时只要将水文预报部分通过 DLL 替换掉,与之相关联的其他专业模块不受影响。

3)提高工作效率。不同语言编写的应用程序都可以使用同一个 DLL,且 DLL 可与其他程序部分同时进行编程,可以缩短工期,提高效率。如:水文预报模块只需提供给水库调度模块 DLL 函数,使其得到洪水过程线即可,模块内部程序不影响调用结构。因此各模块可同步进行编程调试。

4)节约内存,提高系统运行速度。DLL 只有在被调用时才装入内存运行,且多个程序使用相同的 DLL 时,只需在内存中装载 1 次,这样就节省数百兆甚至上千兆的内存开销。

2 用 VB 创建及测试水文预报模型 .DLL

水文预报模型有多种,基本上都是由模型参数、输入数据、计算流程、输出数据等几部分组成。

下面以水文预报系统的三水源新安江水文预报模型为例编写 DLL。

在这个 DLL 中,包含了新安江模型水文预报的各个流程,从设置模型参数、读取实测值到按时段计算,以及输出计算结果。这些参数值和实测值以虚参数组的形式体现,调用时,读取数据库中实际值或用户输入值作为实参数组进行调用,最后得到计算结果,这里应用的是洪水流量过程线。

1)步骤 1。启动 VB6.0,新建工程,选择ActiveX DLL,打开,工程名改为 XAJ,类模块命名为 xinanjiang.dll,然后定义参数,并计算:

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)——设置模型参数名称;

xaj_i(8)——设置模型参数值,可针对地理气候条件交互设置,针对某个地区一般为常量;

xaj_c(3)——设置模型启动时起始值,如根据前期天气情况设置土壤墒情等值;

p( )——实时降雨量,模拟降雨量;

ep( )——实时蒸发量,模拟蒸发量;

qq( )——实时区间来水量,模拟区间来水量;

QR( )——计算出的流量;

RR0——初始流量;

N——实时数据数组的个数

Dim I as integer——设置 I 为循环变量(整数型)。

以下是计算过程,求出 QR( )数据,返回

完成保存工作后,选择“文件-生成 XAJ.dll”,确定。

2)步骤 2。文件-添加工程,选择标准 EXE,打开,生成窗体 form1,改名为“测试窗口”,保存。添加测试窗体的目的是为了修改和调试 DLL。

3)步骤 3。工程-引用,在对话框中勾选“XAJ”,确定。

4)步骤 4。在 form1 的代码窗口输入:

5)步骤 5。将测试窗口工程设置为启动工程。运行-启动,程序自动将计算结果写到相应数据文件中。这里计算结果是写到 1 个 TXT 文件里,如果要写到其他类型的数据库中,只要在 DLL 中写数据部分连接不同的数据库,并按照相应字段写入即可。

6)步骤 6。文件-保存工程组,组名改为XAJ。下次修改 DLL 时,打开 XAJ.vbg,修改后重新编译生成 XAJ.dll,代替原来的 DLL 文件。调用时,重复步骤 3~5 即可。

3 在 ASP.Net 中调用 VB 创建的 DLL

ASP.Net 可以与传统 ASP 并行运行,但编程速度远非 ASP 可比,用于创建更快、更强大和功能更全的 Web 应用程序[2]。

1)步骤 1。在开始-运行中输入 regsvr32 C:WINDOWSsystem32 XAJ.dll,进行注册。

2)步骤 2。在 Calculation.asp 中编写代码:

读取数据库:

数据表内容在界面上以表格形式显示,如表1所示。

表1 数据表内容

计算时,可以直接采用默认值,也可以输入参数值, 进行参数设置,

其他水文模型的创建和调用过程类似,核心就是通过函数调用进行数据的传递,实现水文预报计算、发布等多个过程的集成,使之成为一个有机的整体。

4 结语

以上水文预报模型 .DLL 程序编写和在 ASP.Net中的调用实例证明,使用 DLL 技术实现水文预报的方法是切实有效的。使用 DLL 技术不仅可以利用多种语言各自的优势,加快系统开发和运行速度,还能对程序的核心代码进行封装保护,使得系统更安全[3]、更易于维护和扩展。例如,在桃山水库洪水预报系统中,一期工程采用大伙房产流模型和瞬时单位线作为水库流域的产流预报和汇流模型,后来由于干流入库控制水文站搬迁重建、河道漫滩严重,因此,二期工程中,洪水预报软件进行了升级,增加了新安江模型和分段分层河道演算模型 .DLL。经过对照预报,发现降雨量大于 100 mm时,大伙房模型比新安江模型合格率高一些;反之,降雨量小于 100 mm 时,大伙房模型比新安江模型合格率低一些。通过总结经验,提高了水文预报精度。使用了 DLL 技术后,系统没有因为增加了模型而变得臃肿耗时,可见 DLL 技术对于多模型系统是比较有效的。

[1]林三益. 水文预报[M]. 2 版. 北京:中国水利水电出版社,2001: 4.

[2][美]G.Andrew Duthie. ASP.Net 程序设计[M]. 李万伦,何蕾,赵海,译. 北京:清华大学出版社,2002: 11-12.

[3]李明刚,肖健. ASP.Net Web 站点高级编程范例[M]. 北京:清华大学出版社,2004: 1-2.

猜你喜欢
调用水文计算结果
继往开来 守正创新——河北省水文工程地质勘查院
水文
水文水资源管理
不等高软横跨横向承力索计算及计算结果判断研究
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
水文
基于系统调用的恶意软件检测技术研究
超压测试方法对炸药TNT当量计算结果的影响
噪声对介质损耗角正切计算结果的影响