純電動客車CAN通信上位機設計研究

時間:2022-06-24 10:59:31

導語:純電動客車CAN通信上位機設計研究一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。

純電動客車CAN通信上位機設計研究

摘要:介紹開發CAN通信上位機時對報文自動解析的四種邏輯設計方法,并根據上位機前面板顯示需求特點的不同,采用中斷法和多任務法進行CAN上位機的編程及進行應用舉例。

關鍵詞:純電動客車;上位機;can

通信CAN總線是汽車領域目前應用最廣泛的現場總線之一[1],也是純電動客車各電氣件最主要的通信方式。其通信協議是連接CAN報文與各電氣件物理參數的紐帶,一般由各車廠根據實際需求制定。人工直接解析CAN報文是一項費事又耗力的工作,而通過上位機軟件解析則極大程度上解決了此問題,提高了工作效率,縮短了工程時間。基于此,本文采用一種根據CAN協議自動解析報文并保存數據的方法,為純電動客車開發上位機軟件[2-3]。

1上位機解析CAN報文的設計方法

1.1軟件程序的設計流程本上位機設計是基于QtCreator4.3.1的接口庫函數ControlCAN.lib和NILabVIEW2018的接口庫函數ControlCAN.dll二次開發而成[4-5]。接口庫函數的基本處理流程如圖1所示,該處理流程的底層函數結構如圖2所示。軟件設計過程中的基本處理流程應依次為打開設備→檢測有無設備打開信息異常→清空緩沖區→復位CAN→讀取CAN緩沖區幀數→讀取CAN內容→關閉設備[6]。在軟件系統內,根據接口庫函數二次開發的設計要求,結合純電動客車CAN總線數據量大的特點,為了盡可能不使上位機丟幀,程序內部應將讀取CAN報文程序[7]設為中斷程序,即當收到CAN報文后,程序立即響應中斷,讀取CAN報文并呈遞給程序設定參數,然后將報文解析出來,這樣才能最大幾率保證接收的CAN報文不丟失[8]。1.2對報文自動解析的邏輯設計方法報文的自動解析過程是程序設計最重要的一環。根據CAN報文SAEJ1939的規定[9],在純電動客車上,從CAN總線接收到的報文數據幀為8個字節,分別記為BYTE1……BYTE7、BYTE8,該數據均為十六進制數。根據CAN通信協議[10],找到相應ID的報文,然后由協議中的比例和偏置解析出相應的物理數據。本上位機的數據解析設計使用以下幾種方式。1.2.1對報文的直接處理協議規定,需要解析的字節BYTE。若比例為x、偏置為y,則解析出的結果z為(1)假設上位機收到BMS的報文[11]數據為{01,02,03,04,05,06,07,08},協議約定第2個字節為駕駛員制動踏板值,比例為0.4%,偏置為0,則當前駕駛員制動踏板值解析為(0x02)×0.4%+0=0.8%(2)1.2.2高低字節并行處理某ID的報文BYTE2和BYTE1對應電機控制器直流電壓的高字節與低字節,且比例都為x、偏置為y,則在程序中電機控制器直流電壓解析的公式為z=(BYTE2×16×16+BYTE1)×x+y(3)假如此ID接收到的數據為{01,3F,03,04,05,06,07,08},協議約定BYTE1為低字節,BYTE2為高字節,比例為0.1V/bit,偏置為-1000V,則電機控制器直流側電壓值通過十六進制轉換解析為(0x3F×16×16+0x01)×0.1-1000=612.9V(4)1.2.3單個位判斷處理根據通信協議,對報文的解析并不都是對數據的處理,還有對報文某位的判斷。例如報文中某字節的某位為1代表純電動客車后艙門打開,為0代表后艙門關閉,則此時需要先采用布爾運算,然后再判斷。對某字節中單個位的判斷邏輯:將某字節與需要判斷的位為1、其他位為0的單字節數進行與運算。若與運算后的數據與該單字節數相同,則表示該位為1,反之為0。設某報文為{x1,x2,x3,x4,x5,x6,x7,x8},假設需要將報文BYTE8轉換為二進制數后的最高位(第7位)進行判斷。根據上段判斷規則,應在程序設計中首先應該將BYTE8與0x80(第7位為1的二進制1000000的十六進制)進行與運算,如果運算結果為0x80,則說明BYTE8最高位bit7為1;反之為0,偽代碼如式(5)所示:if((x8&0x80)==0x80){BYTE8最高位為1;}elseif((x8&0x80)==0x00){BYTE8最高位為0;}(5)例如,某字節的BYTE3bit0位代表車輛當前狀態為前進擋,1有效,0無效。若收到該幀報文為{01,02,03,04,05,06,07,08},首先應將BYTE3與0x01作與運算,判斷bit0位,(0x03)&(0x01)=0x01,此時可以得出BYTE3的bit0為1,所以應將車輛前進擋的狀態發送給上位機,偽代碼如式(6)所示:if((BYTE3&0x01)==0x01){上位機顯示車輛為前進擋;}elseif((BYTE3&0x01)==0x00){上位機顯示車輛為非前進擋;}(6)綜上所述,對字節中單個位的判斷即與所對應字節的位置1的字節數相與,當得到相同的十六進制數,即可說明當前位為1,反之為0,然后在程序中使用判斷語句達到相應的效果。1.2.4對多個位判斷處理多個位聯合判斷的處理方式與單個位處理方式類似,但多了對多位進行與運算的處理。例如某ID的BYTE5,bit7~4表示整車高壓電池電芯類型,0001表示磷酸鐵鋰電芯,0010表示錳酸鋰電芯,0011表示鈷酸鋰電池,1111表示其他。由于是對bit7~4位的邏輯判斷,則應當對相應位作邏輯與運算處理,偽代碼如式(7)所示:

