首页 省内新闻 外埠新闻 行业介绍 业务信息  水文测验  简报公报 水文文学 水文人物 水文法律法规 下载
当前位置: 首页 >> 水文科技动态 >> 水文技术 >> 正文

基于PB12.0的雨水情信息管理系统

来源:沧州水文局 文章作者:王凤瑞 录入时间:14-12-03 13:50:41

一、概述

目前,我省水情报汛系统采用北京燕禹公司的自测测报接收系统,通过水情交换系统对数据库系统的操作实现雨水情信息的共享。在雨水情信息采集后,需及时向防汛部门提供信息,对数据库进行检索,形成报表。在信息采集过程中,由于仪器设备的原因(故障或信号测试),造成部分伪信息,需要对数据的合理性进行对照。基于以上原因,利用 PowerBuider12.0 开发工具, SQL Server 数据库完成了雨、水情信息管理系统的开发,旨在实现以下功能:

1、   时段雨量 - 日雨量表制作及合理性对照;

2、   日雨量 -- 旬(月)表制作及合理性对照;

3、   分县雨量表的制作;

4、   日雨量分布图的制作;

5、   水情报表的制作;

6、   报表的导出( Excel )及打印;

7、   土壤墒情报文的发送;

8、   测站基本信息的浏览;

9、   实时数据与常年值的比较;

10、          其他。

二、总体设计

采用 PowerBuilder12.0 开发工具, SQL Server 数据库系统, PowerScript 语言开发完成。按照以上设定的目标,绘制了系统 HIPO 图。

三、数据库设计

1、           数据表的创建

系统采用实时雨水情数据库( czhy.db ),即日常水情交换系统数据库,涉及数据库表如下:

St_pptn_r 为降水量表,用于存储时段降水量和日降水量;

St_river_r 为河道水情表,用于存储河道站的水情信息;

St_rsvr_r 为水库水情表,用于存储水库站的水情信息;

St_was_r 为堰闸水情表,用于存储堰闸站的水情信息;

St_soil_r 为土壤墒情表,用于存储土壤墒情及附属信息;

St_pstat_r 为降水量统计表,用于存储测站旬、月累计降水量。

2、           表结构设计

1) 降水量表( st_pptn_r

降水量表表结构各字段描述如下:

测站编码:报送降水信息的水文测站编码。

时间:表示降水量值的截止时间。

时段降水量:表示指定时段内的降水量。

时段长:描述水文测站所报时段降水量的统计时段长度。

降水历时:描述指定时段的实际降雨时间。

日降水量:表示的是前一天 (24h) 的降水量。

天气状况:降水量值统计截止时的天气状况代码。天气状况的代码及意义仍按现行规定取值。

2 )降水量统计表 (ST_PSTAT_R)

降水量统计表表结构 各字段描述如下:

测站编码:雨量站(含测报雨量的其它站)测站编码。

标志时间:同前。

统计时段标志:统计时段标志字段。

累计降水量:统计时段内(标志时间前若干天)降水量累计值。

3 )测站设定表

功能:存储用户指定的测站。

各字段描述如下:

测站编码:全国统一编制的,用于标识某一水文测站的字符编码编码。测站编码是由数字和大写字母组成的 8 位字符串。

测站名称:测站编码所站的中文名称。

测站类型:标识水文测站类型的两位字母代码。水文测站类型代码由两位大写英文字母组成,第一位固定不变,表示大的水文测站类型,第二位根据情况可以扩展,表示大的水文测站类型的细分,如果没有细分的情况下,重复第一位。大的水文测站类型目前分为 8 种。水文测站类型及其代码按规定取值。

四、功能实现

1、界面设计

采用主流的 MDI界面,集成菜单栏、工具栏、帮助于一体,最大限度的与用户日常操作同步。

2、           程序设计

1 )时段雨量报表的制作

用户在完成雨情测站设置后,即可进行时段雨量报表的制作,系统根据用户的设定,得到相关雨量站的时段降雨量信息,并与发报后的日雨量进行合理性对照。

注意的几点:

A、              降水时间:用户选择的“降水日期”默认为发报的日期。这也与我们水情人员日常发报习惯相一致;

B、               雨量的分级显示:系统设定降水量≥ 50mm ,显示为橙色;降水量≥ 100mm ,显示为红色;降水量≥ 200mm ,显示为蓝色;

C、               分屏显示:在用户窗口不能完全显示全时段降雨量时,用户可选择分屏显示方便对照,同时,高亮显示用户选定的数据行;

D、              合理性分析:全时段降雨量总和与发报的日量值应符合规定的逻辑关系,如出现逻辑错误,则在备注列以“ * ”标识,提醒用户进行数据分析。

部分程序代码如下:

dw_time.dataobject = "d_time"

dw_time.SetTransObject( SQLCA)

dw_pptn.SetTransObject(SQLCA)

integer li_m,li_colmn

long ll_i,ll_f

string ls_stcd,ls_date,ls_temp,ls_filter

