魯 玲,盧紹宗
(廣西北海市氣象局,廣西北海 536000)
?
應用MUSIC 開發北海區域自動氣象站采集系統
魯 玲,盧紹宗
(廣西北海市氣象局,廣西北海 536000)
介紹了北海區域自動氣象站采集系統的功能設計、數據庫和數據表設計以及系統的實現,并列舉了該系統的幾個關鍵技術。該采集系統采用C#開發,通過氣象數據統一服務接口MUSIC調用全國綜合氣象信息共享系統CIMISS的地面資料,更新本地基礎氣象數據庫的自動站采集數據表,為北海市氣象現代化服務平臺提供可靠、準確的數據。通過業務應用證實,系統運行穩定、性能好。該系統對推進全國綜合氣象信息共享系統CIMISS業務化、實現業務系統與CIMISS的對接起到了示范作用,具有推廣價值。
MUSIC;自動氣象站采集系統;CIMISS;C#
隨著北海市氣象事業的不斷發展,建設北海市氣象現代化服務平臺被列為北海市氣象局的重點開發項目。該項目以提升北海市氣象局現代化建設的科技內涵、增強氣象部門業務服務能力、提高業務服務人員工作效率為目的,充分融合和利用現有業務系統,建成統一信息采集、統一數據存貯、統一加工分析處理、統一產品制作、統一信息發布的集約化、智能化的綜合氣象業務服務平臺。
針對中國氣象局推進全國綜合氣象信息共享系統(China Integrated Meteorological Information Service System,CIMISS)[1]業務化應用的要求,北海市氣象現代化服務平臺主動完成了與CIMISS的對接。數據庫系統是北海市氣象現代化服務平臺的基礎,為各種專業業務系統提供可靠、準確的數據。北海市氣象現代化服務平臺的數據庫系統采用SQL SERVER 2014管理,在當地創建基礎氣象數據庫、預警數據庫、預報數據庫和系統數據庫等[2]。北海區域自動氣象站采集系統是北海市氣象現代化服務平臺的一個后臺數據處理軟件,該采集系統通過氣象數據統一服務接口(Meteorological Unified Service Interface Community,MUSIC)調用CIMISS的北海區域地面資料,更新當地基礎氣象數據庫的自動站采集數據表和系統數據庫的采集時間表,為服務平臺的數據監控和實況信息展示模塊提供數據支撐。筆者介紹了該系統的功能設計、數據庫和數據表設計以及系統的實現,并列舉了該系統的幾個關鍵技術。
1.1 系統功能設計 CIMISS是一套覆蓋全國的集數據收集與分發、質量控制與產品生成、存儲管理、共享服務于一體的國家和省級2級氣象信息共享業務平臺,以滿足目前和未來現代氣象業務、科研和服務對氣象信息的需求,發展繼“9210工程”以來的新一代氣象信息系統為目標,為氣象部門及相關行業用戶提供綜合氣象探測資料和氣象產品的共享服務[3]。氣象數據統一服務接口(MUSIC)基于國省統一的數據環境CIMISS,面向氣象業務和科研,提供全國統一、標準、豐富的數據訪問服務和應用編程接口(API),為國、省、地、縣各級應用系統提供唯一權威的數據接入服務。MUSIC針對氣象應用系統,提供多種不同的服務方式,包括客戶端調用服務、web service、REST服務和腳本服務。其中web service一般使用成熟的第三方工程實現,在CIMISS系統中使用axis2來實現。
北海區域自動氣象站采集系統開發應用了MUSIC,采用MUSIC提供的web service方式,從服務器獲取wsdl服務,通過API接口賬號使用callAPI_to_serializedStr方法,設置參數并調用接口getSurfEleByTimeAndStaID,按時間、站號檢索地面數據要素,獲取北海區域的地面逐小時資料和地面分鐘降水資料,返回JSON格式的序列化字符串。經過進一步處理,實現自動氣象站觀測數據本地入庫存儲。
1.2 數據庫與數據表設計 為了對氣象要素進行統一規范的存儲和服務,保證氣象數據的一致性和準確性,基礎氣象數據庫(db_bh_qx)和系統數據庫(db_bh_xt)的設計參考標準《QX/T 102-2009 氣象資料分類與編碼》和《QX/T 133-2011 氣象要素分類與編碼》[4-5]。建庫后,在基礎氣象數據庫(db_bh_qx)中創建自動站采集數據表(MsgMediumSmallScale)、自動站采集數據臨時表(MsgMediumSmallScaleTemp)和北海自動站站點信息表(SmallScaleStation)等數據表。在系統數據庫(db_bh_xt)中創建系統采集時間表(Collect_Time)[6]。其中,自動站采集數據表(MsgMediumSmallScale)用于存儲采集到的自動氣象站觀測要素等數據。
1.3 系統運行環境 系統開發平臺為Microsoft Visual Studio 2010,編程使用C#語言,運行于Microsoft Windows Server 2012 R2 Standard,數據庫管理軟件為SQL SERVER 2014。
2.1 自定義類的設計 系統開發時設計了處理類AutoStation和AutoStationEntity,工具類DBHelperTool,配置類dbConfig和IniFile,通用類DBHelper和Loghelper。在工具類中添加WebsUtil類和Ws類。類的設計及相關說明如表1所示。

