本發(fā)明涉及can總線,特別是涉及一種can信號(hào)封裝和數(shù)據(jù)解析方法。
背景技術(shù):
1、can通訊是汽車(chē)行業(yè)的首選通訊方式,新能源車(chē)動(dòng)力系統(tǒng)的電機(jī)控制器也采用can的通訊方式,在電機(jī)臺(tái)架測(cè)試中需要對(duì)電機(jī)實(shí)施控制,就要用軟件根據(jù)can協(xié)議編寫(xiě)上位機(jī)。dbc格式的can協(xié)議是目前最為廣泛的通用協(xié)議格式,對(duì)象是can?signal,提供的信息對(duì)象為startbit、length、offset、factor。通過(guò)startbit、length可以得出can?signal在64bit排列中的位置,并可以看出每個(gè)can?signal的h-byte、l-byte在8個(gè)byte中的起始位和終點(diǎn)位置。
2、can通訊分為發(fā)送和接收,分別對(duì)應(yīng)封裝和解析兩個(gè)過(guò)程。針對(duì)多can?signal的應(yīng)用場(chǎng)景,現(xiàn)有封裝技術(shù)編寫(xiě)兩個(gè)輸入控制can?signal到data的運(yùn)算輸入過(guò)程,can?signal1和can?signal2在dbc中的位置及程序運(yùn)算邏輯如下:
3、(can?signal1-offset1)/factor1/16=iq1(商)......r1(余數(shù));
4、iq1=can?signal1?h_byte;
5、r1=can?signal1?l_byte;
6、(can?signal2-offset2)/factor2/8=iq2(商)......r2(余數(shù));
7、iq2=can?signal2?h_byte;
8、r2=can?signal2?l_byte;
9、所以:byte2=iq1
10、byte3=r1*16+iq2
11、byte4=r2*8
12、要將byte0-byte7按協(xié)議采用同樣的運(yùn)算運(yùn)算完,再將8個(gè)byte合并成數(shù)組data與id、msg?type、length捆綁后輸出結(jié)果output?cluster(輸出簇)。而接收解析是相反的運(yùn)算過(guò)程,將接收的output?cluster解綁,拆分成id、msg?type、length和data,對(duì)data根據(jù)dbc協(xié)議提供的對(duì)象位置,解析需要顯示的can?signal。此運(yùn)算過(guò)程極其繁瑣,并且每更換一次dbc協(xié)議都要根據(jù)協(xié)議重新進(jìn)行運(yùn)算,運(yùn)算過(guò)程交錯(cuò)復(fù)雜,出錯(cuò)風(fēng)險(xiǎn)較高,運(yùn)算導(dǎo)致消耗大量的時(shí)間,且沒(méi)有通用性。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種can信號(hào)封裝和數(shù)據(jù)解析方法,能夠簡(jiǎn)化運(yùn)算過(guò)程,節(jié)省運(yùn)算時(shí)間,且通用性較高。
2、本發(fā)明解決其技術(shù)問(wèn)題所采用的技術(shù)方案是:提供一種can信號(hào)封裝方法,包括以下步驟:
3、s0.獲取待封裝can信號(hào)的起始位、長(zhǎng)度、物理值、偏移量和轉(zhuǎn)移因子;
4、s1.創(chuàng)建一個(gè)輸入數(shù)組作為第一數(shù)組,所述第一數(shù)組為設(shè)定大小的布爾數(shù)組;
5、s2.建立一個(gè)條件結(jié)構(gòu),以根據(jù)布爾運(yùn)算邏輯將所述待封裝can信號(hào)的起始位在所述第一數(shù)組中重新定位;
6、s3.將所述條件結(jié)構(gòu)的輸出結(jié)果減去所述待封裝can信號(hào)的長(zhǎng)度后再加1,獲得所述待封裝can信號(hào)在所述第一數(shù)組中的起始位作為目標(biāo)位置;
7、s4.根據(jù)所述待封裝can信號(hào)的物理值、偏移量和轉(zhuǎn)移因子計(jì)算其原始值,并將計(jì)算得到的原始值轉(zhuǎn)換為布爾數(shù)組,獲得第二數(shù)組;
8、s5.以所述待封裝can信號(hào)的長(zhǎng)度為索引,調(diào)用刪除數(shù)組元素函數(shù)對(duì)所述第二數(shù)組進(jìn)行刪除操作,并對(duì)獲得的刪除部分的布爾數(shù)組進(jìn)行反轉(zhuǎn)后得到第三數(shù)組;
9、s6.以所述第一數(shù)組為總數(shù)組,以所述目標(biāo)位置為索引,以所述第三數(shù)組為子數(shù)組,調(diào)用替換數(shù)組子集函數(shù)生成第四數(shù)組;
10、s7.將所述第四數(shù)組轉(zhuǎn)換為所述待封裝can信號(hào)的幀數(shù)據(jù)。
11、進(jìn)一步的,還包括將步驟s0至步驟s7封裝成子vi的步驟;所述子vi的輸入包括所述待封裝can信號(hào)的起始位、長(zhǎng)度、物理值、偏移量和轉(zhuǎn)移因子,所述子vi的輸出包括所述待封裝can信號(hào)的幀數(shù)據(jù)。
12、進(jìn)一步的,還包括:
13、若所述待封裝can信號(hào)不止一個(gè),則將相應(yīng)數(shù)量的所述子vi串聯(lián),并初始化一個(gè)布爾數(shù)組作為首個(gè)所述子vi的輸入數(shù)組,并將其它所述子vi的輸入數(shù)組設(shè)為前一個(gè)所述子vi的輸出,獲得所述待封裝can信號(hào)的幀數(shù)據(jù)為末個(gè)所述子vi的輸出。
14、進(jìn)一步的,所述將所述第四數(shù)組轉(zhuǎn)換為所述待封裝can信號(hào)的幀數(shù)據(jù),包括:
15、將所述第四數(shù)組以8個(gè)元素為一組依次劃分出多個(gè)子集;
16、對(duì)每個(gè)所述子集分別進(jìn)行反轉(zhuǎn),并根據(jù)布爾運(yùn)算邏輯將反轉(zhuǎn)后的每個(gè)所述子集分別轉(zhuǎn)換成數(shù)值字節(jié),獲得所述待封裝can信號(hào)的幀數(shù)據(jù)。
17、進(jìn)一步的,所述第二數(shù)組與所述第一數(shù)組的大小相等。
18、進(jìn)一步的,所述待封裝can信號(hào)的原始值通過(guò)以下公式計(jì)算得到:
19、
20、本發(fā)明還提供一種can數(shù)據(jù)解析方法,包括以下步驟:
21、s0.獲取待解析can信號(hào)的幀數(shù)據(jù)、起始位、長(zhǎng)度、偏移量和轉(zhuǎn)移因子;
22、s1.根據(jù)布爾運(yùn)算邏輯將所述待解析can信號(hào)的幀數(shù)據(jù)的每個(gè)數(shù)值字節(jié)轉(zhuǎn)換為數(shù)組,并對(duì)轉(zhuǎn)換獲得的每個(gè)數(shù)組進(jìn)行反轉(zhuǎn)后得到第一數(shù)組,所述第一數(shù)組為設(shè)定大小的二維數(shù)組;
23、s2.調(diào)用重排數(shù)組維數(shù)函數(shù)對(duì)所述二維數(shù)組進(jìn)行重排,獲得一維的第二數(shù)組;
24、s3.建立一個(gè)條件結(jié)構(gòu),以根據(jù)布爾運(yùn)算邏輯將所述待解析can信號(hào)的起始位在所述第二數(shù)組中重新定位;
25、s4.將所述條件結(jié)構(gòu)的輸出結(jié)果減去所述待解析can信號(hào)的長(zhǎng)度后再加1,獲得所述待解析can信號(hào)在所述第二數(shù)組中的起始位作為目標(biāo)位置;
26、s5.以所述目標(biāo)位置為索引,調(diào)用數(shù)組子集函數(shù)從所述第二數(shù)組中截取大小與所述待解析can信號(hào)的長(zhǎng)度相等的子集獲得第三數(shù)組;
27、s6.對(duì)所述第三數(shù)組進(jìn)行反轉(zhuǎn)獲得第四數(shù)組,進(jìn)而根據(jù)布爾運(yùn)算邏輯將所述第四數(shù)組轉(zhuǎn)換為數(shù)值,獲得所述待解析can信號(hào)的原始值;
28、s7.根據(jù)所述待解析can信號(hào)的原始值、偏移量和轉(zhuǎn)移因子計(jì)算獲得其物理值。
29、進(jìn)一步的,所述待解析can信號(hào)的物理值通過(guò)以下公式計(jì)算得到:
30、
31、進(jìn)一步的,還包括將步驟s0至步驟s7封裝成子vi的步驟;所述子vi的輸入包括所述待解析can信號(hào)的幀數(shù)據(jù)、起始位、長(zhǎng)度、偏移量和轉(zhuǎn)移因子,所述子vi的輸出包括所述待解析can信號(hào)的物理值。
32、進(jìn)一步的,還包括:
33、若所述待解析can信號(hào)不止一個(gè),則將相應(yīng)數(shù)量的所述子vi并聯(lián),獲得每個(gè)所述待解析can信號(hào)的物理值為對(duì)應(yīng)所述子vi的輸出。
34、由于采用了上述的技術(shù)方案,本發(fā)明與現(xiàn)有技術(shù)相比,具有以下的優(yōu)點(diǎn)和積極效果:本發(fā)明通過(guò)對(duì)接收到的can信號(hào)其進(jìn)行基于布爾運(yùn)算邏輯處理后生成對(duì)應(yīng)的幀數(shù)據(jù),并將整個(gè)處理過(guò)程封裝成子vi,只需將can信號(hào)對(duì)應(yīng)的起始位、長(zhǎng)度、偏移量和轉(zhuǎn)移因子輸入,就可以得出需要的幀數(shù)據(jù);如果需要多個(gè)can信號(hào),只需將多個(gè)子vi串聯(lián)起來(lái),最終輸出一個(gè)8幀數(shù)據(jù),將其捆綁后得到需要的輸出簇,避免了多個(gè)變量運(yùn)算出錯(cuò)的風(fēng)險(xiǎn)及耗時(shí)嚴(yán)重的情況,同時(shí)節(jié)省了運(yùn)算的時(shí)間,提高了封裝效率,并且針對(duì)dbc協(xié)議通用,即使更換其它協(xié)議,也不需要重新一一進(jìn)行運(yùn)算;將整個(gè)處理步驟封裝成子vi后在程序框圖上也簡(jiǎn)潔很多,針對(duì)諸如labview這類(lèi)圖形化編程環(huán)境,此公式適用于所有硬件的運(yùn)算,在硬件上也有了更高的通用性。