前言
在本文,我們將介紹如何透過 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 顯示 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,下面圖表顯示數字附件中的詳細資訊:
如果以前未使用過 Excel中的 Filters (篩選),請點擊 Excel頂部的 Data tap,然後找到 Filter。選取數據的第一行(標題行),然後選擇篩選功能,你將看到工作表每一列的第一行都有小方框,每個方框裡都有一個向下的箭頭。選擇PGN列上的箭頭,你將看到一個方框,如圖7所示。
不要選擇Select All(全選框),只要選擇需要篩選的報文,本次範例為0F004 。
選擇 OK後,就會對你想查看的數據進行篩選。現在工作表僅顯示你選擇的 CAN幀圖表 – 它們包含SPN 190,發動機轉速運息的報文。
05 分離出需要分析的數據字節
工作表僅顯示你選擇的CAN幀數據,現在來梳理出我們想要的訊號。
返回到表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所示:
此圖為SPN 190,工作表提供有用的函數和方法來創建圖形,並通過Insert Line or Area Cart 創建此圖,以多種的方式來顯示不同的訊號,這些步驟可以幫助工程師或技師,利用函數來分析CAN總線的數據。
結語
本文使用非專門軟體工具,來輔助理解CAN數據流中訊號的方法,希望透過此方法幫助你更輕鬆了解CAN數據如何分析。
聯絡我們