張振華
摘 要 由于操作系統及通信平臺的多樣性, 通信軟件開發者往往要面對諸多問題, 而利用軟件設計模式能夠幫助開發者成功完成任務并開發出高性能的通信軟件。本文首先闡述了傳統通信軟件的實現方式和存在的一些問題,接著介紹了ACE 框架以及使用ACE架構構建通信系統軟件的優勢,然后詳細介紹了基于ACE架構的前置采集軟件的設計,重點描述了軟件架構中六個服務的功能。最后針對軟件中服務間通訊方式、守護進程和采集服務的實現方式做了詳細的介紹。
【關鍵詞】ACE架構 前置采集
隨著國家節能減排工作的推進,軌道交通行業的節能減排工作得到了高度重視。軌道交通能源管理系統是針對軌道交通行業而開發的一套能源管理軟件平臺,其目的使軌道交通運營部門能夠科學的強化能源管理、降低能源消耗、提高能源利用效率。在軌道交通能源管理系統中,前置采集軟件起著最關鍵和最基本的作用,主要是進行全線車站及車輛段的能耗數據的采集和簡單處理,包括前置服務的監控、終端數據的采集、解析、統計、補招等功能,因此前置采集軟件的設計和實現對在軌道交通能源管理系統中起到至關重要的作用。
傳統的前置采集軟件大多采用基于TCP/IP協議的Socket方式實現與終端設備的通信,雖然Socket具有很高的效率,但網絡編程人員通常從底層進行開發,非常繁瑣且參數復雜,調用易出錯,異常處理容易遺漏,這些大大增加了軟件開發的難度和周期。另外前置采集軟件開發中通常采用模塊化設計,當執行任務時,需要通過其中不同的模塊進行協作完成,在這種情況下各模塊間的數據通信會變得異常繁瑣和復雜。為了提高系統的可靠性和實時性,使編程人員減少數據通訊編程的復雜度,重點關注于業務邏輯功能,本文提出了一種基于ACE架構的前置采集軟件設計方案。
1 ACE架構簡介
ACE(Adaptive Communication Environment)是一種面向對象的開放源碼的應用框架,它封裝了底層API,屏蔽了系統間的差異,提供了一組豐富的可重用C++包裝外觀和框架組件,可跨多種平臺完成通用的通信軟件任務。
ACE體系機構包括3個層次結構:
1.1 操作系統適配層
對操作系統并發機制和進程間通信機制進行封裝。采用模板技術對不同操作系統間的通信API進行封裝,對外提供統一的接口。消除了操作系統間的差異;
1.2 OO Wrappers層
應用C++的面向對象特性和模板實現內存管理。多線程及多進程管理,消息隊列機制,動態服務配置,定時器隊列等。在具體應用中可通過組合和聚合,選擇和包裝這些類完成具體的實現。
1.3 框架組件層
前攝器、反應器、任務、連接接收器等框架組件。
ACE框架組件設計思想和設計模式是根據領域的特性來定制,其中具有針對通信系統特有的部分,將這種框架和設計模式應用前置采集系統的設計中,消除系統底層通信編程的復雜性,使得網絡編程人員把大部分的精力集中于如何完成應用系統軟件功能的實現上,將會大大縮短系統的開發周期。
2 前置采集軟件的設計
2.1 軟件設計原則
前置采集軟件的功能是采集整條地鐵線路的能源數據并進行統計分析,根據能源管理系統的特點,前置采集軟件具有較高的要求:
2.1.1 可靠性
軟件能夠長期可靠、穩定的運行是軟件設計原則的首位。軟件應具備主備切換功能,運行故障時能夠自動切換,保證系統能夠長期穩定可靠的運行。
2.1.2 實時性
軟件能夠及時高效的采集各種能耗數據,保證系統能夠實時監測各種能耗設備運行狀態和信息。
2.1.3 可維護性
軟件應具有很好的易維護性,滿足多種通信方式、多種規約終端統一接入需求,并且能非常方便地擴充、維護通信規約和通信方式。
2.2 軟件架構
前置采集軟件的主要功能進行能源數據的采集和數據的統計。前置采集的各個服務首先在啟動的時候,讀取對應的配置文檔,加載并初始化各個服務。然后建立與現場各種采集終端通信,采用標準規約進行數據交互活動。前置采集軟件將采集后的數據經過相關處理后存儲到相應sqlite格式的文件中。
圖1為前置采集軟件的架構圖,從圖中可以看出該軟件劃分為6部分,分別為監控服務,采集服務、解析服務、統計服務、補招服務和用戶服務。
監控服務:該服務主要有兩個作用,一個是控制前置采集軟件運行模式,前置采集軟件具有四種運行模式:單機模式、主備模式、負載均衡和負載分流。通過Web設置界面進行運行模式的設置;另一個是對軟件中其它的服務進行監控,如其它服務運行中出現意外而崩潰,監控模塊則重新開啟該服務,以保證前置采集軟件的長期穩定運行。
采集服務:負責與終端的通信連接管理和數據收發和轉發。采集模塊首先獲取通道信息,然后根據通道類型創建通道對象(串口、TCP服務器、TCP客戶端和串口服務器等等),最后將所新建的通道對象依次打開并根據通道的類型依次對所關聯的終端進行連接。之后與終端進行報文通信,將從終端收到的報文轉發到解析服務,將從解析服務接收到的報文根據所關聯終端的對應通道發送到該終端。
解析服務:主要包括解析模塊,任務模塊和對時模塊。其中解析模塊負責對從采集服務傳送來的報文數據和任務模塊傳送來的采集任務進行規約解析;任務模塊從數據庫中定時加載采集任務和模板,組織成采集任務后發送給解析模塊;對時模塊則通過自定義對時狀態機對終端時間進行控制。解析后的數據保存為sqlite格式的文件,以供其它服務使用。
統計服務:主要是對從采集服務上傳來的數據進行統計分析。包括實時數據統計和曲線數據統計。其中統計實時數據分為流量統計、終端狀態和表計狀態統計。曲線數據統計分為終端歷史狀態統計,采集完整率統計和缺點統計。
補招服務:負責對采集的數據項進行統計,如數據項在指定的時間點沒有采集到數據或采集到數據異常,則會生成補招任務下發給解析服務進行數據的補招。
用戶服務:處理與用戶的任務交互。能源管理系統主要是由前臺和后臺兩部分組成,而用戶服務是前臺和后臺之間通訊的橋梁。用戶服務的功能主要是新建與前臺的路由,新建與解析服務的路由,對路由收到的數據進行相應的處理等等。
3 前置采集軟件的實現
3.1 服務間的通訊方式
該軟件所包含的六個服務間通訊方式采用共享內存方式,比如:解析服務和采集服務之間的通訊、補招服務和采集服務之間的通訊等。共享內存就是允許多個不相關的進程訪問同一邏輯內存來進行數據交換。當網絡應用擁有需要由多個進程來查看或操縱的數據時,共享內存是非常有效的一種通信機制。
ACE提供兩個共享內存機制:System V共享內存和內存映射文件,本軟件采用內存映射文件機制。內存映射文件機制是某個文件的部分或者全部都可以被映射到虛擬內存的某一塊上,這部分虛擬內存跨多進程共享,映射到內存文件的內容可被刷新到永久存儲器中,這種做法提供了一種便捷地保存和恢復跨程序執行的信息的途徑。在這種機制中,操作系統都能夠讓多個進程把共享內存區域映射到它們的地址空間中,如圖2,所有映射了共享內存區域的進程都能夠直接對共享內存進行讀寫操作。
本系統采用內存映射文件機制的基礎是ACE_Mem_Map類,該類用來映射磁盤文件到內存。而ACE_MMAP_Memory_Pool類則是為內存映射文件分配內存的內存池。
3.2 守護進程的實現
在設計進程守護中使用ACE架構中的ACE_Reactor模式來實現主動對象模式。在ACE_Reactor模式中,ACE_Event_Handler是所有事件處理器的基類。通過向ACE_Reactor注冊事件,并同時傳遞用以處理此事件的事件處理器的指針。ACE_Reactor自動在內部維護一些表,將事件與事件處理器對象關聯起來,當用戶注冊的事件發生時, ACE_Reactor發出對處理器中相應方法的回調。
每個需要守護的進程定義一個服務對象,服務對象注冊一個定時器事件,定時來檢測需要守護的進程是否存在,如不存在則啟動該進程,如果存在則繼續守護。在實現服務類時,采取以下步驟:
(1)創建ACE_Event_Handler的子類。
(2)實現服務類的打開和關閉函數:open函數用于對服務進行初始化;而close()函數則是釋放、關閉各種資源。
(3)創建定時時鐘,通過調用ACE_Reactor::instance()->schedule_timer()來定義時鐘。
(4)重寫時鐘超時的處理方法:handle_timeout(),當時鐘超時后將自動調用該處理方法來處理。
3.3 采集服務的實現
采集服務是負責與終端的通信連接管理和數據收發和轉發的功能。該模塊采用異步I/O操作ACE_Proactor設計模式。首先采集服務注冊異步事件及相應的回調函數注冊到完成分派器,然后發出異步I/O操作,完成分派器將在I/O操作完成時激活異步事件,并調用相應的回調函數進行事件處理。前攝器設計模式允許單線程化應用并發的執行多個I/O操作,并且不會帶來與傳統的多線程化機制相關聯的開銷或設計復雜性。這樣做大大減少了 I/ O 處理時間。
采集服務的實現步驟如下:
(1)創建服務處理器。服務器處理均派生自ACE_Service_Handler類,并定義相應的事件處理函數;當發生I/O操作完成事件時,會觸發相應的事件完成回調函數。
(2)實現服務處理器I/O操作。ACE_Proactor框架中所有的I/O操作都由相應的異步操作類來完成,如ACE_Asynch_Read_Stream用于在已連接的TCP/IP中進行異步的讀取操作,而ACE_Asynch_Write_Stream用于在已連接的 TCP/IP中進行異步寫操作。采集服務先將讀、寫操作注冊到服務處理器中,然后發出異步I/O操作請求,當異步I/O操作完成后,系統自動調用服務處理器中的相關函數進行后續的處理工作。
(3)創建TCP/IP連接的接收器。本服務采用ACE_Asynch_Acceptor工廠類來創建TCP/IP連接的接收器,當終端的連接到達時,接收器創建相應的服務處理器對象來處理該連接。
(4)運行事件循環,當I/O事件發生時,調用事件處理器中的事件處理函數。
4 結論
ACE作為一種免費開源的架構,富含網絡與系統編程的實用設計模式,具有跨平臺等優越特性,適合通信軟件的開發。
本文設計一種前置采集軟件架構,并應用ACE框架組件完成軟件的開發工作。該軟件是軌道能源管理系統的重要組成部分,實現了能耗數據的采集和統計。對于軌道交通行業信息集中監控管理未來發展的需求,本文可以為其提供通訊系統提供架構設計和實現方式等方面的參考。
參考文獻
[1]Douglas C.Schmidt Stephen D.Huston. c++ Network Programming,Volumn2- Systematic Reuse with ACE and Frameworks[M].北京:電子工業出版社,2004.
[2]陶道,萬旺根.ACE框架在網絡游戲服務器中的設計與應用[J].現代電子科技,2008.
[3]Schmidt DC.ACE自適配通信環境技術論文集[C].北京:電子工業出版社,2001.
[4]王繼剛,顧國昌,蘆東昕,黃燁明.構架與模式在通信系統軟件中的應用研究[J].計算機應用,2003(11):43-45.
[5]陳雅芳,王曉東,陳德銘,陳建化.基于ACE框架的通信設備監控系統的設計與應用研究[J].福建電腦,2007(02):112-113,106.
[6]何青. ACE在開發健壯可靠的C++系統中的應用研究[J].西安:微機發展,2005(05):43-45.
[7]馬學鵬,夏國臣.城市軌道交通能源管理系統研究[J]. 城市軌道交通研究,2014.
[8]劉勇,閆魯杰.基于物聯網、云計算和大數據的工業能源管理系統[J].供用電,2014(12):28-32.
作者單位
天津凱發電氣股份有限公司 天津市 300000