IXXAT系列CAN卡-C#文档及实例程序解析

1.测试用硬件

公司的工控机用的老型号CAN卡IB200,不支持CANFD,会在后续IB640到货后再进行CANFD的测试。IXXAT中国官网上的CAN卡列表

2.IXXAT文档-结构

安装IXXAT系列CAN卡的驱动后会得到许多编程语言的文档,例如C/C++/C#,虽然实现的语言比较多,但是使用接口的方法/逻辑是一样的,接口使用方法大同小异,因此这里使用C#作为示例语言进行文档的分析。

2.1 系统组件


整个系统组件分为三个部分,分别为用户态、内核态和硬件部分,接口将内核态和硬件接口隐藏起来,封装后的API在用户态中暴露,基于C++API得到其他语言的接口,虽然系统组件中对用户态和硬件部分给出了一点介绍,但是我们也无法看到源码内对这些部分的实际操作,因此只需要关注暴露出来的用户态接口即可。
针对于C#的接口分为两种,分别是老版本的VCI3 .NET API和最新的VCI4 .NET API,两者有一点不同,这里以VCI4. NET API为示例。

2.2 VCI4适配器


在VCI接口中主要使用的是三个适配器,分别为:vcinet.x64.dll/vcinet.x86.dll/ixxat.Vci4.dll,其中x64和x86两个动态库是在驱动中附带的,而Vci4.dll是通过NuGet安装。将x64和x86的.dll扔到可执行文件夹bedug后重新编译,如果还报错则需要在依赖中添加这些库,在rebuild项目时会自动安装Vci4.dll,如果没有就用NuGet管理器手动下载即可。需要注意x86和x64的.dll和Vci4.dll有一定的版本对应关系。否则也会报错。
Vci4与Vci3的最大区别是添加了对于CANFD的支持,但是也要注意你买的CAN卡是否是支持CANFD的,否则在初始化时会报错波特率错误。

2.3 .NET接口的组件


这些组件涵盖了IXXAT接口的所有功能--访问设备,访问端口(通道),建立连接,发送数据,发送循环数据,发送控制命令,LIN等操作(这里不涉及)。
可以看到不同的类的CAN Channel的接口大同小异,但是CAN control不涉及到数据段的传输因此没有Message的读写接口。因此即使是不同的类在使用同样的功能时也保持了一致性。

IXXAT-库的安装

库的安装在2.2中已经给出了说明,给出添加库的方式:

using Ixxat.Vci3; 
using Ixxat.Vci4;

创建设备管理器的方式也根据版本有所不同:

deviceManager = VciServer.GetDeviceManager(); // Vci3
deviceManager = VciServer.Instance().DeviceManager; // Vci4

通讯时的传输对象创建根据版本有所不同:

// Vci3
CanMessage canMsg = new CanMessage();
// Vci4
IMessageFactory factory = VciServer.Instance().MsgFactory;
ICanMessage canMsg = (ICanMessage)factory.CreateMsg(typeof(ICanMessage));

通讯时的接口对象差异不大,但是对象类不同了:

// Vci3
CanMessage canMessage;
// Vci4
ICanMessage canMessage;
posted @ 2023-08-21 13:53  Gav1n-cheung  阅读(333)  评论(0)    收藏  举报