2上位機物理數據顯示的設計

在CAN通信上位機中對數據邏輯解析后,再將數據顯示到前面板上同樣也是一項重要的工作[12]。工程應用中,由于需要處理的CAN報文數據量巨大,純電動客車CAN總線在波特率為250kbps的情況下,一般能達到200~600幀/s的數據量。因此,如果處理不好前面板顯示任務,會由于數據量過大,造成數據擁堵、程序卡死、崩潰等情況。本上位機采用兩種方法處理物理數據的顯示,分別稱為中斷法顯示和多任務處理顯示。2.1中斷法顯示物理數據中斷法[13]顯示的程序處理流程如圖3所示。當主程序處理其他程序接收到CAN報文觸發程序中斷后,在中斷中將會發生4個步驟,先將接收到的CAN報文提取出來,然后使用邏輯算法將報文自動解析成各物理值,最后將物理值傳遞給前面板,最終前面板將數據顯示在軟件界面上。中斷法顯示物理數據的優點是能夠第一時間使接收到的CAN報文得到處理,不會因為其他原因而使數據的處理延遲,數據處理的實時性較高;缺點為對處理器的運算速度要求較高。若上位機需要導出EXCEL數據,則可能會出現周期小的報文的物理數據量多于周期大的報文的物理數據量。因此,中斷法適用于需要實時顯示車輛狀態的上位機軟件,不適合需要導入物理數據到圖表類的數據顯示軟件。2.2多任務法顯示物理數據多任務處理顯示的流程圖如圖4所示。主程序1處理初始化程序和其他類型程序,而CAN總線有報文發送后觸發中斷響應,中斷子程序接收CAN報文并自動解析出來,然后將各物理數據呈遞給全局變量;主程序2負責顯示全局變量,并呈遞給軟件前面板顯示。多任務處理的優點是能夠大大減少中斷程序處理數據的時間,主程序2按一定的周期循環執行,從而使得顯示數據與自動解析報文分離,互不干擾,也大大保證了數據的穩定性,尤其適合需要用EXCEL圖表類顯示數據的CAN上位機軟件;其缺點是顯示的數據有一定的延遲。由于接收到CAN報文后才能更新全局變量,因此,如果不觸發中斷,那么全局變量便得不到更新,有一定的延遲性。因此,在實際應用中,如果需要將CAN報文物理數據呈遞給EXCEL顯示,則使用多任務處理顯示的方式;如果是需要實時顯示純電動客車各項參數,更適合使用中斷法顯示。

3CAN上位機的應用

本上位機是根據某公司純電動城市客車整車CAN網絡通訊協議V3.1.2版本開發而成,主要用于通過整車CAN網絡讀取純電動城市客車的相關信息。由于是需要實時快速顯示整車各項狀態,所以前面板采用中斷法顯示物理數據,上位機截圖如圖5所示。用于記錄數據的上位機,由于需要將數據呈遞給EXCEL,所以采用多任務處理模式,其上位機截圖如圖6所示。上位機記錄數據有兩個任務:一個是負責處理初始化程序和解析數據;另一個是以周期為50ms循環顯示全局變量。截取的EXCEL如圖7所示。可以看出,雖然各物理數據來自于不同周期的報文,但是依然能夠以每秒20幀的速度顯示出完整的數據表格。這是由于顯示程序是一個周期為50ms的循環子程序,所以如果對應物理值的全局變量沒有得到更新,那么下一時刻的EXCEL數據記錄將會繼續繼承上一時刻全局變量的數據。

4結束語

本文介紹了一種可行性高的CAN上位機軟件制作方法,著重論述了將原始報文轉換成物理數據的處理方法。對于上位機前面板處理數據的顯示方式,可根據實際情況采用多任務法和中斷法兩種不同的處理方式。有針對性地處理,不僅能夠提高變成效率,而且還能使上位機運行穩定。

作者:徐希 戈小中 童曉輝 劉俊 單位:東風襄陽旅行車有限公司