广州智维欢迎您!智维公
司致力于先进的汽车及自动化测控仪器设备CAN总线分析仪_尾气分析仪_空燃比分析仪_蓄电池检测仪_数据记录仪_数据采集_车载网络_网关等产品

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

Guangzhou Triv Electronic Technologies Co.LTD

技术服务
SUPPORT

目前位置: >

2019-01-02

Kvaser 软件开发包 SDK 从 CAN CLASSIC 升级到 CAN FD

作者:    点击:211



 CanFDTest



我们在 Embarcadero DELPHI(Pascal) 环境中 建立了一个项目,名为 “CanFDTest”。如果你没有 DELPHI 环境, 可借助 任何文本编辑器来阅读此代码。 最重要的代码被放在 RunCanFDExamplePlease 程序中,并收录在附录A里。

在此程序中,我们初始化总线,发送一个帧,收到一个帧,完成总线。


所需硬件

我们将 在虚拟一个计算机 (Microsoft HYPER-V, WIN10 64bit) 和一个 标准笔记本电脑上进行这个范例的测试。在测试中,我们既 使用虚拟适配器,也使用Kvaser 适配器。

如果用 Kvaser 驱动上的虚拟通道,就不需要用硬件 (Kvaser CAN适配器) 来运行这个范例项目。




 “CanFDTest”需要的工具



此范例来自 Delphi® 项目 “CanFDTest_xxx”。

运行此 范例是没必要的,更重要的是打开文件 “CanFDtestUnit.pas”,和学习RunCanFDExamplePlease()程序步骤。


EMBARCADERO DELPHI
      Delphi® 是由 EMBARCADERO® 提供的一个软件。在写本文时 (2018 年 1 月10 日),他们提 供了一个免费版本 “DELPHI STARTER”。


Kvaser CANlib SDK

你需要 CANlib 软件开发包 (Kvaser Caleb SDK) 来运行此范例。我们总是离不开 CANlib。


Kvaser CAN 硬件的驱动

这个驱 动包括一个虚拟硬件,它可以 做我们的各款硬件能做的任何事。这使我 们不用任何物理适配器,就能测试 CAN FD 。当你有一个 Kvaser 适配器以后,就可以 轻松地从虚拟驱动转移到真实 CAN FD 总线上。

提供 Windows,Linux,DIADEM的驱动,本例程基于 Windows 驱动平台。


Kvaser HELP 文件

CANlib Help ,这里包括对 CANlib SDK支持。

DELPHI, CANlib SDK 和 DRIVER必须在运行范例(CanFDTest)之前安装好




 CanFDTest程序



CanFDTest 范例程序是由 4 个 PAS 文件组成的:

CANlib.pas

CanFDTestUnit.pas

DummyUnit.pas

MyHelpUnit.pas


CANlib.pas

通常这 个文件被包括在 Kvaser CANlib SDK 里。

为了方便用户, PAS 文件被 复制在我们的项目里,而不是在 DELPHI 里建立 一个搜索路径到此文件。


CanFDTestUnit.pas

包括此 范例的所有主要信息。

在本文 的结尾部分包含运行 RunCanFDExamplePlease() 的步骤。


DummyUnit.pas

包含一些测试用的“仿函数(dummy functions)” 。

这些函数“不做任何事”, 但它们 能为测试设置分界点。编译程 序不能优化仿函数中的变量,所以它们不影响测试。


MyHelpUnit.pas

包含一些能帮助我们,但 SDK 未介绍的功能。

怎样使用范例 CanFDTest

打开文件 “CanFDTest.dproj” (从 DELPHI 打开),解压和打开此项目。

如果你 不想运行此范例,则用一 个你选的文本编辑器打开文件“CanFDTestUnit.pas”。




 RunCanFDExamplePlease运行步骤



这分为4部分: 初始化-发送-接收-完成

这里展 示的代码是节选的,不是全部。请查看源代码。


步骤: 初始化

选择 CLASSIC CAN 或 CAN FD

设置常态 MyApp 为 canFD 或 canCLASSIC CAN。

将需要 作为发送的适配器通道设置为 TX_MySelCh 。

将需要 作为接收的适配器通道设置为 RX_MySelCh 。

几乎所有 Kvaser CAN 适配器 可同时为发送器和接收器。我们在 这个范例里选择以一个为 TX,另一个 RX ,以使这 个范例的代码容易被理解。

首先我们运行 3 个命令:

canInitializeLibrary()

canGetChannelData()


不需要改变 Can FD

现在我 们知道存在多少个适配器以及它们的名称。我们可 以打开其中两个。

canOpenChannel()


需要编辑  Can FD!

CAN CLASSIC

TX_MyHnd := canOpenChannel(TX_MySelCh – 1, canOPEN_ACCEPT_VIRTUAL);

RX_MyHnd := canOpenChannel(RX_MySelCh – 1, canOPEN_ACCEPT_VIRTUAL);

CAN FD

TX_MyHnd := canOpenChannel(TX_MySelCh – 1, canOPEN_ACCEPT_VIRTUAL OR canOPEN_CAN_FD);

RX_MyHnd := canOpenChannel(RX_MySelCh – 1, canOPEN_ACCEPT_VIRTUAL OR canOPEN_CAN_FD);

在打开一个FD通道时,使用旗标(FLAG)是重要的: canOPEN_CAN_FD

我们用联合命令“canOPEN_ACCEPT_VIRTUAL OR canOPEN_CAN_FD” 打开一个虚拟适配器,设置模式为FD。

