胡浩民 張 菁
(上海工程技術大學電子電氣工程學院,上海 201620)
在太陽能光伏發電系統中,光伏電池(光電陣列)和蓄電池組成了系統的電源單元[1]。對光伏電池和蓄電池的各種參數(如電壓、電流、溫度等)進行實時采集與檢測,不僅有利于篩選性能優良的電池,而且對系統的維護也非常重要。目前,數據采集技術已向著并行、高速、大量存儲、實時分析處理、集成化等方向發展[2]。對于批量電池的實時檢測,如果采用輪詢方式采集數據,很難保證采樣周期的一致性。因此,構建了一種星型拓撲的以太網采集環境,并設計了兩級隊列調度的數據通信模型。通過編程實現相應算法,確保數據采集的實時性與采樣周期的一致性,這不僅使采集的數據有利于分析挖掘,而且該模式可應用于物聯網中的信息交換。
目前,有不少電池巡檢儀和電池參數監測儀提供了電池組實時在線巡回檢測的功能,包括對每節單體電池或整組電池的電壓、電流、溫度進行自動檢測等[3]。計算機通過RS-232或RS-485接口實現在線監測電池狀態、顯示曲線及生成報表等。這既提高了電池的檢測效率和測試的安全性,又降低了維護人員的測試勞動強度。采用RS-232或RS-485接口雖然可以很容易地實現對外圍儀表設備的通信,但當通信結點比較多時,會受到接口數量的限制(如RS-232只提供點對點通信,RS-485支持多點通信,但一個網段最多連接32個結點[4])。為了實現對太陽能電池的批量檢測,設計了如圖1所示的系統結構。

圖1 系統結構Fig.1 Structure of the system
在圖1所示的太陽能電池檢測系統中,主控計算機與“以太網/串口適配器”通過RJ-45接口連接到交換機,形成星形的拓撲結構。結點之間采用客戶服務器模式,通過TCP面向連接的可靠數據傳送進行通信[5]。數據采集采用了分布式的系統結構。每個電池巡檢儀中的微處理器可實現對單組太陽能電池的檢測,采集的數據通過串口傳送到以太網/串口適配器,適配器再將轉換后的TCP數據報交付以太網。
系統結構只是提供了一種分布式的處理環境,采用怎樣的通信模型與算法,將會在很大程度上影響數據采集的實時性。
通常實時數據采集系統要求定時準確,即采樣間隔具有較好的一致性[6]。在圖1所示的電池檢測系統中,主控計算機通過以太網/串口適配器將數據采集指令發送給電池巡檢儀,巡檢儀根據指令從電池采集電流、電壓、溫度等數據,以太網/串口適配器再將巡檢儀采集的數據返回給主控計算機。當被測電池數量較多時,如果采用輪詢采集方式,采樣周期的一致性將很難得到保證。這是因為任一采集通道的阻塞都會干擾采樣周期,影響實時性,降低系統的效率。雖然采用多線程并發方式能隔離采集通道之間的干擾,但如果沒有合理的同步調度機制,也難以避免這一現象。兩級隊列調度通信模型描述了如何在確保線程在完成周期性采樣的前提下,實現對臨界資源的互斥與同步,達到實時采樣與可靠歸檔。根據程序并發執行條件可知,若p1和p2這兩個程序能并發執行,且具有可再現性,需要滿足以下Bernstein條件[7]:

式中:R為“讀集”;W為“寫集”。設采集線程集合為S={thread1,thread2,…,threadn},由式(1)可知,對于?ti、?tj(ti∈S,tj∈S,ti≠tj),如有 R(p1)∩W(p2)∪R(p2)∩W(p1)∪W(p1)∩W(p2)={},則能使任意數據的采集通道均不會因競爭資源而阻塞。若為每個采集線程分配獨立的緩沖隊列存放數據,即可滿足上述條件。
采集線程除了實現數據采集功能(入隊操作)之外,還能實現數據歸檔功能(出隊操作)。設歸檔數據庫所支持的并發度為p,則當p<n時,并發度p成為采集線程集合的臨界資源,推導的Bernstein條件被破壞;當p≥n時,雖不會出現資源競爭而引起的阻塞,但普適性較差。這是因為p是由數據庫的性能所決定的,n隨著實際的應用而變化,很可能會出現無法滿足這一條件的情況。因此,增加一個歸檔隊列,用于實現數據歸檔前先進入該緩沖隊列,再由m個歸檔線程完成存數據庫操作。因為數據庫系統常用基于鎖的并發控制,獲得一個鎖的開銷遠小于處理數據的開銷[8],所以m可取小于或大于p的值,且與n無關。
由于歸檔隊列是臨界資源,因此,緩沖隊列與歸檔隊列之間的數據調度由“隊列線程”完成,否則會出現采集線程競爭歸檔隊列而引起的阻塞。此外,當緩沖隊列空時,隊列線程會阻塞,所以隊列線程個數需要n個,否則會引起其他緩沖隊列的溢出和采集線程的阻塞。兩級隊列調度通信模型如圖2所示。

