賴曉菲,姜陳威
(福建省漳州市氣象局 福建 漳州 363000)
近年來,自動(dòng)氣象觀測(cè)站作為氣象要素自動(dòng)監(jiān)測(cè)、存儲(chǔ)、處理及傳輸?shù)墓ぞ?,為氣象?zāi)害監(jiān)測(cè)和氣象服務(wù)提供及時(shí)、準(zhǔn)確的基本氣象觀測(cè)資料。 因此,準(zhǔn)確可靠的氣象信息和數(shù)據(jù),是開展天氣預(yù)報(bào)預(yù)警、氣象預(yù)測(cè)評(píng)估以及科學(xué)研究的基礎(chǔ)[1-2]。 自動(dòng)氣象站數(shù)據(jù)的備份和保存對(duì)氣象業(yè)務(wù)的正常運(yùn)行以及科學(xué)研究顯得尤為重要[3]。 由于漳州市自動(dòng)化氣象站會(huì)實(shí)時(shí)傳輸每天的氣象數(shù)據(jù)文件,需要人工對(duì)大量且實(shí)時(shí)數(shù)據(jù)進(jìn)行備份,不僅比較煩瑣,而且容易出現(xiàn)數(shù)據(jù)備份紕漏,因此有必要設(shè)計(jì)一套氣象數(shù)據(jù)備份軟件輔助業(yè)務(wù)人員備份數(shù)據(jù),不僅能夠提高數(shù)據(jù)備份時(shí)效性還能提高工作效率。 目前,Python 具有豐富而成熟的庫和模塊可供調(diào)用和開發(fā),為軟件開發(fā)提供了便利性[4-5]。 為此本研究基于Python 設(shè)計(jì)開發(fā)一套對(duì)采集到的氣象站數(shù)據(jù)自動(dòng)上傳的軟件,作為漳州自動(dòng)氣象站數(shù)據(jù)保存和備份的輔助工具。
通過分析漳州市氣象數(shù)據(jù)文件的更新特點(diǎn),本文設(shè)計(jì)開發(fā)出一套關(guān)于漳州市的氣象數(shù)據(jù)文件自動(dòng)傳輸系統(tǒng),該軟件應(yīng)當(dāng)實(shí)現(xiàn)的具體功能如下:
(1)實(shí)現(xiàn)可獲取客戶端的文件夾路徑,可選擇要上傳的目標(biāo)路徑。
(2)實(shí)現(xiàn)局域網(wǎng)內(nèi)的客戶端都能訪問并連接目標(biāo)服務(wù)器。
(3)實(shí)現(xiàn)可選擇獲取目標(biāo)服務(wù)器的IP 和可用傳輸端口。
(4)實(shí)現(xiàn)可選擇服務(wù)器端的最終傳輸?shù)刂贰?/p>
(5)實(shí)現(xiàn)自動(dòng)識(shí)別最新日期的氣象數(shù)據(jù)文件,并且每隔1 min 傳輸一次文件進(jìn)行即時(shí)備份。
(6)對(duì)大量數(shù)據(jù)具有良好的緩存和傳輸功能。
(7)創(chuàng)建當(dāng)日更新數(shù)據(jù)進(jìn)行有效備份的傳輸日志,以便于業(yè)務(wù)人員監(jiān)測(cè)并查看當(dāng)日氣象數(shù)據(jù)是否進(jìn)行有效備份。
(8)實(shí)現(xiàn)局域網(wǎng)內(nèi)的客戶端和服務(wù)端能夠快速建立傳輸連接響應(yīng),具有安全的存取模式。
根據(jù)以上對(duì)系統(tǒng)功能需求的分析,該系統(tǒng)在滿足基本功能外,還應(yīng)滿足系統(tǒng)當(dāng)前和未來業(yè)務(wù)持續(xù)發(fā)展的需求。因此,本系統(tǒng)應(yīng)具有以下特點(diǎn):
(1)可靠性。 采用適合的系統(tǒng)框架能夠長期穩(wěn)定運(yùn)行,能夠及時(shí)傳輸實(shí)時(shí)更新的數(shù)據(jù)文件。
(2)可擴(kuò)展性。 該軟件應(yīng)當(dāng)在結(jié)構(gòu)上和技術(shù)實(shí)現(xiàn)上,均具有較靈活的可擴(kuò)展性,能夠根據(jù)業(yè)務(wù)的發(fā)展擴(kuò)展多樣性的功能。
(3)便攜性。 該軟件為應(yīng)用程序,無需安裝。 點(diǎn)擊打開即可直接使用,且軟件體積較小,不會(huì)占用太多的磁盤空間。
該系統(tǒng)基于Python 語言進(jìn)行設(shè)計(jì)與開發(fā)。 采用靈活性較強(qiáng)的C/S 模式的系統(tǒng)框架,借助主流的開源技術(shù),通過調(diào)用uvicorn、requsts 等第三方庫實(shí)現(xiàn)與局域網(wǎng)內(nèi)目標(biāo)服務(wù)器的連接,并且通過QT 構(gòu)建快速響應(yīng)且簡(jiǎn)潔的客戶端可視化圖形界面[6-7],便于業(yè)務(wù)人員進(jìn)行操作。 該應(yīng)用程序適用于Windows 操作系統(tǒng)下運(yùn)行。 如圖1 所示,本系統(tǒng)分為客戶端和服務(wù)端兩部分,由于氣象數(shù)據(jù)大且備份及時(shí)性的重要,因而進(jìn)行數(shù)據(jù)備份也應(yīng)當(dāng)及時(shí)有效。 故而選擇C/S 結(jié)構(gòu)進(jìn)行開發(fā)應(yīng)用程序[8],基于C/S 結(jié)構(gòu)的應(yīng)用程序使得客戶端與服務(wù)端能夠直接相連,具有連接響應(yīng)速度快速、交互性強(qiáng)并且還可以對(duì)大量數(shù)據(jù)進(jìn)行緩存處理的特點(diǎn)[9],所以此結(jié)構(gòu)開發(fā)的系統(tǒng)能夠及時(shí)上傳和備份當(dāng)天數(shù)據(jù)。 如圖1 所示,在客戶端請(qǐng)求連接目標(biāo)服務(wù)端,服務(wù)端響應(yīng)請(qǐng)求后即表示兩者已經(jīng)連接,系統(tǒng)內(nèi)已設(shè)置好發(fā)送的時(shí)間為每隔1 min 就檢索客戶端目標(biāo)路徑下最新日期的文件進(jìn)行發(fā)送,客戶端每次接收都會(huì)輸出反饋信息和日志信息。
圖1 系統(tǒng)框架示意圖
(1)客戶端部分。 調(diào)用QT 設(shè)計(jì)簡(jiǎn)易的可視化界面,可訪問客戶端文件路徑,可填寫服務(wù)端地址IP 和可用端口信息以及服務(wù)端存放的目標(biāo)路徑。 然后調(diào)用time、requests 等函數(shù)自動(dòng)識(shí)別待上傳的最新日期文件,并每隔1 min 上傳一次文件。 以下為部分核心代碼:
①界面設(shè)計(jì)部分
(2)服務(wù)端部分。 通過調(diào)用uvicorn、FastAPI 等函數(shù)獲取當(dāng)前服務(wù)端地址和端口號(hào),等待客戶端發(fā)出連接指令并建立連接,然后調(diào)用logging 函數(shù)去建立每日日志信息并寫入。 以下為部分核心代碼:
基于Python 設(shè)計(jì)的氣象數(shù)據(jù)文件自動(dòng)傳輸系統(tǒng)軟件可以訪問客戶端任意文件下的數(shù)據(jù)文件,如圖2 所示為客戶端傳輸系統(tǒng)可視化界面。 客戶端可根據(jù)選擇局域網(wǎng)內(nèi)的服務(wù)端填寫的其IP 和端口號(hào)進(jìn)行連接,接著軟件自動(dòng)從客戶端文件中提取相關(guān)信息,進(jìn)行數(shù)據(jù)文件編碼發(fā)送。用戶選定目標(biāo)服務(wù)器和保存路徑后,點(diǎn)擊開始后,數(shù)據(jù)文件將會(huì)自動(dòng)每隔1 min 傳輸一次。 如圖3 所示為服務(wù)端的傳輸界面,運(yùn)行服務(wù)端后,Application startup complete 表示服務(wù)端的應(yīng)用程序啟動(dòng)完成,Uvicon running on http 后面將顯示自動(dòng)獲取可連接的服務(wù)端IP 和端口號(hào)。 就可以通過服務(wù)端的自動(dòng)獲取功能來填寫客戶端的信息,保證了客戶端輸入的準(zhǔn)確性,為客戶端和服務(wù)端的建立連接提供支持。
圖2 客戶端傳輸系統(tǒng)可視化界面
圖3 服務(wù)端傳輸界面
整個(gè)系統(tǒng)在運(yùn)行之前,應(yīng)該首先將服務(wù)器端的應(yīng)用程序在服務(wù)器端運(yùn)行,服務(wù)端應(yīng)用程序?qū)⒆詣?dòng)獲取服務(wù)器IP 以及可用端口號(hào)。 然后運(yùn)行客戶端程序選擇地址選擇文件夾,填寫服務(wù)端地址后,點(diǎn)擊設(shè)置服務(wù)器地址,此時(shí)服務(wù)端將響應(yīng)連接,如圖4 所示,輸出set_path HTTP 表示建立http 連接,最后在客戶端的可視化界面點(diǎn)擊開始就會(huì)自動(dòng)識(shí)別最新日期文件進(jìn)行對(duì)應(yīng)服務(wù)端地址傳輸,并且自動(dòng)反饋更新傳輸?shù)臄?shù)據(jù)報(bào)文時(shí)間。 而且每次傳輸都將生成傳輸記錄,如圖5 所示,為2023 年5 月22 日的傳輸日志,第一條傳輸記錄表示已接收2023 年5 月22 日的氣象數(shù)據(jù)文件20:01 的數(shù)據(jù),依次類推記錄每天每分鐘上傳的數(shù)據(jù)記錄,并且所有日志都存放在單獨(dú)的日志文件夾中可供查詢。 一旦點(diǎn)擊開始傳輸文件,開始按鈕將會(huì)跳轉(zhuǎn)為結(jié)束按鈕,如圖6 所示,點(diǎn)擊結(jié)束即終止傳輸。
圖4 服務(wù)端連接狀態(tài)
圖5 傳輸日志
圖6 客戶端界面
綜上所述,該氣象數(shù)據(jù)文件自動(dòng)傳輸系統(tǒng)是基于Python 語言進(jìn)行開發(fā)和設(shè)計(jì)的,通過PyQt5 設(shè)計(jì)客戶端簡(jiǎn)易界面,遵循HTTP 協(xié)議能夠比較快速與服務(wù)端建立連接,并且實(shí)現(xiàn)實(shí)時(shí)識(shí)別指定文件路徑中最新日期的txt 文件,并定時(shí)完成文件傳輸,保障了氣象數(shù)據(jù)文件的日常備份。 而且自動(dòng)新建每日文件的傳輸日志以供業(yè)務(wù)人員進(jìn)行數(shù)據(jù)備份的查看和監(jiān)測(cè),便于業(yè)務(wù)人員數(shù)據(jù)備份。 本系統(tǒng)遵循C/S 結(jié)構(gòu)框架進(jìn)行開發(fā),單層的交互性為數(shù)據(jù)備份的傳輸提供了快速響應(yīng)支撐,且有利于對(duì)大量氣象數(shù)據(jù)進(jìn)行緩存和傳輸。 本系統(tǒng)主要針對(duì)txt 的氣象數(shù)據(jù)文件進(jìn)行自動(dòng)遠(yuǎn)程傳輸,可以適當(dāng)增加傳輸?shù)臄?shù)據(jù)文件類型,便于擴(kuò)展該系統(tǒng)的傳輸性能以及應(yīng)用范圍。 而且該系統(tǒng)主要是上傳文件的功能,可以添加下載功能豐富系統(tǒng)應(yīng)用。