技术博客

12/01/2021 作者 Dynamic

使用Kvaser的虚拟驱动 – 初级水平教程 #2: 应用一个J1939 DBC文件和用CanKing编写一个简单的测试脚本

上一篇博客中,我介绍了一些可从Kvaser网站免费下载的软件,并举例说明了当你在家里时,如何使用这些工具学习CAN理论,进行CAN开发和测试项目。这并不需要其他硬件,只需要一台电脑。主要的软件工具是Kvaser CanKing Kvaser Driver for Windows

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

如果你想在继续阅读此博客之前做一些准备,请查看Kvaser.com 网站上的 CAN Basics基本知识,或访问此链接 https://www.kvaser.com/course/can-basics-training-a-practical-introduction-to-the-can-bus/ ,观看CAN协议视频教程。你还可以查看Kvaser.com网站上的博客 An Introduction to J1939 and DBC Files

通过Kvaser CanKing和前面提到的两个虚拟通道,上载和测试一个.dbc文件:

在我展开此博客时,为了跟踪实际数据,你需要有一个.dbc文件,以加载到CanKing中,或者你需要创建一个.dbc文件。使用Kvaser Database Editor(数据库编辑器) 3创建一个仅用于几个CAN报文和信号的.dbc文件并不困难,Kvaser Database Editor 3可在https://www.kvaser.com/download/免费下载。本博客将不介绍如何创建.dbc文件。

从使用2CAN通道模板打开Kvaser CanKing开始,如本系列博客的第一篇博客中所示,然后像以前一样转到View ,并将History List窗口和Times Transmission窗口添加到你的桌面。创建CAN报文会是最复杂的部分,所以我们将从我最近一篇关于J1939工具的博客里复制的报文开始。下面是我将使用的原始报文:

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

要了解如何创建上面显示的J1939 数据中的标识请参见下面链接CAN Protocol Tutorial, Higher Layer Protocols CAN总线协议教程高级协议J1939协议简介:

https://www.kvaser.cn/about-can/higher-layer-protocols/j1939-introduction/.

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

优先权位 = 3

保留位和数据页位 = 0

参数组号码 – PGN = 0x0F004

源地址 = 0

将所有这些信息组合成一个29位标识符,并以十六进制格式显示,这样我们就得到0CF00400,因此将其插入报文方框中的

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

下一步,我们知道数据长度码 (DLC) 8,所以在DLC一栏中输入这个数字。

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

CAN标识符栏中,在末尾加上一个小“x”代表扩展标识符格式。见下图。

下一步,我们需要上传一个.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文件给该报文解码。

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

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

  1. 右键点击History List框,然后选择Clear
  2. Kvaser CanKing框中点击Stop然后点击Start Run来开始一次新运行这将重置计时器场
  3. CAN Message 1栏点击Send一次这将把一个报文放入History List
  4. CAN Message 1栏的Byte 4$14 改到 $15并再次点击
  5. 以你想要的次数,重复此操作,以产生一个引擎加速历史。
  6. 当你得到了你需要的数据点击History List 框中的Save并选择一个存放位置和文件名

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

你可以使用此手动方法操作一个.dbc文件中描述的大多数CAN数据,如果你能访问该.dbc文件。如果你要处理的信号是使用Transport Protocol的较大报文的一部分,则此操作将变得非常困难。

Kvaser有许多合作伙伴公司提供功能强大的CAN分析和模拟软件,那些软件的功能比我在这里演示的要强大得多。这些公司及其产品可以在www.kvaser.com网站, 软件中心 – System Development – 软件技术合作伙伴页面上看到。我在这里展示的工具对于学习CAN以及进行一些简单的模拟和验证操作很有帮助。我希望这个博客对你正在做的工作有帮助。请继续关注本系列的更多内容!

Author Image

whind gutr