现在适配器打开了,我们需 要设置它们的参数。

canSetBusParams() and canSetBusParamsFD()


FD需要编辑和附加信息FD!

可以用其他值,而不用预设值 (本文不介绍这部分)。

CAN CLASSIC

canSetBusParams()仅能与canBITRATE_xxx一起用。

TX := canSetBusParams(TX_MyHnd, canBITRATE_500K, 0, 0, 0, 0, 0);

RX := canSetBusParams(RX_MyHnd, canBITRATE_500K, 0, 0, 0, 0, 0);

CAN FD

canSetBusParams() and canSetBusParamsFD()能与 canFD_BITRATE_xxx一起用。

TX := canSetBusParams(TX_MyHnd, canFD_BITRATE_500K_80P, 0, 0, 0, 0, 0);

RX := canSetBusParams(RX_MyHnd, canFD_BITRATE_500K_80P, 0, 0, 0, 0, 0);

TX := canSetBusParamsFD(TX_MyHnd, canFD_BITRATE_1M_80P, 0, 0, 0);

RX := canSetBusParamsFD(RX_MyHnd, canFD_BITRATE_1M_80P, 0, 0, 0);


请注意, 不要在FD上使用canBITRATE_xxx 值!

现在所 有参数都设置好了,我们可以上线了,所以我 们要结束初始化过程,打开总线,做一些清理。

canBusOn()

canFlushTransmitQueue()

canFlushReceiveQueue()


不需要改变CAN FD

 

步骤: 发送

我们激活了总线,适配器 在等我们的下一步操作。我们应 从一个选出的适配器发送一个帧。

canWrite()


需要编辑CAN FD!

(我们可以用canWrite() 或 canWriteWait()命令,但在本 范例中我们只用canWrite。)

推荐: 参阅THE HELP!

CAN CLASSIC

BUF  := ‘Hello!’;

id   := 111;

dlc  := 8; // For Classic CAN dlc can be at most 8*

Flag := canMSG_STD;

R := canWrite(TX_MyHnd, id, @BUF, dlc, Flag);

CAN FD

BUF  := ‘Hello World!’;

id   := 222;

dlc  := 16; // for CAN FD dlc CAN be one of the following 0-8,12, 16, 20, 24, 32, 48, 64

Flag := canMSG_STD OR canFDMSG_FDF OR canFDMSG_BRS;

R := canWrite(TX_MyHnd, id, @BUF, dlc, Flag);


新缓存容量可达 64 bytes

加 canFDMSG_FDF 到旗标 flag 上(表明此帧是一个 FD 帧)

加 canFDMSG_BRS 到旗标 flag 上(表明该 帧需以比特率调节发送)

请注意 canFDMSG_BRS可选可不选。当加了 BRS flag, 数据部分是以 FD 比特率发送的,而不是 以仲裁比特率发送的。

在你激活 FD 以后仍可以发送 classic CAN 帧! 只能用 canMSG_STD 或 canMSG_EXT 生成一个 classic 帧。

 

步骤: 接收

canRead()


需要编辑 CAN FD!

(可用来接收 FD 通讯的 canRead() (至少)有四个版本的。在此范例中我们仅用canRead(),所以我们建议你阅读 ‘Help’ 部分!)

R   := canRead(RX_MyHnd, id, @BUF, dlc, Flag, myTime);

我们不 需要对阅读命令做任何修改,但是 …

确认缓存 [BUF] 的最小容量是 64 bytes。即使我 们并不想发送长过 24 bytes的帧, 别人或许需要。

研究被返回的旗标值,它们包含了一些新值。这些是 canMSG_xxx, canMSGERR_xxx 和 canFDMSG_xxx 值的综合。

即使只 有我们在总线上,而且我们仅发了一帧, 接受到 的帧未必是我们想要的。例如,如果旗标里包括了值 canMSG_ERROR_FRAME, 那么此 帧是一个错误帧,不是我们希望看到的。.

一定要 总是检查返回的值[R] 和返回的旗标! 现在我 们已经收到了我们的帧。

 

步骤: 完成

完成步骤不需要编辑。

canBusOff()

canClose()

canUnloadLibrary()

不需要改变 CAN FD


总结

当然,可以用 SDK 做很多事, 但我们 将此范例局限在发送和接收一个帧。

如果你要扩展此范例, 可以按 你的需要修改它,并和 Kvaser CANKing 软件结合起来使用,以发送和接收帧。你可在 我们的网站上看到该软件(和 SDK ,驱动在同一个位置) 。你能用 CANKing 生成帧,模拟错误(以及更多)。

我们希 望本文能帮助你在 Kvaser 产品上使用 CAN FD。




使用 CAN FD的命令:



请格外注意下列命令,你使用 CAN FD 和编辑 你的代码时都需要它们。

请注意 CAN FD 可能需要更多命令/旗标,而本文 限于篇幅没有逐一介绍。

记住在 使用我们提到的任何命令以前,总是先查看 HELP 。

canOpenChannel()

canGetBusParamsFD()

canSetBusParams()

canSetBusParamsFD()

canWrite()

canWriteWait() 本文未用到


canRead()

canReadSpecific() 本文未用到

canReadSpecificSkip() 本文未用到

canReadWait() 本文未用到

返回列表

友情链接:    彩票客户端   pk10聊天室   广西快乐十分   快3彩票注册_快3彩票官网   008彩网址首页