圖2 兩級隊列調度通信模型Fig.2 Two-stage queue scheduling communication model
由以上模型可知,在緩沖隊列不滿的條件下,采集線程可以獲得最大程度的并發,數據采集周期的一致性可以得到有效保證。隊列線程與采集線程分別操作的是out和in指向的存儲空間,因此對并發不產生影響,只有在隊列空和隊列滿的狀態下需要同步。隊列線程之間競爭的是歸檔隊列尾指針,雖然需要同步,但臨界區很小,所以對并發影響不大。需要指出的是,歸檔線程應帶一個數據項的內部存儲區,當某一線程獲得隊列頭時,將隊列頭指針指向的數據項復制到自身的存儲區,然后立即釋放隊列頭臨界資源,再進行寫數據庫操作。試驗表明,這有利于提高歸檔速度。
信號量提供了一種方便有效的進程同步處理機制,但由于大量的同步操作分散在每個要訪問臨界資源的進程中,不僅給系統的管理帶來麻煩,還會由于使用不當而導致一些難以檢測的時序錯誤[9]。而管程定義了一個數據結構和能為并發進程所執行在該數據結構上的一組操作,這組操作能同步進程和改變管程中的數據。鑒于這一特征,定義了類似管程功能的兩個類(CMonitorQ1和CMonitorQ2)來實現三種線程對兩級隊列的同步與互斥。設緩沖隊列為一級隊列,歸檔隊列為二級隊列,模型對應的算法描述如下。


每路數據采集通道均需要一個CMonitorQ1對象。該對象用于采集線程(調用putQ1Data)和隊列線程(調用getQ1Data)對一級緩沖隊列buffer的同步操作。由于兩類線程各只有一個,且操作的分別是隊列頭和隊列尾,因此在隊列空或滿時同步即可。另外,getQ1Data在對緩沖隊列空信號量進行V操作之前必須將數據存入臨時空間,而不能只保存下標,否則就會出現數據被覆蓋的可能。
第二級隊列的同步與互斥操作由CMonitorQ2對象實現。該對象只需要一個,隊列線程調用putQ2Data,歸檔線程調用getQ2Data。由于有多個線程競爭隊列頭與隊列尾,所以引入兩個互斥量mutexHead和mutexRear,用于互斥操作。為防止死鎖的出現,以下的P、V操作次序不能交換。同樣地,getQ2Data中對queueEmpty的V操作之前,歸檔線程需要把數據復制到自身的臨時空間。


以上列出了兩個類的主要成員與方法,其中對信號量和互斥量的P操作可用WaitForSingleObject實現;V操作則分別用ReleaseSemaphore和ReleaseSemaphore完成[10]。因為所有的同步與互斥操作全部集中到CMonitorQ1和CMonitorQ2對象,所以有效地控制了三類線程的復雜度。以隊列線程的Execute方法為例,描述如下。

在以上算法中,getQ1Data()在一級緩沖隊列空時阻塞;putQ2Data()在二級歸檔隊列滿時阻塞。雖然二級歸檔隊列是多個歸檔線程競爭的臨界資源,但因為臨界區很小,且有一級緩沖隊列為采集線程服務,所以系統的實時性與采集周期可以得到有效保證。
兩級隊列調度通信模型已應用于太陽能電池的巡檢。這一系統可對太陽能電池進行批量檢測與監控,掌握電池組的運行狀態,實時檢測記錄并顯示各單體電池或電池組電壓、電流、電池溫度等參數,以及時發現劣質電池,保證系統正常可靠、無故障運行。采集的數據在歸檔的同時,還可以實時、直觀地用趨勢圖顯示。采集周期一致的歸檔數據為后續的數據分析、處理與挖掘提供了有利條件。
兩級隊列調度通信模型是在批量電池巡檢中,為防止局部模塊異常對數據采集周期一致性的影響而提出的。該模型通過三類線程調度和兩級緩沖隊列隔離的方法,有效地確保了局部采集模塊的阻塞不會成為采樣實時性的瓶頸。實踐表明,該模型有效實現了數據采集的實時性、采樣間隔的一致性、歸檔過程的可靠性以及歸檔模塊對不同數據庫并發功能的支持。
[1]董宏,張飄.通信用光伏與風力發電系統[M].北京:人民郵電出版社,2008:20 -23.
[2]徐德炳,徐興.數據采集與總線技術的發展[J].測控技術,2002,21(6):1 -6.
[3]宋森濤,楊運國.用于智能巡檢儀的數字濾波技術研究[J].華東電力,2005,33(9):47 -49.
[4]王華忠.監控與數據采集(SCADA)系統及其應用[M].北京:電子工業出版社,2010:27 -28.
[5]Andrew S,Tanenbaum.Computer networks[M].Fourth edition.Pearson Education,2004:454 -457.
[6]鄭存紅,胡榮強,趙瑞峰.用Visual C++實現實時數據采集[J].計算機應用研究,2002(4):103 -104.
[7]湯子瀛,哲鳳屏,湯小丹.計算機操作系統[M].西安:西安電子科技大學出版社,2001:38 -39.
[8]王振明.SCADA監控與數據采集軟件系統的設計與開發[M].北京:機械工業出版社,2009:51 -52.
[9]Abraham S,Peter B G,Greg G.Operating system concepts[M].Seventh edition.Wiley,2007:209 -210.
[10]Jeffrey M R,Christophe N.Windows via C/C++[M].Microsoft Press,2008:246 -269.