空燃比分析仪,horiba尾气分析仪,CAN总线分析仪,CAN数据记录仪

广州智维电子科技有限公司

Guangzhou Triv Electronic Technologies Co.LTD

技术服务
SUPPORT

目前位置: 首页 > 技术服务 > 技术资讯

2022-11-08

如何简单运用工具理解分析CAN数据流中的信号?

作者:triv    点击:1225

对于仅偶尔分析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获取和保存数据

下载Kvaser CanKing和Windows驱动程序。可以使用任何Kvaser适配器,如Kvaser Leaf Light HS v2,Kvaser USBcan,或Kvaser Memorator来获取数据以进行分析。通过CanKing,有很多方法可以做到这一点。如果要采集J1939数据,你需要 Select Formatters(选择格式程序)对话框,并选择 J1939 Formatter,方法是将此格式化程序放在对话框的 Active Formatters(活跃格式程序)部分,并勾选它旁边的小方框。这会让数据格式化,如图2所示。当连接到CAN总线,能看到数据时,可以通过 Log To Text File (记录到文本文件)窗口,来启动和停止数据记录,然后将文件保存到项目工作目录中。
图片

图 1. 保存到文本文件 

( Log to Text File – CanKing的一个对话框)


图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个数据字节。我要分析的信号是一个10ms的周期性信号,并用图表绘制几秒钟时长的数据。此时,你应该将要分析的数据流保存在电脑工作目录中的一个.txt文件中。

2.

把数据导入Excel

这一步的目的是把数据导入Excel,然后就可以用筛选功能来处理它们,并分离出要分析的数据。如果其他电子表格程序具有类似于Excel的筛选器、函数和绘图能力,也可以用于此任务。你可以自己决定选用其他的应用程序是否对你最合适,并找到类似的功能来完成此转换。


以一个空白工作表打开Microsoft Excel,然后选择 File, Open 和 Browse。在导航框的右下角,必须选择 All Files (*.*)(所有文件),以打开.txt文件。搜索工作目录,找到并选择在上面的步骤1中创建的.txt文件。显示屏将基本如下图所示:

图片

图 3. 选择一个.txt 文件以在Excel内打开


选择在步骤1中创建的那个.txt文件并打开。

3.

将数据格式转化为不同的列

当选择了.txt文件并尝试在Excel里打开它,你将看到图4所示的Text Import Wizard(文本导入向导)。使用此文本导入向导,有多种方法将CAN数据导入Excel,其中许多方法在一定程度上都能起作用。无论采取哪种方法,你很有可能需要编辑数据和/或标题,以让它们正确图形化。


图片

图 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. 当前的工作表


我的数据仅包含8个字节的帧,因此所有数据都在我填写的第一行标题下排列有序。如果你的数据中有一些帧带有不同的DLC数据链路连接器,那么你的数据就不会显示得这么整齐。不用担心,因为你一次只绘制一个PGN,在这个水平上,一个给定的PGN有一个固定的DLC,几乎总是8个字节。

4.

筛选数据,查找有意义的CAN帧

在这里,你有必要知道你需要查找的数据,以及这些数据在CAN帧中的位置。在J1939以及其他基于CAN的协议中,CAN帧的数据部分通常用于传输多个信号。不同的协议以不同的方式命名报文和信号。我将尽可能使用J1939术语,并尽量保持一致。在J1939通讯中,信号是对SP或可疑参数的非正式称呼。要识别一个信号,可使用Suspect Parameter Number(可疑参数号),即SPN。一组信号构成一个Parameter Group(参数组),即PG,而一个PG由一个Parameter Group Number(参数组号) 标识,即PGN。在我们将要使用的示例中,一个PG将被放进一个CAN帧中。CAN帧并不总是如此,有时通过使用传输协议,一个PG在多个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 工作表

已选筛选功能,仅显示 Engine Speed PGN

5.

剥离出需要分析的数据字节

我们的工作表仅显示包含所需数据的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组合在一起。如果这是我们需要的SPN,这将需要更多的Excel功能,如屏蔽和移位。工作表提供了许多数学函数,可通过许多个性化的方法应用到数据处理上。需要找到适合你的应用方法,来通过这些数学函数来获取你绘图需要的具体数据。

6.

将数据转换为图表模式

在绘制图表之前,有关这个信号,还要考虑的只剩下分辨率和偏移量。Resolution (分辨率)是SAE J1939DA中使用的术语,是指要用于一个信号表述的比例因素,以可理解的方式显示。如果你使用的是 Kvaser Database Editor 3 软件,要从一个.dbc文件中提取此信息,使用的术语是 Factor 。图表1显示分辨率等于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),从十六进制转换为十进制,然后乘以缩放值,所有这些都在一个简单的等式中。


通过使用Excel中的auto fill(自动填充)功能,把我们制作图表所需要的所有数据填充到新列里,来执行此计算。如果之前没有使用自动填充,则可去Excel的“帮助”菜单,了解如何使用。当通过自动填充填满所有需要绘制的单元格后,在工作表中会有一个可绘制的 Engine Speed数字–工作表中的一列,供绘制使用。

7.

创建图表显示我们感兴趣的数据

从这个意义上说,我们只需要使用Excel的绘图函数来绘制一列数据。要绘制图形的列是使用concatenate (CONCAT)函数和十六进制到十进制(HEX2DEC)转换函数创建的列。你可以选择在上面步骤6中创建的整个列,也可以只选择其中的一部分。接下来,从菜单栏中选择 Insert (插入),以Insert Line or Area Chart (插入折线图或面积图),这将为你选取的信号提供绘图。以我的一部分数据生成的图表如图9所示。
图片

图 9. 我的数据所显示的发动机转速


我称此图为SPN 190,在通过Insert Line or Area Cart创建此图之后,没有做任何其他事情。此工作表应提供许多极为有效的函数和方法创建图形,以多种不同的方式显示不同的信号,这些步骤帮助工程师或技师,通过这些函数,分析CAN总线上的大多数数据,前提是他们有一个具体特性或.dbc文件,显示数据的位置和格式。


本文旨在展示一种使用非专门软件工具,来辅助理解CAN数据流中信号的方法。每一步骤都需要本文在此有限篇幅内所能说明内容以外的知识,但有意义的并不是各个步骤。无论是在此范例应用中介绍的方法还是使用其他软件,我们希望通过此方法,能对想要更深入了解CAN以及信号如何通过CAN传输的读者有所获益。

返回列表