徐萌飛
( 中國船舶重工集團公司第七一二研究所,武漢 430064 )
電池組在使用和維護過程中,只要出現(xiàn)某些電池相對其他電池性能衰減較大,將使整個電池組的容量明顯下降,導致不能滿足設備的動力需求。由于蓄電池生產(chǎn)廠家的技術(shù)、生產(chǎn)批次以及管理方面的因素,同一個廠家的同批次同型號的電池及時實施同樣的化成工藝也無法完全保持一致,為了在電池化成時把性能相近的電池組合到一起,使得組合后電池組平均放電容量基本趨同于單體電池最小放電容量,從而確保蓄電池功能及壽命。
當前業(yè)界常使用的蓄電池配組方法包括以下幾種:
(1)電壓配組法:電壓配組法中又包括靜態(tài)電壓配組法和負載電壓配組法,通過在指定時間內(nèi)或指定電壓范圍內(nèi)電池組中單體電池兩端的電壓記錄,選擇出趨于一致性的電池。
(2)容量配組法:根據(jù)國家電池標準中的容量測試方法,將實驗過程中各電池的容量數(shù)據(jù)進行匹配,選擇出趨于一致的電池。
(3)動態(tài)特性配組法:使用一定的測試條件和測試環(huán)境,對所有進行配組的目標電池執(zhí)行同樣的電池實驗,然后比較實驗過程中的數(shù)據(jù),將實驗過程中充放電曲線趨于一致的電池挑選出來。
電池配組功能基于電池實驗的特性數(shù)據(jù),以實現(xiàn)電壓配組法的軟件為例,主要包括如下幾部分功能
主要提供對電池實驗特征數(shù)據(jù)文件的解析,將實驗數(shù)據(jù)轉(zhuǎn)化為內(nèi)部的數(shù)據(jù)結(jié)構(gòu)。
其中數(shù)據(jù)結(jié)構(gòu)一般包含以下內(nèi)容:電池批次號,電池型號,電池組運行工藝,電池組運行工藝總時間,工藝步驟的時間、步驟號、單體電池編號、單體電壓等,如果用戶要對不同化成槽的多組電池組進行統(tǒng)一配組,還需要記錄化成槽(充放電通道)編號。因為記錄數(shù)據(jù)較多,一般常定義結(jié)構(gòu)體,采用鏈表或者數(shù)組形式進行存儲。
以基于電池單體電壓數(shù)據(jù)進行配組的客戶需求為例,客戶需要的電池配組篩選方式包含兩種:
a.以時間為條件按電壓配組
當客戶選取電池充放電記錄后,選擇某個充放電步驟以及步驟中某個時間點。然后根據(jù)需要,劃分出需要配組的電壓范圍,程序能夠根據(jù)用戶需要將在指定電壓范圍內(nèi)的單體電池挑選出來配成一組。在同一個分組內(nèi),按電池充電的回路數(shù)和單體的序號進行排序。
為實現(xiàn)以上功能,需要生成相關(guān)的電壓范圍分段,然后在前述存儲記錄數(shù)據(jù)的鏈表和數(shù)組中執(zhí)行查詢算法,以分段電壓為查詢條件,然后創(chuàng)建報表文件,將查詢得到的數(shù)據(jù)放到報表中展示給客戶。
b.以指定工藝步驟中指定電壓為條件配組
當客戶指定某個工藝步驟,并按某個指定的單體電壓范圍對記錄中所有數(shù)據(jù)進行篩選。
篩選出來的單體電池數(shù)據(jù)可以按兩種方式排序,一種是按單步時間排序,即篩選出的數(shù)據(jù)的排序條件優(yōu)先順序分別是:按單步時間從小到大,相同單步時間的,按化成槽編號排序,化成槽編號仍相同的,按單體電池序號排序。
另外一種排序優(yōu)先級是按化成槽編號排序,化成槽編號相同的,按單體電池序號排序。
從前述的設計思路可以看到,配組算法是整個電池配組程序的核心,為實現(xiàn)配組功能,需要申請用于配組的內(nèi)存空間來放置數(shù)據(jù)鏈表。在電池特性數(shù)據(jù)量很大的情況下,尤其是客戶根據(jù)不同電壓區(qū)間范圍進行分組時,要多次查詢比較和保存,可能還需要使用動態(tài)數(shù)組等可擴展結(jié)構(gòu)來保留數(shù)據(jù),實現(xiàn)此功能,對軟件功能的穩(wěn)定性和性能要求比較高,需要花費較長時間來進行設計和測試。并且涉及到大量數(shù)據(jù)和復雜算法的程序,往往要考慮性能,資源,等多方面,相互影響的方面較多。而且軟件交付客戶后,如果客戶對電池配組的篩選條件發(fā)生變化,可能又要進行算法上的大幅度修改,涉及的代碼量大,不利于快速響應。
其次,出于統(tǒng)計和查看需要,用戶一般將需要進行電池配組的記錄挑選出來,保存為 excel文件形式,等需要進行配組時再使用,這樣配組軟件需要將數(shù)據(jù)從 excel文件中導入到內(nèi)存中。由于用戶使用的 excel版本和格式的不同,需要用到不同的適配器與之匹配,將數(shù)據(jù)轉(zhuǎn)化為內(nèi)部的鏈表或者數(shù)組結(jié)構(gòu),這要求開發(fā)者必須對excel格式有充分了解。同時,如果用戶保存的 excel文件中的數(shù)據(jù)字段順序和格式發(fā)生變化,軟件面臨需要修改文件解析代碼,這些也無疑增大了程序開發(fā)人員的工作量。
為解決前述問題,特提出一種基于SQL數(shù)據(jù)庫的配組功能實現(xiàn)方式,能夠大幅度降低代碼開發(fā)工作量,加快開發(fā)速度和效率,而且對于數(shù)據(jù)格式變化有很好的靈活適配性。
首先在數(shù)據(jù)庫中創(chuàng)建支持電池配組功能的基礎(chǔ)數(shù)據(jù)表。然后將用戶保存的實驗記錄數(shù)據(jù)導入到數(shù)據(jù)庫表中,最后借助 SQL語句進行配組實驗。
(1)基于SQL數(shù)據(jù)庫的記錄解析功能實現(xiàn)
如果用戶使用同一套軟件完成充放電實驗記錄和配組,則此過程可以忽略。否則就要通過導入功能將其他格式的數(shù)據(jù)轉(zhuǎn)換進入配組數(shù)據(jù)庫表中。考慮到大多數(shù)用戶經(jīng)常使用 Excel來處理相關(guān)記錄數(shù)據(jù),導入的數(shù)據(jù)源也使用 excel文件格式,即使不同廠商的數(shù)據(jù),經(jīng)過 excel調(diào)整后,也便于導入。很多基于 SQL的數(shù)據(jù)庫都提供對excel文件的導入支持,尤其是微軟的 SQL SERVER,提供了強大的導入功能,其具有特色的批量導入功能,效率很高。常用的是SqlBulkCopy 類,SqlBulkCopy 類不僅僅可以支持數(shù)據(jù)庫中表對表的數(shù)據(jù)轉(zhuǎn)換導入,還支持將其他將數(shù)據(jù)(如Excel、Access、文本)加載到 SQL Server 表中,只要這些數(shù)據(jù)可加載到 DataTable實例或可使用 IDataReader 實例讀取。相比起簡單調(diào)用 Insert語句,SqlBulkCopy具有很強的性能優(yōu)勢。詳細代碼再次不多描述。
(2)使用SQL語句將橫表變?yōu)榭v表
充放電數(shù)據(jù)記錄基本表中單體電壓數(shù)據(jù)是以橫表的形式出現(xiàn),即單體電壓V1,V2,…V(n)出現(xiàn)在字段名中,對應同一個化成槽中的n個單體電壓數(shù)據(jù)以一條記錄的形式出現(xiàn),如下表:
V1 V2 V3 … V(n)12.10 12.00 11.98 11.99
為實現(xiàn)電池配組需求,需要使用SQL語句對電池單體電壓進行分組和排序,根據(jù)單體電壓字段進行篩選。所以,需要將橫表還原成以單體電壓序號和單體電壓值兩個字段組成的縱表樣式。如下表:
電池單體序號 電壓V1 12.1 V2 12… …V(n-1)11.90 V(n)11.99
其他字段保持原有值不變。使用SQL語句中的Union all語句能夠輕松完成此功能。并且在實現(xiàn)橫表變縱表時,為避免新建數(shù)據(jù)表造成數(shù)據(jù)冗余,可使用數(shù)據(jù)庫中的視圖(view)來完成同樣的功能,以上SQL語句在此不詳述。
由于不同型號的化成設備的單體數(shù)量不定,所以查詢用的 SQL語句主要使用程序代碼進行自動拼接而成,從理論上可以支持一個通道包含任意多個電池單體(前提是不超過數(shù)據(jù)庫表字段數(shù)的最大值),程序流程如圖1。
(3)使用SQL語句進行電池配組
在步驟(2)中實現(xiàn)了橫表變縱表后,仍然使用SQL語句完成配組功能:
例如:按指定某個工藝步驟,并按某個指定的單體電壓范圍對記錄中所有數(shù)據(jù)進行篩選,結(jié)果按步驟時間排序的SQL語句如下:
select * from table where [step =(指定步驟)],voltagevalue >(篩選范圍最小值)and voltage value <= (篩選范圍最大值)order by steptime
具體實現(xiàn)的代碼不再詳述。
考慮到需要從多個電池批次的記錄中提取數(shù)據(jù),如果先合并對應的多張電池記錄表,再使用SQL查詢排序,因合并占用較多時間而低效。所以采用先查詢出符合條件的記錄放到dataset中,然后再合并dataset的有效數(shù)據(jù),提高處理效率。
圖1 程序流程
假設完成以上功能后,客戶需要更新配組條件,比如僅對狀態(tài)處于放電過程中的數(shù)據(jù)進行匹配,此時只需要簡單修改查詢的SQL語句為
select * from table where [step =(指定步驟)],voltagevalue >(篩選范圍最小值)and voltage value<= (篩選范圍最大值)and runmode =(放電)
其他部分的代碼將不需要改動,工作量很小。
比以上方式更為靈活的設計是,將查詢的SQL語句放置到數(shù)據(jù)庫的存儲過程中實現(xiàn),一旦用戶需要調(diào)整,直接修改存儲過程,代碼都無需重新修改編譯。
最后,用戶一般需要進行報表打印和配組標簽打印功能,常用的水晶報表軟件等報表工具都已經(jīng)實現(xiàn)了對SQL數(shù)據(jù)庫的全面支持,實現(xiàn)更加方便。
配組是電池充放電系統(tǒng)的必須功能之一,實現(xiàn)方式多樣。本文提出了一種基于SQL數(shù)據(jù)庫實現(xiàn)配組功能的方法,和普通實現(xiàn)配組功能的硬編碼相比,除了前述提及的開發(fā)速度快,應對需求變化靈活,接口開放的優(yōu)點外,還具有其他優(yōu)勢。
首先,SQL是已經(jīng)標準化的數(shù)據(jù)庫語言,得到幾乎所有主流數(shù)據(jù)庫的支持,經(jīng)過全球用戶多年的驗證使用,基于其實現(xiàn)的軟件質(zhì)量有良好保障。而大多數(shù)充放電管理系統(tǒng)本身就需要用到數(shù)據(jù)庫,無需為配組功能另外安裝數(shù)據(jù)庫,配組算法組算法中只要簡單保證SQL語句的正確性,基本就保證了功能正確性,降低了大量編碼中人為引入的代碼缺陷。
其次,配組功能隨著需要匹配的通道增加,數(shù)據(jù)量會成倍增加,如果配組功能是使用本地代碼算法進行匹配篩選,會占用大量cpu和內(nèi)存空間,在配組功能和充放電系統(tǒng)管理程序其他功能(如實時數(shù)據(jù)記錄,實時數(shù)據(jù)顯示,數(shù)據(jù)繪圖)并行運行時,可能會導致機器資源匱乏,影響管理系統(tǒng)正常的通訊和處理。如果單獨為配組程序配置一臺機器又加大了成本。而采用本文提出的應用SQL方式進行配組后,配組處理都在性能更高的數(shù)據(jù)庫服務器上完成,僅僅將結(jié)果返回給客戶端的配組程序,在客戶端上運行的配組和電池管理系統(tǒng)的其他功能所共用的資源很少,整個系統(tǒng)的性能和成本上都具備很大優(yōu)勢。
最后,不僅僅是電池配組功能可以采用本文中提到的方式來實現(xiàn),很多需要進行大批量數(shù)據(jù)篩選匹配的系統(tǒng)(例如醫(yī)藥數(shù)據(jù)匹配,人員信息管理等),在需要快速交付且客戶定制化需求較多的情況下,都可以采用同樣的方式來實現(xiàn),為客戶提供高效低缺陷靈活的解決方案。
[1]MSDN Library for visual stduio 2005. Microsoft corporation. 1987-2005.2009年第六期.
[2]孫雪梅, 丁軍航, 原明亭. 基于 C#.NET的 Excel表格數(shù)據(jù)導入數(shù)據(jù)庫技術(shù)研究. 信息技術(shù)與信息化,2009, (6).
[3]郭自強. 關(guān)于鉛酸蓄電池配組. 中國自行車, 2009,(2).
[4]趙亞鋒, 馮廣斌, 張連武. 蓄電池一致性配組研究兵工自動化, 2006, 25(10).
[5]王有山, 孫力生, 王海博. 電動車電池配組問題探析. 蓄電池, 2007, 44(2).