黎曦,田建偉,劉金,漆文輝
(國網(wǎng)湖南省電力公司電力科學(xué)研究院,湖南長沙410007)
為解決電動汽車的能源供給,配套的集中式充換電設(shè)施也相繼建成,截止2011年,中國已建成電動汽車充電站314座,電動汽車交流充電樁超過1.6萬個。根據(jù)電動汽車科技發(fā)展“十二五”規(guī)劃〔1〕,到2015年全國將建成由40萬個充電樁、2 000個充換電站構(gòu)成的網(wǎng)絡(luò)化供電體系。
為保證充換電設(shè)施提供可靠穩(wěn)定的能源供給服務(wù),需要通過監(jiān)控系統(tǒng)對其充電過程進行有序控制和管理〔2-3〕。根據(jù)充電機電池管理系統(tǒng)通訊協(xié)議的國家標(biāo)準(zhǔn)〔4〕,整車蓄電池組充電過程中,監(jiān)控服務(wù)器每秒需要解析處理大約1 500個CAN協(xié)議幀,對于一座擁有50臺直流充電機的大型充電站,考慮到充電機同時工作,監(jiān)控系統(tǒng)每秒最多需要處理近8萬個充電機報文。隨著充電站建設(shè)規(guī)模的不斷擴大,監(jiān)控服務(wù)器的并發(fā)處理數(shù)據(jù)量將更加龐大,監(jiān)控系統(tǒng)中充電機數(shù)據(jù)傳輸控制這一關(guān)鍵技術(shù)亟需研究解決。
充電設(shè)施數(shù)據(jù)傳輸控制模型的主要任務(wù)是通過協(xié)議轉(zhuǎn)化以及大數(shù)據(jù)并發(fā)控制算法,實現(xiàn)對大規(guī)模充電站中,充電機上行數(shù)據(jù)的實時采集、解析和組裝,以及對監(jiān)控客戶端下行控制命令的及時下發(fā)。
傳輸邏輯結(jié)構(gòu)如圖1所示,由充電機、CAN協(xié)議轉(zhuǎn)換設(shè)備、通訊服務(wù)器,監(jiān)控客戶端等幾部分組成。通訊服務(wù)器為該系統(tǒng)的核心部分,負(fù)責(zé)維護與CAN協(xié)議轉(zhuǎn)換器的下行socket連接和與客戶端的上行socket連接,負(fù)責(zé)數(shù)據(jù)幀的傳輸控制和解析處理。嵌入式數(shù)據(jù)庫則將通訊服務(wù)器內(nèi)存中的非當(dāng)前數(shù)據(jù)轉(zhuǎn)存到歷史數(shù)據(jù)庫??蛻舳送ㄟ^調(diào)用與通訊服務(wù)器的API接口讀取蓄電池和充電機的實時數(shù)據(jù),通過歷史數(shù)據(jù)庫查詢非實時數(shù)據(jù)。
圖1 充電站數(shù)據(jù)傳輸?shù)倪壿嫿Y(jié)構(gòu)圖
該系統(tǒng)中的數(shù)據(jù)主要分為2類:控制命令和監(jiān)控數(shù)據(jù)。用戶下發(fā)的充電機啟動和停止、GPS對時等控制命令經(jīng)過通訊服務(wù)器組裝為CAN數(shù)據(jù)幀,再通過協(xié)議轉(zhuǎn)化器下發(fā)到充電機。監(jiān)控數(shù)據(jù)包括蓄電池基本信息、蓄電池電壓、蓄電池溫和蓄電池狀態(tài)燈電動汽車的BMS數(shù)據(jù),以及充電機狀態(tài)、充電機電壓電流等充電機本身的狀態(tài)數(shù)據(jù),這些數(shù)據(jù)通過主動周期性發(fā)送的方式,經(jīng)由協(xié)議轉(zhuǎn)化器打包成以太網(wǎng)協(xié)議幀后,傳輸至通訊服務(wù)器。通訊服務(wù)器再按照不同的數(shù)據(jù)類型,調(diào)用不同的處理線程和隊列把數(shù)據(jù)幀解析成監(jiān)控客戶端能夠理解的應(yīng)用層數(shù)據(jù)。
該傳輸控制方法與現(xiàn)有監(jiān)控系統(tǒng)技術(shù)相比,優(yōu)點在于:通過多線程調(diào)度方法解決了大型充電站中數(shù)據(jù)傳輸?shù)膶嵭行院筒l(fā)性問題;加入實時數(shù)據(jù)庫技術(shù),提高數(shù)據(jù)處理效率和系統(tǒng)健壯性。
大型充電站中,通訊服務(wù)器每秒需要解析、轉(zhuǎn)發(fā)和重組的CAN數(shù)據(jù)幀達到上萬個。受到成本等因數(shù)的限制,很難通過提高硬件配置來提升系統(tǒng)處理能力。所以,實現(xiàn)數(shù)據(jù)實時處理的關(guān)鍵在于研究大規(guī)模數(shù)據(jù)的并發(fā)控制方法。文中針對大型充電站充電設(shè)施數(shù)據(jù)實時采集和控制難點,研究和設(shè)計了基于多隊列多線程的充換電設(shè)施監(jiān)控數(shù)據(jù)采集和傳輸方法。該方法的思路:針對CAN協(xié)議數(shù)據(jù)單元特點,設(shè)計CAN協(xié)議應(yīng)用層的數(shù)據(jù)子模型,該模型可以實現(xiàn)不同優(yōu)先級和不同數(shù)據(jù)量的CAN數(shù)據(jù)幀可靠傳輸;根據(jù)監(jiān)控實時性的要求,采用基于socket API的以太網(wǎng)數(shù)據(jù)傳輸子模型,將BMS數(shù)據(jù)、計費數(shù)據(jù)和充電機狀態(tài)數(shù)據(jù)實時顯示到客戶端;在數(shù)據(jù)子模型的基礎(chǔ)上,設(shè)計數(shù)據(jù)并發(fā)采集和處理方法,該方法采用多隊列和多線程技術(shù),并運用線程同步技術(shù)實現(xiàn)異步并發(fā)地處理大流量的CAN數(shù)據(jù)幀,有效解決了數(shù)據(jù)共享沖突問題。
1)CAN數(shù)據(jù)幀通訊模型
每個CAN數(shù)據(jù)幀包含1個協(xié)議數(shù)據(jù)單元(PDU)。協(xié)議數(shù)據(jù)單元由7部分組成,分別是優(yōu)先級 (P),保留位 (R),數(shù)據(jù)頁 (DP),PDU格式 (PF),特定PDU(PS),源地址 (SA)和數(shù)據(jù)域 (DATA)。PDU被封裝在1個或多個CAN數(shù)據(jù)幀中,通過物理介質(zhì)傳送到其它網(wǎng)絡(luò)設(shè)備,PDU域見表1。協(xié)議數(shù)據(jù)單元的優(yōu)先級位、保留位,數(shù)據(jù)頁位 (8位)和PDU格式域 (8位)和組擴展域 (8位)組成參數(shù)組編號 (PGN),用來標(biāo)識CAN數(shù)據(jù)幀的數(shù)據(jù)域?qū)儆谀膫€參數(shù)組。
表1 文件傳輸數(shù)據(jù)幀格式定義
根據(jù)協(xié)議數(shù)據(jù)單元的傳輸特點,把充電設(shè)施監(jiān)控數(shù)據(jù)分為4類:命令幀、單包數(shù)據(jù)幀、多包數(shù)據(jù)幀和鏈接管理幀。
命令幀:從監(jiān)控計算機向特定目標(biāo)地址充電機或全局目標(biāo)地址發(fā)送命令的數(shù)據(jù)幀。主要包括:充電機緊急停止充電命令 (PGN:0051H),充電機啟動充電命令 (PGN:0452H),充電機終止充電命令 (PGN:0453H),系統(tǒng)對時命令 (PGN:0454H)。充電設(shè)施收到的監(jiān)控計算機下發(fā)的命令,充電機應(yīng)使用確認(rèn)幀ACK(PGN:00E8H)給予肯定或否定的回答。
單包數(shù)據(jù)幀:數(shù)據(jù)長度不超過8個字節(jié)的數(shù)據(jù)幀。主要包括:充電機充電狀態(tài)1(PGN:1830H),充電機充電狀態(tài)2(PGN:1831H),充電機事件 (PGN:1833H),蓄電池充電狀態(tài)1(PGN:1808H),蓄電池充電狀態(tài) 2(PGN:1809H),蓄電池充電狀態(tài)3(PGN:180AH)。單包數(shù)據(jù)幀采用主動發(fā)送的方式,由充電設(shè)施周期性(一般為2 s)發(fā)送到通訊服務(wù)器。
多包數(shù)據(jù)幀:數(shù)據(jù)長度超過8個字節(jié)的數(shù)據(jù)幀。主要包括:蓄電池基本信息 (PGN:18F1H),蓄電池溫度數(shù)據(jù) (PGN:180CH),蓄電池模塊/單體電壓 (PGN:180BH),計費信息 (PGN:180DH)。多包數(shù)據(jù)采用充電設(shè)施主動請求,鏈接管理幀控制的方式,實現(xiàn)數(shù)據(jù)的可靠傳輸。
鏈接管理幀:這類數(shù)據(jù)幀用于在多包傳輸中建立和關(guān)閉連接,以及控制數(shù)據(jù)流,從而保證數(shù)據(jù)的可靠傳輸。鏈接管理幀 (TP.CM,PGN:1BECH)根據(jù)數(shù)據(jù)域中控制字節(jié) (第1個字節(jié))的值,分為請求發(fā)送幀 (TP.CM_RTS)、準(zhǔn)備發(fā)送幀(TP.CM_CTS)、數(shù)據(jù)傳送幀 (TP.DT)和確認(rèn)幀(TP.CM_EndofMsgAck)4種。TP.CM_RTS的控制字節(jié)編號為16,第2個和第3個字節(jié)為將要傳輸?shù)南⒌拇笮。?個字節(jié)為將要傳輸消息的包數(shù),第6—8個字節(jié)為消息的參數(shù)組編號。TP.CM_CTS的控制字節(jié)編號為17,第2個字節(jié)為可接受的數(shù)據(jù)數(shù)據(jù)包數(shù),第2個字節(jié)為下一個要接受的數(shù)據(jù)包編號,第6—8個字節(jié)為消息的參數(shù)組編號。TP.DT為多包消息傳送中的單個數(shù)據(jù)包,第1個字節(jié)為編號,第2—8個字節(jié)為數(shù)據(jù)。TP.CM_EndofMsgAck控制字節(jié)編號為19,第2個和第3個字節(jié)為收到消息的大小,第6—8個字節(jié)為消息的參數(shù)組編號。如圖2以蓄電池基本信息為例,說明了多包傳輸控制過程。
圖2 多包傳輸控制過程
充電機向通訊服務(wù)器發(fā)出請求傳輸3包 (20個字節(jié))的蓄電池基本信息,通訊服務(wù)器回復(fù)可以接收前2包;充電機發(fā)送前2包后,通訊服務(wù)器由于丟失了第2包,要求重發(fā),充電機重新發(fā)送第2包;通訊服務(wù)器成功接收到第2包后,充電機發(fā)送第3包;接收到第3包數(shù)據(jù)后,通訊服務(wù)器向充電機發(fā)送確認(rèn)幀,已成功接收3包20個字節(jié)數(shù)據(jù)。
2)應(yīng)用層通訊模型
建立上行socket,處理客戶端的數(shù)據(jù)請求和控制命令的傳輸。根據(jù)客戶端請求數(shù)量,為每個客戶端請求建立一個獨立的socket對象,數(shù)據(jù)傳輸完成后自動釋放該對象。同時為降低多socket帶來的負(fù)載,引入了超時機制,在收到請求報文后開啟1個計時器,一定時間內(nèi)如果沒有得到報文的確認(rèn)幀,則直接清除和釋放該socket對象。應(yīng)用層socket API通訊連接過程如圖3。
圖3 應(yīng)用層socket API通訊連接過程
算法有3類隊列:接收/發(fā)送隊列、緩沖隊列Ⅰ和緩沖隊列Ⅱ。接收/發(fā)送隊列在內(nèi)存中設(shè)置接收和發(fā)送2個幀隊列,用于存放收到和需要發(fā)送的CAN數(shù)據(jù)幀。為了能夠?qū)AN數(shù)據(jù)幀接收和發(fā)送實現(xiàn)流量控制,這2個隊列采用支持多線程讀寫互斥的循環(huán)隊列。結(jié)構(gòu)如圖4所示,當(dāng)接收隊列有空閑單元時,CAN數(shù)據(jù)幀單元可以入隊,隊列滿時則暫停接收CAN數(shù)據(jù)幀;當(dāng)發(fā)送隊列有空閑單元時,需要發(fā)送的CAN數(shù)據(jù)幀直接入隊,隊列滿時,則在緩沖隊列Ⅰ中排隊等待。接收和發(fā)送線程使用信號量機制實現(xiàn)對循環(huán)隊列讀寫的互斥訪問。通過循環(huán)對列可以實現(xiàn)對CAN數(shù)據(jù)幀接收和發(fā)送的流量控制,達到滑動窗口的效果。
圖4 基于多隊列和多線程的數(shù)據(jù)處理方法
根據(jù)通訊規(guī)約,CAN數(shù)據(jù)幀包含蓄電池基本信息、蓄電池電壓、蓄電池溫度、充電機狀態(tài)等監(jiān)控信息。為了實現(xiàn)數(shù)據(jù)幀的快速解析,按照數(shù)據(jù)包類型,分發(fā)線程將不同的數(shù)據(jù)包發(fā)送到不同的緩沖隊列Ⅰ中,等待數(shù)據(jù)解析線程的處理。緩沖隊列Ⅰ支持多線程互斥讀寫的帶頭結(jié)點的FIFO鏈表,存放的是CAN協(xié)議格式數(shù)據(jù)幀,主要起到緩沖的作用。緩沖隊列Ⅱ中存放的是按照類型組裝后的數(shù)據(jù)結(jié)構(gòu),供請求發(fā)送線程讀取,同樣采用的是支持互斥訪問的FIFO鏈表。通過兩級緩沖隊列不僅可以實現(xiàn)CAN數(shù)據(jù)幀的流量控制,同時可以提高系統(tǒng)處理CAN數(shù)據(jù)幀的速度和效率。
從充電機監(jiān)控數(shù)據(jù)處理方法入手,基于多線程和多隊列技術(shù)提出了一種大規(guī)模實時并發(fā)傳輸控制方法,設(shè)計并實現(xiàn)了整個電動汽車充電站數(shù)據(jù)傳輸控制系統(tǒng),從而確保了數(shù)據(jù)處理的實時性。該方法具有以下優(yōu)點:采用多線程和多級緩沖機制進行數(shù)據(jù)數(shù)據(jù)處理,有效提高了數(shù)據(jù)處理實時性;根據(jù)CAN協(xié)議數(shù)據(jù)單元特點對CAN數(shù)據(jù)報文進行了區(qū)分,并利用不同處理線程進行解析,有效提高了數(shù)據(jù)處理效率;依據(jù)實際情況自定義了CAN數(shù)據(jù)報文優(yōu)先級,并利用不同處理線程進行處理,有效保證了重要數(shù)據(jù)處理的實時性。
〔1〕張文亮,武斌,李武峰,等.我國純電動汽車的發(fā)展方向及能源供給模式的探討〔J〕.電網(wǎng)技術(shù),2009,33(4):1-5.
〔2〕李競成.電動汽車智能充電站研究與開發(fā)〔D〕.杭州:浙江大學(xué),2006,8-9.
〔3〕王健,姜久春.電動汽車充電站信息管理系統(tǒng)的設(shè)計與實現(xiàn)〔J〕.微計算機信息,2006,22(5-3):16-17.
〔4〕王勇,崔曉丹,閆濤,等.基于CAN和RS 485的電動汽車充電機控制系統(tǒng)〔J〕.機械與電子,2008,8:27-30.