白 寧
(中國人民解放軍63819部隊(duì),四川 宜賓 644000)
航天測控站(簡稱測站)供電系統(tǒng)是完成航天測控任務(wù)的動(dòng)力來源,也是各類通信網(wǎng)絡(luò)系統(tǒng)的“心臟”。良好的工作狀態(tài)、穩(wěn)定的電力輸出以及簡潔高效的系統(tǒng)狀態(tài),是保證航天測控任務(wù)順利實(shí)現(xiàn)的重要基礎(chǔ)。目前,測站供電系統(tǒng)設(shè)備分布廣泛,種類多,各設(shè)備廠商的通信協(xié)議不統(tǒng)一。為了智能集中式監(jiān)控供電系統(tǒng),需要對分散的各類供電設(shè)備增加相應(yīng)的傳感器監(jiān)測節(jié)點(diǎn),實(shí)現(xiàn)自動(dòng)實(shí)時(shí)采集數(shù)據(jù)。當(dāng)某類供電設(shè)備發(fā)生故障時(shí),系統(tǒng)自動(dòng)報(bào)警,值班人員在遠(yuǎn)端控制中心可以查看實(shí)時(shí)告警信息,從而快速定位故障節(jié)點(diǎn),減少人力,提高排除故障的效率[1]。在此,采用分布式B/S模式的軟件平臺(tái),設(shè)計(jì)了通用化高和可配置性強(qiáng)的兩級架構(gòu)統(tǒng)一格式的通信協(xié)議,詳細(xì)分析測站供電監(jiān)控系統(tǒng)的功能、體系結(jié)構(gòu)、組網(wǎng)方案以及監(jiān)控對象等,并利用Python開發(fā)語言下的Flask網(wǎng)絡(luò)編程框架,對測站供電監(jiān)控系統(tǒng)進(jìn)行設(shè)計(jì)與實(shí)現(xiàn)。
供電監(jiān)控系統(tǒng)由以串口服務(wù)器為采集處理中心的監(jiān)控處理模塊、以Flask框架下開發(fā)的監(jiān)控中心服務(wù)器和數(shù)據(jù)庫服務(wù)器3部分組成,結(jié)構(gòu)如圖1所示。

圖1 供電監(jiān)控系統(tǒng)組成結(jié)構(gòu)圖
實(shí)時(shí)數(shù)據(jù)的采集主要由串口服務(wù)器完成,通過監(jiān)控模塊接收來自各個(gè)傳感器的數(shù)據(jù)。數(shù)據(jù)傳輸系統(tǒng)采用RS485串口、RS232串口以及RJ45網(wǎng)口作為數(shù)據(jù)采集接口。串口數(shù)據(jù)線傳輸主要用在設(shè)備通信接口和加裝傳感器接口,采用網(wǎng)絡(luò)傳輸向上級監(jiān)控中心傳輸數(shù)據(jù)。數(shù)據(jù)庫服務(wù)器是指監(jiān)控中心通過接收來自監(jiān)控模塊的數(shù)據(jù),按照不同設(shè)備種類分別保存,在獲得調(diào)用指令后,將多種數(shù)據(jù)按約定通信協(xié)議組合后返回客戶端。當(dāng)設(shè)備故障告警時(shí),可以日志形式查閱告警信息。Web客戶端發(fā)送請求命令查詢各類設(shè)備的狀態(tài)信息,接收來自監(jiān)控中心的數(shù)據(jù),并將這些數(shù)據(jù)以相應(yīng)的圖形化形式顯示。Web客戶端還可以通過給監(jiān)控中心發(fā)送指令,以控制監(jiān)控終端的運(yùn)行。
供電監(jiān)控系統(tǒng)的Web服務(wù)器通過HTTP協(xié)議滿足多點(diǎn)訪問請求,同時(shí)需要適應(yīng)并行多點(diǎn)訪問的兼容性,則監(jiān)控軟件需采用多線程的架構(gòu)來實(shí)現(xiàn)訪問控制。部分通過加裝測量傳感器的老舊供電設(shè)備,使用數(shù)據(jù)接口為串口RS232或RS485類型。數(shù)據(jù)處理模塊需要采用線程同步鎖或設(shè)備輪詢等技術(shù)避免同時(shí)多個(gè)數(shù)據(jù)獲取請求產(chǎn)生的隊(duì)列擁堵[2]。