表1 類的設計及相關說明
在AutoStationEntity類中定義11個變量(stationId、stationName、stationLongitude、stationLatitude、stationAltitude、stationObserveElement、stationCity、stationCounty、stationDrainageArea、stationJB、stationCollect),然后在該類中自定義11個屬性,分別用來表示自動站的站點編號、站點名稱、站點經度、站點緯度、站點海拔、站點要素、站點所屬市、站點所屬縣、站點流域、站點級別和站點是否采集標志格式。 在AutoStation類的selectStation方法中首先實例化一個Hashtable對象hashtable,接著讀取北海自動站站點信息表(SmallScaleStation)的列值,將站點編號列值轉換為string類型后賦值給stationid;然后實例化AutoStationEntity類的一個對象autoStation,并根據讀取到的列值分別給對象autoStation定義的站點編號、站點名稱等11個屬性賦值;向hashtable中添加元素,該元素的鍵為stationid,值為autoStation;最后返回hashtable。
2.2 自動氣象站數據采集流程 OperationAutoStationData 是AutoStation類的一個方法,用于處理自動站數據,其工作流程如圖1所示。
2.3 項目配置 在配置文件CollectPath.ini中添加基礎氣象數據庫(db_bh_qx)和系統數據庫(db_bh_xt)的配置信息,包括它們的數據源IP地址、數據庫名稱、登錄用戶名及密碼等。通過dbConfig類可以讀取這些配置信息。在項目中添加app.config文件,在appSettings配置節添加鍵serverIP并設置IP地址,通過調用ws類從該指定IP地址的服務器上即可獲取wsdl服務。
2.4 系統界面 系統運行后,首先創建哈希表stationTable并初始化為null,用于存放區域自動氣象站站點信息。新建自動站處理類AutoStation對象,調用Createinstance方法創建實例并賦值給該對象[7]。連接系統數據庫(db_bh_xt)表Collect_Time,使用GetLasterCollectTime方法獲取自動氣象站最新采集時間,若該采集時間不為Null,則將最新采集時間賦值給日期控件。系統界面如圖2所示。

圖1 區域自動氣象站數據采集流程Fig.1 Collection process of regional automatic weather station data

