当前所在位置:首页 > 技术知识 > 安全模块

技术知识

北京盟通科技是工业自动化领域的高科技企业,依托于核心团队多年的海外和行业经验,致力实时现场总线技术及工业通讯技术的推广

在Windows环境下通过C++语言开发--修改并构建自己的CAN应用程序

发布时间:2023-08-15


本文将详细讲解如何通过VCI驱动的API接口快速的控制一个CAN设备的收发。

如果您需要在您的PC机器上进行CAN接口的开发和测试,由于PC机器本身不具备CAN接口,您需要通过额外的硬件来将您的PC机上扩展CAN接口,常见的CAN接口扩展方式有:通过USB接口扩展、通过PCIe总线扩展、通过以太网网络扩展等。我们可以提供常见的CAN接口设备,并开放相应的API接口以支持客户进行二次开发,以下内容为通过我们的Ixxat系列产品的API接口开发CAN的演示用例。

此次我将演示继续在Windows环境下通过C++进行CAN设备开发。上一次我们已经成功的运行了VCI预设的CANdemo,想要控制您的设备这需要您根据实际情况开发应用。我们需要修改CAN通道的波特率,并发送数据的IDMessage让其发送理想的数据包。

VCI工程架构

您可以在Visual studio 右侧的树中找到相关的文件,CAN控制相关的demo都是在VCIConsoleSample.cpp这个文件中进行定义和控制的。



VCIConsoleSample.cpp这个文件完成了CAN的初始化、CAN定义、CAN周期收发的动作。由于篇幅的限制,我们不在这里展开讲解,下图是CAN执行后的周期执行位置。此处可以看到,上文中按键“t”、“w”的功能就是在这里实现的。



VCI API接口

Ixxat为客户准备了丰富的API接口,我将在这里讲解最常用的几个API接口。

首先是初始化接口,它决定了CAN的工作模式和波特率。它的定义如下:



我们以修改波特率为例,在demo中找到初始化位置。可以看到波特率已经设置为了预设的125K,打开定义可以看到波特率可以被设置为125k~1M的若干选择。



除了初始化之外,我们还可以常常需要修改设定CAN ID和发送的CAN数据包。

这都需要用到我们的CAN发送API,它定义如下:



我们需要找到demoID预设的位置:



可以看到预设的ID100,这和我们上篇文章看到的数据相同。

在这之后我们找到修改CAN数据的位置:

这里的数据是逐位递增的,应该是00 01 02 03 04 05 06 07.

如果想要修改发送的数据帧,就需要修改上面的位置。

我们有两种不同的发送方式,第二种方式对应了按键中的w”按键,它定义如下:



我们需要找到demoID预设的位置:

可以看到预设的ID200,这和我们上篇文章看到的数据相同。

在这之后我们找到修改CAN数据的位置:



这里的数据是逐位递增的,应该是00 01 02 03 04 05 06 07.

如果想要修改发送的数据帧,就需要修改上面的位置。

VCI demo修改示例

我们通过一个简单的例子来演示API的用法:

我们将demo自:125k波特率;ID200;数据00 01 02 03 04 05 06 07

修改为250k波特率;ID120;数据02 04 06 08 0A 0C 0E 10



我们通过CanAnalyser3 mini抓包查看一下效果。



可以看到数据被正确的修改了。

以上就是VCI驱动API操作的简单演示,如果有更多API操作的问题,可以直接与我们进行联系,拨打010-62740270,我们将提供详细的技术支持。