學習如何分析CAN數據訊號-利用Excel、Notepad以及CANking

從1980年代,Kvaser就開始CAN產品的研發,在相關產品開發領域有近40多年的經驗,對CAN和相關總線技術有著非常深入的研究。

本文來自kvaser微信

前言

在本文,我們將介紹如何透過 Microsoft Excel、Notepad,這些工具和 Kvaser提供的免費軟體-CanKing,來捕捉和分析 CAN訊號。

透過使用這種方法來初步分析訊號,工程師或學習者能更了解CAN 和J1939 的內部工作原理,更好地理解.dbc文件,以及其他應用程序如何使用.dbc文件。雖然本文中以J1939信號為例,但這裡使用的方法適用於任何信號的 CAN協議,包括 CANOpen、RVC、NMEA-2000等等。

雖然這裡使用的是Excel和Notepad,但其他Spreadsheet和文本編輯器程序可以同樣完成此類任務。

缺點是此方法有很大的局限性,功能遠不及CAN專用軟體。在面對診斷報文、Transport Protocol幀和多路復用數據幀的情況下,訊號分析會變得複雜化。因此,在這些情況下,用戶還是需要專門的 CAN分析工具,以正確地分析數據流中的信號。


應用此方法的必要條件:

✔️能夠以十六進位或十進位格式獲取原始 CAN數據,並將該數據轉換到.txt文件中,通過Kvaser的 CanKing軟體顯示。

✔️具備Microsoft Excel 或類似軟體,對如何在spread sheet軟體中使用篩選功能有基本了解。

✔️了解要查看什麼數據、.dbc文件或限定說明,在 CAN幀中查找你需要的信號,並知道該信號在報文中是如何格式化的。

具體操作步驟:

1️⃣通過 CanKing獲取數據,並用 Notepad保存到一個文本文件中

2️⃣打開 Excel,把數據導入 Excel

3️⃣將數據格式轉化為不同的列

4️⃣篩選數據以找到你需要的 CAN幀

5️⃣分離要分析的數據字節

6️⃣將數據轉換為圖形格式

7️⃣創建一個圖表來顯示你需要的信號

01 通過CanKing 獲取和保存數據

如果要採集J1939數據,你需要 Select Formatters(選擇格式程序)對話框,並選擇 J1939 Formatter,方法是將此格式化程序放在對話框的 Active Formatters (活躍格式程序)部分,並勾選它旁邊的小方框。

會讓數據格式化,如圖2所示。當連接到 CAN總線並能看到數據時,可以通過 Log To Text File (記錄到文本文件)窗口,來啟動和停止數據記錄,然後將文件保存到項目工作目錄中。

圖1 保存到文本文件

圖 1 顯示 Kvaser CanKing的 Log To Text File 對話框,可讓用戶獲取所需要分析的數據。確認是否連接到 CAN總線,透過選擇 Kvaser CanKing主窗口中的 Start Run 鍵,可以在CanKing中查看數據,並在 CanKing的 Output Window 中將顯示你所需要的數據。

當你利用文本編輯器查看數據,如 NotePad,該數據將會如下所示:

WinNo P   PGN SA  DA Flg   Len  D0…1…2…3…4…5…6..D7      Time   Dir

CAN 1 6 0F009 0B->*         8   7D  7A  60  83  7D  4F  7D  7D     217.088350 R

CAN 1 3 0F004 00->*         8   60  7D  84  50  14  00  F0  84     217.093810 R

CAN 1 6 0F009 0B->*         8   7D  7A  60  83  7D  4F  7D  7D     217.097340 R

CAN 1 3 0F004 00->*         8   60  7D  84  50  14  00  F0  84     217.104820 R

CAN 1 6 0F009 0B->*         8   7D  7A  60  83  7D  4F  7D  7D     217.107600 R

CAN 1 6 0FEF1 31->*         8   F7  FF  FF  CF  FF  FF  FF  FF     217.111110 R

CAN 1 7 0FF05 8A->*         8   00  FF  FF  FF  FF  FF  FF  FF     217.113450 R

CAN 1 3 0F004 00->*         8   60  7D  84  54  14  00  F0  84     217.114870 R

CAN 1 6 0FEE0 27->*         8   FF  FF  FF  FF  AC  A8  06  00     217.115440 R

CAN 1 7 0FEC3 27->*         8   FF  FC  FF  FF  FF  FF  FF  FF     217.116020 R

CAN 1 6 0FF6F 8A->*         8   E2  14  E0  15  A0  12  FF  5E     217.116570 R

CAN 1 6 0F009 0B->*         8   7D  7A  60  83  7D  47  7D  7D     217.117580 R

CAN 1 3 0F004 00->*         8   60  7D  84  54  14  00  F0  84     217.126930 R

CAN 1 6 0F009 0B->*         8   7D  7A  60  83  7D  47  7D  7D     217.127770 R

CAN 1 6 0FF60 4D->*         8   00  00  00  FF  FF  FF  FF  FF     217.131710 R

圖2 通過CanKing獲取的範例 J1939 數據

在這例子中,所有的 CAN幀都有8個數據字節。要分析的信號是一個10毫秒的周期性信號,並用圖表繪製幾秒鐘時長的數據。此時,你應該要將分析的數據保存在你的電腦工作目錄中的.txt文件中。

