基于Excel+VBA平台流量计算程序的研建
2020-06-12王昌平邹文安
王昌平,邹文安
(1.江苏省水文水资源勘测局盐城分局,江苏 盐城 224000;2.吉林省水文水资源局,吉林 长春 130022)
1 引言
流量是指单位时间内通过某一过水断面的水体体积,是水文部门主要监测项目之一。流量测验作业主要包括起点距、水深、流速、水位等水文要素测量。在流量施测过程中,由于河床和水流的不确定性,导致各要素监测时具有很大的随机性,同一水文站点各次流量计算会有较大的差异性,会出现陡岸边、测深不测速、多点法、多台仪器施测等特殊情况,存在流量计算易出错、重复性高、耗时耗力等诸多问题。流量计算是对现场实测流量数据信息进行整理、分析,依据相关公式,通过测点流速计算、垂线平均流速计算、部分面积计算、垂线间流量计算和数据有效位数取舍等步骤进行的。近些年来,随着计算机的广泛应用,水文基层站队均配置了计算机等设备,以计算机为平台研发流量计算程序已势在必行。
基于上述原因,本文结合生产单位需求,以Ex⁃cel+VBA 为技术平台,开发了流量计算程序。该程序集数据录入与计算、成果显示与输出为一体,解决了陡岸边、测深不测速、多点法等特殊情况下流量计算问题,具有计算成果表标准格式打印输出和存储功能,大大地提高了工作效率和技术含量,降低了工作成本,解决了多年来困扰水文基层站队的一项技术难题。
2 流量计算方法
通常情况下,流量计算主要包括水面宽、水深、流速、面积和流量计算等几个部分。其中,水面宽为相邻测深垂线的间距,等于相邻测深垂线对应的起点距差值;水深是指测深垂线间的平均水深,等于相邻垂线水深的均值;测点流速等于流速仪转数除以测速历时,垂线平均流速等于各测点流速均值;部分面积等于相邻测深垂线间水面宽与平均水深的乘积;部分流量等于相邻测速垂线间面积与平均流速的乘积。
由于流量计算公式较多,本文仅列出流量计算基本公式[1],见式(1)—(6)。
式中:ΔBi为相邻测深垂线间的水面宽(m);Bi+1,Bi分别为第i+1 条,第i条测深垂线对应的起点距(m);为相邻测深垂线间的平均水深(m);Hi+1,Hi分别为第i+1条,第i条测深垂线对应的实测水深(m);i为测深垂线序列号;Vi为测点流速(m/s);N为流速仪转速,用转数表示;T为流速仪测速历时(s);C为常数;V为垂线平均流速(m/s);n为垂线测点流速个数;F为测深垂线间面积(m2);Q为测速垂线间流量(m3/s)。
3 程序架构
3.1 技术平台
本程序兼容Windows XP/Win7/Win10 计算机操作系统,支持Microsoft Office 2003 及以上版本办公软件。在Excel+VBA平台下进行开发,利用Excel工作表的输入、输出在同一工作簿的特点,最大限度地利用Excel 工作表数据录入、定位、链接和表格制作等功能,提高程序开发效率,减少VBA程序代码的耦合度[2]。
3.2 程序设计
3.2.1 设计思路
依托Excel工作表,完成原始信息录入和成果表制作,利用单元格和内置函数完成信息链接、数据处理和显示,采用VBA 编程完成数据处理、判断、计算、有效位数取舍、存储、成果输出和打印[2-4]。
3.2.2 程序结构
按照原始信息录入、计算控制(代码编程)、计算结果显示、成果输出等界面结构进行软件编程。本程序根据流量计算、输出需要,在1 个“流量程序.xls”工作簿中完成全部计算、存储和输出任务。程序设置了5 个Excel 工作表和5 个命令按钮,其功能与作用详见表1。
表1 流量计算程序架构
3.2.3 信息录入
以Excel工作表单元格定位形式录入,分别录入站名、流量编号、水位等流量基本信息以及起点距、水深、测速等实测信息。
3.2.4 计算控制
计算控制是本程序的核心内容,通过VBA代码编程来实现。其主要内容包括水面宽、水深、流速、面积和流量计算,不同要素有效位数自动取舍,陡岸边、测深不测速、多点法等特殊情况的判断、数据处理和计算,特征值挑选、统计以及阶段计算结果转存、赋值、显示等。
3.2.5 存储
将流量录入信息、计算成果等以工作簿形式整体转存至指定的计算机硬盘目录下。
3.2.6 显示与输出
首先是流量计算中部分结果显示与浏览;其次是水文资料整编标准格式下的流量计算成果表显示与打印[5]。
3.3 流程设计
首先是基本信息和监测数据录入,其次是信息链接和流量计算,最后是计算结果显示。
4 实现方法
4.1 信息录入
信息录入就是对程序的赋值,以文字、数据为主。录入的信息主要包括流量实测基本信息和监测数据两部分,是实测流量必备的基础信息。其中,基本信息主要有站名、施测时间、水位等,监测数据信息主要有起点距、水深、测速等。
录入方法如下:利用Excel 工作表编辑功能,对单元格进行定位赋值;再利用Excel 工作表链接功能,实现录入信息在不同工作表中的单元格定位链接。本程序是将“基本信息录入表”和“监测数据录入表”录入的信息分别定位链接“站测深、测速及流量计算校对表(计算表)”和“站流量、悬移质输沙率测验记载计算表(成果表)”,供流量计算、显示和成果输出使用。
4.2 流量计算
4.2.1 水面宽计算
水面宽是通过起点距来计算的,即利用Excel工作表同一列单元格相减(后单元格减前单元格)来完成的,参见式(1)。
最后一个起点距,也就是施测河道的另一侧水岸边,单元格相减结果为负值,实际上该值应等于0。通过VBA 代码判断其小于0,对应指令为If Val(Range("h6").Text)<0;然后令其等于0来实现,对应VBA 编程代码为"=RC[-6]-RC[-6]",其他垂线依此类推。
4.2.2 水深计算
水深计算是指测深垂线间的平均水深计算,等于同一列单元格相邻垂线水深的均值(相邻单元格和的1/2),参见式(2)。
水深计算完成后,需要对其有效位数进行处理。由于水深有效位数是统一的、固定的,可采用一个模块编程,集中在一个单元格进行有效位数取舍,即将待处理的水深逐个代换到该单元格,处理后再代换到原来单元格。
调用子程序代码为:Application.Run "流量程序.xls!水深取舍运算"。
4.2.3 流速计算
流速计算是流量计算核心内容之一,要考虑一条垂线一点测速、两点测速,测深不测速、岸边系数、流速仪型号以及流速有效位数取舍等多种情况,计算复杂而繁琐。
VBA 代码是通过起点距信息和流速仪测点信息综合判断属于哪一种情况。如果一条垂线一点测速,在“yslr”工作表中“相对位置”栏填写0.6 或 0.5;如果是两点、三点测速,在“相对位置”栏填写33或3(该数字用于逻辑判断,可自定);如果测深不测速,“相对位置”“转速”“历时”栏均为空白。流速有效位数取舍程序设计思路与水深取舍处理方法基本相同。
以单元格z14为例,流速计算代码为:
4.2.4 面积计算
面积计算分为测深垂线间面积计算和测速垂线间面积计算两种情况。如果测深垂线均测速,那么这两部分面积是相等的;当有测深不测速(通过有无流速判断)时,测速垂线间面积应等于测深垂线间面积相加。
面积有效位数取舍程序设计思路与水深取舍处理方法基本相同。
4.2.5 流量计算
流量计算等于测速垂线间面积乘以垂线平均流速。以单元格ac13为例,流量计算部分代码如下:
流量有效位数取舍程序设计思路与水深取舍处理方法基本相同。
4.3 数据存储
数据存储是将各次流量计算成果以完整的工作簿形式整体保存。事先在计算机硬盘下建立存储文件夹,以各次流量编号加年份(即站名+编号+年份)进行文件命名,如“泉太27—2018.xls”。其中,“站名”“编号”“年份”均为 Excel 工作表“yslr”录入信息。这样命名文件好处是具有唯一性,避免文件重复命名、存储时成果覆盖。数据存储VBA代码编程事件为:
4.4 成果打印
流量计算应以表格形式输出,以便存档保管。按照水文资料整编技术要求,本软件直接利用Excel工作表制作了标准格式的流量计算成果表,表格大小、填写内容等均符合水文资料整编要求。
成果表打印分为表格正面打印和表格反面打印两部分。其中,表格正面为基本信息和计算成果,表格反面为监测数据和计算结果。打印是通过单击命令按钮形式进行的,VBA代码编程事件为:
Private Sub CommandButton4_Click()
MsgBox"请用打印表(1)背面打印,表头朝左侧放置,单击“确定”,再打印!"
Sheets("dyb2").Select
ActiveWindow.SelectedSheets.PrintOutCopies:=1,
Collate:=True,IgnorePrintAreas:=False
End Sub
4.5 清屏处理
流量每计算一次都会在Excel 工作表上留下许多信息,这些信息会影响下一次流量计算。为此,每次流量计算完毕、存储后,应及时清除这些信息(即清屏),确保下次流量计算不受影响。清屏是通过单击命令按钮形式进行的,通过调用一个程序模块,实现清屏任务。以工作表“scb”为例,VBA代码编程事件为:
5 几种特殊情况的处理方法
本程序实现了陡岸边、测深不测速、多点法等特殊情况下的流量计算,流量计算具有一定的兼容性。其中,陡岸边是采用第一条和最后一条测深垂线对应的实测水深均参加垂线平均水深计算方式来解决的;测深不测速是通过是否有流速信息来判断的,若录入信息无测速记录(如空白),则认定该条测深垂线为只测深不测速;多点法是通过相邻起点距是否相同进行判断,若录入信息中的相邻测深垂线对应的起点距相同,则认定为多点法测速(二点法、三点法);更换流速仪是通过录入表中测速垂线前的特定单元格有无流速仪信息(如设定数字2)进行判断的,若有流速仪信息,则采用其他公式计算流速(流速计算公式需要事先录入)。
计算成果表输出格式、有效位数、信息填充等是采用预先制定好表格、利用Excel单元格链接和内置函数分析判断处理的,应符合水文资料整编要求。
6 结论
(1)本程序适合基层水文部门河道流量计算,已在吉林省部分水文站进行了生产应用。结果表明,流量计算精度准确可靠,输出的成果表满足水文资料整编要求;使用该程序计算流量提高了工作效率和工作质量,收到了良好的效果,有进一步推广应用价值。
(2)本程序实现了陡岸边、两点法、三点法、测深不测速、两部仪器测流等特殊情况下的流量计算,基本上满足了现阶段水文站河道流量计算要求。
(3)采用Excel+VBA编程适用于数据录入、统计计算、表格制作等条件下的程序开发设计,具有录入界面直观、数据可视性好、表格制作简单、部分代码可逆向操作进行录制等优势[4],不足之处是部分单元格需要进行定位编程。
(4)本程序基于Excel 工作表平台设计,操作程序简便,人机交互性能好,不需要任何商用软件或进行专门的模型软件开发,只需在常规电脑上基于Microsoft Office办公软件即可操作使用,既节约了模型开发成本,也方便了用户推广使用。