Virtual CAN Driver简介

esd提供了virtual CAN device driver(虚拟CAN设备驱动)软件,可以让用户开发基于NTCAN-API的应用程序时更加便捷。它可以让用户在不安装CAN硬件设备和不连接CAN网络的情况下,开发,测试和模拟运行你的应用程序。

Virtual CAN driver是一个纯软件解决方案用来仿真了一个物理CAN硬件,除了以下所列的一些限制以外,能够提供几乎与CAN硬件一样的功能。一旦安装了此virtual CAN device driver,你就可以马上开始开发和测试基于NTCAN API的应用程序,然后就可以很轻松地移植到具有esd CAN硬件的系统上去。 

【1】Virtual CAN driver的主要功能

  1. 所有的NTCAN-API calls都能够被调用。
  2. 所有的CAN-SDK应用程序(如CANreal, CANscript, CANplot, CANrepro, COBview)都可以在没有安装CAN硬件的情况下使用。
  3. 一些CAN硬件不支持的功能也可以使用Virtual CAN driver来验证,如CAN-FD等功能。
  4. 开发测试以及展示基于NTCAN-API的应用程序的时候,可以不用连接CAN硬件。
  5. 新客户可以直接评估验证NTCAN-API的功能,而不是仅仅阅读文档。
  6. 可以模拟速率远超连接真实物理硬件所构成的CAN bus的data rate。

【2】Virtual CAN driver的一些限制

  1. 返回数据的响应时间不能代表实际总线的响应时间。模拟出来的CAN driver接口总是要比实际CAN接口响应速度快。
  2. Bus负载测量不能显示实际数值。
  3. 不存在真实的总线仲裁,所以总线错误的情形也不会出现。
  4. 自动波特率(Autobaud)和错误注入(error injection)功能(在esdACC控制器中提供的功能)不被支持。

【3】在Windows系统上安装Virtual CAN driver

在esd免费提供的CAN SDK软件包CAN_SDK_v710.zip中包含了Virtual CAN driver的安装软件。在CAN SDK软件包的初始设定中,virtual CAN driver没有被选中。需要用户自行在安装CAN SDK过程中勾选它。

安装完成后,用户可以在“装置管理器”中看到CAN Interface -> Virtual CAN Interface装置。双击Virtual CAN Interface装置,可以查看此装置设定的Base Net号码为42。用户可以针对此端口号,也就针对安装好的virtual CAN driver接口发送和接收CAN数据。

【4】在Linux系统上安装Virtual CAN driver

用户可以在下载中心里下载esd virtual CAN(-FD) driver v4.1.6 for Linux

安装步骤可以参考CAN-PCIe/402系列板卡Linux驱动软件安装快速入门。安装完成以后,可以执行cantest不带任何参数,查看一下virtual CAN driver是否安装成功。下图显示virtual CAN driver安装完成,Net 0 设定为其端口号。

接下来就可以测试一下virtual CAN driver了。打开两个terminal对话框,一个terminal对话框用来接收来自此virtual CAN driver发上来的CAN数据。另一个terminal对话框对此virtual CAN driver发送CAN数据。发送完毕后,在接收端窗口内应该能够收到CAN数据。

cantest 3 0 0x3f000600 0x3f00060f 1 10 100 1000 5000 2 -1
//This is the cantest read CAN data command line.
//Following is the meaning of each paramater.
3 -- canRead
0 -- net0
0x3f000600 -- first-id 0x1f000600
0x3f00060f -- last-id 0x1f00060f
1 -- count of CMSG-packets
10 -- txbuf (useless here)
100 -- rxbuf
1000 -- tx timeout every 1 second (useless here)
5000 -- rx timeout every 5 seconds
2 -- baud rate 500k bit/s
-1 -- count of ntcan-API-Calls, -1 is forever canRead the bus.
cantest 0 0 0x3f000606 0x3f000606 1 10 100 100 5000 2 10 0x22 0x33
//This is the cantest send CAN data command line.
//Following is the meaning of each paramater.
0 -- canSend
0 -- net0
0x3f000606 -- first-id 0x1f000606 
0x3f000606 -- last-id 0x1f000606 
1 -- count of CMSG-packets
10 -- txbuf
100 -- rxbuf (useless here)
100 -- tx timeout every 0.1 seonds
5000 -- rx timeout every 5 seconds (useless here)
2 -- baud rate 500k bit/s
10 -- count of ntcan-API-Calls, 10 times canSend to the bus.
0x22 0x33 -- data send to bus