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获取和保存数据
图 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文件,显示数据的位置和格式。