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