if dw_info_user.rowcount( ) < 1 then

    messagebox(" 温馨提示: ","无雨量站基本信息,请设置后再执行查询操作! ")

    return

end if

open(w_wait)

dw_time.object.t_bt.text = ""+string(RelativeDate(date(dp_date.value),-1)) +" 9:00 "+mid(string(date(dp_date.value)),6)+" 8:00 时段降水量统计表 "

ls_filter = ' string(tm,"yyyy-mm-dd") >= "'+string(RelativeDate(date(dp_date.value),-1),"yyyy-mm-dd")+'" and string(tm,"yyyy-mm-dd") <= "'+string(RelativeDate(date(dp_date.value),1),"yyyy-mm-dd")+'"'

dw_pptn.Retrieve( )

dw_pptn.SetFilter( ls_filter)

dw_pptn.filter( )

 

for ll_i = 1 to dw_info_user.rowcount( )

    dw_time.InsertRow( 0)

    dw_time.SetItem( ll_i,"stcd",dw_info_user.GetItemString(ll_i,"stcd"))

    dw_time.SetItem( ll_i,"stnm",dw_info_user.GetItemString(ll_i,"stnm"))

    ls_stcd = dw_time.GetItemString( ll_i, "stcd")

    ls_date = string(RelativeDate(date(dp_date.value),-1)) + " 09:00:00"

        ll_f = dw_pptn.find( "stcd = '"+ls_stcd+"' and string(tm) = '"+ls_date+"'",1,dw_pptn.rowcount())

        if ll_f > 0 then

            ls_temp = string(dw_pptn.GetItemDecimal(ll_f,"drp"))

            dw_time.SetItem( ll_i,3, ls_temp)

        end if

         

        ls_date = string(date(dp_date.value)) //00 00量单独处理 注意: 0点的数据无“ 00: 00

        ll_f = dw_pptn.find( "stcd = '"+ls_stcd+"' and string(tm) = '"+ls_date+"'",1,dw_pptn.rowcount())

        if ll_f > 0 then

            ls_temp = string(dw_pptn.GetItemDecimal(ll_f,"drp"))

            dw_time.SetItem( ll_i,18, ls_temp)

        end if

   

    for li_m = 10 to 23

        ls_date = string(RelativeDate(date(dp_date.value),-1)) +" " + string(li_m) + ":00:00"

        ll_f = dw_pptn.find( "stcd = '"+ls_stcd+"' and string(tm) = '"+ls_date+"'",1,dw_pptn.rowcount())

        if ll_f > 0 then

            ls_temp = string(dw_pptn.GetItemDecimal(ll_f,"drp"))

            dw_time.SetItem( ll_i,li_m - 6, ls_temp)//4-17

        end if

    next

    for li_m = 1 to 8

        ls_date = string(date((dp_date.value))) +" 0" + string(li_m) + ":00:00"

        ll_f = dw_pptn.find( "stcd = '"+ls_stcd+"' and string(tm) = '"+ls_date+"'",1,dw_pptn.rowcount())

        if ll_f > 0 then

            ls_temp = string(dw_pptn.GetItemDecimal(ll_f,"drp"))

            dw_time.SetItem( ll_i,li_m + 18, ls_temp)//19-26

        end if

    next

    ls_date = string(date(dp_date.value)) + " 08:00:00"//8 点的量单独处理

    ll_f = dw_pptn.find( "stcd = '"+ls_stcd+"' and string(tm) = '"+ls_date+"'",1,dw_pptn.rowcount())

    if ll_f > 0 then

        ls_temp = string(dw_pptn.GetItemDecimal(ll_f,"dyp"))

        dw_time.SetItem( ll_i,"swcv", ls_temp)// 写入发报的日量

    end if

next

for ll_i = 1 to dw_time.Rowcount( )

   if   dec(dw_time.getitemstring ( ll_i,"compute_3")) > dec(dw_time.getitemString( ll_i, "swcv")) then

        dw_time.SetItem(ll_i,"yl_1","*")

    else

        dw_time.SetItem(ll_i,"yl_1","")

    end if

next

ls_filter = ""

dw_pptn.setfilter(ls_filter)

dw_pptn.filter( )

close(w_wait)

2) 墒情发报功能

系统集成了墒情发报功能,对发报方法进行了改进,采用直接填写墒情数据——系统自动转换库表结构代码发报,改变了过去先编写编码格式的墒情信息——再转换成库表结构代码发报的易错方式。

五、结束语

基于 PB12.0的雨水情信息管理系统,界面美观、操作简便,提高了日常的雨水情信息管理工作的效率,为防汛部门提供简便、快捷的资料起到了辅助作用。

 

审稿:刘国强

责任编辑:陈 超
主办单位: 河北省水文水资源勘测局 地址:石家庄市建华南大街85号
电话:0311-85696505  E-MAIL:[email protected]
Copyright @ 2002-2005 HBSW.NET,All Rights Reserved