标题 | 锦州地区自动站数据实时显示报警平台设计与实现 |
范文 | 温舟 娄芳蕾 史虹婷 贾宁 徐玉秀 高铭 摘要:根据锦州市現在气象业务的实际情况,利用Visual Basic语言,在.net4.0框架及SQLServer2008数据库的支持下,调用辽宁省CIMISS数据环境库的数据,开发了锦州市自动站数据实时显示报警平台。该平台可实现锦州地区自动站数据当前实况显示,可选时段查询,具体数据查询,降水等值线图以及达到预警阈值报警等功能。该平台的开发有效地提高了锦州市气象台的工作效率,有效地提高了预报预警质量与气象服务能力。 关键词:自动站;CIMISS;.net4.0编程;SQL数据库系统 中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2019)11-0101-03 1 背景 自动站实时数据的显示与报警是提高预报准确率及气象服务效果的重要保障,此前我市因为自动站厂家问题,具有两个自动站数据库,分别为长春厂与华云厂,也因此有两个查看自动站数据的显示平台。根据辽宁省气象局安排,目前我市自动站中心站已迁移至辽宁省气象局,我市原有的自动站显示平台已经无法运转,为了满足春播及汛期服务要求,特制作开发此平台。 此平台数据利用气象数据统一服务接口(MUSIC)获取,气象数据统一服务接口(MUSIC:Meteorological Unified Service Interface Community),基于国省统一的数据环境(CIMISS),面向气象业务和科研,提供全国统一、标准、丰富的数据访问服务和应用编程接口(API),为国、省、地、县各级应用系统提供唯一权威的数据接入服务。 2 平台概述 2.1 平台功能 平台主要包括以下内容:后台数据处理,自动站数据客户端显示,预警报警提醒及雨量图制作等功能。 2.2 平台开发环境 平台开发语言使用Visual Basic与Matlab,开发环境为Visual Studio2010[1-3]、.net4.0、Matlab2008a,在网络数据库SQLServer2008[4]的支持下,由此开发的自动站数据实时显示报警平台。 2.3 平台设计 本平台开发共包含两部分。 2.3.1 后台数据处理 后台数据处理包含小时数据处理及分钟数据处理两部分。其中小时数据包括小时内最高、最低气温及出现时间,最大风、极大风风向风速及出现时间,1小时累计降水,最小能见度及出现时间等要素;分钟数据包括当前温度、风向风速、降水、能见度等要素。 2.3.2 客户端显示 客户端数据显示则分别为各要素(温度、风、降水、能见度)当前实况显示,可选时段查询,具体数据查询,降水等值线图以及达到预警阈值报警等内容。 3 平台具体实现 3.1 后台数据处理 利用SQL Server2008数据库建立小时数据要素表、分钟数据要素表以及自动站基本信息表。自动站基本信息表包含Station_C、Station_N、经纬度等5列,小时数据要素表包含Time、Station_C、Tem_MAX等15 列,分钟数据要素表包含ime、Station_C、Tem 、PRE等7列。 利用VB.Net语言建立两个类,HourData及MinuteData,设置与数据库表中相对应的只读属性,包含1个Download方法,用来从CIMISS服务器中读取数据。在数据取回出现错误时,设置属性值为Nothing,添加至SQL Server2008数据库中显示为NULL。需要说明的是,自动站分钟数据要素在CIMISS服务器不同的表中,需要分别进行读取。其中分钟降水量为累积降水量,需自行运算生成5分钟非累积降水量。 利用VB.Net语言将自动站基本信息表中每一站号进行读取,放置1个Timer控件,每秒触发一次Tick事件,每五分钟及每小时利用ForEach循环,将每一自动站数据自CIMISS数据库中读取并写入本地数据库表中。同时隐藏Form窗口,以达到后台处理目的。部分程序代码如下: For Each st As String In station Try If table = "MinuteData" Then data1 = New MinuteData(st, MiTime) ElseIf table = "HourData" Then data1 = New HourData(st) End If Dim t As Type Dim PIS() As System.Reflection.PropertyInfo Dim Column As New StringBuilder Dim Value As New StringBuilder t = data1.GetType PIS = t.GetProperties() For Each pi As System.Reflection.PropertyInfo In PIS If Not IsNothing(pi.GetValue(data1, Nothing)) Then Column.Append(pi.Name & ",") Value.Append(pi.GetValue(data1, Nothing).ToString & "','") End If Next Column.Remove(Column.Length - 1, 1) Value.Remove(Value.Length - 3, 3) _objDataAdapter.SelectCommand.CommandText = "INSERT INTO " & table & " (" & Column.ToString & ") " & "VALUES('" & Value.ToString & "')" _objDataAdapter.SelectCommand.ExecuteNonQuery() Catch ex As Exception Dim i As Integer = station2.Length station2(i - 1) = st ReDim Preserve station2(i + 1) Continue For End Try data1.close() data1.Dispose() Next 3.2 客户端显示 3.2.1 自动站数据显示及报警功能 利用VB.net語言将每一自动站基本信息表读入自定义的StationInfo结构中,并建立文本及图形两个数组与其相对应,以便于地图上进行显示。 为各要素(温度、风、降水、能见度)设置当前实况显示,可选时段查询,具体数据查询等按钮,触发相应的Click事件后,于本地数据库中读取相应的数据,并与文本数组中显示。 根据辽宁省气象局文件相关要求,在小时降水量达到20mm;累计降水量达到40mm、80mm、100mm、150mm、200mm、250mm、300mm;温度达到35℃以上;风速达到所设置阈值;能见度达到所设置阈值时,本平台会出现报警提示音,并将其站名变为红色同时显示在主界面右侧空白处。部分代码如下: Dim Belongs As String If County = "锦州" Then Belongs = "" Else Belongs = " and Station.county ='" & County & "'" End If Dim _objDataSet As New DataSet Dim sqlR As New SQL If tabels = "M" Then ReDim SelText(2) SelText(0) = "declare @LDT datetime set @LDT = (select max(time) from MinuteData) SELECT Station.Station_N , minutedata.Station_C ,@LDT,sum(MinuteData.pre) as '过去1小时降水' FROM MinuteData INNER JOIN Station on MinuteData.Station_C =Station.Station_C where Time between DATEADD (HH ,-1 ,@LDT) and @LDT group by MinuteData.Station_C , Station.Station_N , Station.County having sum(MinuteData.pre)>20 and sum(MinuteData.pre)<9999" & Belongs SelText(1) = "SELECT Station.Station_N , minutedata.Station_C ,MinuteData.Time ,MinuteData.Wind_V as '当前风速' FROM MinuteData INNER JOIN Station on MinuteData.Station_C =Station.Station_C where Time =(SELECT MAX(Time) FROM MinuteData) and Wind_V>" & TxtWind_S.Text & "and Wind_V<999" & Belongs SelText(2) = "SELECT Station.Station_N , minutedata.Station_C ,MinuteData.Time ,MinuteData.Vis as'当前能见度' FROM MinuteData INNER JOIN Station on MinuteData.Station_C =Station.Station_C where Time =(SELECT MAX(Time) FROM MinuteData) and Vis<" & TxtVis.Text & Belongs ElseIf tabels = "H" Then ReDim SelText(9) SelText(0) = "declare @LDT datetime set @LDT = (select max(time) from hourData) SELECT Station.Station_N , hourdata.Station_C , @LDT ,sum(HourData.R_1h) as '过去24小时降水' FROM hourData INNER JOIN Station on hourData.Station_C =Station.Station_C where Time between DATEADD (HH ,-24 ,@LDT) and @LDT group by hourData.Station_C ,Station.Station_N , Station.County having sum(HourData.R_1h)>40 and sum(HourData.R_1h)<9999" & Belongs SelText(9) = "SELECT Station.Station_N , Hourdata.Station_C ,HourData.Time ,HourData.Vis_Min as '過去1小时最小能见度' FROM hourData INNER JOIN Station on hourData.Station_C =Station.Station_C where Time =(SELECT MAX(Time) FROM hourData)and Vis_Min<" & TxtVis.Text & Belongs End If 3.2.2 雨情图绘制 雨情图绘制部分采用VB.net语言与Matlab语言混合编程方式,主程序为VB.net语言。这种方法实施起来显得有些复杂,但是可以完全脱离MATLAB环境,实现软件的快速开发。 利用Matlab语言将等值线绘制方法写成m文件,在MATLAB的命令窗口中输入:>> deploytool,设置好项目名,并指定目标组件的形式是.NET Assembly,然后确定,将其封装在一个类块(dll文件)中,以供主程序进行调用。主程序在点击雨情图制作后,即可根据所选时间段进行雨情图绘制。 4 平台应用 本平台自2017年5月开始在锦州市气象台进行测试使用,6月在锦州地区各县市气象局正式投入使用。此平台投入使用后,可以一目了然地看到锦州地区各乡镇自动站实况温度、风、降水、能见度等数据,能够生成降水的等值线图,并可在达到预警阈值时进行报警。在2017年汛期期间,成功的对每次降水进行监控及报警,有效地提高了预报预警质量与气象服务能力。 5 结束语及讨论 1)本平台实现了锦州地区自动站各要素(温度、风、降水、能见度)当前实况显示,可选时段查询,具体数据查询,降水等值线图以及达到预警阈值报警等功能。 2)本平台目前正在锦州地区良好使用,有效地提高了预报预警质量与气象服务能力。 3)本平台后台数据处理部分在遇到网络问题时,无法从CIMISS数据库取回数据,且暂时无补传手段,影响部分功能应用。 4)由于不是专业的编程人员,平台的美化方面略显不足,且仍旧存在着暂时未发现的bug,针对这些存在的问题,将继续对本平台随时进行更新和维护。 参考文献: [1] 威利斯, 纽萨姆. Visual Basic2010入门经典[M]. 6版. 北京: 清华大学出版社, 2011. [2] James Foxall. Visual Basic2010入门经典[M]. 北京: 人民邮电出版社, 2011. [3] Bill Sheldon, Billy Hollis, Kent Sharkey, 等. Visual Basic 2010 NET4高级编程[M]. 6版. 北京: 清华大学出版社, 2011. [4] 郭郑州, 陈军红. SQL Server2008完全学习手册[M]. 北京: 清华大学出版社, 2011. 【通联编辑:谢媛媛】 |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。