水文原始资料计算程序开发与应用
2015-10-25魏胜利
魏胜利
(河北省张家口水文水资源勘测局,河北 张家口075000)
0 前 言
水文是关系到国计民生的基础性科学,它为防汛抗旱、工程规划设计、水资源开发利用与保护等提供了大量翔实可靠的信息,发挥了极具不可或缺的作用。
近年来,水文科学的研究取得了长足的进步。遥感技术的应用,使同时观测大范围内的宏观水文现象成为可能,水文模拟方法、水文随机分析方法、水文系统分析方法,使人们研究水文现象的能力发展到新的水平。
尤其是电子计算机的应用,使水文科学从水文观测到基本规律的研究,由人力和机械操作,发展到以电子计算机为核心的自动化[1]。
但长期以来,我国绝大部分地区水文原始资料的计算仍采用手工方式,不仅费时费力而且容易出错,与水文现代化、信息化的要求极不适应。因此,开发水文原始资料计算程序是非常必要的且必须的。
1 目 标
1.1 普遍性
我国幅员广阔,河流众多,不同的流域、不同的省市所观测项目不尽相同,河道特性也不相同。因此,程序一定要具有最大限度的普适性。
1.2 复杂性
水文原始资料计算,有的复杂,有的则非常简单。对于简单的计算,则没有编程的必要。
1.3 规范性
计算表格的式样,数据的输入、输出,计算的过程,计算的结果,要符合水文测验与整编规范。
1.4 易操作性
程序界面要简洁,操作要简单。数据编辑要容易灵活。
1.5 实用性
程序要能够应用,要解决水文工作存在中的实际问题。计算结果要能够打印,作为正式成果,用以审核和存档。
2 开发工具
水文原始资料计算需要完成表格绘制、数据输入、数据编辑、计算、计算结果输出、文件保存、打印等操作[2]。
用任何一种编程语言比如C + +、delphi、VB 等实现计算、保存、打印这些功能都不是难事,但要绘制复杂的表格,那种语言都不是太得心应手,编辑数据也不是太方便。
经过一段时间的研究与摸索,发现把VB 和excel 结合起来,可以很好的解决这一问题。用excel实现绘制表格、编辑数据、文件保存与打印,用VB6.0 调用excel 对象实现计算、控制功能,这样,既减少了编程的工作量,又解决了表格绘制、数据编辑等难题。
程序的开发工具为VISUAL BASIC 6.0 + MICROSOFT EXCEL 2003。
3 开发过程
开发过程主要有2个部分:
3.1 程序开发流程
本程序采用分布式模块化设计,程序的每个功能诸如流量计算、水位计算、断面计算等对应一个模块。模块化的好处是,各个模块相互独立,结构清楚,便于修改和维护。主要包括:
1)制作原始资料模板文件。依据水文测验规范,设计原始资料文件表格,在文件中输入原始资料观测数据,以供主程序使用。
2)编写流量、水位等原始资料计算模块,每个模块为一个独立的程序包,完成读取原始数据、处理计算、写入文件,错误处理等功能。
3)编写主程序,完成总体控制、模块调用等功能。
3.2 关键技术实现
3.2.1 悬浮窗体
可以看到,很多应用程序如QQ、东方快车等采取了浮动窗体技术。本程序也采用了这一技术,程序运行后,程序窗口将浮动于屏幕的左上角。当打开很多应用程序时,此窗体总处于最前面。程序界面简洁实用,使用方便。
程序实现这一功能需要调用以下API 函数:
Private Declare Function GetCursorPos Lib“user32”(lpPoint As POINTAPI)As Long(获得鼠标指针在屏幕坐标上的位置)。
Private Declare Function GetWindowRect Lib“user32”(ByVal hwnd As Long,lpRect As RECT)As Long(获得窗口在屏幕坐标中的位置)。
Private Declare Function PtInRect Lib “user32”(lpRect As RECT,ByVal ptx As Long,ByVal pty As Long)As Long(判断指定的点是否在指定的矩形内部)。
Private Declare Function SetWindowPos Lib“user32”(ByVal hwnd As Long,ByVal hWndInsertAfter As Long,ByVal x As Long,ByVal Y As Long,By-Val cx As Long,ByVal cy As Long,ByVal wFlags As Long)As Long(准备用来使窗体始终在最前面)。
Private Declare Function MoveWindow Lib“user32”(ByVal hwnd As Long,ByVal x As Long,By-Val Y As Long,ByVal nWidth As Long,ByVal nHeight As Long,ByVal bRepaint As Long)As Long(用来移动窗体)。
部分代码如下:'
窗体背景颜色(用户可随意改动)'
判断鼠标指针是否位于窗体拖动区
3.2.2 FSO 对象模型遍历文件
对存储介质中的文件遍历是操作系统中文件管理最基本的操作。本程序在制作数据文件过程中,需要读取特定的也就是计算原始资料的excsl 文件,那么就需要遍历文件,进行检索,将其他无关的excel文件过滤掉,本程序使用FSO 对象模型实现这一功能。
FSO 对象模型工具可使应用程序创建、改变、移动和删除文件或文件夹,以及检测是否存在指定的文件或文件夹,如果存在,在哪里等功能,同时FSO对象模型工具也能获取文件或文件夹的有关信息,诸如名称、创建日期或最近修改日期等等。
首先创建自定义的FSO 文件夹对象,然后使用For Each 循环即可。以下为部分代码。
3.2.3 程序注册
为保护软件开发者的合法权益,方法之一是注册软件。注册后的合法用户才能正常使用,未注册用户在使用次数期满后将不能运行程序,只有获得注册码才能继续使用,
用户首先需要形成注册文件,将注册文件通过E-mail 等方式交给软件开发者,作者收到文件后通过一定的算法形成注册码,然后返还给用户,完成注册。
完成这一功能需要调用API 函数读写注册表,编写加密、解密算法模块等。以下为部分代码。
4 程序功能
4.1 基本功能
4.1.1 水位计算
可计算逐日水位、逐日平均水位,月总数、月平均水位、月最高水位及出现日期、月最低水位及出现日期,最高水温及出现日期、最低水温及出现日期、月平均水温、月总数。可处理河干、连底冻等各种复杂情况。
4.1.2 流量计算
可完成整个流量计算过程,从而计算出断面流量、水道断面面积、平均流速、最大测点流速、平均水深、最大测点流速,如观测了比降水位还可计算出水面比降和糙率。
能够进行多点法流量计算。可处理流速仪法、小浮标法、小浮标流速仪联合施测、水面浮标法等各种不同测验方法流量测验。可以处理死水、分流等特殊情况。
4.1.3 含沙量计算
输入水样容积、滤纸重量、纸+沙量,即可计算单样含沙量。
4.1.4 蒸发量计算
计算逐日蒸发量、月最大蒸发量及出现日期、月最小蒸发量及出现日期、月总数,可处理结冰及合并量观测,也可处理蒸发器溢流及加入水量情况。
4.1.5 断面计算
输入起点距和测点高程,程序自动查读水面宽,进而计算各水位级断面面积。本程序可对满足约束条件的任意形状断面进行计算。
4.1.6 水位流量关系表计算
输入整数水位级的流量,然后可计算出每个水位所对应的流量。
综上所述,使用本程序可完成一个水文站大部分的计算任务。
4.2 扩展功能
4.2.1 水力半径计算
很多情况下,都需要计算水力半径,比如推求洪峰、洪水计算等。以往很多时候,用平均水深来近似代替水力半径,这会有一定误差,尤其是窄深形状的河流,误差会更大。通过本程序可计算湿周,和面积相除,即可计算出不同水位级的水力半径。
4.2.2 数据文件制作
20 世纪90年代中期,河北省水文水资源勘测局开始使用程序整编水文资料,推流及各种成果表均由程序自动完成,减少了整编工作量,提高了资料精度。
然而程序运行时需要数据文件,也就是将一组组原始数据编辑到数据文件中,工作量也不小,且如数据错误会导致程序运行结果错误。上文提到,
编制程序计算了原始资料,计算结果保存在excel 表中,利用excel 表中的数据便可制作各种需要的数据文件。
4.2.2.1 实测流量成果表数据文件制作
将用以上程序计算的每一份流量作为一个单独的excel 文件保存,然后读取每份流量的特征值诸如断面位置、测验方法、施测时间、流量、断面面积、最大水深、平均水深、最大流速、平均流速、水位等数据,按测验流量的先后时间排序,写入文本文件,即可作为整编程序的数据文件。
以上介绍了实测流量成果表数据文件的制作,除此之外,还可以制作水位、含沙量、逐日蒸发量成果表、水温月年统计表的数据文件,方法与制作流量的数据文件类似,在此不多赘述。
4.2.3 原始资料连算
程序提供了资料连算功能,可一次性的将所有资料连续计算。其好处是当程序改动后,不必逐份的再去计算每份资料,减少了工作量。
5 应 用
本程序经过不断的修改、完善,于2008年开始在河北省张家口水文水资源勘测局15个水文站使用,基层水文站除降水、水尺零点高程测量外其他大部分计算工作均可由程序完成。
计算结果符合水文测验规范规定,打印后作为正式原始资料成果。
使用程序计算原始资料,大大减轻了水文站的工作量,提高了资料精度。较以往的手工计算只能保存纸介质外,还可以保存为电子文档,查询使用更为方便。从使用的情况看,效果还是十分显著的。
6 结 语
1)水文原始资料计算繁琐、单调、重复,耗费了大量的时间与人力,因而开发水文原始资料计算程序是非常必要的。
2)随着科技的进步,技术的发展,特别是计算机技术日新月异,编程语言功能越来越来越强大,开发水文原资料计算程序是完全可行的。
3)使用程序计算水文原始资料,减轻了工作量,提高了工作效率,降低了错误率,效果是十分显著的。
[1]Charles Petzold.Microsoft Windows 程 序 设 计——Visual Basic.NET 语言描述[M]. 武汉:华中科技大学出版社,2004:49-50.
[2]希望图书创作室.Visual Basic 6.0 Professional 专业版循序渐进教程[M]. 北京:北京希望电子出版社,1999:101-102.