圖2 北海區域自動氣象站采集系統界面Fig.2 The interface of collection system of Beihai regional automatic weather stations
通過系統界面的日期控件可以設置采集時間,點擊“修改”按鈕可將系統數據庫(db_bh_xt)表Collect_Time的采集時間更改為日期控件設定的時間值。點擊“啟動采集”按鈕,若stationTable表行數為0,則使用AutoStation類的selectStation方法從表SmallScaleStation獲取北海區域自動站站點信息。然后按采集時間和自動站站號通過MUSIC獲取相應的要素數據,將數據進行處理后保存到基礎氣象數據庫(db_bh_qx)的自動站采集數據表(MsgMediumSmallScale)和自動站采集數據臨時表(MsgMediumSmallScaleTemp),并更新系統采集時間表(Collect_Time)的采集時間。在實際運行中,將北海區域自動氣象站采集系統可執行文件寫進批處理文件,并設置該批處理文件每隔15 min自動運行1次。通過對基礎氣象數據庫(db_bh_qx)的訪問,在北海市氣象現代化服務平臺上可以查詢到北海區域自動站的實況數據(圖3)。
3.1 數據契約的使用 數據契約(DataContract)是服務器端和客戶端之間要傳送的自定義數據類型。一旦聲明一個類型為DataContract,該類型就可以被序列化在服務器端和客戶端之間傳送。根據實際情況,需要把每一個要傳送的成員聲明為DataMember。系統開發時,在WebsUtil類定義數據契約SK和Rain, 區域自動氣象站數據采集處理過程要用到這2種數據契約。在數據契約SK和Rain中將相關的要素字段代碼聲明為DataMember。根據MUSIC中的要素代碼定義,在數據契約SK中聲明Station_Id_C、Datetime、WIN_D_Avg_2mi、WIN_S_Avg_2mi、WIN_D_Avg_10mi等53個DataMember,在數據契約Rain中聲明Station_Id_C、Datetime、PRE等6個DataMember。