圖2 供電監(jiān)控系統(tǒng)服務(wù)器程序流程圖
供電監(jiān)控系統(tǒng)的前端服務(wù)器采用統(tǒng)一Web頁面顯示模板。使用Flask框架自帶的Jinja2模板庫,生成1個(gè)包含基本樣式的HTML和CSS作為整個(gè)服務(wù)器的基礎(chǔ)模板,其他的頁面通過JavaScript語法進(jìn)行動(dòng)態(tài)數(shù)據(jù)方面的增添和修改,這樣服務(wù)器面向客戶端的頁面設(shè)計(jì)開發(fā)將更加高效。供電監(jiān)控系統(tǒng)服務(wù)器的程序流程如圖2所示。服務(wù)器后臺(tái)采用定時(shí)查詢的方式獲取各類串口傳感器的數(shù)據(jù)。當(dāng)定時(shí)器觸發(fā)數(shù)據(jù)庫接口函數(shù)時(shí),建立與數(shù)據(jù)庫的連接。首先初始化接口,包括串口和網(wǎng)口的傳感器。其次,建立一個(gè)接收數(shù)據(jù)線程,此時(shí)服務(wù)器后臺(tái)保持接收等待狀態(tài)。服務(wù)器程序發(fā)出獲取數(shù)據(jù)請求,接口執(zhí)行查詢各個(gè)傳感器讀數(shù)據(jù)操作。最后,查詢當(dāng)前各個(gè)設(shè)備的狀態(tài)信息,若有故障告警則產(chǎn)生日記記錄。在完成數(shù)據(jù)請求的存儲(chǔ)顯示等操作后,一輪的查詢數(shù)據(jù)任務(wù)結(jié)束。
監(jiān)控系統(tǒng)主函數(shù)通過Flask模塊實(shí)例化產(chǎn)生一個(gè)APP實(shí)例,該實(shí)例是整個(gè)供電監(jiān)控系統(tǒng)的程序入口函數(shù)。不同用戶的數(shù)據(jù)請求通過該APP實(shí)例完成,各類查詢顯示信息的程序使用Python的裝飾器產(chǎn)生相對應(yīng)的視圖函數(shù)。只有主函數(shù)退出,才會(huì)中斷數(shù)據(jù)查詢的輪詢狀態(tài)。為確保主函數(shù)退出前數(shù)據(jù)保存的完整性,需要正確關(guān)閉外部連接數(shù)據(jù)庫,保存由設(shè)備異常告警數(shù)據(jù)產(chǎn)生的告警日志內(nèi)容,并清理整個(gè)供電監(jiān)控系統(tǒng)運(yùn)行過程中產(chǎn)生的臨時(shí)文件。
數(shù)據(jù)庫模塊由多個(gè)供電設(shè)備采集的數(shù)據(jù)核心模塊組成,是系統(tǒng)實(shí)現(xiàn)存儲(chǔ)、處理以及查詢功能的基礎(chǔ)[3-4]。監(jiān)控系統(tǒng)中存儲(chǔ)的數(shù)據(jù)包含3大類,分別為監(jiān)測供電設(shè)備的基本屬性信息、監(jiān)測供電設(shè)備的實(shí)時(shí)運(yùn)行指標(biāo)參數(shù)以及記錄供電設(shè)備的故障告警日志。供電監(jiān)控系統(tǒng)中UPS的數(shù)據(jù)庫E-R設(shè)計(jì)如圖3所示。

圖3 數(shù)據(jù)庫E-R關(guān)系圖
圖3展示了UPS設(shè)備實(shí)體的主要屬性。UPS的IP地址是供電設(shè)備的唯一標(biāo)識(shí),同時(shí)設(shè)備運(yùn)行狀態(tài)和故障告警信息也通過該屬性的唯一性進(jìn)行查詢。在日志記錄查詢功能中,使用列表主要顯示多種類型數(shù)據(jù),如低壓配電、蓄電池以及油機(jī)等,通常包含的狀態(tài)參數(shù)種類多,采用列表顯示更直觀。虛擬儀表以圖形化顯示狀態(tài)數(shù)據(jù),該控件從JS文件中獲取統(tǒng)一傳感器數(shù)據(jù)包,再經(jīng)過各自函數(shù)查詢處理后在不同的分頁面中顯示。
2.3.1 初始化模塊的實(shí)現(xiàn)
初始化模塊完成Flask實(shí)例的初始化配置及前端頁面模板Bootstrap和數(shù)據(jù)庫的創(chuàng)建。前端頁面模板和數(shù)據(jù)庫的創(chuàng)建利用已經(jīng)創(chuàng)建好的APP實(shí)例進(jìn)行實(shí)例化。創(chuàng)建Flask實(shí)例只需一條簡單語句就能實(shí)現(xiàn):

