溫舟 婁芳蕾 史虹婷 賈寧 徐玉秀 高銘
摘要:根據(jù)錦州市現(xiàn)在氣象業(yè)務(wù)的實際情況,利用Visual Basic語言,在.net4.0框架及SQLServer2008數(shù)據(jù)庫的支持下,調(diào)用遼寧省CIMISS數(shù)據(jù)環(huán)境庫的數(shù)據(jù),開發(fā)了錦州市自動站數(shù)據(jù)實時顯示報警平臺。該平臺可實現(xiàn)錦州地區(qū)自動站數(shù)據(jù)當前實況顯示,可選時段查詢,具體數(shù)據(jù)查詢,降水等值線圖以及達到預警閾值報警等功能。該平臺的開發(fā)有效地提高了錦州市氣象臺的工作效率,有效地提高了預報預警質(zhì)量與氣象服務(wù)能力。
關(guān)鍵詞:自動站;CIMISS;.net4.0編程;SQL數(shù)據(jù)庫系統(tǒng)
中圖分類號:TP311 文獻標識碼:A
文章編號:1009-3044(2019)11-0101-03
1 背景
自動站實時數(shù)據(jù)的顯示與報警是提高預報準確率及氣象服務(wù)效果的重要保障,此前我市因為自動站廠家問題,具有兩個自動站數(shù)據(jù)庫,分別為長春廠與華云廠,也因此有兩個查看自動站數(shù)據(jù)的顯示平臺。根據(jù)遼寧省氣象局安排,目前我市自動站中心站已遷移至遼寧省氣象局,我市原有的自動站顯示平臺已經(jīng)無法運轉(zhuǎn),為了滿足春播及汛期服務(wù)要求,特制作開發(fā)此平臺。
此平臺數(shù)據(jù)利用氣象數(shù)據(jù)統(tǒng)一服務(wù)接口(MUSIC)獲取,氣象數(shù)據(jù)統(tǒng)一服務(wù)接口(MUSIC:Meteorological Unified Service Interface Community),基于國省統(tǒng)一的數(shù)據(jù)環(huán)境(CIMISS),面向氣象業(yè)務(wù)和科研,提供全國統(tǒng)一、標準、豐富的數(shù)據(jù)訪問服務(wù)和應(yīng)用編程接口(API),為國、省、地、縣各級應(yīng)用系統(tǒng)提供唯一權(quán)威的數(shù)據(jù)接入服務(wù)。
2 平臺概述
2.1 平臺功能
平臺主要包括以下內(nèi)容:后臺數(shù)據(jù)處理,自動站數(shù)據(jù)客戶端顯示,預警報警提醒及雨量圖制作等功能。
2.2 平臺開發(fā)環(huán)境
平臺開發(fā)語言使用Visual Basic與Matlab,開發(fā)環(huán)境為Visual Studio2010[1-3]、.net4.0、Matlab2008a,在網(wǎng)絡(luò)數(shù)據(jù)庫SQLServer2008[4]的支持下,由此開發(fā)的自動站數(shù)據(jù)實時顯示報警平臺。
2.3 平臺設(shè)計
本平臺開發(fā)共包含兩部分。
2.3.1 后臺數(shù)據(jù)處理
后臺數(shù)據(jù)處理包含小時數(shù)據(jù)處理及分鐘數(shù)據(jù)處理兩部分。其中小時數(shù)據(jù)包括小時內(nèi)最高、最低氣溫及出現(xiàn)時間,最大風、極大風風向風速及出現(xiàn)時間,1小時累計降水,最小能見度及出現(xiàn)時間等要素;分鐘數(shù)據(jù)包括當前溫度、風向風速、降水、能見度等要素。
2.3.2 客戶端顯示
客戶端數(shù)據(jù)顯示則分別為各要素(溫度、風、降水、能見度)當前實況顯示,可選時段查詢,具體數(shù)據(jù)查詢,降水等值線圖以及達到預警閾值報警等內(nèi)容。
3 平臺具體實現(xiàn)
3.1 后臺數(shù)據(jù)處理
利用SQL Server2008數(shù)據(jù)庫建立小時數(shù)據(jù)要素表、分鐘數(shù)據(jù)要素表以及自動站基本信息表。自動站基本信息表包含Station_C、Station_N、經(jīng)緯度等5列,小時數(shù)據(jù)要素表包含Time、Station_C、Tem_MAX等15 列,分鐘數(shù)據(jù)要素表包含ime、Station_C、Tem 、PRE等7列。
利用VB.Net語言建立兩個類,HourData及MinuteData,設(shè)置與數(shù)據(jù)庫表中相對應(yīng)的只讀屬性,包含1個Download方法,用來從CIMISS服務(wù)器中讀取數(shù)據(jù)。在數(shù)據(jù)取回出現(xiàn)錯誤時,設(shè)置屬性值為Nothing,添加至SQL Server2008數(shù)據(jù)庫中顯示為NULL。需要說明的是,自動站分鐘數(shù)據(jù)要素在CIMISS服務(wù)器不同的表中,需要分別進行讀取。其中分鐘降水量為累積降水量,需自行運算生成5分鐘非累積降水量。
利用VB.Net語言將自動站基本信息表中每一站號進行讀取,放置1個Timer控件,每秒觸發(fā)一次Tick事件,每五分鐘及每小時利用ForEach循環(huán),將每一自動站數(shù)據(jù)自CIMISS數(shù)據(jù)庫中讀取并寫入本地數(shù)據(jù)庫表中。同時隱藏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 自動站數(shù)據(jù)顯示及報警功能
利用VB.net語言將每一自動站基本信息表讀入自定義的StationInfo結(jié)構(gòu)中,并建立文本及圖形兩個數(shù)組與其相對應(yīng),以便于地圖上進行顯示。
為各要素(溫度、風、降水、能見度)設(shè)置當前實況顯示,可選時段查詢,具體數(shù)據(jù)查詢等按鈕,觸發(fā)相應(yīng)的Click事件后,于本地數(shù)據(jù)庫中讀取相應(yīng)的數(shù)據(jù),并與文本數(shù)組中顯示。
根據(jù)遼寧省氣象局文件相關(guān)要求,在小時降水量達到20mm;累計降水量達到40mm、80mm、100mm、150mm、200mm、250mm、300mm;溫度達到35℃以上;風速達到所設(shè)置閾值;能見度達到所設(shè)置閾值時,本平臺會出現(xiàn)報警提示音,并將其站名變?yōu)榧t色同時顯示在主界面右側(cè)空白處。部分代碼如下:
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環(huán)境,實現(xiàn)軟件的快速開發(fā)。
利用Matlab語言將等值線繪制方法寫成m文件,在MATLAB的命令窗口中輸入:>> deploytool,設(shè)置好項目名,并指定目標組件的形式是.NET Assembly,然后確定,將其封裝在一個類塊(dll文件)中,以供主程序進行調(diào)用。主程序在點擊雨情圖制作后,即可根據(jù)所選時間段進行雨情圖繪制。
4 平臺應(yīng)用
本平臺自2017年5月開始在錦州市氣象臺進行測試使用,6月在錦州地區(qū)各縣市氣象局正式投入使用。此平臺投入使用后,可以一目了然地看到錦州地區(qū)各鄉(xiāng)鎮(zhèn)自動站實況溫度、風、降水、能見度等數(shù)據(jù),能夠生成降水的等值線圖,并可在達到預警閾值時進行報警。在2017年汛期期間,成功的對每次降水進行監(jiān)控及報警,有效地提高了預報預警質(zhì)量與氣象服務(wù)能力。
5 結(jié)束語及討論
1)本平臺實現(xiàn)了錦州地區(qū)自動站各要素(溫度、風、降水、能見度)當前實況顯示,可選時段查詢,具體數(shù)據(jù)查詢,降水等值線圖以及達到預警閾值報警等功能。
2)本平臺目前正在錦州地區(qū)良好使用,有效地提高了預報預警質(zhì)量與氣象服務(wù)能力。
3)本平臺后臺數(shù)據(jù)處理部分在遇到網(wǎng)絡(luò)問題時,無法從CIMISS數(shù)據(jù)庫取回數(shù)據(jù),且暫時無補傳手段,影響部分功能應(yīng)用。
4)由于不是專業(yè)的編程人員,平臺的美化方面略顯不足,且仍舊存在著暫時未發(fā)現(xiàn)的bug,針對這些存在的問題,將繼續(xù)對本平臺隨時進行更新和維護。
參考文獻:
[1] 威利斯, 紐薩姆. Visual Basic2010入門經(jīng)典[M]. 6版. 北京: 清華大學出版社, 2011.
[2] James Foxall. Visual Basic2010入門經(jīng)典[M]. 北京: 人民郵電出版社, 2011.
[3] Bill Sheldon, Billy Hollis, Kent Sharkey, 等. Visual Basic 2010 NET4高級編程[M]. 6版. 北京: 清華大學出版社, 2011.
[4] 郭鄭州, 陳軍紅. SQL Server2008完全學習手冊[M]. 北京: 清華大學出版社, 2011.
【通聯(lián)編輯:謝媛媛】