<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 電源與新能源 > 設(shè)計應(yīng)用 > 基于LabVIEW的電池管理系統(tǒng)與充電機(jī)通信協(xié)議測試

          基于LabVIEW的電池管理系統(tǒng)與充電機(jī)通信協(xié)議測試

          作者: 時間:2014-01-09 來源:網(wǎng)絡(luò) 收藏

          隨著近年來電動汽車行業(yè)如火如荼的發(fā)展,電動汽車技術(shù)相關(guān)的各種標(biāo)準(zhǔn)也相繼推出,其中包括了《電動汽車非車載傳導(dǎo)式充電機(jī)與之間的通信協(xié)議》(GB/T 27930-2011)。該協(xié)議是基于CAN應(yīng)用層協(xié)議SAE J1939,J1939 是目前在國內(nèi)汽車行業(yè)中應(yīng)用廣泛的CAN總線應(yīng)用層協(xié)議。只有與充電機(jī)之間的正常數(shù)據(jù)交互才能保證電動汽車進(jìn)行高效、安全的充電。因此,與充電機(jī)通信協(xié)議測試是電池管理系統(tǒng)測試的一個必不可少的項(xiàng)目。

          本文引用地址:http://www.ex-cimer.com/article/227065.htm

          本課題來源于北方車輛研究所電池管理系統(tǒng)測試平臺項(xiàng)目。美國國家儀器NI PXI CAN采集卡以及為模擬充電機(jī)與BMS通信提供了良好的軟硬件環(huán)境。

          是美國國家儀器推出的一種程序開發(fā)環(huán)境,圖形化語言使其與其他的代碼類型語言相比之下更為方便直觀。以計算機(jī)作為運(yùn)行環(huán)境的,充分利用了計算機(jī)無可比擬的硬件優(yōu)勢,具有強(qiáng)大的數(shù)據(jù)處理能力。開發(fā)者可以很容易實(shí)現(xiàn)多線程編程,極大降低了軟件開發(fā)的難度。LabVIEW的前面板提供了豐富的類似傳統(tǒng)儀器的控件,開發(fā)者可以很方便的創(chuàng)建用戶界面。

          本文重點(diǎn)在于如何用LabVIEW實(shí)現(xiàn)SAE J1939多幀傳輸機(jī)制,完成超過8 B 報文的接收重組、拆分發(fā)送。以及如何實(shí)時判斷通信過程出現(xiàn)的錯誤、指出錯誤類型、定位錯誤發(fā)生的階段。

          1 SAE J1939 協(xié)議

          J1939 協(xié)議是基于CAN 2.0B 制定的,協(xié)議對物理層、數(shù)據(jù)鏈路層、網(wǎng)路層以及應(yīng)用層都進(jìn)行了相關(guān)的規(guī)定。本文針對數(shù)據(jù)鏈路層的規(guī)定進(jìn)行簡單介紹。

          1.1 協(xié)議數(shù)據(jù)單元(PDU)

          J1939 將CAN 2.0B 的29 位標(biāo)識符ID 劃分為六部分,每部分都代表不同的含義,包括優(yōu)先級(P)、保留位(R)、數(shù)據(jù)頁(DP)、PDU格式(PF)、特定PDU(PS)、源地址(SA),見表1.

          基于LabVIEW的電池管理系統(tǒng)與充電機(jī)通信協(xié)議測試

          根據(jù)CAN 2.0 總線的仲裁機(jī)制,標(biāo)識符值越小,CAN幀優(yōu)先級越高,J1939把這一權(quán)利賦予了標(biāo)識符最高三位(P)。R、DP通常為0.SA代表了該幀數(shù)據(jù)的發(fā)送節(jié)點(diǎn)的地址,CAN 網(wǎng)絡(luò)中每個設(shè)備都分配了惟一的SA.在介紹PF 與PS之前有必要先介紹下參數(shù)組編號(PGN)的概念。每個PGN代表著惟一的參數(shù)組(可以包含一個或多個參數(shù)),當(dāng)參數(shù)組的數(shù)據(jù)域大于8 B時,需要遵循J1939的多幀傳輸機(jī)制。PGN 由R、DP、PF 以及PS 組成,見表2.從表2 中可以看出PDU2 格式報文沒有目標(biāo)地址,此類報文只能發(fā)送給全局地址。由于PS作為PDU2 格式參數(shù)組編號的一部分,因此PDU2 比PDU1能定義更多的參數(shù)組編號。

          基于LabVIEW的電池管理系統(tǒng)與充電機(jī)通信協(xié)議測試

          1.2 多幀傳輸機(jī)制

          CAN 2.0B 數(shù)據(jù)域最多有8 B,而在J1939協(xié)議中當(dāng)一個參數(shù)組編號(PGN)所對應(yīng)的數(shù)據(jù)超過8 B時,規(guī)定了一種多幀傳輸機(jī)制,發(fā)送者按此機(jī)制拆分發(fā)送,接收者按此機(jī)制接收重組,因此一個參數(shù)組編號所對應(yīng)的數(shù)據(jù)最多可以為1 785 B.點(diǎn)對點(diǎn)未發(fā)生錯誤的多幀傳輸機(jī)制如圖1 所示,J1939 對傳輸過程出現(xiàn)錯誤的情況也規(guī)定了相應(yīng)的處理機(jī)制,在此不作介紹。

          TP.CM_RTS、TP.CM_CTS、TP.DT、TP.EndofMsgACK均為J1939特定功能報文,其參數(shù)組編號也由J1939規(guī)定,因此這些參數(shù)組編號不能再被用戶定義。TP.CM_RTS為消息發(fā)送者發(fā)送的請求發(fā)送幀,由此開始建立多幀傳輸鏈接,其數(shù)據(jù)域包括了此次發(fā)送的消息全部字節(jié)數(shù)、全部數(shù)據(jù)包數(shù)(TP.DT 幀數(shù))以及該消息的參數(shù)組編號等信息。接收者根據(jù)自己的接收能力,發(fā)送準(zhǔn)備發(fā)送幀TP.CM_CTS,通知發(fā)送者下次可發(fā)送的數(shù)據(jù)包數(shù)、下一個要發(fā)送的數(shù)據(jù)包編號以及消息的參數(shù)組編號。發(fā)送者根據(jù)接收者的要求開始發(fā)送數(shù)據(jù)包TP.DT,數(shù)據(jù)包的數(shù)據(jù)域第一字節(jié)代表了該包號,因此一個數(shù)據(jù)包最多包含消息的7 B.

          基于LabVIEW的電池管理系統(tǒng)與充電機(jī)通信協(xié)議測試

          這個過程循環(huán)進(jìn)行,直至接收者接收到全部數(shù)據(jù)包后發(fā)送消息結(jié)束應(yīng)答幀TP.EndofMsgACK代表著這次多幀傳輸?shù)慕Y(jié)束。若發(fā)送的消息是全局消息,則所有接收者不應(yīng)有任何應(yīng)答,整個傳輸過程如圖2所示。

          基于LabVIEW的電池管理系統(tǒng)與充電機(jī)通信協(xié)議測試

          2 基于LabVIEW實(shí)現(xiàn)J1939 協(xié)議平臺

          2.1 硬件接口

          利用NI PXI-8513 CAN 接口板卡實(shí)現(xiàn)該系統(tǒng)的硬件接口。NI已為開發(fā)者提供了該板卡的底層驅(qū)動,可以很方便對CAN節(jié)點(diǎn)參數(shù)進(jìn)行配置以及接收和發(fā)送符合CAN 2.0的消息幀,然而對于多幀傳輸機(jī)制還需開發(fā)者自行設(shè)計。由于J1939 協(xié)議涉及發(fā)送者與接收者的應(yīng)答,因此在基于LabVIEW開發(fā)J1939同時也利用C語言開發(fā)基于飛思卡爾單片機(jī)

          通信相關(guān)文章:通信原理



          上一頁 1 2 3 下一頁

          關(guān)鍵詞: LabVIEW 電池管理系統(tǒng)

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();