2.3.2 數(shù)據(jù)模型模塊的實(shí)現(xiàn)
數(shù)據(jù)模型模塊是直接與數(shù)據(jù)庫連接和讀取數(shù)據(jù)等操作模塊,同時(shí)數(shù)據(jù)模型模塊建立的邏輯結(jié)構(gòu)也同數(shù)據(jù)庫設(shè)計(jì)時(shí)各類設(shè)備視圖構(gòu)成映射關(guān)系。與數(shù)據(jù)庫的交互初始化連接均放在配置文件Config.py中,而對數(shù)據(jù)庫中的每個(gè)表進(jìn)行查詢、組裝等操作則在APP文件夾下的database.py:

系統(tǒng)設(shè)計(jì)使用的數(shù)據(jù)庫為SQLite,該數(shù)據(jù)庫結(jié)構(gòu)簡單,適合存儲(chǔ)大數(shù)據(jù)。
2.3.3 設(shè)備狀態(tài)查詢模塊
設(shè)備狀態(tài)查詢模塊是對數(shù)據(jù)庫進(jìn)行當(dāng)前最新條目的查詢及更新,通過Database.py文件建立與數(shù)據(jù)庫SQLite的連接,搜索各個(gè)設(shè)備表后,根據(jù)當(dāng)前的系統(tǒng)時(shí)間,更新當(dāng)前表中的最新數(shù)據(jù),做到實(shí)時(shí)顯示最新的設(shè)備狀態(tài)參數(shù)。

2.4.1 前端模板
在測站供電監(jiān)控系統(tǒng)中,采用Bootstrap框架美化頁面布局和界面元素,如圖4所示。主頁面為突出系統(tǒng)運(yùn)維人員通常查看的各類設(shè)備重要狀態(tài)參數(shù),將各設(shè)備的主要參數(shù)集成到一個(gè)虛擬儀表頁面進(jìn)行顯示。將設(shè)備故障的告警信息設(shè)置為紅色,這樣用戶很容易就能發(fā)現(xiàn)設(shè)備的告警信息。主頁面總體設(shè)計(jì)風(fēng)格簡單醒目,尤其在考慮后續(xù)供電設(shè)備的擴(kuò)展性上,將各類虛擬儀表設(shè)置為可根據(jù)當(dāng)前設(shè)備數(shù)量靈活添加,增加了用戶的使用友好性。

圖4 供電監(jiān)控系統(tǒng)主頁面
2.4.2 交互細(xì)節(jié)
當(dāng)頁面上展示出某類供電設(shè)備的詳細(xì)信息時(shí),只有用戶點(diǎn)擊該設(shè)備的詳細(xì)信息按鈕,其相應(yīng)的操作才會(huì)鏈接到新頁面。當(dāng)用戶權(quán)限角色為普通用戶時(shí),查看信息按鈕變?yōu)榛疑豢捎|發(fā)狀態(tài),則不能查看設(shè)備詳細(xì)信息頁面,其他頁面顯示信息也會(huì)根據(jù)用戶角色做出相應(yīng)的權(quán)限展示區(qū)分,如圖5所示。

圖5 蓄電池詳細(xì)頁面
結(jié)合網(wǎng)絡(luò)編程、嵌入式單片機(jī)開發(fā)以及傳感器技術(shù),設(shè)計(jì)了基于Python和Flask框架的測站供電監(jiān)控系統(tǒng)。完成基本的軟件設(shè)計(jì)和硬件安裝后,設(shè)計(jì)開發(fā)了測站供電監(jiān)控系統(tǒng)的基本功能,增強(qiáng)了供電監(jiān)控系統(tǒng)的數(shù)據(jù)并行處理能力和網(wǎng)絡(luò)傳輸能力,實(shí)現(xiàn)了對測站供電設(shè)備的狀態(tài)信息監(jiān)測、遠(yuǎn)程Web瀏覽以及故障動(dòng)態(tài)智能告警分析。