本發(fā)明屬于汽車電子技術(shù)領(lǐng)域,具體涉及一種基于汽車CAN總線數(shù)據(jù)采集系統(tǒng)的數(shù)據(jù)采集方法。
背景技術(shù):
在汽車電子領(lǐng)域,整車網(wǎng)絡(luò)化是最為重要的發(fā)展趨勢。在網(wǎng)絡(luò)化的情況下,各個電子系統(tǒng)采用統(tǒng)一的總線進(jìn)行通信。如今,CAN總線已發(fā)展為車輛電子系統(tǒng)的主流總線,因此車載電子設(shè)備采用CAN通信標(biāo)準(zhǔn)交換數(shù)據(jù)是今后的發(fā)展方向。隨著數(shù)字技術(shù)的進(jìn)步,軟件就是儀器的思想已廣泛運(yùn)用到各種領(lǐng)域的監(jiān)測和控制系統(tǒng)中。將嵌入式計算機(jī)應(yīng)用于汽車領(lǐng)域,用軟件的方法實(shí)現(xiàn)汽車儀表和汽車信息系統(tǒng),改善了儀表的精度、實(shí)時性和檔次,使原來只有豪華級汽車才能采用的技術(shù)應(yīng)用于針對普通消費(fèi)者的汽車中,從而可以滿足人們對汽車綜合性能的要求。在這種情況下,現(xiàn)場采集數(shù)據(jù)是非常重要的。
現(xiàn)場數(shù)據(jù)采集一般有兩CAN總線與RS485總線兩種有線組網(wǎng)方式,但是RS485采用主從多址輪詢的方式,實(shí)現(xiàn)多址介入,輪詢周期隨著節(jié)點(diǎn)數(shù)量的增大而加長,影響數(shù)據(jù)傳輸?shù)膶?shí)時性。而CAN總線是一宗有效支持分布式控制或?qū)崟r控制的串行通信網(wǎng)絡(luò),它可靠性高,且網(wǎng)絡(luò)內(nèi)的節(jié)點(diǎn)個數(shù)在理論上不受限制,各節(jié)點(diǎn)之間實(shí)現(xiàn)自由通信。因此,出現(xiàn)了基于CAN總線汽車數(shù)據(jù)采集的方法。作為目前最流行的現(xiàn)場總線技術(shù)之一的CAN總線,是一種串行通訊協(xié)議,是一種基于微控制器件的網(wǎng)絡(luò),其通訊接口中集成了CAN協(xié)議的物理層和數(shù)據(jù)鏈接層功能。
基于CAN總線汽車數(shù)據(jù)采集的方法的缺陷在于:CAN總線會受到空間干擾、電源波動的影響,有時候會啟動錯誤幀,通知發(fā)送器重發(fā)數(shù)據(jù),同時丟掉錯誤的數(shù)據(jù)幀。另一方面,CAN總線在不同狀態(tài)中節(jié)點(diǎn)的發(fā)送有不同的延遲。
技術(shù)實(shí)現(xiàn)要素:
針對上述現(xiàn)有技術(shù)中存在的問題,本發(fā)明的目的在于提供一種可避免出現(xiàn)上述技術(shù)缺陷的基于汽車CAN總線數(shù)據(jù)采集系統(tǒng)的數(shù)據(jù)采集方法,以便在CAN通信設(shè)備驅(qū)動程序中,增強(qiáng)CAN通信的通信能力、提高通信效率。
為了實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明提供的技術(shù)方案如下:
一種基于汽車CAN總線數(shù)據(jù)采集系統(tǒng)的數(shù)據(jù)采集方法,通過汽車CAN總線數(shù)據(jù)采集系統(tǒng)進(jìn)行數(shù)據(jù)采集,所述汽車CAN總線數(shù)據(jù)采集系統(tǒng)包括依次連接的系統(tǒng)CAN總線、CAN驅(qū)動器、CAN模塊以及分別與CAN模塊相連接的SD卡模塊、LED模塊、上位機(jī)交互模塊。
進(jìn)一步地,所述數(shù)據(jù)采集方法包括:
系統(tǒng)CAN總線與汽車CAN總線對接,設(shè)置好波特率;
CAN驅(qū)動器將采集到的CAN數(shù)據(jù)先保存到一個環(huán)形緩沖區(qū)里面,以供給多個模塊調(diào)用;
CAN模塊從CAN驅(qū)動器中獲取數(shù)據(jù),將數(shù)據(jù)寫入另一個環(huán)形緩沖區(qū)中,然后再將數(shù)據(jù)過濾轉(zhuǎn)發(fā)給SD卡模塊或LED模塊或上位機(jī)交互模塊;
上位機(jī)交互模塊接收CAN模塊過濾轉(zhuǎn)發(fā)的數(shù)據(jù)并進(jìn)行分析處理,然后根據(jù)從電腦終端輸入的命令來執(zhí)行電腦終端命令數(shù)據(jù)操作。
進(jìn)一步地,所述電腦終端命令數(shù)據(jù)操作包括幫助命令、版本命令、顯示數(shù)據(jù)命令、設(shè)置波特率、發(fā)送數(shù)據(jù)幀、設(shè)置過濾模式、實(shí)時發(fā)送數(shù)據(jù)。
進(jìn)一步地,所述CAN模塊包括槽,所述槽內(nèi)包括CAN過濾器和環(huán)形緩沖區(qū)。
進(jìn)一步地,所述SD卡模塊包括互相連接的微處理器和SD卡,所述微處理器與CAN模塊相連接。
進(jìn)一步地,所述LED模塊包括互相連接的微處理器和LED,所述微處理器與CAN模塊相連接。
本發(fā)明提供的基于汽車CAN總線數(shù)據(jù)采集系統(tǒng)的數(shù)據(jù)采集方法,將CAN總線發(fā)出的數(shù)據(jù)都放在同一個環(huán)形緩沖區(qū),使用環(huán)形緩沖區(qū)可以使得讀寫數(shù)據(jù)并發(fā)執(zhí)行,方便了緩存的使用和管理,提高了CAN總線的通信效率和通信能力,同時在上位機(jī)中使用本系統(tǒng)設(shè)置的命令來查看所需的CAN總線發(fā)送的時間和數(shù)據(jù),提高了系統(tǒng)的實(shí)時性和可靠性,提高了通信效率;本發(fā)明可以實(shí)時采集車輛狀況的數(shù)據(jù),并通過CAN總線把數(shù)據(jù)傳至上位機(jī),上位機(jī)動態(tài)顯示數(shù)據(jù)變化,同時采集器的命令可由上位機(jī)進(jìn)行設(shè)定,比如可以設(shè)置CAN總線工作模式的波特率,使采集器和汽車CAN總線互相通訊;也可以通過設(shè)置過濾模式進(jìn)入ID列表,了解它有哪些ID的數(shù)據(jù)幀是已經(jīng)發(fā)送過來的,還可以將這些采集到的數(shù)據(jù)保存到SD卡指定的文件或新生成的文件中,可以很好地滿足實(shí)際應(yīng)用的需要。
附圖說明
圖1為汽車CAN總線數(shù)據(jù)采集系統(tǒng)的結(jié)構(gòu)框圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,下面結(jié)合附圖和具體實(shí)施例對本發(fā)明做進(jìn)一步說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
一種基于汽車CAN總線數(shù)據(jù)采集系統(tǒng)的數(shù)據(jù)采集方法,通過汽車CAN總線數(shù)據(jù)采集系統(tǒng)進(jìn)行數(shù)據(jù)采集,如圖1所示,所述汽車CAN總線數(shù)據(jù)采集系統(tǒng)包括依次連接的系統(tǒng)CAN總線、CAN驅(qū)動器、CAN模塊以及分別與CAN模塊相連接的SD卡模塊、LED模塊、上位機(jī)交互模塊Mutual;所述SD卡模塊包括互相連接的微處理器stm32和SD卡,所述微處理器stm32與CAN模塊相連接;所述LED模塊包括互相連接的微處理器stm32和LED,所述微處理器stm32與CAN模塊相連接。
所述基于汽車CAN總線數(shù)據(jù)采集系統(tǒng)的數(shù)據(jù)采集方法包括以下步驟:
系統(tǒng)CAN總線與汽車CAN總線對接,設(shè)置好波特率;
CAN驅(qū)動器將采集到的CAN數(shù)據(jù)先保存到一個環(huán)形緩沖區(qū)里面,以供給多個模塊調(diào)用;
CAN模塊從CAN驅(qū)動器中獲取數(shù)據(jù),將數(shù)據(jù)寫入另一個環(huán)形緩沖區(qū)中,然后再將數(shù)據(jù)過濾轉(zhuǎn)發(fā)給SD卡模塊或LED模塊或上位機(jī)交互模塊Mutual;
上位機(jī)交互模塊Mutual接收CAN模塊過濾轉(zhuǎn)發(fā)的數(shù)據(jù)并進(jìn)行分析處理,然后根據(jù)從電腦終端輸入的命令來執(zhí)行電腦終端命令數(shù)據(jù)操作。
所述電腦終端命令數(shù)據(jù)操作包括幫助命令、版本命令、顯示數(shù)據(jù)命令、設(shè)置波特率、發(fā)送數(shù)據(jù)幀、設(shè)置過濾模式、實(shí)時發(fā)送數(shù)據(jù)。
CAN驅(qū)動器是進(jìn)行汽車CAN數(shù)據(jù)采集的中心,將采集到的CAN數(shù)據(jù)先保存到一個環(huán)形緩沖區(qū)RingBuffer里面,可以供給多個模塊調(diào)用,CAN收發(fā)器芯片使用TJA1041型號。
所述CAN模塊包括槽,所述槽內(nèi)包括CAN過濾器和環(huán)形緩沖區(qū)。所述槽可以注冊多個子槽,如圖1中所示子槽1、子槽2……子槽n,用來放置多個功能函數(shù)并且將所有槽均置為可用,然后主函數(shù)即可獲取一個可用的子槽來操作CAN模塊。CAN模塊會從CAN驅(qū)動器中獲取數(shù)據(jù),將數(shù)據(jù)寫入另一個環(huán)形緩沖區(qū)RingBuffer中,然后再將數(shù)據(jù)從已分配的槽中過濾轉(zhuǎn)發(fā)。如圖1中所示,子槽1通過槽端口1與上位機(jī)交互模塊Mutual相連接,子槽2通過槽端口2與SD卡模塊的stm32相連接,子槽3通過槽端口3與LED模塊的stm32相連接。
當(dāng)CAN總線數(shù)據(jù)幀傳送到CAN模塊時,所有的ID都會經(jīng)過CAN過濾器過濾。CAN過濾器可以把一個ID加入CAN過濾器,并允許這個ID的數(shù)據(jù)幀通過;也可以把一個ID從過濾器中刪除,這個ID的幀將不能從過濾器中通過;還可以判斷一個ID是否是有效ID,有效ID將被允許通過,無效ID不被允許通過。
當(dāng)識別到有CAN總線的數(shù)據(jù)幀傳送過來時,汽車CAN總線數(shù)據(jù)采集系統(tǒng)會在LED模塊的stm32中打開定時器,使紅色和綠色LED燈交替閃爍。
當(dāng)上位機(jī)使用命令data或者retrans時,汽車CAN總線數(shù)據(jù)采集系統(tǒng)會將讀取的數(shù)據(jù)保存到SD卡指定的文件或新生成的文件中。
上位機(jī)交互模塊Mutual是整個系統(tǒng)的控制中心,是跟電腦終端的交互模塊,使用串口線和電腦終端的串行通訊端口相連,首先設(shè)置一個槽端口接收CAN盒里面過濾轉(zhuǎn)發(fā)的數(shù)據(jù)并分析處理,接下來是根據(jù)從電腦終端輸入的命令來執(zhí)行以下電腦終端命令數(shù)據(jù)操作:
1.幫助命令(help):顯示幫助手冊;
2.版本命令(version):顯示軟件版本;
3.顯示數(shù)據(jù)命令(data):顯示CAN總線傳送過來的數(shù)據(jù),具體格式如下所示;
(1)data-o:設(shè)置傳輸模式;
(2)data-n:關(guān)閉傳輸模式;
(3)data[-f<filename>][-i|-e]<-a|-d><ID>:-f表示數(shù)據(jù)會被寫入命名的文件中,filename:表示文件將被創(chuàng)建或被創(chuàng)建;
4.設(shè)置波特率(setbd):設(shè)置CAN總線工作的波特率,具體格式如下所示:
(1)setbd[-p<port>]<value>:value表示波特率的數(shù)值,單位是K;
(2)setbd[-p<port>]-a:-a表示自動探索汽車CAN總線工作的波特率;
-p<port>:指定CAN總線端口設(shè)置;port:1或2,默認(rèn)是兩個;
5.發(fā)送數(shù)據(jù)幀(send),格式如下所示:
(1)send[-p<port>]<id><byte0><byte1>...:發(fā)送1幀數(shù)據(jù)或者是反復(fù)發(fā)送1針數(shù)據(jù);<id>:表示id的十六進(jìn)制數(shù)據(jù)幀,應(yīng)該介于0-3ff之間;<byte>:十六進(jìn)制字節(jié)的數(shù)據(jù),單獨(dú)的每個字節(jié)使用空間,只有第一個是8個字節(jié);
(2)send[-p<port>]-s<series_nr>:發(fā)送預(yù)先定義一系列的多個數(shù)據(jù)幀;Series_nr表示預(yù)定義的一系列數(shù)據(jù)將被發(fā)送;
6.設(shè)置過濾模式(filter),格式如下所示:
(1)filter-I:進(jìn)入包含模式;
(2)filter-E:進(jìn)入排除模式;
(3)filter-l:列出包含和排除列表;
(4)filter-m:獲取ID列表;
(5)filter-s:一步一步進(jìn)入設(shè)置模式;
(6)filter[-i|-e]<-a|-d><ID>
-i:包含模式進(jìn)入增加或刪除操作;
-e:排除模式進(jìn)入增加或刪除操作;
-a:把ID加入過濾器中;
-d:把ID從過濾器中刪除;
ID:這個ID發(fā)送的數(shù)據(jù);
7.實(shí)時發(fā)送數(shù)據(jù)(retrans),格式如下所示:
(1)retrans[filename][-o|-n port]:
-n:數(shù)據(jù)將從端口發(fā)出;
-o:數(shù)據(jù)不會從端口發(fā)出;
-l:顯示狀態(tài);
filename:創(chuàng)建文件并將數(shù)據(jù)寫進(jìn)去。
本發(fā)明提供的基于汽車CAN總線數(shù)據(jù)采集系統(tǒng)的數(shù)據(jù)采集方法,將CAN總線發(fā)出的數(shù)據(jù)都放在同一個環(huán)形緩沖區(qū),使用環(huán)形緩沖區(qū)可以使得讀寫數(shù)據(jù)并發(fā)執(zhí)行,方便了緩存的使用和管理,提高了CAN總線的通信效率和通信能力,同時在上位機(jī)中使用本系統(tǒng)設(shè)置的命令來查看所需的CAN總線發(fā)送的時間和數(shù)據(jù),提高了系統(tǒng)的實(shí)時性和可靠性,提高了通信效率;本發(fā)明可以實(shí)時采集車輛狀況的數(shù)據(jù),并通過CAN總線把數(shù)據(jù)傳至上位機(jī),上位機(jī)動態(tài)顯示數(shù)據(jù)變化,同時采集器的命令可由上位機(jī)進(jìn)行設(shè)定,比如可以設(shè)置CAN總線工作模式的波特率,使采集器和汽車CAN總線互相通訊;也可以通過設(shè)置過濾模式進(jìn)入ID列表,了解它有哪些ID的數(shù)據(jù)幀是已經(jīng)發(fā)送過來的,還可以將這些采集到的數(shù)據(jù)保存到SD卡指定的文件或新生成的文件中,可以很好地滿足實(shí)際應(yīng)用的需要。
以上所述實(shí)施例僅表達(dá)了本發(fā)明的實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對本發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。