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

上一篇技术分享文章中介绍了一些可以免费下载的软件工具——主要是Kvaser CanKing 和 Kvaser Driver for Windows,并举例说明了当你在家里时,如何只用一台电脑结合这些软件工具学习CAN理论,进行CAN开发和测试项目。

上一篇文章中,我们在安装Kvaser Driver for Windows时创建的两个虚拟CAN通道之间发送随机数据,并随机选择了地址,让程序选择了一些随机数据。今天,我们将继续探索,借助已经掌握的基础,学习SAE J1939的CAN帧格式形成,和建立一个测试应用程序的方法。现在,我们将继续使用与驱动程序一起安装的两个虚拟CAN通道。

第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的较大报文的一部分,那么整个操作会变得更有难度。

图片

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值