對于僅偶爾分析CAN數據流中的部分信號的用戶來說,下載龐大復雜的分析軟件顯得有些麻煩,我們就此分享如何簡單地運用現有工具理解分析CAN信號,并且這對于希望深入了解CAN,以及信號如何通過CAN傳輸的學習者,頗有益處。
在過去幾年的合作中,有不少客戶表示需要分析SAE J1939數據流中比較有限的一些CAN信號。盡管很多CAN分析軟件能提供很多強大的功能,但有時我們還是需要通過現成工具來表述一個信號。在本文,我們將介紹如何通過Microsoft Excel、Notepad這些大多數人都有的工具和Kvaser網站上的免費軟件CanKing,來捕捉和分析CAN框架內的一個CAN信號。這對于僅一次性需要此類工具的學生,或是一個小公司的工程師,他們僅需要了解CAN總線上的一個信號,這種方法是有意義的。
通過使用這種方法初步分析信號,工程師或學習者能更了解CAN和J1939的內部工作原理,更好地理解.dbc文件,以及其他應用程序如何使用.dbc文件。雖然本文中以J1939信號為例,但這里使用的方法適用于任何基于信號的CAN協議,包括CANOpen、RVC、NMEA-2000等等。雖然這里使用的是Excel和Notepad,但其他Spreadsheet和文本編輯器程序可以同樣完成此類任務。
本次分享的目的并不是避免使用眾多功能強大的CAN分析工具,這類工具都支持高級協議,例如J1939和CANOpen,具備的圖像和信號分析功能,包括分析巨大數據量的能力。本文主要是介紹一種方法,展示僅通過一些桌面現有的工具,工程師就能獲得他們想要的東西。該方法有很大的局限性,遠不及CAN專用軟件。在變長診斷報文、Transport Protocol幀和多路復用數據幀的情況下,這些限制將阻止或讓信號分析極為復雜化。在這些情況下,用戶都需要一個專用的CAN分析包,或通過此類專用軟件,以便正確地分析數據流中的信號。
應用此方法的必要條件:
??能夠以十六進制或十進制格式獲取原始CAN數據,或者能夠訪問需要分析的原始CAN數據,并能夠將該數據轉換到.txt文件中。這將通過Kvaser的CanKing軟件顯示,該軟件可免費下載。
??具備Microsoft Excel或類似軟件,對如何在spread sheet軟件中使用篩選功能有基本了解。
??了解你要查看什么數據,或者有一個.dbc文件或一個限定說明,顯示在CAN幀中何處查找你需要的信號,并知道該信號在報文中是如何格式化的。
以下是具體操作步驟:
1??通過CanKing獲取數據,并用Notepad保存到一個文本文件中
2??打開Excel,把數據導入Excel
3??將數據格式轉化為不同的列
4??篩選數據以找到你需要的CAN幀
5??分離要分析的數據字節
6??將數據轉換為圖形格式
7??創建一個圖表來顯示你需要的信號
1.
通過CanKing獲取和保存數據

圖 1. 保存到文本文件
( Log to Text File – CanKing的一個對話框)
圖1顯示Kvaser CanKing的 Log To Text File 對話框,可讓用戶獲取所需要分析的數據。確認已連接到CAN總線,通過選擇Kvaser CanKing主窗口中的 Start Run 鍵,在CanKing中查看數據。CanKing的 Output Window 中將顯示你所需要獲取的數據。
當你通過一個文本編輯器查看數據,如NotePad,該數據將如下所示:
圖 2. 通過CanKing獲取的范例 J1939 數據
2.
把數據導入Excel
以一個空白工作表打開Microsoft Excel,然后選擇 File, Open 和 Browse。在導航框的右下角,必須選擇 All Files (*.*)(所有文件),以打開.txt文件。搜索工作目錄,找到并選擇在上面的步驟1中創建的.txt文件。顯示屏將基本如下圖所示:

圖 3. 選擇一個.txt 文件以在Excel內打開
3.
將數據格式轉化為不同的列

圖 4. 將文本導入向導
這個向導能幫助你快速地把.txt數據轉為Excel格式。根據下面步驟來轉換數據:
1??在Choose the file type that best describes your data(選擇的數據的文件類型)下面:選擇 Delimited(已定界限)。
2??在Start import at row (開始導入行)一行旁邊:選擇包含CAN數據的行;在我的這個范例中是第二行。有些數據監測器加上了眉頭,僅需濾掉這些眉頭,后面可以通過Excel再恢復眉頭。
3??點擊 Next >.
4??在 Delimiters 下面的第二個方框內選擇 Space.
5??點擊 Next >.
6??點擊 Finish.
現在應該有一個Excel工作表打開,并以多列顯示CAN幀,分別顯示標識符、Flag、DLC和數據字節,還有時間列和方向列。如果讓每列的標題位于數據上方,請確保列標題與數據正確對應。有時在轉換過程中,列標題會錯位1-2列。如果沒有保持列標題在數據上方,應該把它們加上。我使用的列標題是 Type, Ch, Pri, PGN, SA/DA, DLC, D1, D2, D3, D4, D5, D6, D7, D8, Time, 和 Dir。下面是添加列標題后,我的工作表的前幾行:

圖 5. 當前的工作表
4.
篩選數據,查找有意義的CAN幀
在我的示例中,我們將分析一個名稱為Engine Speed( 發動機轉速)的信號。此信號的詳細信息可在SAE J1939DA 的數字附件(即Digital Annex)中看到。Engine Speed 標識為SPN 190,下面圖表顯示數字附件中的一些詳細信息:

圖表1. 從 SAE J1939DA 說明里獲取的信息

圖6. Excel 工作表,已選擇數據篩選,并顯示所有數據
如果未在Excel中使用過Filters (篩選),請單擊Excel頂部的Data tap,然后找到Filter。突出顯示數據的行(標題行),然后選擇篩選功能,你將看到工作表每一列的行都有小方框,每個方框里都有一個向下的箭頭。選擇PGN列上的箭頭,將看到一個方框,如圖7所示。
不要選擇Select All(全選框),然后只選擇你要篩選的報文,在本例中為0F004 。選擇OK,對要查看的數據進行篩選。現在工作表僅顯示你繪制圖表所需CAN幀 – 它們包含SPN 190,發動機轉速信息的報文。

圖 7. Excel 工作表
5.
剝離出需要分析的數據字節

圖 8
返回到表1,可以看到 Engine Speed 是在位置4和位置5的雙字節信號,或者以標題名表述,即D4列和D5列。由于這是雙字節信號,在對此數據進行任何運算之前,必須考慮字節順序。圖8顯示了我們篩選出的數據的一個截面,D4和D5以黃色突出顯示。只要看一下這些數據,就很容易看出字節順序。可以看到,有效字節在D4中,并且被首先傳輸。之所以知道這一點,是因為它是變化的字節,而且我們可以看到,當它變化時,它將D5推高了1。
如果我們查看圖8中的行數據,并看到 Engine Speed 作為單位數,則可以將發動機轉速的十六進制值寫為0x1466。現在已經從在CAN總線上采集的數據中剝離出PN 190。這已經顯示在D4和D5列中,即PGN 0x0F004或PGN 61444。
6.
將數據轉換為圖表模式
1??將兩個字節的SPN 190轉換為一個十進制數,如 0x1466 = 5,222。
2??這個數字乘以分辨率 – 或者我稱之為縮放比例: (5,222 bits) x (0.125 rpm/bit) = 652.75 rpm
3??加上偏移量,這里偏移量為零,所以結果值為652.75 rpm
利用工作表的強大功能,可以很容易地統計我們要繪制的所有信號樣本。首先要做的是在D5列的右側添加一個空白列。有了此列,就可以通過上述步驟,用它來計算RPM。如果不清楚這一點,你需要了解Excel的函數功能,方法是去一個空白單元格并鍵入“=”,然后單擊菜單欄的fx。我的數據在J和K列中,所以我要在標題行下新列的個小方框中輸入函數:
=HEX2DEC(CONCAT(K3,J3))*0.125
這一行將以正確的順序連接兩個字節的數據(首先是K3,然后是J3),從十六進制轉換為十進制,然后乘以縮放值,所有這些都在一個簡單的等式中。
7.
創建圖表顯示我們感興趣的數據

圖 9. 我的數據所顯示的發動機轉速
我稱此圖為SPN 190,在通過Insert Line or Area Cart創建此圖之后,沒有做任何其他事情。此工作表應提供許多極為有效的函數和方法創建圖形,以多種不同的方式顯示不同的信號,這些步驟幫助工程師或技師,通過這些函數,分析CAN總線上的大多數數據,前提是他們有一個具體特性或.dbc文件,顯示數據的位置和格式。
免責聲明
- 凡本網注明"來源:智能制造網"的所有作品,版權均屬于智能制造網,轉載請必須注明智能制造網,http://www.xashilian.com。違反者本網將追究相關法律責任。
- 企業發布的公司新聞、技術文章、資料下載等內容,如涉及侵權、違規遭投訴的,一律由發布企業自行承擔責任,本網有權刪除內容并追溯責任。
- 本網轉載并注明自其它來源的作品,目的在于傳遞更多信息,并不代表本網贊同其觀點或證實其內容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網站或個人從本網轉載時,必須保留本網注明的作品來源,并自負版權等法律責任。
- 如涉及作品內容、版權等問題,請在作品發表之日起一周內與本網聯系,否則視為放棄相關權利。
IOTE 2025第二十四屆國際物聯網展·深圳站
展會城市:深圳市展會時間:2025-08-27