圖3 北海區域自動站實況數據查詢Fig.3 Live data query of Beihai regional automatic weather stations
3.2 JavaScriptSerializer類的使用 JavaScriptSerializer類位于System.Web.Script.Serialization命名空間下。客戶端的序列化與反序列化能力由JavaScriptSerializer類的Serialize和Deserialize 2個方法提供。通過web service方式調用方法callAPI_to_serializedStr,并將獲得的JSON字符串轉換為List
param = "userId=BENN_XXXX_XXXXXX" /*1.1 用戶名&密碼*/
+ "&pwd=XXXXXX"
+ "&interfaceId=getSurfEleByTimeAndStaID" /* 1.2 接口ID */
+ "&dataCode=SURF_CHN_MUL_HOR" /* 1.3 必選參數(按需加可選參數) */
//資料:中國地面逐小時
+ "&elements=Station_Id_C,Datetime,WIN_D_Avg_2mi,WIN_S_Avg_2mi,WIN_D_Avg_10mi,WIN_S_Avg_10mi, WIN_D_S_Max,WIN_S_Max,WIN_S_Max_OTime,WIN_D_INST,WIN_S_INST,WIN_D_INST_Max,WIN_S_Inst_Max,WIN_S_INST_Max_OTime,PRE_1h,TEM,TEM_Max,TEM_Max_OTime,TEM_Min,TEM_Min_OTime,RHU,RHU_Min,RHU_Min_OTIME,VAP,DPT,PRS,PRS_Max,PRS_Max_OTime,PRS_Min,PRS_Min_OTime,LGST,LGST_Max,LGST_Max_OTime,LGST_Min,LGST_Min_OTime,GST,GST_Max,GST_Max_Otime,GST_Min,GST_Min_OTime,GST_5cm,GST_10cm,GST_15cm,GST_20cm,GST_40Cm,GST_80cm,GST_160cm,GST_320cm,EVP_Big,PRS_Sea,VIS_HOR_10MI,VIS_Min,VIS_Min_OTime,Lat,Lon,Alti" //檢索要素:站號、站名、小時降水、氣壓、相對濕度、能見度、2 min平均風速、2 min風向等
+ "×=" + datetime.ToString("yyyyMMddHH0000") //檢索時間
+ "&staIds=" + strStationId
+ "&orderby=Station_ID_C:ASC" //排序:按照站號從小到大
+ "&limitCnt=300" //返回最多記錄數
+ "&dataFormat=json"; /* 1.4 序列化格式 */
……
WebsUtil websUtil = new WebsUtil();
string rstData = websUtil.getWsString("callAPI_to_serializedStr", param);
int index = rstData.IndexOf(""DS"");
rstData = rstData.Substring(index + 5, rstData.Length - index - 6);
JavaScriptSerializer js = new JavaScriptSerializer();
List
3.3 SqlHelper類的使用 SqlHelper類位于System.Data.SqlClient命名空間下,是對數據庫操作方法進行封裝的類。SqlHelper類的ExecuteNonQuery方法用于執行不返回任何行或值的命令,如非查詢類SQL語句。SqlHelper類的ExecuteReader方法執行查詢類的SQL語句或存儲過程,用于返回SqlDataReader對象,該對象包含由某一命令返回的結果集。ExecuteScalar方法通過已有的數據庫連接執行SqlCommand,返回值是該命令返回的第1行的第1列。
在方法selectStation、GetLasterCollectTime、OperationAutoStationData中使用了SqlHelper類。部分程序代碼如下:
String strsql = "SELECT [StationID],[StationName],[Province],[City],[County],[Longitude],[Latitude],[Altitude],[StationModel],[ObserveElement],[DrainageArea],[Tributaries],[StartTime],[Jb] FROM [SmallScaleStation] ";
SqlDataReader sqlreader = SqlHelper.ExecuteReader(conn, CommandType.Text, strsql);
3.4 方法重載 方法重載是指調用同一方法名,但各方法中參數的數據類型、個數或順序不同。只要類中有2個以上的同名方法,且使用的參數類型、個數或順序不同,調用時編譯器就可以判斷在哪種情況下調用哪種方法[7]。在設計DBHelper類的方法ExecuteNonQuery時用到了方法重載。程序關鍵代碼如下:
public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, string commandText)
// 執行指定數據庫連接對象的命令
{
return ExecuteNonQuery(connection, commandType, commandText, (SqlParameter[])null);
}
北海區域自動氣象站采集系統自2016年5月在北海市氣象局進行業務試運行以來,能正常采集北海區域41個自動站的地面逐小時資料和地面分鐘降水資料,系統運行穩定、性能好,為北海市氣象現代化服務平臺的數據監控和實況信息展示模塊提供了數據支撐。該系統對推進全國綜合氣象信息共享系統CIMISS業務化、實現業務系統與CIMISS的對接起到了示范作用,具有推廣價值。
[1] 熊安元,趙芳,王穎,等.全國綜合氣象信息共享系統的設計與實現[J].應用氣象學報,2015,26(4):500-512.
[2] 李集明,王國復.氣象數據庫系統總體設計綜述[J].氣象科技,2007,35(Sl):1-5.
[3] 王旻燕,鄧莉,趙芳,等.CIMISS中氣象衛星數據存儲和服務模型[J].安徽農業科學,2012,40(8):4785-4789.
[4] 國家氣象信息中心.氣象資料分類與編碼:QX/T 102—2009[S].北京:氣象出版社,2009.
[5] 國家氣象信息中心.氣象要素分類與編碼:QX/T 133—2011[S].北京:氣象出版社,2011.
[6] 于平,李漢彬,段海花,等.市級自動氣象站數據庫顯示系統的設計與實現[J].廣東氣象,2008,30(6):57-58.
[7] 王小科.C#開發實戰寶典[M].北京:清華大學出版社,2012:159.
Development of Collection System of Beihai Regional Automatic Weather Stations Using MUSIC
LU Ling,LU Shao-zong
(Beihai Meteorological Bureau, Beihai ,Guangxi 536000)
This paper introduced the function design, the design of database and data table and system realization of collection system of Beihai regional automatic weather stations, and enumerated several key technologies of the system.The collection system was implemented by C# programming language and got the surface data of China integrated meteorological information service system using meteorological unified service interface community,updated the collection data table of automatic stations of local fundamental meteorological database,which provided accurate and reliable data for Beihai meteorological modernization service platform. The operational application indicated the system performed stably and had good characteristics. The system had a demonstration for promoting operational application of CIMISS and achieving the integration of business systems and CIMISS in Guangxi. The system had promotion value.
MUSIC;Collection system of automatic weather stations;CIMISS;C#
北海市科學技術局項目(北科合201503004,北科合20160 3001)。
魯玲(1974- ),女,廣西北海人,工程師,從事氣象信息化建設工作。
2016-09-05
S 163+.7
A
0517-6611(2016)32-0179-05