胡浩民 張 菁
(上海工程技術(shù)大學(xué)電子電氣工程學(xué)院,上海 201620)
在太陽能光伏發(fā)電系統(tǒng)中,光伏電池(光電陣列)和蓄電池組成了系統(tǒng)的電源單元[1]。對光伏電池和蓄電池的各種參數(shù)(如電壓、電流、溫度等)進(jìn)行實(shí)時(shí)采集與檢測,不僅有利于篩選性能優(yōu)良的電池,而且對系統(tǒng)的維護(hù)也非常重要。目前,數(shù)據(jù)采集技術(shù)已向著并行、高速、大量存儲、實(shí)時(shí)分析處理、集成化等方向發(fā)展[2]。對于批量電池的實(shí)時(shí)檢測,如果采用輪詢方式采集數(shù)據(jù),很難保證采樣周期的一致性。因此,構(gòu)建了一種星型拓?fù)涞囊蕴W(wǎng)采集環(huán)境,并設(shè)計(jì)了兩級隊(duì)列調(diào)度的數(shù)據(jù)通信模型。通過編程實(shí)現(xiàn)相應(yīng)算法,確保數(shù)據(jù)采集的實(shí)時(shí)性與采樣周期的一致性,這不僅使采集的數(shù)據(jù)有利于分析挖掘,而且該模式可應(yīng)用于物聯(lián)網(wǎng)中的信息交換。
目前,有不少電池巡檢儀和電池參數(shù)監(jiān)測儀提供了電池組實(shí)時(shí)在線巡回檢測的功能,包括對每節(jié)單體電池或整組電池的電壓、電流、溫度進(jìn)行自動檢測等[3]。計(jì)算機(jī)通過RS-232或RS-485接口實(shí)現(xiàn)在線監(jiān)測電池狀態(tài)、顯示曲線及生成報(bào)表等。這既提高了電池的檢測效率和測試的安全性,又降低了維護(hù)人員的測試勞動強(qiáng)度。采用RS-232或RS-485接口雖然可以很容易地實(shí)現(xiàn)對外圍儀表設(shè)備的通信,但當(dāng)通信結(jié)點(diǎn)比較多時(shí),會受到接口數(shù)量的限制(如RS-232只提供點(diǎn)對點(diǎn)通信,RS-485支持多點(diǎn)通信,但一個(gè)網(wǎng)段最多連接32個(gè)結(jié)點(diǎn)[4])。為了實(shí)現(xiàn)對太陽能電池的批量檢測,設(shè)計(jì)了如圖1所示的系統(tǒng)結(jié)構(gòu)。
圖1 系統(tǒng)結(jié)構(gòu)Fig.1 Structure of the system
在圖1所示的太陽能電池檢測系統(tǒng)中,主控計(jì)算機(jī)與“以太網(wǎng)/串口適配器”通過RJ-45接口連接到交換機(jī),形成星形的拓?fù)浣Y(jié)構(gòu)。結(jié)點(diǎn)之間采用客戶服務(wù)器模式,通過TCP面向連接的可靠數(shù)據(jù)傳送進(jìn)行通信[5]。數(shù)據(jù)采集采用了分布式的系統(tǒng)結(jié)構(gòu)。每個(gè)電池巡檢儀中的微處理器可實(shí)現(xiàn)對單組太陽能電池的檢測,采集的數(shù)據(jù)通過串口傳送到以太網(wǎng)/串口適配器,適配器再將轉(zhuǎn)換后的TCP數(shù)據(jù)報(bào)交付以太網(wǎng)。
系統(tǒng)結(jié)構(gòu)只是提供了一種分布式的處理環(huán)境,采用怎樣的通信模型與算法,將會在很大程度上影響數(shù)據(jù)采集的實(shí)時(shí)性。
通常實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)要求定時(shí)準(zhǔn)確,即采樣間隔具有較好的一致性[6]。在圖1所示的電池檢測系統(tǒng)中,主控計(jì)算機(jī)通過以太網(wǎng)/串口適配器將數(shù)據(jù)采集指令發(fā)送給電池巡檢儀,巡檢儀根據(jù)指令從電池采集電流、電壓、溫度等數(shù)據(jù),以太網(wǎng)/串口適配器再將巡檢儀采集的數(shù)據(jù)返回給主控計(jì)算機(jī)。當(dāng)被測電池?cái)?shù)量較多時(shí),如果采用輪詢采集方式,采樣周期的一致性將很難得到保證。這是因?yàn)槿我徊杉ǖ赖淖枞紩蓴_采樣周期,影響實(shí)時(shí)性,降低系統(tǒng)的效率。雖然采用多線程并發(fā)方式能隔離采集通道之間的干擾,但如果沒有合理的同步調(diào)度機(jī)制,也難以避免這一現(xiàn)象。兩級隊(duì)列調(diào)度通信模型描述了如何在確保線程在完成周期性采樣的前提下,實(shí)現(xiàn)對臨界資源的互斥與同步,達(dá)到實(shí)時(shí)采樣與可靠歸檔。根據(jù)程序并發(fā)執(zhí)行條件可知,若p1和p2這兩個(gè)程序能并發(fā)執(zhí)行,且具有可再現(xiàn)性,需要滿足以下Bernstein條件[7]:
式中:R為“讀集”;W為“寫集”。設(shè)采集線程集合為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)={},則能使任意數(shù)據(jù)的采集通道均不會因競爭資源而阻塞。若為每個(gè)采集線程分配獨(dú)立的緩沖隊(duì)列存放數(shù)據(jù),即可滿足上述條件。
采集線程除了實(shí)現(xiàn)數(shù)據(jù)采集功能(入隊(duì)操作)之外,還能實(shí)現(xiàn)數(shù)據(jù)歸檔功能(出隊(duì)操作)。設(shè)歸檔數(shù)據(jù)庫所支持的并發(fā)度為p,則當(dāng)p<n時(shí),并發(fā)度p成為采集線程集合的臨界資源,推導(dǎo)的Bernstein條件被破壞;當(dāng)p≥n時(shí),雖不會出現(xiàn)資源競爭而引起的阻塞,但普適性較差。這是因?yàn)閜是由數(shù)據(jù)庫的性能所決定的,n隨著實(shí)際的應(yīng)用而變化,很可能會出現(xiàn)無法滿足這一條件的情況。因此,增加一個(gè)歸檔隊(duì)列,用于實(shí)現(xiàn)數(shù)據(jù)歸檔前先進(jìn)入該緩沖隊(duì)列,再由m個(gè)歸檔線程完成存數(shù)據(jù)庫操作。因?yàn)閿?shù)據(jù)庫系統(tǒng)常用基于鎖的并發(fā)控制,獲得一個(gè)鎖的開銷遠(yuǎn)小于處理數(shù)據(jù)的開銷[8],所以m可取小于或大于p的值,且與n無關(guān)。
由于歸檔隊(duì)列是臨界資源,因此,緩沖隊(duì)列與歸檔隊(duì)列之間的數(shù)據(jù)調(diào)度由“隊(duì)列線程”完成,否則會出現(xiàn)采集線程競爭歸檔隊(duì)列而引起的阻塞。此外,當(dāng)緩沖隊(duì)列空時(shí),隊(duì)列線程會阻塞,所以隊(duì)列線程個(gè)數(shù)需要n個(gè),否則會引起其他緩沖隊(duì)列的溢出和采集線程的阻塞。兩級隊(duì)列調(diào)度通信模型如圖2所示。
圖2 兩級隊(duì)列調(diào)度通信模型Fig.2 Two-stage queue scheduling communication model
由以上模型可知,在緩沖隊(duì)列不滿的條件下,采集線程可以獲得最大程度的并發(fā),數(shù)據(jù)采集周期的一致性可以得到有效保證。隊(duì)列線程與采集線程分別操作的是out和in指向的存儲空間,因此對并發(fā)不產(chǎn)生影響,只有在隊(duì)列空和隊(duì)列滿的狀態(tài)下需要同步。隊(duì)列線程之間競爭的是歸檔隊(duì)列尾指針,雖然需要同步,但臨界區(qū)很小,所以對并發(fā)影響不大。需要指出的是,歸檔線程應(yīng)帶一個(gè)數(shù)據(jù)項(xiàng)的內(nèi)部存儲區(qū),當(dāng)某一線程獲得隊(duì)列頭時(shí),將隊(duì)列頭指針指向的數(shù)據(jù)項(xiàng)復(fù)制到自身的存儲區(qū),然后立即釋放隊(duì)列頭臨界資源,再進(jìn)行寫數(shù)據(jù)庫操作。試驗(yàn)表明,這有利于提高歸檔速度。
信號量提供了一種方便有效的進(jìn)程同步處理機(jī)制,但由于大量的同步操作分散在每個(gè)要訪問臨界資源的進(jìn)程中,不僅給系統(tǒng)的管理帶來麻煩,還會由于使用不當(dāng)而導(dǎo)致一些難以檢測的時(shí)序錯誤[9]。而管程定義了一個(gè)數(shù)據(jù)結(jié)構(gòu)和能為并發(fā)進(jìn)程所執(zhí)行在該數(shù)據(jù)結(jié)構(gòu)上的一組操作,這組操作能同步進(jìn)程和改變管程中的數(shù)據(jù)。鑒于這一特征,定義了類似管程功能的兩個(gè)類(CMonitorQ1和CMonitorQ2)來實(shí)現(xiàn)三種線程對兩級隊(duì)列的同步與互斥。設(shè)緩沖隊(duì)列為一級隊(duì)列,歸檔隊(duì)列為二級隊(duì)列,模型對應(yīng)的算法描述如下。
每路數(shù)據(jù)采集通道均需要一個(gè)CMonitorQ1對象。該對象用于采集線程(調(diào)用putQ1Data)和隊(duì)列線程(調(diào)用getQ1Data)對一級緩沖隊(duì)列buffer的同步操作。由于兩類線程各只有一個(gè),且操作的分別是隊(duì)列頭和隊(duì)列尾,因此在隊(duì)列空或滿時(shí)同步即可。另外,getQ1Data在對緩沖隊(duì)列空信號量進(jìn)行V操作之前必須將數(shù)據(jù)存入臨時(shí)空間,而不能只保存下標(biāo),否則就會出現(xiàn)數(shù)據(jù)被覆蓋的可能。
第二級隊(duì)列的同步與互斥操作由CMonitorQ2對象實(shí)現(xiàn)。該對象只需要一個(gè),隊(duì)列線程調(diào)用putQ2Data,歸檔線程調(diào)用getQ2Data。由于有多個(gè)線程競爭隊(duì)列頭與隊(duì)列尾,所以引入兩個(gè)互斥量mutexHead和mutexRear,用于互斥操作。為防止死鎖的出現(xiàn),以下的P、V操作次序不能交換。同樣地,getQ2Data中對queueEmpty的V操作之前,歸檔線程需要把數(shù)據(jù)復(fù)制到自身的臨時(shí)空間。
以上列出了兩個(gè)類的主要成員與方法,其中對信號量和互斥量的P操作可用WaitForSingleObject實(shí)現(xiàn);V操作則分別用ReleaseSemaphore和ReleaseSemaphore完成[10]。因?yàn)樗械耐脚c互斥操作全部集中到CMonitorQ1和CMonitorQ2對象,所以有效地控制了三類線程的復(fù)雜度。以隊(duì)列線程的Execute方法為例,描述如下。
在以上算法中,getQ1Data()在一級緩沖隊(duì)列空時(shí)阻塞;putQ2Data()在二級歸檔隊(duì)列滿時(shí)阻塞。雖然二級歸檔隊(duì)列是多個(gè)歸檔線程競爭的臨界資源,但因?yàn)榕R界區(qū)很小,且有一級緩沖隊(duì)列為采集線程服務(wù),所以系統(tǒng)的實(shí)時(shí)性與采集周期可以得到有效保證。
兩級隊(duì)列調(diào)度通信模型已應(yīng)用于太陽能電池的巡檢。這一系統(tǒng)可對太陽能電池進(jìn)行批量檢測與監(jiān)控,掌握電池組的運(yùn)行狀態(tài),實(shí)時(shí)檢測記錄并顯示各單體電池或電池組電壓、電流、電池溫度等參數(shù),以及時(shí)發(fā)現(xiàn)劣質(zhì)電池,保證系統(tǒng)正??煽?、無故障運(yùn)行。采集的數(shù)據(jù)在歸檔的同時(shí),還可以實(shí)時(shí)、直觀地用趨勢圖顯示。采集周期一致的歸檔數(shù)據(jù)為后續(xù)的數(shù)據(jù)分析、處理與挖掘提供了有利條件。
兩級隊(duì)列調(diào)度通信模型是在批量電池巡檢中,為防止局部模塊異常對數(shù)據(jù)采集周期一致性的影響而提出的。該模型通過三類線程調(diào)度和兩級緩沖隊(duì)列隔離的方法,有效地確保了局部采集模塊的阻塞不會成為采樣實(shí)時(shí)性的瓶頸。實(shí)踐表明,該模型有效實(shí)現(xiàn)了數(shù)據(jù)采集的實(shí)時(shí)性、采樣間隔的一致性、歸檔過程的可靠性以及歸檔模塊對不同數(shù)據(jù)庫并發(fā)功能的支持。
[1]董宏,張飄.通信用光伏與風(fēng)力發(fā)電系統(tǒng)[M].北京:人民郵電出版社,2008:20 -23.
[2]徐德炳,徐興.數(shù)據(jù)采集與總線技術(shù)的發(fā)展[J].測控技術(shù),2002,21(6):1 -6.
[3]宋森濤,楊運(yùn)國.用于智能巡檢儀的數(shù)字濾波技術(shù)研究[J].華東電力,2005,33(9):47 -49.
[4]王華忠.監(jiān)控與數(shù)據(jù)采集(SCADA)系統(tǒng)及其應(yīng)用[M].北京:電子工業(yè)出版社,2010:27 -28.
[5]Andrew S,Tanenbaum.Computer networks[M].Fourth edition.Pearson Education,2004:454 -457.
[6]鄭存紅,胡榮強(qiáng),趙瑞峰.用Visual C++實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)采集[J].計(jì)算機(jī)應(yīng)用研究,2002(4):103 -104.
[7]湯子瀛,哲鳳屏,湯小丹.計(jì)算機(jī)操作系統(tǒng)[M].西安:西安電子科技大學(xué)出版社,2001:38 -39.
[8]王振明.SCADA監(jiān)控與數(shù)據(jù)采集軟件系統(tǒng)的設(shè)計(jì)與開發(fā)[M].北京:機(jī)械工業(yè)出版社,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.