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

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

Guangzhou Triv Electronic Technologies Co.LTD

行业应用
APPLICATION

目前位置: 首页 > 行业应用 > Kvaser分析仪

2022-09-30

CAN总线入门必看:如何运用虚拟驱动编写测试脚本

作者:triv    点击:1002

图片

第1️⃣步 | 为了跟踪实际数据,你需要有一个.dbc文件,以加载到CanKing中,或者你需要创建一个.dbc文件。使用Kvaser Database Editor 3 (数据库编辑器) 创建一个仅用于几个CAN报文和信号的.dbc文件并不困难,Kvaser Database Editor 3可免费下载。本文将不介绍如何创建.dbc文件。


第2️⃣步 | 从使用2个CAN通道模板打开Kvaser CanKing开始,转到View ,并将History List窗口和Times Transmission窗口添加到你的桌面。创建CAN报文会是最复杂的部分,所以我们将从我最近一篇关于J1939工具的文章里复制的报文开始。下面是我将使用的原始报文:

图片


这是在CanKing中接收到的报文模式,称为Electronic Engine Controller(电动引擎控制器)1报文,标识为PGN 61444。我们将在此报文中处理的信号是Engine Speed(引擎转速),标识为SPN 190。为此,我们首先需要将此报文分解为标识符和数据段。

图片


这是一个29位的扩展标识符,所以我们可以从此帧的信息中知道下列内容,如CanKing中所显示的:


▪ 优先权位 = 3

▪ 保留位和数据页位 = 0

▪ 参数组号码 – PGN = 0x0F004

▪ 源地址 = 0


将所有这些信息组合成一个29位标识符,并以十六进制格式显示,这样我们就得到0CF00400,因此将其插入报文方框中的CAN标识符栏中,在末尾加上一个小写“x”代表扩展标识符格式。见下图。


如果你不理解如何从CanKing中的位数显示得出这个十六进制数的,请从右边的源地址开始,然后从右到左排。请记住,标识符必须是29位,即七个半字节加上左边的一个额外位。优先权位让它变得困难,因为它横跨第7和第8半字节。优先权位为3的帧,如本帧,总是以0C开头,和有0Cxxxxxx格式,而优先权位为6的帧具有18xxxxxx格式,优先权位为7的帧将为1Cxxxxxx。


第3️⃣步 | 我们知道数据长度码 (DLC) 是 8,所以在DLC一栏中输入这个数字。


这八个数据字节显示在上面的CanKing 栏里,60 7D 84 50 14 00 F0 84,所以将它们输入字节 0 到7,从左向右读取。最后结果是如下所示的CAN 报文,标识符和数据已输入,已准备好发送:

图片


第4️⃣步 | 我们需要上传一个.dbc文件,来说明我们准备发送的数据。我有一个为此类操作创建的部分J1939 dbc文件,所以我将把此文件上传到CanKing。为了给CanKing上传一个.dbc文件,去Select Formatters(选择格式程序)对话框,激活和选择J1939 Formatter。你可以双击J1939 Formatter 以打开Select Databases(选择数据库)对话框,如下所示。


在这个对话框中,你可以看到我已经把一个.dbc文件上传到CAN 2。我还选择了我需要使用的数据显示设置。由于我们计划从CAN 1发送报文,用CAN 2接收它,所以这里是我们要使用.dbc文件解码报文的地方。我们现在准备好测试我们的系统了。在Kvaser CanKing方框中选择Start Run,然后在CAN Message 1栏中单击Send。如果一切设置正确,你的Output Window(输出窗口)现在应该显示如下:

图片


这个输出窗口显示四行数据,加上该报文中的所有信号,这些信号是由上传到CAN 2中的每个.dbc文件解码。我们知道数据在CAN 1上传输,在CAN 2上接收和解码。我们看到四行数据的原因是我们在Select Formatter框中选择了两个格式化程序,Standard Text Formatter(标准文本格式化程序)和J1939 Formatter。每个格式化程序生成一行用于传输数据,另一行用于接收数据。


从顶部开始,第一行显示Standard Text Formatter传输行。下面是J1939 Formatter传输行,由于我们没有将.dbc文件上传到CAN 1中,因此它无法解码此数据,只将其显示为原始十六进制数。第三行显示Standard Text Formatter 接收行,它看起来就像Standard Text Formatter 传输行一样。第四行是重要的一行,显示J1939 Formatter接收行,具备报文中所有解码的信号并显示它们。以下是解码后的信号及它们的值:

图片


到目前为止,我们已经在CAN Message 1格式化程序框中人工创建了一个J1939 Electronic Engine Controller 1报文,上传一个J1939.dbc文件到CAN 1中,通过Kvaser驱动程序中的虚拟CAN总线发送和接收该报文,并通过该.dbc文件给该报文解码。


第5️⃣步 | 接下去是让所有这些数据操作变得更加实际。我将在这个程序中识别Engine Speed (引擎转速)信号,然后在许多报文中操作它来创建一个模拟引擎转速加速。我将在History List (历史记录)框中得到此数据,然后使用Timed Transmission (定时传输)框将其作为持续变化的引擎转速回放。这方面的一个实际应用是在一个测试过程中,这时你希望在模拟环境中控制引擎转速,并使用此方式测试不同设备的响应。你可以在这里创建并测试它,然后使用History List窗口中的Save功能,保存此测试并在以后运行,以测试不同应用程序的反应。你还可以稍后通过Kvaser硬件适配器运行此测试,并测试同一CAN总线上每一个设备反应。你在虚拟设备上创建和测试的任何信号都可以通过Kvaser适配器获取,并且可被传输到你需要送达的任何设备。


我们从J1939DA知道,字节D3和D4是Engine Speed(引擎转速)信号,而D4是MSB(最重要的字节)。依据下列步骤创建一个引擎转速加速测试信号:


➡右键点击History List框,然后选择Clear。

➡在Kvaser CanKing框中点击Stop,然后点击Start Run来开始一次新运行。这将重置计时器场。

➡在CAN Message 1栏点击Send一次,这将把一个报文放入History List。

➡将CAN Message 1栏的Byte 4从$14 改到 $15,并再次点击。

➡以你想要的次数,重复此操作,以产生一个引擎加速历史。

➡当你得到了你需要的数据,点击History List 框中的Save,并选择一个存放位置和文件名。


下面是一个我的History List框,其中引擎转速RPM(每分钟转速)从650 到1738。


你可以使用此手动方法操作一个.dbc文件中描述的大多数CAN数据(前提是你有访问该.dbc文件的权限)。如果你要处理的信号是使用Transport Protocol的较大报文的一部分,那么整个操作会变得更有难度。

图片

返回列表