吳頻頻,李長明
(1.洛陽職業(yè)技術(shù)學(xué)院 信息技術(shù)與城建學(xué)院,河南 洛陽 471000;2.凱邁(洛陽)環(huán)測有限公司,河南 洛陽 471000)
近年來農(nóng)業(yè)小氣候站、公路交通氣象站、能見度觀測站、大氣電場監(jiān)測站等區(qū)域性自動觀測站被越來越多的建設(shè)和投用,這極大地促進(jìn)了局地氣象觀測業(yè)務(wù)的發(fā)展和利用,由此衍生出更加豐富的專業(yè)氣象服務(wù)[1]。區(qū)別于組成國家天氣監(jiān)測網(wǎng)的基準(zhǔn)站、基本站、一般站,針對這些不同類型的新型自動氣象觀測站,氣象行業(yè)并沒有統(tǒng)一的設(shè)計及開發(fā)規(guī)范。這些新型自動站大多根據(jù)市場需要,靈活配置傳感器,配套開發(fā)不同功能的應(yīng)用軟件[2-5]。由于軟件設(shè)計目標(biāo)不統(tǒng)一,就造成實現(xiàn)功能的千差萬別,數(shù)據(jù)結(jié)構(gòu)的迥異,不同類型的自動站數(shù)據(jù)無法融合利用,甚至同一廠家的不同類型設(shè)備間的數(shù)據(jù)結(jié)構(gòu)也不相同,無法實現(xiàn)觀測資源的整合利用。
隨著各類區(qū)域氣象觀測業(yè)務(wù)的發(fā)展,業(yè)務(wù)部門對軟件的需求也不再僅僅是要求能夠看到實時數(shù)據(jù)[6-7],而是希望能與現(xiàn)有觀測業(yè)務(wù)軟件融合,上傳至國家數(shù)據(jù)中心,分享給其他政府部門。這就要求這些應(yīng)用軟件具備更高的集成能力,更強的數(shù)據(jù)交換功能,更規(guī)范的軟件架構(gòu)。
采用軟件設(shè)計模式,可以共享過去成功的經(jīng)驗,降低解決問題的復(fù)雜度,提高軟件設(shè)計的模塊化水平[8-11]。著眼于區(qū)域自動氣象站的基本業(yè)務(wù)建設(shè)過程中的問題,綜合分析業(yè)務(wù)需求,結(jié)合軟件設(shè)計模式和開發(fā)技術(shù),研究了一套規(guī)范的通用的應(yīng)用軟件架構(gòu)。
應(yīng)用軟件具有自動組網(wǎng)和監(jiān)控管理的功能,主要功能[12-14]要求如下:
1)設(shè)置及查詢設(shè)備的基礎(chǔ)信息,如設(shè)備編號、通訊參數(shù)等。
2)設(shè)置資料傳輸模式,上傳間隔和時鐘校準(zhǔn)。
3)設(shè)置觀測要素開關(guān),設(shè)置遺漏資料補傳。
4)接收觀測數(shù)據(jù),對數(shù)據(jù)解析和處理。
5)報警功能,如觀測數(shù)據(jù)異常、傳感器故障,通訊故障等。
6)數(shù)據(jù)顯示功能,如實時數(shù)據(jù)、異常狀態(tài)報警等。
7)數(shù)據(jù)存儲,數(shù)據(jù)交換。
8)統(tǒng)計分析功能。
軟件架構(gòu)也稱為軟件體系結(jié)構(gòu),是一系列相關(guān)的抽象模式,用于指導(dǎo)軟件系統(tǒng)各個方面的設(shè)計[15-17]。首先,可將軟件在功能上分層,各層在邏輯上可以保持相對獨立,使得整個系統(tǒng)邏輯更加清晰,能提高系統(tǒng)和軟件的可維護(hù)性和可擴展性。其次,在各層中遵循軟件設(shè)計的基本原則即信息隱蔽性和模塊獨立性,設(shè)計出獨立性比較強的高內(nèi)聚低耦合的模塊。最后,通過使用設(shè)計模式,在模塊中進(jìn)行邏輯設(shè)計和編碼實現(xiàn)。設(shè)計模式包括創(chuàng)建型模式、結(jié)構(gòu)型模式和行為型模式三大類幾十種模式,常用的模式有模板方法、抽象工廠方法、策略、裝飾者、觀察者、訪問者和組合等模式[11]。抽象工廠模式,是一種面向?qū)ο蟮脑O(shè)計模式,指提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需在編碼階段指定具體實現(xiàn)它們的類[18-20]。
本文即以分層及模塊化思想為指導(dǎo),采用抽象工廠設(shè)計模式,利用插件控制器等方法實現(xiàn)通用區(qū)域自動氣象觀測站系統(tǒng)的設(shè)計和實踐應(yīng)用。按照分層思想,從低往高將軟件功能分為基礎(chǔ)服務(wù)層、業(yè)務(wù)服務(wù)層、用戶界面層等3個層次。按照模塊化思想,在各個層次中將功能分成功能獨立的模塊。其中,基礎(chǔ)服務(wù)層包括設(shè)備交互、質(zhì)控警示、統(tǒng)一存儲等3個模塊;業(yè)務(wù)服務(wù)層包括統(tǒng)計分析、系統(tǒng)監(jiān)控、數(shù)據(jù)交換等3個模塊;用戶界面層包括統(tǒng)一API、顯示發(fā)布、文檔知識等3個模塊。如圖1軟件整體架構(gòu)圖所示。
圖1 軟件整體架構(gòu)圖
圖1中的層次劃分充分考慮了區(qū)域站的觀測業(yè)務(wù)需要?;A(chǔ)服務(wù)層主要面向觀測設(shè)備和主程序,是連接設(shè)備和主程序的紐帶。通過該層主程序可以控制設(shè)備,與之交互,接收設(shè)備上傳的數(shù)據(jù)。然后對數(shù)據(jù)進(jìn)行分析和質(zhì)控處理,對異常進(jìn)行警示,然后提供統(tǒng)一的存儲方式進(jìn)行存放。可以看出基礎(chǔ)層雖然僅僅實現(xiàn)了設(shè)備的交互和數(shù)據(jù)的處理與存儲,但這是整個系統(tǒng)的基礎(chǔ)部分,而對數(shù)據(jù)的進(jìn)一步加工處理就由業(yè)務(wù)服務(wù)層實現(xiàn)。業(yè)務(wù)服務(wù)層主要完成三個工作:一是對數(shù)據(jù)加工形成統(tǒng)計分析報表;二是對異常數(shù)據(jù)及系統(tǒng)異常進(jìn)行監(jiān)控;三是將加工后的觀測數(shù)據(jù)及系統(tǒng)異常對第三方進(jìn)行交換分享。業(yè)務(wù)服務(wù)層立足業(yè)務(wù)需求,同時起到承上啟下的作用,為用戶界面層提供數(shù)據(jù)。用戶界面層首先通過統(tǒng)一接口服務(wù)(API),可以為不同的應(yīng)用類型提供數(shù)據(jù)支持。如可以是窗口桌面程序(Windows),也可以是網(wǎng)站應(yīng)用(WebSite),還可以是移動應(yīng)用(APP),不管哪種應(yīng)用都可以通過該API進(jìn)行數(shù)據(jù)的顯示和發(fā)布。其次,可以將觀測業(yè)務(wù)常用的小工具、小常識、經(jīng)驗總結(jié)等知識,文檔化,格式化存儲和展示給用戶查看。
以上,通過3個邏輯層次實現(xiàn)了從設(shè)備接入到基礎(chǔ)數(shù)據(jù)解析再到數(shù)據(jù)加工和異常監(jiān)控,最后再通過API的集中控制,實現(xiàn)了包括常見軟件類型的觀測數(shù)據(jù)顯示和發(fā)布功能。
基礎(chǔ)服務(wù)層包括設(shè)備交互、質(zhì)控警示和統(tǒng)一存儲三大模塊,是應(yīng)用軟件的基礎(chǔ)模塊。
1)設(shè)備交互:面向各氣象設(shè)備,采用有線或無線的方式實現(xiàn)軟件與設(shè)備的交互,可向設(shè)備發(fā)送命令,也能接收原始數(shù)據(jù),并將數(shù)據(jù)初步解析和轉(zhuǎn)換為格式化的數(shù)據(jù)。
2)質(zhì)控警示:對格式化的觀測數(shù)據(jù)進(jìn)行氣候?qū)W閾值檢查,缺值處理,異常值人工訂正干預(yù),利用業(yè)務(wù)預(yù)警模型對觀測值進(jìn)行分析和發(fā)出報警。
3)統(tǒng)一存儲:對原始數(shù)據(jù)、訂正后的格式化數(shù)據(jù)及其它加工后的數(shù)據(jù)提供統(tǒng)一的管理,主要包括統(tǒng)一數(shù)據(jù)存儲,統(tǒng)一數(shù)據(jù)訪問,統(tǒng)一數(shù)據(jù)緩存。存儲形式可以是文件、關(guān)系型數(shù)據(jù)庫等。
在本層還有其它輔助類、公共操作類,方便軟件復(fù)用。本層可以作為獨立程序運行,推薦以服務(wù)方式運行,不需要提供界面即能完成氣象設(shè)備的數(shù)據(jù)采集和處理及存儲功能。其數(shù)據(jù)流程圖如圖2基礎(chǔ)服務(wù)層數(shù)據(jù)流程圖。
圖2 基礎(chǔ)服務(wù)層數(shù)據(jù)流程圖
從數(shù)據(jù)流程圖中可以看出,設(shè)備交互模塊是系統(tǒng)獲取數(shù)據(jù)的第一入口,擔(dān)負(fù)著數(shù)據(jù)接收和設(shè)備交互的工作,是此類系統(tǒng)的關(guān)鍵模塊。為提高系統(tǒng)穩(wěn)定性、適應(yīng)性和可擴展性,需要此模塊具備各種氣象設(shè)備數(shù)據(jù)接收和處理的能力。此處采用抽象工廠模式,將與設(shè)備交互的各種方法抽象為一個設(shè)備工廠類接口,交互方法主要有建立通訊連接、接收數(shù)據(jù),數(shù)據(jù)格式化操作,發(fā)送數(shù)據(jù),向設(shè)備發(fā)送命令等。農(nóng)業(yè)小氣候站、能見度站等設(shè)備分別繼承并實現(xiàn)這個接口,在接口內(nèi)部分別根據(jù)自身數(shù)據(jù)協(xié)議實現(xiàn)相應(yīng)方法。在軟件運行階段,程序主體即可以根據(jù)配置參數(shù)實例化不同的工廠子類,從而完成不同類型設(shè)備的通訊連接,數(shù)據(jù)接收,數(shù)據(jù)格式化及其它交互操作。
抽象工廠模式實現(xiàn)了在編碼階段已經(jīng)確定的設(shè)備類型的接入,采用插件式開發(fā)方法,可對未知設(shè)備類型的動態(tài)接入提供便利。插件式開發(fā)方法由一個插件控制器完成,插件控制器可以將系統(tǒng)內(nèi)部實現(xiàn)了抽象工廠接口的設(shè)備類加載編譯[21-23]。當(dāng)系統(tǒng)中增加新的氣象設(shè)備類型時,如大氣電場儀,只需新建大氣電場儀類實現(xiàn)抽象工廠接口,在主程序中增加參數(shù)配置項,重啟主程序后,大氣電場儀類就會被插件控制器加載然后動態(tài)編譯為一個整體類庫,抽象工廠實例化時就能選擇到大氣電場儀設(shè)備類型進(jìn)行后續(xù)操作。圖3是抽象工廠模式及插件式動態(tài)編譯示意圖。
圖3 抽象工廠模式及插件式動態(tài)編譯示意圖
圖3中IDeviceFactory為抽象工廠接口,假設(shè)已有農(nóng)業(yè)小氣候站和能見度觀測站,并分別實現(xiàn)了該抽象工廠接口。PlugController為插件控制器,當(dāng)主程序運行后,會調(diào)用插件控制器,該控制器就自動把實現(xiàn)了抽象工廠接口的各種設(shè)備工廠類動態(tài)編譯到主程序中,從而作為主程序的一部分被調(diào)用。通過插件控制的方法,可以很方便地將諸如大氣電場觀測設(shè)備(ElectricDevice,如圖3中虛線框內(nèi)所示)等設(shè)備的工廠類動態(tài)加載到主程序中。
面向區(qū)域氣象觀測業(yè)務(wù)實際,提供切實可行的統(tǒng)計分析、系統(tǒng)監(jiān)控及數(shù)據(jù)交換功能。主要包括以下三個模塊。
1)統(tǒng)計分析:提供小時、日、月極值統(tǒng)計,月報表分析等功能。
2)系統(tǒng)監(jiān)控:提供系統(tǒng)運行日志、業(yè)務(wù)日志、硬件運行情況、傳感器狀態(tài)、網(wǎng)絡(luò)通訊狀態(tài)等監(jiān)控功能。
3)數(shù)據(jù)交換:對外提供統(tǒng)一接入接口,可以快速接入其它外部系統(tǒng)的觀測數(shù)據(jù)或集成設(shè)備。對外提供統(tǒng)一訪問接口,用通用且規(guī)范的方式向外部傳輸數(shù)據(jù)。
氣象觀測業(yè)務(wù)需求并不完全統(tǒng)一,需要根據(jù)實際情況進(jìn)行開發(fā),此處也是整個系統(tǒng)中變化較多的部分。但是,在系統(tǒng)初始建設(shè)階段,可以考慮依據(jù)氣象法規(guī),形成標(biāo)準(zhǔn)地面氣象觀測規(guī)范中建議的報表格式。這樣后續(xù)系統(tǒng)只需對規(guī)范外的特殊需求做少許改動即可。
用戶界面層主要面向使用用戶,是聯(lián)系用戶與主程序的橋梁,向用戶展示軟件功能的窗口。在邏輯上分為以下三個部分。
2.3.1 顯示發(fā)布
即用戶看到的最終界面。按照不同的軟件技術(shù)體系可以有不同的實現(xiàn)方式。目前無外乎桌面應(yīng)用程序、網(wǎng)站、移動應(yīng)用及微信公眾號等形式。但不管采用哪種表現(xiàn)形式,一般都包含以下功能要求:
1)提供多種監(jiān)測界面,顯示實時數(shù)據(jù)、狀態(tài)數(shù)據(jù)、警示信息及觀測時間;
2)可以查詢歷史數(shù)據(jù)、歷史數(shù)據(jù)趨勢圖;
3)可以查詢數(shù)據(jù)統(tǒng)計和分析結(jié)果等;
4)通過電腦屏幕、電視墻、手機或者現(xiàn)場顯示設(shè)備顯示數(shù)據(jù)功能。
2.3.2 統(tǒng)一API
API服務(wù)層是一組定義好的功能接口類庫,通過該接口類庫,可以為不同的應(yīng)用界面提供功能統(tǒng)一、數(shù)據(jù)一致、訪問規(guī)范、安全可控的數(shù)據(jù)服務(wù)。
2.3.3 文檔知識:
一個好的軟件設(shè)計,不僅軟件的功能強大,易用性較好,而且軟件相關(guān)文檔的完整性和幫助手冊的易用性也要求較高。因此,在業(yè)務(wù)功能之外,強調(diào)文檔知識模塊很有必要。文檔模塊包括軟件使用手冊、常見問題問答。知識模塊包括業(yè)務(wù)觀測知識、觀測技巧等知識匯總顯示。
與之前的基礎(chǔ)服務(wù)層和業(yè)務(wù)服務(wù)層不同,用戶界面層直接面向用戶,除了實現(xiàn)用戶需求,滿足用戶要求外,界面是否炫酷,操作是否易用直接影響用戶的使用感受和對軟件的印象評價。因此,本層除了實現(xiàn)以上三個模塊,還采用主題技術(shù)、模版技術(shù)、開源框架等方式為用戶提供風(fēng)格統(tǒng)一,支持皮膚定制等功能。
近年來,針對農(nóng)業(yè)生產(chǎn)經(jīng)營特點設(shè)計的區(qū)域自動氣象監(jiān)測站(農(nóng)業(yè)小氣候站)被越來越多地建設(shè)和使用。農(nóng)業(yè)小氣候站不僅監(jiān)測要素齊全,而且還能實現(xiàn)實地監(jiān)測和遠(yuǎn)距離數(shù)據(jù)監(jiān)測。主要監(jiān)測傳感器有溫度、濕度、風(fēng)向、風(fēng)速、雨量和氣壓等6種常規(guī)傳感器,以及土壤濕度、光照度、葉面濕度和土壤水分等多種專業(yè)傳感器,另外還會配置顯示屏(多為發(fā)光二極管LED顯示屏)以在實地實時顯示采集的數(shù)據(jù)。在用戶界面方面,多以GIS地圖方式展示觀測數(shù)據(jù)[24]。
本次實驗通過以下步驟和方法進(jìn)行該系統(tǒng)設(shè)計的可行性驗證。首先,通過分析農(nóng)業(yè)小氣候站的功能需求,確認(rèn)可以采用上述方法,在該系統(tǒng)上通過增加“農(nóng)業(yè)小氣候站”工廠類,實現(xiàn)農(nóng)業(yè)小氣候觀測數(shù)據(jù)的接入和分析處理。其次,參照圖3,編碼實現(xiàn)農(nóng)業(yè)小氣候站工廠類(AgricultureDevice),該類與“能見度站”(VisiDevice)工廠類類似,都繼承自接口工廠類(IDeviceFactory),通過實現(xiàn)接口工廠類中定義的格式化數(shù)據(jù)方法和命令交互等方法即可對該代碼進(jìn)行編譯,形成農(nóng)業(yè)小氣候站工廠類靜態(tài)類庫。然后,將編譯后的類庫放入主程序執(zhí)行文件夾內(nèi),啟動主程序后,新增加的農(nóng)業(yè)小氣候站工廠類即可被插件控制器自動識別和加載。
當(dāng)農(nóng)業(yè)小氣候站建設(shè)完畢,采用無線通訊方式接入到主程序中。在通電后設(shè)備會主動向主程序發(fā)起連接,主程序通過設(shè)備標(biāo)識,識別出該設(shè)備。然后利用工廠實例自動找到農(nóng)業(yè)小氣候工廠類進(jìn)行數(shù)據(jù)的解析及與設(shè)備的交互工作。自此,實現(xiàn)了農(nóng)業(yè)小氣候站的數(shù)據(jù)接入和交互。針對農(nóng)業(yè)小氣候站的業(yè)務(wù)應(yīng)用,可以直接利用之前的用戶界面實現(xiàn)數(shù)據(jù)的展示等功能。最后,根據(jù)前文所述軟件設(shè)計架構(gòu)方法,系統(tǒng)軟件整體結(jié)構(gòu)圖如圖4所示。
圖4 軟件整體結(jié)構(gòu)圖
相比圖1,圖4給出了設(shè)備層的概念,其它從低到高依次為基礎(chǔ)服務(wù)層、業(yè)務(wù)服務(wù)層、用戶界面層。提出設(shè)備層是為了方便將硬件與軟件功能整體展示,設(shè)備層不僅可以是不同廠家的農(nóng)業(yè)小氣候站,還可以是不同類型的監(jiān)測設(shè)備,可以是一臺設(shè)備獨立監(jiān)測,也可以多臺設(shè)備進(jìn)行組網(wǎng)監(jiān)測?;A(chǔ)服務(wù)層實現(xiàn)農(nóng)業(yè)小氣候站的數(shù)據(jù)接入和交互,然后形成格式統(tǒng)一,質(zhì)量完整的基礎(chǔ)數(shù)據(jù),并存入數(shù)據(jù)庫等文件中。業(yè)務(wù)服務(wù)層從數(shù)據(jù)庫中取出基礎(chǔ)數(shù)據(jù),然后對基礎(chǔ)數(shù)據(jù)加工分析得到統(tǒng)計數(shù)據(jù)和監(jiān)控等數(shù)據(jù),最后存回數(shù)據(jù)庫中備用。用戶界面層利用統(tǒng)一API服務(wù)將各種加工后的數(shù)據(jù)提供給中心站軟件、Web客戶端網(wǎng)站及移動APP應(yīng)用等使用。
通過本次實驗,僅需增加一個“農(nóng)業(yè)小氣候”工廠類,即可快速實現(xiàn)農(nóng)業(yè)小氣候觀測數(shù)據(jù)的接入和處理。極大地提高了工作效率,不但降低企業(yè)的開發(fā)成本,還因為功能高度集成、功能模塊化、軟件復(fù)用等優(yōu)勢,保證了軟件的開發(fā)質(zhì)量和軟件的穩(wěn)定性,這將有利于降低軟件的維護(hù)成本,同時提高企業(yè)履約能力和盈利能力。
本文依托分層架構(gòu)設(shè)計思想,提煉了區(qū)域自動氣象站的應(yīng)用軟件設(shè)計架構(gòu)。提出基礎(chǔ)服務(wù)層、業(yè)務(wù)服務(wù)層、用戶界面層共三個層次。通過分層隔離使得層與層之間都是相互獨立的,架構(gòu)中的每一層的變化不會影響其它層。在每層中采用模塊化設(shè)計,進(jìn)一步提高內(nèi)聚降低耦合,保證了系統(tǒng)的健壯性,使得系統(tǒng)更加易維護(hù)。針對不同類型的區(qū)域自動站,采用抽象工廠模式設(shè)計,配合插件式開發(fā),利用動態(tài)編譯技術(shù),極大地提高了系統(tǒng)的適用性和擴展性。通過農(nóng)業(yè)小氣候站的實驗應(yīng)用,可以方便地實現(xiàn)設(shè)備的數(shù)據(jù)接入,提高了工作效率。但是在用戶界面層,不同類型設(shè)備表現(xiàn)出一致的界面,顯得有些呆板,下一步可以考慮在界面層實現(xiàn)時也可以利用插件式開發(fā),實現(xiàn)不同設(shè)備類型,提供不同的用戶界面。