郭 令
(凱邁(洛陽)電子有限公司,河南 洛陽 471000)
隨著鋰離子電池組的發(fā)展,電動汽車、大型能源存儲系統(tǒng)逐步進(jìn)入了應(yīng)用領(lǐng)域。為了使鋰離子電池組在應(yīng)用過程中更加安全可靠,對鋰離子電池組的在線監(jiān)測必不可少[1]。
本文基于C#語言設(shè)計了一種電池組信息采集分析系統(tǒng),主要用于鋰離子動力電池組的運(yùn)行監(jiān)測和歷史數(shù)據(jù)管理。C#語言是.Net技術(shù)的核心開發(fā)語言,采用面向?qū)ο蟮某绦蛟O(shè)計技術(shù),提供了開發(fā)Windows應(yīng)用程序的最簡捷、最有效地方法,使用戶從繁瑣且復(fù)雜的工作中解脫出來,用戶不必掌握太多的編程知識就能夠創(chuàng)建出高難度的圖形化應(yīng)用程序[2]。
采集分析系統(tǒng)上位機(jī)軟件通過CAN總線和電壓/溫度采集器實(shí)現(xiàn)信息交互,由于上位機(jī)沒有CAN接口,因此在上位機(jī)軟件和電壓/溫度采集器中間增加了一個通訊轉(zhuǎn)換適配器USB-CAN。系統(tǒng)結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)圖
其中,每個采集器實(shí)現(xiàn)8支電池的電壓、溫度數(shù)據(jù)采集、數(shù)據(jù)收發(fā)等功能,USB-CAN適配器實(shí)現(xiàn)USB與CAN總線的協(xié)議轉(zhuǎn)換,上位機(jī)軟件實(shí)現(xiàn)數(shù)據(jù)通信、數(shù)據(jù)顯示、數(shù)據(jù)管理等功能。該系統(tǒng)可實(shí)時在線檢測電池組中所有單體電池電壓、溫度等參數(shù),并根據(jù)這些基本參數(shù)計算、顯示電池組總電壓、當(dāng)前最高電壓、最低電壓、最高溫度、最低溫度,并且動態(tài)繪制電池組總電壓實(shí)時曲線,同時,系統(tǒng)還具有電壓及溫度上下限報警、數(shù)據(jù)記錄、歷史數(shù)據(jù)查詢、歷史數(shù)據(jù)曲線繪制、導(dǎo)出Excel文件、數(shù)據(jù)庫備份及恢復(fù)等功能。數(shù)據(jù)庫采用SQL Server 2000。
CAN總線是德國BOSCH公司從20世紀(jì)80年代初為解決現(xiàn)代汽車中眾多的控制與測試儀器之間的數(shù)據(jù)交換而開發(fā)的一種串行數(shù)據(jù)通信協(xié)議,它是一種多主總線,通信速率可達(dá)1 MBPS。
上位機(jī)軟件和采集器通過CAN總線進(jìn)行數(shù)據(jù)傳輸,通訊協(xié)議基于CAN2.0B規(guī)范,總線通訊速率為250 kBPS,幀格式為29位標(biāo)識符的擴(kuò)展幀,幀類型為數(shù)據(jù)幀,每幀通訊數(shù)據(jù)長度固定為8個字節(jié)。數(shù)據(jù)傳輸采取主從方式,上位機(jī)每隔一定間隔發(fā)送數(shù)據(jù)請求幀,各采集器收到后回送相應(yīng)的數(shù)據(jù),正常情況下上位機(jī)軟件使用廣播命令,各采集器收到后將自己的數(shù)據(jù)發(fā)出,如果上位機(jī)軟件等待超時時間后未收到某個采集器的數(shù)據(jù),則單獨(dú)對該采集器發(fā)送數(shù)據(jù)請求。
上位機(jī)軟件需要完成周期發(fā)送請求數(shù)據(jù)、數(shù)據(jù)采集、數(shù)據(jù)處理、超時處理及數(shù)據(jù)存儲等任務(wù)。系統(tǒng)軟件設(shè)計采用C#的定時器事件處理方式,包括定時發(fā)送請求數(shù)據(jù)、定時數(shù)據(jù)采集和定時超時處理。主程序負(fù)責(zé)數(shù)據(jù)處理。程序流程圖見圖2。
定時器是定期引發(fā)事件的組件,是為Windows窗體環(huán)境設(shè)計的。主要屬性有Enable屬性和Interval屬性,Enable屬性用于指定定時器是否啟用,Interval屬性是獲取設(shè)置引發(fā)事件的間隔。本程序采用了Tick事件,該事件在指定的Interval值已經(jīng)過去而且定時器處于啟用狀態(tài)時發(fā)生。
當(dāng)開始采集數(shù)據(jù)時,進(jìn)行系統(tǒng)初始化設(shè)置,包括讀取報警參數(shù)設(shè)置、是否保存數(shù)據(jù)、采集器的個數(shù)等,然后開始定時發(fā)送請求數(shù)據(jù)。
在發(fā)送請求數(shù)據(jù)處理事件中,需要初始化數(shù)據(jù)變量,保護(hù)電壓數(shù)據(jù)、溫度數(shù)據(jù)和成功發(fā)送次數(shù),如果發(fā)送請求數(shù)據(jù)成功,則同時開啟定時數(shù)據(jù)采集和定時超時處理。
定時數(shù)據(jù)采集事件每隔5 ms執(zhí)行一次,采集過程中記錄采集信息,如果所有要請求的數(shù)據(jù)都采集成功,則同時停止該采集事件和超時處理事件,并使能數(shù)據(jù)處理函數(shù)。
如果在數(shù)據(jù)采集的過程中,在允許的超時時間內(nèi)沒有采集到所有的數(shù)據(jù),則超時處理事件執(zhí)行。超時處理事件中,判斷是否是第一次執(zhí)行該事件,如果是第一次,則向沒有采集到數(shù)據(jù)的采集器單獨(dú)發(fā)送請求命令。如果是第二次執(zhí)行,則說明已經(jīng)單獨(dú)發(fā)送了數(shù)據(jù)請求命令,如果仍舊有數(shù)據(jù)沒有采集到,則停止該次循環(huán)的數(shù)據(jù)采集,即停止數(shù)據(jù)采集定時事件和超時處理定時事件,并修改異常狀態(tài)變量、觸發(fā)數(shù)據(jù)處理函數(shù)。
數(shù)據(jù)處理函數(shù)實(shí)現(xiàn)數(shù)據(jù)分析、報警判斷、詳細(xì)數(shù)據(jù)顯示、圖形顯示和數(shù)據(jù)保存。數(shù)據(jù)保存函數(shù)執(zhí)行的條件有兩個:一是選中了保存,二是沒有選中保存,但是在數(shù)據(jù)處理過程中發(fā)現(xiàn)了異常數(shù)據(jù),如過壓、欠壓、過高溫、過低溫等,則將該時刻所有的數(shù)據(jù)信息保存。
按照規(guī)范設(shè)計的方法,考慮數(shù)據(jù)庫及其應(yīng)用系統(tǒng)開發(fā)全過程,將數(shù)據(jù)庫設(shè)計分為六個階段[3]:需求分析、概念結(jié)構(gòu)設(shè)計、邏輯結(jié)構(gòu)設(shè)計、物理結(jié)構(gòu)設(shè)計、數(shù)據(jù)庫實(shí)施以及數(shù)據(jù)庫運(yùn)行和維護(hù)。
根據(jù)系統(tǒng)需求,設(shè)計了4張數(shù)據(jù)庫關(guān)系表:
(1)電壓/溫度信息表:記錄電池的電壓和溫度信息;
(2)總信息表:記錄總電壓值、當(dāng)前最高電壓、最低電壓、最高溫度和最低溫度;
(3)報警閾值設(shè)置:記錄設(shè)置的報警參數(shù),包括單體電壓上限、單體電壓下限等;
(4)報警歷史記錄:記錄滿足報警條件的電池數(shù)據(jù)。
為了提高數(shù)據(jù)處理性能,數(shù)據(jù)庫設(shè)計中使用了存儲過程技術(shù)。
存儲過程是由流控制和SQL語句書寫的過程,這個過程經(jīng)編譯和優(yōu)化后存儲在數(shù)據(jù)庫服務(wù)器中,使用時可由應(yīng)用程序通過一個調(diào)用執(zhí)行,而且運(yùn)行用戶聲明變量、有條件執(zhí)行以及強(qiáng)大的編程功能。可以在單個存儲過程中執(zhí)行一系列SQL語句。存儲過程在創(chuàng)建時即在服務(wù)器上進(jìn)行編譯,所以執(zhí)行起來比單個SQL語句快。
系統(tǒng)設(shè)計了3個存儲過程,分別用來向數(shù)據(jù)庫表中插入電壓/溫度信息、總信息和報警歷史。
為了保證相同時刻的數(shù)據(jù)信息存儲到數(shù)據(jù)庫中的一致性,在同時向數(shù)據(jù)庫中插入電壓/溫度信息和總信息時,使用了事務(wù)技術(shù)。
事務(wù)保證多個數(shù)據(jù)更改在一起處理,這個成為不可分割性。事務(wù)啟動之后,就必須成功完成,否則SQL Server將撤銷該事務(wù)啟動之后對數(shù)據(jù)所做的修改。
系統(tǒng)主界面如圖3所示。當(dāng)單擊開始采集時,系統(tǒng)開始采集電池組單體電壓、溫度,并在“實(shí)時數(shù)據(jù)顯示”中顯示。
在“當(dāng)前總信息”中顯示當(dāng)前最高電壓、最低電壓、總電壓、最高溫度、最低溫度以及對應(yīng)的電池通道。
在“通訊狀態(tài)”中顯示當(dāng)前通訊情況以及報警信息。
當(dāng)最高電壓、最低電壓、總電壓、最高溫度、最低溫度中有任意一項滿足報警條件或者手動單擊【停止采集】按鈕時,系統(tǒng)便停止采集數(shù)據(jù),并形成Excel文件,記錄該停止時刻電池組的詳細(xì)數(shù)據(jù)信息。
圖3 主界面
當(dāng)報警條件成立時,PC機(jī)主板蜂鳴器和音響同時發(fā)出報警聲音提示,直到單擊【解除報警】按鈕,該報警解除。
根據(jù)以上設(shè)計結(jié)合公司自主開發(fā)的采集器進(jìn)行了長時間連續(xù)的電池系統(tǒng)實(shí)際測試,結(jié)果如圖3所示。實(shí)驗結(jié)果表明,該系統(tǒng)能夠準(zhǔn)確反映電池組狀態(tài)以及異常信息。
本系統(tǒng)基于C#語言,采用了模塊化的程序設(shè)計思路,實(shí)現(xiàn)了電池組狀態(tài)信息實(shí)時采集、分析、顯示和記錄,數(shù)據(jù)記錄采用了數(shù)據(jù)庫技術(shù),有助于離線分析電池性能?;谟涗浀碾妷簲?shù)據(jù),有助于實(shí)現(xiàn)基于電壓數(shù)據(jù)的電池成組技術(shù)。
目前,該系統(tǒng)已經(jīng)應(yīng)用于本公司的產(chǎn)品測試中。本系統(tǒng)沒有采集電流數(shù)據(jù),在以后的系統(tǒng)設(shè)計中還要加上電流數(shù)據(jù)分析以及電池剩余電量計算,有助于進(jìn)一步研究電池剩余電量計算方法并提高計算精度。
[1]吳赟,蔣新華,解晶瑩.基于LabWindows/CVI的BMS測試系統(tǒng)設(shè)計[J].電源技術(shù),2009,33(7):621.
[2]明日科技.Visual C#開發(fā)技術(shù)大全[M].北京:人民郵電出版社,2007.
[3]薩師煊,王珊.數(shù)據(jù)庫系統(tǒng)概論[M].3版.北京:高等教育出版社,2003.