賴曉菲,姜陳威
(福建省漳州市氣象局 福建 漳州 363000)
近年來,自動氣象觀測站作為氣象要素自動監測、存儲、處理及傳輸的工具,為氣象災害監測和氣象服務提供及時、準確的基本氣象觀測資料。 因此,準確可靠的氣象信息和數據,是開展天氣預報預警、氣象預測評估以及科學研究的基礎[1-2]。 自動氣象站數據的備份和保存對氣象業務的正常運行以及科學研究顯得尤為重要[3]。 由于漳州市自動化氣象站會實時傳輸每天的氣象數據文件,需要人工對大量且實時數據進行備份,不僅比較煩瑣,而且容易出現數據備份紕漏,因此有必要設計一套氣象數據備份軟件輔助業務人員備份數據,不僅能夠提高數據備份時效性還能提高工作效率。 目前,Python 具有豐富而成熟的庫和模塊可供調用和開發,為軟件開發提供了便利性[4-5]。 為此本研究基于Python 設計開發一套對采集到的氣象站數據自動上傳的軟件,作為漳州自動氣象站數據保存和備份的輔助工具。
通過分析漳州市氣象數據文件的更新特點,本文設計開發出一套關于漳州市的氣象數據文件自動傳輸系統,該軟件應當實現的具體功能如下:
(1)實現可獲取客戶端的文件夾路徑,可選擇要上傳的目標路徑。
(2)實現局域網內的客戶端都能訪問并連接目標服務器。
(3)實現可選擇獲取目標服務器的IP 和可用傳輸端口。
(4)實現可選擇服務器端的最終傳輸地址。
(5)實現自動識別最新日期的氣象數據文件,并且每隔1 min 傳輸一次文件進行即時備份。
(6)對大量數據具有良好的緩存和傳輸功能。
(7)創建當日更新數據進行有效備份的傳輸日志,以便于業務人員監測并查看當日氣象數據是否進行有效備份。
(8)實現局域網內的客戶端和服務端能夠快速建立傳輸連接響應,具有安全的存取模式。
根據以上對系統功能需求的分析,該系統在滿足基本功能外,還應滿足系統當前和未來業務持續發展的需求。因此,本系統應具有以下特點:
(1)可靠性。 采用適合的系統框架能夠長期穩定運行,能夠及時傳輸實時更新的數據文件。
(2)可擴展性。 該軟件應當在結構上和技術實現上,均具有較靈活的可擴展性,能夠根據業務的發展擴展多樣性的功能。
(3)便攜性。 該軟件為應用程序,無需安裝。 點擊打開即可直接使用,且軟件體積較小,不會占用太多的磁盤空間。
該系統基于Python 語言進行設計與開發。 采用靈活性較強的C/S 模式的系統框架,借助主流的開源技術,通過調用uvicorn、requsts 等第三方庫實現與局域網內目標服務器的連接,并且通過QT 構建快速響應且簡潔的客戶端可視化圖形界面[6-7],便于業務人員進行操作。 該應用程序適用于Windows 操作系統下運行。 如圖1 所示,本系統分為客戶端和服務端兩部分,由于氣象數據大且備份及時性的重要,因而進行數據備份也應當及時有效。 故而選擇C/S 結構進行開發應用程序[8],基于C/S 結構的應用程序使得客戶端與服務端能夠直接相連,具有連接響應速度快速、交互性強并且還可以對大量數據進行緩存處理的特點[9],所以此結構開發的系統能夠及時上傳和備份當天數據。 如圖1 所示,在客戶端請求連接目標服務端,服務端響應請求后即表示兩者已經連接,系統內已設置好發送的時間為每隔1 min 就檢索客戶端目標路徑下最新日期的文件進行發送,客戶端每次接收都會輸出反饋信息和日志信息。

圖1 系統框架示意圖
(1)客戶端部分。 調用QT 設計簡易的可視化界面,可訪問客戶端文件路徑,可填寫服務端地址IP 和可用端口信息以及服務端存放的目標路徑。 然后調用time、requests 等函數自動識別待上傳的最新日期文件,并每隔1 min 上傳一次文件。 以下為部分核心代碼:
①界面設計部分


(2)服務端部分。 通過調用uvicorn、FastAPI 等函數獲取當前服務端地址和端口號,等待客戶端發出連接指令并建立連接,然后調用logging 函數去建立每日日志信息并寫入。 以下為部分核心代碼:


基于Python 設計的氣象數據文件自動傳輸系統軟件可以訪問客戶端任意文件下的數據文件,如圖2 所示為客戶端傳輸系統可視化界面。 客戶端可根據選擇局域網內的服務端填寫的其IP 和端口號進行連接,接著軟件自動從客戶端文件中提取相關信息,進行數據文件編碼發送。用戶選定目標服務器和保存路徑后,點擊開始后,數據文件將會自動每隔1 min 傳輸一次。 如圖3 所示為服務端的傳輸界面,運行服務端后,Application startup complete 表示服務端的應用程序啟動完成,Uvicon running on http 后面將顯示自動獲取可連接的服務端IP 和端口號。 就可以通過服務端的自動獲取功能來填寫客戶端的信息,保證了客戶端輸入的準確性,為客戶端和服務端的建立連接提供支持。

圖2 客戶端傳輸系統可視化界面

圖3 服務端傳輸界面
整個系統在運行之前,應該首先將服務器端的應用程序在服務器端運行,服務端應用程序將自動獲取服務器IP 以及可用端口號。 然后運行客戶端程序選擇地址選擇文件夾,填寫服務端地址后,點擊設置服務器地址,此時服務端將響應連接,如圖4 所示,輸出set_path HTTP 表示建立http 連接,最后在客戶端的可視化界面點擊開始就會自動識別最新日期文件進行對應服務端地址傳輸,并且自動反饋更新傳輸的數據報文時間。 而且每次傳輸都將生成傳輸記錄,如圖5 所示,為2023 年5 月22 日的傳輸日志,第一條傳輸記錄表示已接收2023 年5 月22 日的氣象數據文件20:01 的數據,依次類推記錄每天每分鐘上傳的數據記錄,并且所有日志都存放在單獨的日志文件夾中可供查詢。 一旦點擊開始傳輸文件,開始按鈕將會跳轉為結束按鈕,如圖6 所示,點擊結束即終止傳輸。

圖4 服務端連接狀態

圖5 傳輸日志

圖6 客戶端界面
綜上所述,該氣象數據文件自動傳輸系統是基于Python 語言進行開發和設計的,通過PyQt5 設計客戶端簡易界面,遵循HTTP 協議能夠比較快速與服務端建立連接,并且實現實時識別指定文件路徑中最新日期的txt 文件,并定時完成文件傳輸,保障了氣象數據文件的日常備份。 而且自動新建每日文件的傳輸日志以供業務人員進行數據備份的查看和監測,便于業務人員數據備份。 本系統遵循C/S 結構框架進行開發,單層的交互性為數據備份的傳輸提供了快速響應支撐,且有利于對大量氣象數據進行緩存和傳輸。 本系統主要針對txt 的氣象數據文件進行自動遠程傳輸,可以適當增加傳輸的數據文件類型,便于擴展該系統的傳輸性能以及應用范圍。 而且該系統主要是上傳文件的功能,可以添加下載功能豐富系統應用。