02 把數據導入Excel

這一步的目標是把你的數據加入 Excel,就可以用篩選功能來處理它們,並篩選出要分析的數據。如果其他電子表格應用程式具有類似 Excel的篩選器、函數和繪圖能力,也可以來做使用。

先打開 Microsoft Excel 的空白表格,選擇資料夾→Open → Browse。在

導航框的右下角,選擇 All Files (.)(所有文件),以打開.txt文件。搜索你的工作目錄,找到並選擇你在上面的步驟1中創建的.txt文件。你的顯示屏將基本如下圖所示:

選擇你在步驟1中創建的那個.txt文件並打開。

03 將數據格式轉換成不同的列

當你選擇了你的.txt文件並在 Excel裡打開它,將會看到圖4 所示的 Text Import Wizard(文本導入嚮導)。不管如何將CAN數據導入Excel,都必須編輯你的數據和/或標題,以視覺化圖表的方式呈現。

以下能幫助你快速地把.txt數據轉為 Excel格式:

1️⃣在Choose the file type that best describes your data(選擇最適合你的數據的文件類型)下面:選擇 Delimited(已定界限)。

2️⃣在 Start import at row (開始導入行)一行旁邊: 選擇包含第一行的CAN數據;在這範例中是第二行。

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。下面是添加列標題後,工作表的前幾行如圖所示:

數據僅包含8個字節的幀,所以所有數據都在第一行標題的下方。如果你的數據中有一些幀帶有不同的DLC數據鏈路連接器,數據可能就會更複雜些。不用擔心,因為一次只繪製一個PGN。

04 篩選數據,查找有意義的CAN幀

此步驟必須知道想查找的數據為何,以及這些數據在 CAN幀中的位置。在 J1939以及其他 CAN的協議中,CAN幀的數據通常傳輸多個信號,並且不同的協議會以不同的方式命名報文和信號。在J1939通訊中,信號是對SP或可疑參數的非正式稱呼。

在示例中,將分析一個 Engine Speed( 發動機轉速)的信號。此信號的詳細資訊可在 SAE J1939DA 的數字附件(即Digital Annex)中看到。

Engine Speed 標識為SPN 190,下面圖表顯示數字附件中的詳細資訊:

從 SAE J1939DA 說明里獲取的信息
圖6. Excel 工作表,已選擇數據篩選,並顯示所有數據

如果以前未使用過 Excel中的 Filters (篩選),請點擊 Excel頂部的 Data tap,然後找到 Filter。選取數據的第一行(標題行),然後選擇篩選功能,你將看到工作表每一列的第一行都有小方框,每個方框裡都有一個向下的箭頭。選擇PGN列上的箭頭,你將看到一個方框,如圖7所示。

不要選擇Select All(全選框),只要選擇需要篩選的報文,本次範例為0F004 。

選擇 OK後,就會對你想查看的數據進行篩選。現在工作表僅顯示你選擇的 CAN幀圖表 – 它們包含SPN 190,發動機轉速運息的報文。

圖 7. Excel 工作表 已選篩選功能,僅顯示 Engine Speed PGN

05 分離出需要分析的數據字節

工作表僅顯示你選擇的CAN幀數據,現在來梳理出我們想要的訊號。

圖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。

在某些情況下,有些 SPN小於一個字節,它們與同一字節中的其他SPN組合在一起。這時就必須使用更多 Excel功能,如屏蔽和移位。

工作表提供許多數學函數,可通過客製化的方式去處理數據,依照自己的習慣方式來製作數據圖表。

06 將數據轉換為圖表模式

在繪製圖表之前,必須考慮的剩下的分辨率和偏移量。 Resolution (分辨率)是 SAE J1939DA中使用的術語,指要用於信號表述的比例因素並用易懂的方式顯示。

如果你使用的是 Kvaser Database Editor 3 軟體,要從一個.dbc文件中提取此資訊,要使用的術語是 Factor 。顯示分辨率等於0.125rpm/位,偏移量等於零。按以下步驟,用初始數據以RPM計算發動機轉速:

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),從十六進位轉換為十進位,再乘以我們的縮放值。

07 創建圖表來展示數據

我們只需要使用 Excel的繪圖函數來繪製數據圖表。要繪製圖形的列是你使用 concatenate (CONCAT)函數和十六進位到十進位(HEX2DEC)轉換函數創建的列。

你可以選擇在步驟6中創建一整個列,也可以只選擇其中的一部分。接下來,從菜單欄中選擇 Insert (插入),選擇Insert Line 或 Area Chart (插入折線圖或面積圖),ㄐ又能顯示出你要的圖表。生成的圖表如圖9所示:

圖 9 我的數據所顯示的發動機轉速

此圖為SPN 190,工作表提供有用的函數和方法來創建圖形,並通過Insert Line or Area Cart 創建此圖,以多種的方式來顯示不同的訊號,這些步驟可以幫助工程師或技師,利用函數來分析CAN總線的數據。

結語

本文使用非專門軟體工具,來輔助理解CAN數據流中訊號的方法,希望透過此方法幫助你更輕鬆了解CAN數據如何分析。


聯絡我們