“前两篇文章介绍了NVH数采系统记录的原始文件如何读取,其内容是针对传感器采集到的振动或声音信号。在测试过程中,还有一种信号形式也会被记录下来,即CAN信号。本篇将简单介绍CAN信号的读取方法。”
00
—
前言
在NVH测试中,为了计算阶次,发动机或电机的转速一般都要和振动或声音信号同步记录下来。
发动机的转速,可以通过激光测速传感器来记录和计算,见之前的文章《基于传感器信号的转速计算》,但电机的转速一般不太容易用此方法。
所以用CAN来采集发动机或电机的转速和负荷等信息,是最经济省力的方法。
目前主流的NVH数采系统记录CAN信号时,有两种方法:
1)先导入dbc文件,直接提取关注的信号。
2)没有dbc文件,记录所有CAN数据,待有dbc文件后,再提取关注信号。
本篇,我们介绍第二种形式。
01
—
CAN报文
NVH测试中,含有转速或负荷的CAN报文一般是8个字节(64位)。习惯用十六进制呈现(二进制 bin;十进制 dec;十六进制 hex)。
图1,是一种习惯性写法。灰色背景代表bit序列从0~63,代表64位(即8个字节),红色代表二进制数据。
图1
下面将详细介绍如何在这64位CAN报文中提取所需要的信号数据。
02
—
dbc文件
在从CAN报文中提取需要的信号数据之前,首先要了解dbc文件。
dbc文件内容包括:CAN报文中,信号位置、信号读取方式、信号发送周期等信息。
本文不对dbc文件作详细解读,仅对NVH测试中需要的信号进行有针对性的解读。
图2中实线框内是dbc文件的部分内容,虚线框内是对相应内容的解释。
图2
图3中展示了dbc文件中定义的信号发送周期,实线框内是dbc文件的部分内容,虚线框内是对相应内容的解释。
图3
图2中有个很重要的信息:CAN报文中信号是Intel格式还是Motorola格式,下面将对这两种格式作详细举例说明。
03
—
Intel格式
先把CAN报文习惯性的写成报文矩阵形式。
Intel格式:从起始位开始,从右往左,从上往下数,最终将这些数据按逆序排列读取。如图4。
图4
图5用另一种方式来更直观地展示数据流。
图5
04
—
Motorola格式
先把CAN报文习惯性的写成报文矩阵形式。
Motorola格式:从起始位开始,从左往右,从上往下数,最终将这些数据按正序排列读取。如图6。
图6
图7用另一种方式来更直观地展示数据流。
图7
05
—
CAN报文定位
了解Intel和Motorola格式后,还需要正确定位CAN报文在整个文件中的位置。
需要说明的是:由于作者并不清楚CAN信息文件中各字节的数据定义,下面对CAN报文定位的举例,仅是针对某一测试结果规律总结,仅供参考。
图8是按照十六进制来读取原始CAN文件信号,CAN报文位置及信号位置定位过程如下:
1)搜索定位10 FF FF FF FF FF FF FF FF FF 01来找到CAN报文的位置及报文ID的位置。
2)对报文ID进行转换(移位转换,见图8左侧)。
3)报文ID同dbc中定义报文ID相同,则其后面的8位CAN报文即是要找的信号报文(见图1,图4中内容),如图8右侧,黄底红字部分。
图8
06
—
总结
从单独记录的CAN信息文件中提取关注的信号,总结步骤如下:
1)解读dbc文件,了解要提取信号的报文ID。
2)逐字节读取CAN信息文件,用十六进制显示。结合报文ID,在原始CAN信号文件中找到要提取信号的CAN报文位置。
3)结合dbc文件中Intel或Motorola格式对CAN报文内信号的位置及处理方式的定义,从 2)中已提取的CAN报文中再次提取所需信号。
4)结合dbc文件中定义的信号发送周期,可以得到时间轴,从而画出信号。