产品用户手册CAN测试软件与接口函数使用手册CAN接口卡系列产品UserManualUM01010101V3.
14Date:2019/03/18类别内容关键词CANTest通用测试软件、CAN接口函数库使用摘要本软件可适用于广州致远电子有限公司出品的各种CAN接口卡.
CANTest测试软件可进行数据收发、查询等基本传输功能.
是CAN总线测试的必备软件.
CAN接口函数库是提供给用户进行上位机二次开发,可以自行编程进行数据收发、处理等.
修订历史版本日期原因V1.
002004/10/01创建文档V2.
002008/09/01修改架构V3.
002013/08/15更换模版,去除已经停产的产品V3.
012014/02/15修改错误V3.
022014/08/14修改错误V3.
032014/09/05增加CANWIFI函数库说明V3.
042014/11/30增加CANtest新功能V3.
052015/07/21增加新PCIe卡V3.
062015/09/08增加USBCAN-XE-U的底层定时发送V3.
072015/09/18修改USBCAN-XE-U的底层定时发送单位V3.
082015/09/18修改设备类型中对CANET的描述V3.
092016/03/18增加USBCAN-4E-U函数库说明V3.
102016/09/12增加CANDTU函数库说明V3.
112017/03/31增加USBCAN-8E-U函数库说明V3.
122017/08/07修改公司名称,更改销售网络信息V3.
132018/08/07修改错误,增加CANDTU-NET函数库说明V3.
142019/03/18更新文档页眉页脚、"销售与服务网络"内容和新增"免责声明"内容CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
1CAN测试软件与接口函数使用手册目录1.
测试软件使用说明.
11.
1.
设备操作.
11.
1.
1.
设备类型选择.
11.
1.
2.
滤波设置.
21.
1.
3.
启动CAN21.
1.
4.
获取设备信息.
31.
1.
5.
发送数据.
31.
1.
6.
接收时间标识.
31.
1.
7.
隐藏发送帧与显示发送帧.
41.
1.
8.
DBC解码与按ID分类显示.
41.
1.
9.
实时保存与停止保存.
41.
1.
10.
总线利用率.
51.
1.
11.
错误信息显示.
51.
2.
辅助操作.
61.
2.
1.
帧ID显示方式.
61.
2.
2.
帧ID显示格式.
61.
2.
3.
继续显示发送和接收的数据.
61.
2.
4.
暂停显示发送和接收的数据.
61.
2.
5.
滚动.
61.
2.
6.
显示帧数.
61.
2.
7.
Language.
62.
接口函数库说明及其使用.
72.
1接口卡设备类型定义.
72.
2接口库函数使用流程.
82.
3驱动的特色与工作原理.
92.
4错误码定义.
102.
5函数库中的数据结构定义.
112.
5.
1VCI_BOARD_INFO.
112.
5.
2VCI_CAN_OBJ122.
5.
3VCI_CAN_STATUS132.
5.
4VCI_ERR_INFO.
142.
5.
5VCI_INIT_CONFIG142.
5.
6CHGDESIPANDPORT.
162.
5.
7VCI_FILTER_RECORD.
162.
5.
8VCI_AUTO_SEND_OBJ162.
5.
9VCI_INDICATE_LIGHT.
172.
5.
10VCI_CAN_OBJ_REDIRECT.
182.
5.
11DTUCOMCONFIG.
182.
6接口库函数说明.
192.
6.
1VCI_OpenDevice.
192.
6.
2VCI_CloseDevice.
20CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
2CAN测试软件与接口函数使用手册2.
6.
3VCI_InitCAN.
212.
6.
4VCI_ReadBoardInfo232.
6.
5VCI_ReadErrInfo.
242.
6.
6VCI_ReadCANStatus.
282.
6.
7VCI_GetReference.
292.
6.
8VCI_SetReference.
322.
6.
9VCI_StartCAN.
372.
6.
10VCI_ResetCAN.
382.
6.
11VCI_GetReceiveNum392.
6.
12VCI_ClearBuffer.
402.
6.
13VCI_Transmit.
412.
6.
14VCI_Receive.
422.
7特定设备附加说明.
422.
7.
1CANDTU设备423.
接口库函数使用方法.
483.
1VC调用动态库的方法483.
2VB调用动态库的方法483.
3接口库函数使用流程.
504.
免责声明.
51CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
1CAN测试软件与接口函数使用手册1.
测试软件使用说明CAN-bus通用测试软件是一个专门用来对所有的ZLGCAN系列板卡进行测试的软件工具,此软件操作简单,容易上手,通过运用此软件可以非常方便的对板卡进行测试,从而熟悉板卡的性能,其主界面如下:1.
1.
设备操作1.
1.
1.
设备类型选择在进行操作之前,首先得从"类型"菜单中选择您想要操作的设备类型,如下图所示:此时会弹出"选择设备"对话框:CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
2CAN测试软件与接口函数使用手册在这个对话框中您可以选择您要打开的设备索引号和CAN通道,以及设置CAN的初始化参数,然后点"确定"按钮来打开设备操作窗口(或者也可以点击"确定并启动CAN"按钮打开设备操作窗口并自动打开设备和启动CAN通道).
1.
1.
2.
滤波设置接着,设备操作窗口中可以点击"滤波设置"按钮进行滤波设置(如果不需要设置滤波,可以略过此步骤):此时会弹出"滤波设置"对话框:在其中先选择滤波模式,然后通过设定滤波器来设置需要过滤的CAN帧.
1.
1.
3.
启动CAN点击"启动"按钮启动CAN通道,此时接收到的CAN数据将会自动在数据列表中显示:CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
3CAN测试软件与接口函数使用手册1.
1.
4.
获取设备信息在启动CAN通道后,您可以选择"设备操作"菜单中的"设备信息"选项来获得当前设备的详细信息.
1.
1.
5.
发送数据当您启动CAN成功后,在下图中设置好您要发送的CAN帧的各项参数,然后点击"发送"按钮就可以发送数据了(其中发送格式下拉框中的自发自收选项表示发送出去的CAN帧自己也能收到,这个选项在测试的时候才需用到,在实际的应用中请选用正常发送):您还可以点击"高级操作"标签进入高级操作页面,在此页面您可以设置每次发送多个不同的CAN帧(最多可设置100帧),和每帧之间间隔、每批之间间隔:1.
1.
6.
接收时间标识接收时间标识:(1)原始值:CAN卡接收到帧时的板卡时间,单位为0.
1ms,板卡上电后开始计时,仅有智能CAN卡才有时间标识;CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
4CAN测试软件与接口函数使用手册(2)实际时间(s):以电脑的时间为准进行记录.
1.
1.
7.
隐藏发送帧与显示发送帧用于隐藏或者显示发送帧.
1.
1.
8.
DBC解码与按ID分类显示用户点击后,打开DBC界面,用户可以导入需要的DBC文件进行帧解码(解码显示在界面下方,默认自带J1939解码),或者用户使用此界面对CAN帧进行按ID分类的显示,即"ID固定,数据变化".
有变化的数据段会标红.
1.
1.
9.
实时保存与停止保存当用户需要长时间记录报文时,需要使用实时保存功能,当软件缓冲区记录满之后,转存到硬盘中的文件(CSV格式),软件缓冲区清空.
报文文件名可以自动依次编号.
需要在启动之前使能此功能,注意保存位置不能指定在C盘,可能无法保存.
点击停止保存时,则不进行转存.
CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
5CAN测试软件与接口函数使用手册1.
1.
10.
总线利用率点击,可以打开总线利用率的界面.
可以实时监测目前总线的利用率与帧流量.
可以调整刷新时间来调整显示速度.
1.
1.
11.
错误信息显示点击,打开错误信息显示界面,当对应CAN路发生错误时,则会打印出错误信息(发送错误计数器与接收错误计数器值)、错误发生的时间.
CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
6CAN测试软件与接口函数使用手册1.
2.
辅助操作本软件中还设置了一些辅助操作,以方便您能够更好的观察和分析CAN数据:1.
2.
1.
帧ID显示方式帧ID有三种显示方式:二进制、十进制和十六进制,可根据需要自行设定.
1.
2.
2.
帧ID显示格式帧ID显示格式有两种:真实ID(靠右对齐)和兼容SJA1000格式(靠左对齐).
1.
2.
3.
继续显示发送和接收的数据选择此选项后,接收和发送都在前台进行,其数据在屏幕上显示出来.
1.
2.
4.
暂停显示发送和接收的数据选择此选项后,接收和发送都在后台进行,其数据不在屏幕上显示出来.
1.
2.
5.
滚动选择此选项后,当前数据列表中的最后一行总是可见.
1.
2.
6.
显示帧数设定数据列表的显示帧数.
1.
2.
7.
Language选择语言.
CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
7CAN测试软件与接口函数使用手册2.
接口函数库说明及其使用2.
1接口卡设备类型定义各个接口卡的设备类型定义如表2.
1所示,注意本文档为V3.
11版本,去除了已经停产型号的函数库说明,如果需要查看已经停产型号函数说明,请参见V2.
92版本.
表2.
1接口卡的类型定义产品型号动态库中的设备名称类型号PCI-5121(已经停产)PCI51211PCI-9810IPCI98102USBCAN-I/I+USBCAN13USBCAN-II/II+USBCAN24PCI-9820PCI98205CAN232(已经停产)CAN2326PCI-5110(已经停产)PCI51107CANmini(已经停产)CANlite(CANmini)8ISA-9620(已经停产)ISA96209ISA-5420(已经停产)ISA542010PC104-CAN(已经停产)PC104-CAN11CANET系列的UDP工作方式CANET-UDP12DN-PCI9810(已经停产)DNP981013PCI-9840IPCI984014PC104-CAN2IPC104-CAN215PCI-9820IPCI9820I16CANET系列的TCP工作方式CANET-TCP17PEC-9920(已经停产)PEC-992018PCIe-9220(已经停产)PCIE-922018PCI-5010-UPCI-5010-U19USBCAN-E-UUSBCAN-E-U20USBCAN-2E-UUSBCAN-2E-U21PCI-5020-UPCI-5020-U22EG20T-CAN(已经停产)EG20T-CAN23PCIe-9221PCIE-922124CANWiFi-200T的TCP工作方式CANWIFI_TCP25CANWiFi-200T的UDP工作方式CANWIFI_UDP26PCIe-9120IPCIe-9120I27PCIe-9110IPCIe-9110I28PCIe-9140IPCIe-9140I29USBCAN-4E-UUSBCAN-4E-U31CANDTUCANDTU32USBCAN-8E-UUSBCAN-8E-U34CANDTU-NETCANDTU-NET36CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
8CAN测试软件与接口函数使用手册2.
2接口库函数使用流程VCI_OpenDevice打开设备VCI_ReadBoardInfo读设备信息VCI_ReadErrInfo读出错信息VCI_ReadCANStatus读某一路CAN状态VCI_GetReceiveNum读接收缓冲区帧数VCI_ClearBuffer清空接收缓冲区VCI_GetReference读特殊设置信息VCI_SetReference写特殊设置信息VCI_CloseDevice关闭设备VCI_StartCAN启动某一路CANVCI_ResetCAN复位CANVCI_Transmit发送CAN帧VCI_Receive读取CAN帧VCI_Init初始化某一路CANVCI_BOARD_INFO板卡信息结构体VCI_CAN_OBJCAN帧结构体VCI_INIT_CONFIG板卡初始化结构体VCI_CAN_STATUSCAN状态结构体VCI_ERR_INFO错误信息结构体VCI_FILTER_RECORD表格式帧过滤结构体CHGDESIPANDPORTCANET通讯结构体CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
9CAN测试软件与接口函数使用手册2.
3驱动的特色与工作原理本函数库涵盖了广州致远电子生产的所有CAN接口卡设备.
为了保证高效稳定工作.
工作原理如下:(1)接收采用驱动库自动中断,压入缓冲区的方式,保证不丢帧.
用户只需要调用VCI_Receive接收函数,从缓冲区中集中提取数据(可多帧提取),并且可以设置阻塞时间,避免无数据时线程死等.
避免客户来操作中断,导致CAN卡丢帧、PC死机或者蓝屏.
(2)13万帧接收缓冲区.
即调用VCI_OpenDevice后,即在内存中开辟13万帧缓冲区,即使客户不调用接收函数,也会自动接收并压入缓冲区,避免丢帧.
(3)发送可实现多帧发送.
即调用一次函数,实现多帧发送,节约PC资源.
发送返回实际成功的帧数.
并且可以设置发送重试阻塞超时.
默认是1.
5秒-4秒.
(4)丰富的错误代码.
资深用户可以通过调用查看状态与错误寄存器,获得目前CAN卡和CAN总线的状态.
分析后,制定正确的通讯策略(5)灵活的接口移植性.
所有的致远电子CAN接口卡均使用同一套动态库,客户可以在不改变主体程序的情况下,只需修改设备类型和特殊设置,即可实现程序的移植.
比如只要将设备类型从4改成16,即可很方便的将USBCAN-II的程序变成到PCI-9820I的程序.
(6)多平台兼容.
强大的研发和维护团队,紧跟世界潮流,不但支持主流的32bit或者64bit的WIN2000、WINXP、WIN7、WIN8等,还定制支持各种内核的LINUX系统VXWorks.
(7)丰富的例程.
任何编程环境.
只要您想得到的,我们就能提供.
CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
10CAN测试软件与接口函数使用手册2.
4错误码定义表2.
2错误码定义名称值描述CAN错误码ERR_CAN_OVERFLOW0x00000001CAN控制器内部FIFO溢出ERR_CAN_ERRALARM0x00000002CAN控制器错误报警ERR_CAN_PASSIVE0x00000004CAN控制器消极错误ERR_CAN_LOSE0x00000008CAN控制器仲裁丢失ERR_CAN_BUSERR0x00000010CAN控制器总线错误ERR_CAN_BUSOFF0x00000020CAN控制器总线关闭通用错误码ERR_DEVICEOPENED0x00000100设备已经打开ERR_DEVICEOPEN0x00000200打开设备错误ERR_DEVICENOTOPEN0x00000400设备没有打开ERR_BUFFEROVERFLOW0x00000800缓冲区溢出ERR_DEVICENOTEXIST0x00001000此设备不存在ERR_LOADKERNELDLL0x00002000装载动态库失败ERR_CMDFAILED0x00004000执行命令失败错误码ERR_BUFFERCREATE0x00008000内存不足CANET错误码ERR_CANETE_PORTOPENED0x00010000端口已经被打开ERR_CANETE_INDEXUSED0x00020000设备索引号已经被占用ERR_REF_TYPE_ID0x00030001SetReference或GetReference是传递的RefType是不存在ERR_CREATE_SOCKET0x00030002创建Socket时失败ERR_OPEN_CONNECT0x00030003打开socket的连接时失败,可能设备连接已经存在ERR_NO_STARTUP0x00030004设备没启动ERR_NO_CONNECTED0x00030005设备无连接ERR_SEND_PARTIAL0x00030006只发送了部分的CAN帧ERR_SEND_TOO_FAST0x00030007数据发得太快,Socket缓冲区满了CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
11CAN测试软件与接口函数使用手册2.
5函数库中的数据结构定义2.
5.
1VCI_BOARD_INFO描述VCI_BOARD_INFO结构体包含ZLGCAN系列接口卡的设备信息.
结构体将在VCI_ReadBoardInfo函数中被填充.
typedefstruct_VCI_BOARD_INFO{USHORThw_Version;USHORTfw_Version;USHORTdr_Version;USHORTin_Version;USHORTirq_Num;BYTEcan_Num;CHARstr_Serial_Num[20];CHARstr_hw_Type[40];USHORTReserved[4];}VCI_BOARD_INFO,*PVCI_BOARD_INFO;成员hw_Version硬件版本号,用16进制表示.
比如0x0100表示V1.
00.
fw_Version固件版本号,用16进制表示.
dr_Version驱动程序版本号,用16进制表示.
in_Version接口库版本号,用16进制表示.
irq_Num板卡所使用的中断号.
can_Num表示有几路CAN通道.
str_Serial_Num此板卡的序列号.
str_hw_Type硬件类型,比如"USBCANV1.
00"(注意:包括字符串结束符'\0').
Reserved系统保留.
CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
12CAN测试软件与接口函数使用手册2.
5.
2VCI_CAN_OBJ描述VCI_CAN_OBJ结构体是CAN帧结构体,即1个结构体表示一个帧的数据结构.
在发送函数VCI_Transmit和接收函数VCI_Receive中,被用来传送CAN信息帧.
typedefstruct_VCI_CAN_OBJ{UINTID;UINTTimeStamp;BYTETimeFlag;BYTESendType;BYTERemoteFlag;BYTEExternFlag;BYTEDataLen;BYTEData[8];BYTEReserved[3];}VCI_CAN_OBJ,*PVCI_CAN_OBJ;成员ID帧ID.
32位变量,数据格式为靠右对齐.
TimeStamp设备接收到某一帧的时间标识.
只有智能卡才有时间标示,如USBCAN系列与PCI-5010/20.
时间标示从CAN卡上电开始计时,计时单位为0.
1ms.
TimeFlag是否使用时间标识.
为1时TimeStamp有效,TimeFlag和TimeStamp只在此帧为接收帧时有意义.
SendType发送帧类型.
=0时为正常发送(发送失败会自动重发,重发最长时间为1.
5-3秒);=1时为单次发送(只发送一次,不自动重发);=2时为自发自收(自测试模式,用于测试CAN卡是否损坏);=3时为单次自发自收(单次自测试模式,只发送一次).
只在此帧为发送帧时有意义.
RemoteFlag是否是远程帧.
=0时为为数据帧,=1时为远程帧(数据段空).
ExternFlag是否是扩展帧.
=0时为标准帧(11位ID),=1时为扩展帧(29位ID).
DataLen数据长度DLC(AccCodeAccCode对应SJA1000中的四个寄存器ACR0,ACR1,ACR2,ACR3,其中高字节对应ACR0,低字节对应ACR3;AccMask对应SJA1000中的四个寄存器AMR0,AMR1,AMR2,AMR3,其中高字节对应AMR0,低字节对应AMR3.
(请看表后说明)pInitConfig->AccMaskpInitConfig->Reserved保留pInitConfig->Filter滤波方式,1表示单滤波,0表示双滤波pInitConfig->Timing0波特率定时器0,详见VCI_INIT_CONFIGpInitConfig->Timing1波特率定时器1,详见VCI_INIT_CONFIGpInitConfig->Mode模式,0表示正常模式,1表示只听模式AccCode与AccMask配置值请使用测试软件CANtest中"滤波设置"来计算:比如:若只想接收ID为0x030的扩展帧,则如下图所示设置.
点击提交,计算出来的验收码0x00000180即为AccCode值,屏蔽码0x00000007即为AccMask值.
CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
22CAN测试软件与接口函数使用手册VCI_InitCAN的返回值为1表示操作成功,0表示操作失败.
(特例:在CANET中无需调用,调用会返回1)示例#include"ControlCan.
h"intnDeviceType=24;//PCIe-9221intnDeviceInd=0;//索引号0intnCANInd=0;VCI_INIT_CONFIGvic;DWORDdwRel;//中间略去打开设备和填充vic结构体的代码dwRel=VCI_InitCAN(nDeviceType,nDeviceInd,nCANInd,&vic);if(dwRel==STATUS_ERR){VCI_CloseDevice(nDeviceType,nDeviceInd);MessageBox(_T("初始化设备失败!
"),_T("警告"),MB_OK|MB_ICONQUESTION);returnFALSE;}CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
23CAN测试软件与接口函数使用手册2.
6.
4VCI_ReadBoardInfo描述此函数用以获取设备信息.
DWORD__stdcallVCI_ReadBoardInfo(DWORDDevType,DWORDDevIndex,PVCI_BOARD_INFOpInfo);参数DevType设备类型号.
DevIndex设备索引号.
比如当只有一个PCIe-9221时,索引号为0,这时再插入一个PCIe-9221,那么后面插入的这个设备索引号就是1,以此类推.
pInfo用来存储设备信息的VCI_BOARD_INFO结构指针.
返回值为1表示操作成功,0表示操作失败.
(特例:在CANET中无此函数,调用会返回0,并且错误码填充为ERR_CMDFAILED)示例#include"ControlCan.
h"intnDeviceType=24;//PCIe-9221intnDeviceInd=0;//索引号0intnCANInd=0;//CAN0通道VCI_BOARD_INFOvbi;DWORDdwRel;//中间略去其他函数代码dwRel=VCI_ReadBoardInfo(nDeviceType,nDeviceInd,nCANInd,&vbi);CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
24CAN测试软件与接口函数使用手册2.
6.
5VCI_ReadErrInfo描述此函数用以获取CAN卡发生的最近一次错误信息.
DWORD__stdcallVCI_ReadErrInfo(DWORDDevType,DWORDDevIndex,DWORDCANIndex,PVCI_ERR_INFOpErrInfo);参数DevType设备类型号.
DevIndex设备索引号,比如当只有一个PCIe-9221时,索引号为0,这时再插入一个PCIe-9221,那么后面插入的这个设备索引号就是1,以此类推.
CANIndex第几路CAN.
即对应卡的CAN通道号,CAN0为0,CAN1为1,以此类推.
(特例:当调用VCI_OpenDevice,VCI_CloseDevice和VCI_ReadBoardInfo这些与特定的第几路CAN操作无关的操作函数失败后,调用此函数来获取失败错误码的时候应该把CANIndex设为-1.
)pErrInfo用来存储错误信息的VCI_ERR_INFO结构指针.
pErrInfo->ErrCode可能为下列各个错误码的多种组合之一:(CANET相关错误代码,见2.
3错误码定义)ErrCodePassive_ErrDataArLost_ErrData错误描述0x0100无无设备已经打开0x0200无无打开设备错误0x0400无无设备没有打开0x0800无无缓冲区溢出0x1000无无此设备不存在0x2000无无装载动态库失败0x4000无无表示为执行命令失败错误0x8000无内存不足0x0001无无CAN控制器内部FIFO溢出0x0002无无CAN控制器错误报警0x0004有,具体值见表后无CAN控制器消极错误0x0008无有,具体值见表后CAN控制器仲裁丢失0x0010无无CAN控制器总线错误返回值为1表示操作成功,0表示操作失败.
备注当(PErrInfo->ErrCode&0x0004)==0x0004时,存在CAN控制器消极错误.
PErrInfo->Passive_ErrData[0]错误代码捕捉位功能表示Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0错误代码类型错误属性错误段表示CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
25CAN测试软件与接口函数使用手册错误代码类型功能说明位ECC.
7位ECC.
6功能00位错01格式错10填充错11其它错误错误属性bit5=0;表示发送时发生的错误.
=1;表示接收时发生的错误.
错误段表示功能说明bit4bit3bit2bit1bit0功能00011帧开始00010ID.
28-ID.
2100110ID.
20-ID.
1800100SRTR位00101IDE位00111ID.
17-ID.
1301111ID.
12-ID.
501110ID.
4-ID.
001100RTR位01101保留位101001保留位001011数据长度代码01010数据区01000CRC序列11000CRC定义符11001应答通道11011应答定义符11010帧结束10010中止10001活动错误标志10110消极错误标志10011支配(控制)位误差10111错误定义符11100溢出标志PErrInfo->Passive_ErrData[1]表示接收错误计数器PErrInfo->Passive_ErrData[2]表示发送错误计数器当(PErrInfo->ErrCode&0x0008)==0x0008时,存在CAN控制器仲裁丢失错误.
PErrInfo->ArLost_ErrData仲裁丢失代码捕捉位功能表示CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
26CAN测试软件与接口函数使用手册Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0错误段表示错误段表示功能表示位十进制值功能ALC.
4ALC.
3ALC.
2ALC.
1ALC.
0000000仲裁丢失在识别码的bit1000011仲裁丢失在识别码的bit2000102仲裁丢失在识别码的bit3000113仲裁丢失在识别码的bit4001004仲裁丢失在识别码的bit5001015仲裁丢失在识别码的bit6001106仲裁丢失在识别码的bit7001117仲裁丢失在识别码的bit8010008仲裁丢失在识别码的bit9010019仲裁丢失在识别码的bit100101010仲裁丢失在识别码的bit110101111仲裁丢失在SRTR位0110012仲裁丢失在IDE位0110113仲裁丢失在识别码的bit120111014仲裁丢失在识别码的bit130111115仲裁丢失在识别码的bit141000016仲裁丢失在识别码的bit151000117仲裁丢失在识别码的bit161001018仲裁丢失在识别码的bit171001119仲裁丢失在识别码的bit181010020仲裁丢失在识别码的bit191010121仲裁丢失在识别码的bit201011022仲裁丢失在识别码的bit211011123仲裁丢失在识别码的bit221100024仲裁丢失在识别码的bit231100125仲裁丢失在识别码的bit241101026仲裁丢失在识别码的bit251101127仲裁丢失在识别码的bit261110028仲裁丢失在识别码的bit271110129仲裁丢失在识别码的bit281111030仲裁丢失在识别码的bit291111131仲裁丢失在ERTR位示例#include"ControlCan.
h"CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
27CAN测试软件与接口函数使用手册intnDeviceType=24;//PCIe-9221intnDeviceInd=0;//索引号0intnCANInd=0;//CAN0通道VCI_ERR_INFOvei;DWORDdwRel;//中间略去其他函数代码dwRel=VCI_ReadErrInfo(nDeviceType,nDeviceInd,nCANInd,&vei);CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
28CAN测试软件与接口函数使用手册2.
6.
6VCI_ReadCANStatus描述此函数用以获取CAN状态.
DWORD__stdcallVCI_ReadCANStatus(DWORDDevType,DWORDDevIndex,DWORDCANIndex,PVCI_CAN_STATUSpCANStatus);参数DevType设备类型号.
DevIndex设备索引号,比如当只有一个PCIe-9221时,索引号为0,这时再插入一个PCIe-9221,那么后面插入的这个设备索引号就是1,以此类推.
CANIndex第几路CAN.
即对应卡的CAN通道号,CAN0为0,CAN1为1,以此类推.
pCANStatus用来存储CAN状态的VCI_CAN_STATUS结构体指针.
返回值为1表示操作成功,0表示操作失败.
(注:在CANET中无此函数,调用会返回0,获取错误码ERR_CMDFAILED)示例#include"ControlCan.
h"intnDeviceType=24;//PCIe-9221intnDeviceInd=0;//索引号0intnCANInd=0;//CAN0通道VCI_INIT_CONFIGvic;VCI_CAN_STATUSvcs;DWORDdwRel;//中间略去其他函数代码dwRel=VCI_ReadCANStatus(nDeviceType,nDeviceInd,nCANInd,&vcs);CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
29CAN测试软件与接口函数使用手册2.
6.
7VCI_GetReference描述此函数用以获取设备的相应参数(主要是CANET和CANDTU-NET的相关参数).
DWORD__stdcallVCI_GetReference(DWORDDevType,DWORDDevIndex,DWORDCANIndex,DWORDRefType,PVOIDpData);参数DevType设备类型号.
DevIndex设备索引号,比如当只有一个PCIe-9221时,索引号为0,这时再插入一个PCIe-9221,那么后面插入的这个设备索引号就是1,以此类推.
CANIndex第几路CAN.
即对应卡的CAN通道号,CAN0为0,CAN1为1,以此类推.
RefType参数类型.
pData用来存储参数有关数据缓冲区地址首指针.
返回值为1表示操作成功,0表示操作失败.
备注VCI_GetReference这个函数是用来针对各个不同设备的一些特定操作的.
(1)当设备类型为CANET-UDP时:RefTypepData功能描述0字符串首指针,用来存储所读取出来的CANET-UDP的IP地址.
读取CANET-UDP的IP地址.
例如:charszip[20];VCI_GetReference(VCI_CANETUDP,0,0,0,(PVOID)szip);如果此函数调用成功,则在szip中返回CANET-UDP的地址.
1长度为4个字节存储读所取出来的CANET-UDP的工作端口.
读取CANET-UDP的工作端口.
例如:DWORDport;VCI_GetReference(VCI_CANETUDP,0,0,1,(PVOID)&port);如果此函数调用成功,则在port中返回CANET-UDP的工作端口.
(2)当设备类型为CANET-TCP或CANDTU-NET时:此设备有两种工作模式,分别为客户端和服务器模式,如果设备工作在客户端模式,我们的CANtest测试工具需要工作在服务器模式,而设备工作在服务器模式,我们的CANtest测试工具则需要工作在客户端模式.
RefTypepData功能描述CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
30CAN测试软件与接口函数使用手册0字符串首指针,用来存储所读取出来的CANET-TCP或CANDTU-NET的IP地址.
(当CANET工作在服务器模式时使用)读取已经连接上的CANET-TCP的IP地址.
例如:charszip[20];VCI_GetReference(VCI_CANETTCP,0,0,0,(PVOID)szip);如果此函数调用成功,则在szip中返回CANET_TCP的地址.
1长度为4个字节,存储读取出来的CANET-TCP或CANDTU-NET的工作端口.
(当CANET工作在服务器模式时有效)读取CANET-TCP的工作端口.
例如:DWORDport;VCI_GetReference(VCI_CANETTCP,0,0,1,(PVOID)&port);如果此函数调用成功,则在port中返回CANET-TCP的工作端口.
2长度为4个字节,存储本机上的TCP工作端口.
(在服务器和客户端模式时同时有效)读取本机端口.
例如:DWORDport;VCI_GetReference(VCI_CANETTCP,0,0,2,(PVOID)&port);如果此函数调用成功,则在port中返回本机上的工作端口.
4长度为4个字节,存储本机的TCP工作模式.
读取本机的工作模式,如果CANET-TCP工作在服务器模式则本机工作在客户端模式,如果CANET-TCP工作在客户端模式则本机工作在服务器模式.
0为客户端方式,1为服务器方式.
例如:DWORDiType;VCI_GetReference(VCI_CANETTCP,0,0,4,(PVOID)&iType);如果此函数调用成功,读取本机工作模式.
5长度为4个字节,存储连接到本机服务器上的客户端个数.
(当工作在客户端模式下有效)读取连接到本机上客户端CANET-TCP数量.
例如:DWORDiCount;VCI_GetReference(VCI_CANETTCP,0,0,5,(PVOID)&iCount);6使用REMOTE_CLIENT结构,获取一个连接的信息.
(当工作在客户端模式下有效)当有客户端连接到本机时,使用此命令获取客户端信息.
例如:REMOTE_CLIENTcli;cli.
iIndex=0;//获取第0个连接到服务器的客户端VCI_GetReference(VCI_CANETTCP,0,0,6,(PVOID)&cli);如果此函数调用成功,则在cli存储客户端的信息.
REMOTE_CLIENT结构typedefstructtagRemoteClient{intiIndex;//连接的客户端索引号DWORDport;//连接的客户端工作端口CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
31CAN测试软件与接口函数使用手册HANDLEhClient;charszip[32];//连接的客户端IP地址}REMOTE_CLIENT;示例#include"ControlCan.
h"intnDeviceType=12;//CANET-UDPintnDeviceInd=0;//索引号0intnCANInd=0;//CAN0通道charszip[20];DWORDdwRel;//中间略去其他函数代码dwRel=VCI_GetReference(nDeviceType,nDeviceInd,nCANInd,0,(PVOID)szip);CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
32CAN测试软件与接口函数使用手册2.
6.
8VCI_SetReference描述此函数用以设置CANET与PCI-5010-U/PCI-5020-U/USBCAN-E-U/USBCAN-2E-U/USBCAN-4E-U/CANDTU/USBCAN-8E-U/CANDTU-NET等设备的相应参数,主要处理不同设备的特定操作.
DWORD__stdcallVCI_SetReference(DWORDDevType,DWORDDevIndex,DWORDCANIndex,DWORDRefType,PVOIDpData);参数DevType设备类型号.
DevIndex设备索引号,比如当只有一个PCIe-9221时,索引号为0,这时再插入一个PCIe-9221,那么后面插入的这个设备索引号就是1,以此类推.
CANIndex第几路CAN.
即对应卡的CAN通道号,CAN0为0,CAN1为1,以此类推.
RefType参数类型.
pData用来存储参数有关数据缓冲区地址首指针.
返回值为1表示操作成功,0表示操作失败.
备注VCI_SetReference这个函数是用来针对各个不同设备的一些特定操作的.
函数中的PVOID型参数pData随不同设备的不同操作而具有不同的意义.
(1)当设备类型为PCI-5010-U、PCI-5020-U、USBCAN-E-U、USBCAN-2E-U时:RefTypepData功能描述0指向DWORD类型的指针,该DWORD变量的值为写入波特率寄存器BTR的值.
一些标准波特率设置如下:0x060003:1000Kbps0x060004:800Kbps0x060007:500Kbps0x1C0008:250Kbps0x1C0011:125Kbps0x160023:100Kbps0x1C002C:50Kbps0x1600B3:20Kbps0x1C00E0:10Kbps0x1C01C1:5Kbps若用户设置为其他值,有可能工作不正常.
如果需要列表中没有列出的波特率值,用户应咨询致远电子CAN-bus技术支持工程师020-22644381或者发送邮件到:CANscope@zlg.
cn),计算出合适的波特率值.
(注意:CAN网络最大通讯波特率不应该超过1000Kbps,所以对波特率的设置不能超过此值,否则设置失败)必须在调用VCI_InitCAN之前调用本函数在这里设置通讯的波特率.
1指向VCI_FILTER_RECORD结构的指针填充CAN滤波器的滤波表格(每添加一条记录调用本函数一次)用于这些类型设备CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
33CAN测试软件与接口函数使用手册的帧接收过滤.
应该在调用VCI_InitCAN函数之后用VCI_SetReference函数进行设置详操作见光盘例程.
2NULL,可忽略按滤波表格中的设置启动滤波,调用即启用.
应该在调用VCI_InitCAN函数之后用VCI_SetReference函数进行设置3NULL,可忽略清除滤波4指向DWORD类型的指针,该DWORD变量的值为发送的超时时间,单位为ms设置发送重发的超时时间,单位为ms,如果没有调用本函数进行设置,默认超时为4000ms.
建议用户在这里设置超时时间不应小于1500ms,否则可能导致VCI_Transmit总是返回失败.
5指向VCI_AUTO_SEND_OBJ结构的指针设置自动发送列表中的发送帧.
设备可以设置无需软件干预的硬件层自动定时发送功能,最大支持32帧6NULL,可忽略清除自动发送帧列表(2)当设备类型为USBCAN-4E-U时:RefTypepData功能描述0指向DWORD类型的指针,该DWORD变量的值为设置的波特率值.
一些标准波特率设置如下:1000000:1000Kbps800000:800Kbps500000:500Kbps250000:250Kbps125000:125Kbps100000:100Kbps50000:50Kbps20000:20Kbps10000:10Kbps5000:5Kbps若用户设置为其他值,有可能工作不正常.
如果需要列表中没有列出的波特率值,用户应咨询致远电子CAN-bus技术支持工程师020-22644381或者发送邮件到:CANscope@zlg.
cn),计算出合适的波特率值.
(注意:CAN网络最大通讯波特率不应该超过1000Kbps,所以对波特率的设置不能超过此值,否则设置失败)必须在调用VCI_InitCAN之前调用本函数在这里设置通讯的波特率.
2指向VCI_INDICATE_LIGHT结构的指针设置CAN指示灯,应该在调用VCI_InitCAN函数之后用VCI_SetReference函数进行设置.
3指向DWORD类型的指针,该DWORD变量的值为设置的时间起始值,单位为0.
1ms设置计数器/时钟,应该在调用VCI_InitCAN函数之后用VCI_SetReference函数进行设置4指向BYTE类型的指针,长度为1个字节.
含义如下:Bit0:1启用/0停用计数器Bit1:1启动/0停止计数器设置启用/停用、启动/停止计数器,应该在调用VCI_InitCAN函数之后用VCI_SetReference函数进行设置CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
34CAN测试软件与接口函数使用手册5指向VCI_AUTO_SEND_OBJ结构的指针设置自动发送列表中的发送帧.
设备可以设置无需软件干预的硬件层自动定时发送功能,最大支持32帧6指向VCI_CAN_OBJ_REDIRECT结构的指针设置CAN报文转发.
应该在调用VCI_InitCAN函数之后用VCI_SetReference函数进行设置.
7指向VCI_FILTER_RECORD结构的指针填充CAN滤波器的滤波表格(每添加一条记录调用本函数一次)用于这些类型设备的帧接收过滤.
应该在调用VCI_InitCAN函数之后用VCI_SetReference函数进行设置详操作见光盘例程8NULL,可忽略按滤波表格中的设置启动滤波,调用即启用.
应该在调用VCI_InitCAN函数之后用VCI_SetReference函数进行设置9NULL,可忽略停止滤波10NULL,可忽略清除滤波11NULL,可忽略停止自动发送,会停止设备硬件的所有帧的自动发送.
(3)当设备为CANDTU时:RefTypepData功能描述3指向DTUCOMCONFIG结构的指针.
设置CANDTU设备的配置信息,如设备的波特率,滤波等信息,配置文件的格式规则请参考CANDTU配置说明小节.
(4)当设备类型为USBCAN-8E-U时:RefTypepData功能描述2指向VCI_CAN_OBJ_REDIRECT结构的指针设置CAN报文转发.
应该在调用VCI_InitCAN函数之后用VCI_SetReference函数进行设置.
5指向VCI_AUTO_SEND_OBJ结构的指针设置自动发送列表中的发送帧.
设备可以设置无需软件干预的硬件层自动定时发送功能,最大支持32帧6NULL,可忽略停止自动发送,会停止设备硬件的所有帧的自动发送.
(5)当设备类型为CANET-UDP时:RefTypepData功能描述0字符串首指针,用来存储所指定操作的CANETE-UDP的IP地设置所要操作的CANET-UDP的IP地址例如:charszip[20];VCI_SetReference(VCI_CANETUDP,0,0,0,(PVOICAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
35CAN测试软件与接口函数使用手册址.
D)szip);1长度为4个字节,存储所指定操作的CANET-UDP的工作端口.
设置所要操作的CANET-UDP的工作端口DWORDport=5000;VCI_SetReference(VCI_CANETUDP,0,0,1,(PVOID)&port);(6)当设备类型为CANET-TCP、CANDTU-NET时:此设备有两种工作模式,分别为客户端和服务器模式,如果设备工作在客户端模式,我们的CANtest测试工具需要工作在服务器模式,而设备工作在服务器模式,我们的CANtest测试工具则需要工作在客户端模式.
RefTypepData功能描述0字符串首指针,用来存储所指定操作的IP地址.
(当CANET工作在服务器模式时使用)设置所要操作的CANET-TCP的IP地址.
例如:charszip[20];VCI_SetReference(VCI_CANETTCP,0,0,0,(PVOID)szip);1长度为4个字节,存储所指定操作的工作端口.
(当CANET工作在服务器模式时使用)设置所要操作的CANET-TCP的工作端口.
例如:DWORDport;VCI_SetReference(VCI_CANETTCP,0,0,1,(PVOID)&port);2长度为4个字节,存储本机上的TCP工作端口.
(在服务器和客户端模式时同时有效)设置本机TCP端口.
例如:DWORDport;VCI_SetReference(VCI_CANETTCP,0,0,2,(PVOID)&port);4长度为4个字节,存储本机的TCP工作模式.
设置本机的工作模式,如果CANET-TCP工作在服务器模式则本机工作在客户端模式,如果CANET-TCP工作在客户端模式则本机工作在服务器模式.
0为客户端方式,1为服务器方式.
例如:DWORDiType=0;VCI_SetReference(VCI_CANETTCP,0,0,4,(PVOID)&iType);7使用REMOTE_CLIENT结构,删除一个连接.
(当工作在客户端模式下有效)例如:REMOTE_CLIENTcli;cli.
iIndex=0;//删除第0个连接的客户端VCI_SetReference(VCI_CANETTCP,0,0,7,(PVOID)&cli);REMOTE_CLIENT结构typedefstructtagRemoteClient{intiIndex;//连接的客户端索引号DWORDport;//连接的客户端工作端口HANDLEhClient;charszip[32];//连接的客户端IP地址CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
36CAN测试软件与接口函数使用手册}REMOTE_CLIENT;示例#include"ControlCan.
h"intnDeviceType=12;//CANET-UDPintnDeviceInd=0;//索引号0intnCANInd=0;//CAN0通道DWORDport=4001;//CANET-UDP的工作端口DWORDdwRel;//中间略去其他函数代码dwRel=VCI_SetReference(nDeviceType,nDeviceInd,nCANInd,1,(PVOID)&port);CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
37CAN测试软件与接口函数使用手册2.
6.
9VCI_StartCAN描述此函数用以启动CAN卡的某一个CAN通道.
有多个CAN通道时,需要多次调用.
DWORD__stdcallVCI_StartCAN(DWORDDevType,DWORDDevIndex,DWORDCANIndex);参数DevType设备类型号.
DevIndex设备索引号,比如当只有一个PCIe-9221时,索引号为0,这时再插入一个PCIe-9221,那么后面插入的这个设备索引号就是1,以此类推.
CANIndex第几路CAN.
即对应卡的CAN通道号,CAN0为0,CAN1为1,以此类推.
返回值为1表示操作成功,0表示操作失败.
示例#include"ControlCan.
h"intnDeviceType=24;//PCIe-9221intnDeviceInd=0;//索引号0intnCANInd=0;//CAN0通道DWORDdwRel;VCI_INIT_CONFIGvic;//中间略去其他函数代码dwRel=VCI_OpenDevice(nDeviceType,nDeviceInd,nReserved);if(dwRel!
=STATUS_OK){MessageBox(_T("打开设备失败!
"),_T("警告"),MB_OK|MB_ICONQUESTION);returnFALSE;}dwRel=VCI_InitCAN(nDeviceType,nDeviceInd,nCANInd,&vic);if(dwRel==STATUS_ERR){VCI_CloseDevice(nDeviceType,nDeviceInd);MessageBox(_T("初始化设备失败!
"),_T("警告"),MB_OK|MB_ICONQUESTION);returnFALSE;}dwRel=VCI_StartCAN(nDeviceType,nDeviceInd,nCANInd);if(dwRel==STATUS_ERR){VCI_CloseDevice(nDeviceType,nDeviceInd);MessageBox(_T("启动设备失败!
"),_T("警告"),MB_OK|MB_ICONQUESTION);returnFALSE;}CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
38CAN测试软件与接口函数使用手册2.
6.
10VCI_ResetCAN描述此函数用以复位CAN.
主要用与VCI_StartCAN配合使用,无需再初始化,即可恢复CAN卡的正常状态.
比如当CAN卡进入总线关闭状态时,可以调用这个函数.
DWORD__stdcallVCI_ResetCAN(DWORDDevType,DWORDDevIndex,DWORDCANIndex);参数DevType设备类型号.
DevIndex设备索引号,比如当只有一个PCIe-9221时,索引号为0,这时再插入一个PCIe-9221,那么后面插入的这个设备索引号就是1,以此类推.
CANIndex第几路CAN.
即对应卡的CAN通道号,CAN0为0,CAN1为1,以此类推.
返回值为1表示操作成功,0表示操作失败.
(注:在CANET-TCP中将会断开网络,需要重新VCI_StartCAN才能使用)备注针对CANDTU设备,关闭设备之前需要对每个已经启动(StartCAN)的通道调用VCI_ResetCAN来关闭对应的通道,否则可能导致CANDTU设备无法正常记录数据.
示例#include"ControlCan.
h"intnDeviceType=24;//PCIe-9221intnDeviceInd=0;//索引号0intnCANInd=0;//CAN0通道DWORDdwRel;dwRel=VCI_ResetCAN(nDeviceType,nDeviceInd,nCANInd);CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
39CAN测试软件与接口函数使用手册2.
6.
11VCI_GetReceiveNum描述此函数用以获取指定CAN通道的接收缓冲区中,接收到但尚未被读取的帧数量.
主要用途是配合VCI_Receive使用,即缓冲区有数据,再接收.
用户无需一直调用VCI_Receive,可以节约PC系统资源,提高程序效率.
ULONG__stdcallVCI_GetReceiveNum(DWORDDevType,DWORDDevIndex,DWORDCANIndex);参数DevType设备类型号.
DevIndex设备索引号,比如当只有一个PCIe-9221时,索引号为0,这时再插入一个PCIe-9221,那么后面插入的这个设备索引号就是1,以此类推.
CANIndex第几路CAN.
即对应卡的CAN通道号,CAN0为0,CAN1为1,以此类推.
返回值返回尚未被读取的帧数.
示例#include"ControlCan.
h"intnDeviceType=24;//PCIe-9221intnDeviceInd=0;//索引号0intnCANInd=0;//CAN0通道DWORDdwRel;//中间略去其他函数代码dwRel=VCI_GetReceiveNum(nDeviceType,nDeviceInd,nCANInd);CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
40CAN测试软件与接口函数使用手册2.
6.
12VCI_ClearBuffer描述此函数用以清空指定CAN通道的缓冲区.
主要用于需要清除接收缓冲区数据的情况.
DWORD__stdcallVCI_ClearBuffer(DWORDDevType,DWORDDevIndex,DWORDCANIndex);参数DevType设备类型号.
DevIndex设备索引号,比如当只有一个PCIe-9221时,索引号为0,这时再插入一个PCIe-9221,那么后面插入的这个设备索引号就是1,以此类推.
CANIndex第几路CAN.
即对应卡的CAN通道号,CAN0为0,CAN1为1,以此类推.
返回值为1表示操作成功,0表示操作失败.
示例#include"ControlCan.
h"intnDeviceType=24;//PCIe-9221intnDeviceInd=0;//索引号0intnCANInd=0;//CAN0通道DWORDdwRel;//中间略去其他函数代码dwRel=VCI_ClearBuffer(nDeviceType,nDeviceInd,nCANInd);CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
41CAN测试软件与接口函数使用手册2.
6.
13VCI_Transmit描述发送函数.
返回值为实际发送成功的帧数.
ULONG__stdcallVCI_Transmit(DWORDDevType,DWORDDevIndex,DWORDCANIndex,PVCI_CAN_OBJpSend,ULONGLen);参数DevType设备类型号.
DevIndex设备索引号,比如当只有一个PCIe-9221时,索引号为0,这时再插入一个PCIe-9221,那么后面插入的这个设备索引号就是1,以此类推.
CANIndex第几路CAN.
即对应卡的CAN通道号,CAN0为0,CAN1为1,以此类推.
pSend要发送的帧结构体VCI_CAN_OBJ数组的首指针.
Len要发送的帧结构体数组的长度(发送的帧数量).
返回值返回实际发送成功的帧数.
示例#include"ControlCan.
h"#includeintnDeviceType=24;//PCIe-9221intnDeviceInd=0;//索引号0intnCANInd=0;//CAN0通道DWORDdwRel;VCI_CAN_OBJvco[2];//定义两帧的结构体数组//中间略去其他函数代码vco[0].
ID=0x00000001;//填写第一帧的IDvco[0].
SendType=0;//正常发送vco[0].
RemoteFlag=0;//数据帧vco[0].
ExternFlag=0;//标准帧vco[0].
DataLen=1;//数据长度1个字节vco[0].
Data[0]=0x66;//数据0为0x66vco[1].
ID=0x00000002;//填写第二帧的IDvco[1].
SendType=0;//正常发送vco[1].
RemoteFlag=0;//数据帧vco[1].
ExternFlag=0;//标准帧vco[1].
DataLen=1;//数据长度1个字节vco[1].
Data[0]=0x55;//数据0为0x55dwRel=VCI_Transmit(nDeviceType,nDeviceInd,nCANInd,vco,2);//发送两帧CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
42CAN测试软件与接口函数使用手册2.
6.
14VCI_Receive描述接收函数.
此函数从指定的设备CAN通道的接收缓冲区中读取数据.
建议在调用之前,先调用VCI_GetReceiveNum.
函数获知缓冲区中有多少帧,然后对应地去接收.
ULONG__stdcallVCI_Receive(DWORDDevType,DWORDDevIndex,DWORDCANIndex,PVCI_CAN_OBJpReceive,ULONGLen,INTWaitTime=-1);参数DevType设备类型号.
DevIndex设备索引号,比如当只有一个PCIe-9221时,索引号为0,这时再插入一个PCIe-9221,那么后面插入的这个设备索引号就是1,以此类推.
CANIndex第几路CAN.
即对应卡的CAN通道号,CAN0为0,CAN1为1,以此类推.
pReceive用来接收的帧结构体VCI_CAN_OBJ数组的首指针.
Len用来接收的帧结构体数组的长度(本次接收的最大帧数,实际返回值小于等于这个值).
WaitTime缓冲区无数据,函数阻塞等待时间,以毫秒为单位.
若为-1则表示无超时,一直等待.
返回值返回实际读取到的帧数.
如果返回值为0xFFFFFFFF,则表示读取数据失败,有错误发生,请调用VCI_ReadErrInfo函数来获取错误码.
示例#include"ControlCan.
h"#includeintnDeviceType=24;//PCIe-9221intnDeviceInd=0;//索引号0intnCANInd=0;//CAN0通道DWORDdwRel;VCI_CAN_OBJvco[100];//中间略去其他函数代码dwRel=VCI_Receive(nDeviceType,nDeviceInd,nCANInd,vco,100,400);//一次最多能接收100帧,如果缓冲区无数据,接收函数等待400毫秒后退出,返回02.
7特定设备附加说明本小节描述特定设备的附加说明信息.
2.
7.
1CANDTU设备CANDTU的配置方式与其他CAN卡有些不同,使用文本内容方式进行配置.
软件通过接口库中的VCI_SetReference接口将配置信息发送给设备,设备解析相应的信息,设置CAN通道的波特率,滤波等参数来完成配置.
配置采用Windows系统Ini文件的格式内容,由小节和属性构成,配置文件包含两CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
43CAN测试软件与接口函数使用手册个类型的小节,通用配置[GEN]小节和CAN通道配置[CANx]小节,x在实际配置中使用通道索引代替,一般扩展成[CAN0][CAN1]这样名称的节.
其中[GEN]小节描述配置文件的类型,用于确定配置文件支持的键值信息.
[CANx]小节代表CAN对应通道的配置信息,根据通道数目,目前小节名字为[CAN0][CAN1].
1.
通用配置信息[GEN]小节表示通用配置信息,具体配置项参考下面说明.
[GEN]CfgType=2//配置文件类型,0:保存的工程文件,用于配置软件进行配置的加载,保存,//1:设备脱机记录参数信息,CANDTU配置工具下载配置到设备使用此种格式,//2:接入CANTEST,进入USBCAN模式下can配置信息NChan=2//表示CAN通道数量,CAN具体配置情况见[CAN0][CAN1]小节2.
通道配置信息[CANx]表示通道配置小节,用于表达通道的波特率,和滤波等参数的信息.
x表示通道号,[CAN0]表示第一个通道,[CAN1]表示第二个通道.
[CANx]配置信息如下所示.
[CAN0]BpsBRP=239//CAN波特率中的分频值BpsSWJ=0//CAN波特率中的同步跳转宽度BpsSeg1=11//CAN波特率中的Tseg1BpsSeg2=5//CAN波特率中的Tseg2BpsSmp=0//CAN波特率中是否三次采样,0:不适用三次采样;1:使用三次采样FltFmat=0//滤波表格式:目前只能设置为0FltCNT=0//滤波表有效条目数,主要用于上位机保存对应的信息并正确显示FltM0=0//滤波表MASKFltM1=0//滤波表MASKFltM2=0//滤波表MASKFltM3=0//滤波表MASKFltM4=0//滤波表MASKFltM5=0//滤波表MASKFltM6=0//滤波表MASKFltM7=0//滤波表MASKFltT0=0//滤波表接收码FltT1=0//滤波表接收码FltT2=0//滤波表接收码FltT3=0//滤波表接收码FltT4=0//滤波表接收码FltT5=0//滤波表接收码FltT6=0//滤波表接收码FltT7=0//滤波表接收码Mode=0//CAN模式UseRes=0//是否启用内置的终端电阻.
0:不启用,1:启用3.
波特率参数配置BpsBRP,BpsSWJ,BpsSeg1,BpsSeg2,BpsSmp几个参数用于配置CAN的波特CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
44CAN测试软件与接口函数使用手册率参数.
CANDTU的CAN模块支持不同的方式来建立CAN协议所要求的位时序参数.
控制寄存器有不同的字段用来控制为时序参数:PrescalerValue,SYNC_SEG,PROP_SEG,PSEG1,PSEG2以及SJW(重新同步跳转宽度).
各个参数代表的意义可以参考图2.
2.
参数与配置文件字段的对应关系如下所示:PrescalerValue=BpsBRP+1.
取值范围[1,255]SYNC_SEG=1.
PROP_SEG=0.
SJW=BpsSWJ+1.
取值范围[1,4]PSEG1=BpsSeg1=时间段1-2.
取值范围[3,14]PSEG2=BpsSeg2=时间段2-1.
取值范围[1,7]BpsSmp=0/1.
0:不适用三次采样;1:使用三次采样.
CANDTU设备所用的晶振对应的fCANCLK=24000000.
一个位时间可以被分为三个部分:1.
SYNC_SEG:同步段,该段有一个时间份额的固定长度.
电平信号边缘出现在该段内;2.
时间段1(TimeSegment1):该段包括CAN标准的传播段以及相位段1.
时间总和为4到16个最小时间份额;3.
时间段2(TimeSegment2):该段代表CAN标准的相位段2.
可设置值范围为2到8.
图2.
1波特率计算图2.
2时间单位时序CANDTU设备CAN控制器兼容位时间段设置如图2.
3所示.
CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
45CAN测试软件与接口函数使用手册图2.
3时间单位各部分数据范围波特率计算举例:BpsBRP=239//CAN波特率中的分频值BpsSWJ=0//CAN波特率中的同步跳转宽度BpsSeg1=11//CAN波特率中的Tseg1BpsSeg2=5//CAN波特率中的Tseg2BpsSmp=0//CAN波特率中是否三次采样,0:不适用三次采样;1:使用三次采样fTq=24000000/(239+1)=100000BitRate=fTq/(SYNC_SEG+PROP_SEG+PSEG1+2+PSEG2+1)=100000/(1+0+11+2+5+1)=5000bps4.
滤波器参数配置滤波器配置参数是以Flt开头,如下所示:FltFmat=0//滤波表格式:目前只能设置为0FltCNT=0//滤波表有效条目数FltM0=0//滤波表MASKFltM1=0//滤波表MASKFltM2=0//滤波表MASKFltM3=0//滤波表MASKFltM4=0//滤波表MASKFltM5=0//滤波表MASKFltM6=0//滤波表MASKFltM7=0//滤波表MASKFltT0=0//滤波表接收码FltT1=0//滤波表接收码FltT2=0//滤波表接收码FltT3=0//滤波表接收码FltT4=0//滤波表接收码FltT5=0//滤波表接收码FltT6=0//滤波表接收码FltT7=0//滤波表接收码其中FltM和FltT是对应关系,一对FltM和FltT构成一条滤波表记录.
CANDTU设备最多支持8组滤波条件.
设备接收数据时,会将接收到的CAN帧依次与滤波表中CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
46CAN测试软件与接口函数使用手册的条目进行匹配,满足匹配条件就接收对应的数据帧,停止继续匹配.
如果所有的条件都不满足,则对应的CAN帧不会被接收.
当滤波表中有一条表示接收所有数据的条件时,所有的数据帧都会因为和这条匹配通过而被设备接收.
二次开发中需要特别注意,如果设置的规则不够8条,则需要对剩余的过滤规则进行填充,填充内容要和目前已经存在的规则中任意一条相同即可.
每一组滤波表包含一个32位的验收码(FltT)和一个32位的屏蔽码(FltM).
验收码和屏蔽码的位定义如图2.
4所示.
图2.
4验收码和屏蔽码位定义REM:RemoteFrame,1:远程帧接收,数据帧拒绝接收;0:远程帧拒绝接收,数据帧接收.
EXT:ExtendedFrame,1:扩展帧接收,标准帧拒绝接收;0:扩展帧拒绝接收,标准帧接收.
RXIDA:CAN帧的帧ID,标准帧使用29-19一共11位作为帧ID,扩展帧使用29-1一共29位作为帧ID.
验收码FltT和屏蔽码FltM结合起来才能确定一条滤波记录的接收情况.
FltM中的某一位为1,表示接收帧的该位与FltT中的该位一致才会接收.
FltM中的某一位为0,表示不检查接收帧的该位的值,不论与FltT中对应位是否一致都会接收.
下面用几个例子进行说明.
例1:设置只接收ID为1的标准帧.
设置FltT0为0x00080000,设置FltM0为0x7FF80000,然后将剩余的7条过滤规则设置与第一条相同的内容.
例2:设置接收所有帧.
设置FltT0为0x00000000,设置FltM0为0x00000000.
这里设置对应的屏蔽码为0就可以达到同样的效果.
例3:设置接收所有标准帧.
设置FltT0为0x00000000,设置FltM0为0x40000000.
然后将剩余的7条过滤规则设置与第一条相同的内容.
5.
CANDTU模式配置CAN模式可以参考如下结构体:typedefunion_CANDTUCHNLMODE{BYTEmode_data;struct{BYTEreserved:6;//保留低6个bitBYTEextframe:1;//标准帧:0,扩展帧:1CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
47CAN测试软件与接口函数使用手册BYTEnormalmode:1;//只听模式:0,正常模式:1}mode_bits;}CANDTUCHNLMODE;在配置接收数据时,目前只有最高位模式位有效,剩余7位暂时没有启用.
最高位normalmode为0时,CAN进入只听模式,当最高位为1时,进入正常模式.
所以目前一般配置成128表示正常模式,配置成0表示只听模式.
CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
48CAN测试软件与接口函数使用手册3.
接口库函数使用方法首先,把库函数文件都放在工作目录下.
库函数文件总共有三个文件:ControlCAN.
h、ControlCAN.
lib、ControlCAN.
dll和一个文件夹kerneldlls.
3.
1VC调用动态库的方法(1)在扩展名为.
CPP的文件中包含ControlCAN.
h头文件.
如:#include"ControlCAN.
h"(2)在工程的连接器设置中连接到ControlCAN.
lib文件.
如:在VC7环境下,在项目属性页里的配置属性→连接器→输入→附加依赖项中添加ControlCAN.
lib3.
2VB调用动态库的方法通过以下方法进行声明后就可以调用了.
语法:[Public|Private]DeclareFunctionnameLib"libname"[Alias"aliasname"][([arglist])][Astype]Declare语句的语法包含下面部分:Public(可选)用于声明在所有模块中的所有过程都可以使用的函数.
Private(可选)用于声明只能在包含该声明的模块中使用的函数.
Name(必选)任何合法的函数名.
动态链接库的入口处(entrypoints)区分大小写.
Libname(必选)包含所声明的函数动态链接库名或代码资源名.
Alias(可选)表示将被调用的函数在动态链接库(DLL)中还有另外的名称.
当外部函数名与某个函数重名时,就可以使用这个参数.
当动态链接库的函数与同一范围内的公用变量、常数或任何其它过程的名称相同时,也可以使用Alias.
如果该动态链接库函数中的某个字符不符合动态链接库的命名约定时,也可以使用Alias.
Aliasname(可选)动态链接库.
如果首字符不是数字符号(#),则aliasname是动态链接库中该函数入口处的名称.
如果首字符是(#),则随后的字符必须指定该函数入口处的顺序号.
Arglist(可选)代表调用该函数时需要传递参数的变量表.
Type(可选)Function返回值的数据类型;可以是Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)或Variant,用户定义类型,或对象类型.
CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
49CAN测试软件与接口函数使用手册arglist参数的语法如下:[Optional][ByVal|ByRef][ParamArray]varname[()][Astype]部分描述:Optional(可选)表示参数不是必需的.
如果使用该选项,则arglist中的后续参数都必需是可选的,而且必须都使用Optional关键字声明.
如果使用了ParamArray,则任何参数都不能使用Optional.
ByVal(可选)表示该参数按值传递.
ByRef(可选)表示该参数按地址传递.
例如:PublicDeclareFunctionVCI_OpenDeviceLib"ControlCAN"(ByValdevicetypeAsLong,ByValdeviceindAsLong,ByValreservedAsLong)AsLongCAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
50CAN测试软件与接口函数使用手册3.
3接口库函数使用流程VCI_OpenDevice打开设备VCI_ReadBoardInfo读设备信息VCI_ReadErrInfo读出错信息VCI_ReadCANStatus读某一路CAN状态VCI_GetReceiveNum读接收缓冲区帧数VCI_ClearBuffer清空接收缓冲区VCI_GetReference读特殊设置信息VCI_SetReference写特殊设置信息VCI_CloseDevice关闭设备VCI_StartCAN启动某一路CANVCI_ResetCAN复位CANVCI_Transmit发送CAN帧VCI_Receive读取CAN帧VCI_Init初始化某一路CANVCI_BOARD_INFO板卡信息结构体VCI_CAN_OBJCAN帧结构体VCI_INIT_CONFIG板卡初始化结构体VCI_CAN_STATUSCAN状态结构体VCI_ERR_INFO错误信息结构体VCI_FILTER_RECORD表格式帧过滤结构体CHGDESIPANDPORTCANET通讯结构体CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
51CAN测试软件与接口函数使用手册4.
免责声明广州致远电子有限公司隶属于广州立功科技股份有限公司.
本着为用户提供更好服务的原则,广州致远电子有限公司(下称"致远电子")在本手册中将尽可能地为用户呈现详实、准确的产品信息.
但介于本手册的内容具有一定的时效性,致远电子不能完全保证该文档在任何时段的时效性与适用性.
致远电子有权在没有通知的情况下对本手册上的内容进行更新,恕不另行通知.
为了得到最新版本的信息,请尊敬的用户定时访问致远电子官方网站或者与致远电子工作人员联系.
感谢您的包容与支持!
CAN接口卡系列产品产品用户手册2019GuangzhouZHIYUANElectronicsCo.
,Ltd.
.
52CAN测试软件与接口函数使用手册销售与服务网络广州致远电子有限公司地址:广州市天河区车陂路黄洲工业区7栋2楼邮编:510660网址:www.
zlg.
cn全国服务热线电话:400-888-4005广州总公司广州市天河区车陂路黄洲工业区7栋2楼上海分公司上海市北京东路668号科技京城东楼12E室北京分公司北京市丰台区马家堡路180号蓝光云鼎208室深圳分公司深圳市宝安区新安街道海秀路21号龙光世纪大厦A座1205武汉分公司武汉市洪山区民族大道江南家园1栋3单元602室南京分公司南京市秦淮区汉中路27号友谊广场17层F、G区杭州分公司杭州市西湖区紫荆花路2号杭州联合大厦A座4单元508室成都分公司四川省成都市高新技术开发区天府大道中段500号东方希望天祥广场1栋C座3521室(地铁世纪城站B出口)郑州分公司河南省郑州市中原区建设西路118号1号楼3单元13层1302室(华亚广场)重庆分公司重庆市渝北区龙溪街道新溉大道18号山顶国宾城11幢4-14西安办事处西安市长安北路54号太平洋大厦1201室天津办事处天津市河东区津塘路与十一经路交口鼎泰大厦1004青岛办事处山东省青岛市李沧区枣园路11号银座华府1号楼2单元1901室
BuyVM针对中国客户推出了China Special - STREAM RYZEN VPS主机,带Streaming Optimized IP,帮你解锁多平台流媒体,适用于对于海外流媒体有需求的客户,主机开设在拉斯维加斯机房,AMD Ryzen+NVMe磁盘,支持Linux或者Windows操作系统,IPv4+IPv6,1Gbps不限流量,最低月付5加元起,比美元更低一些,现在汇率1加元=0.7...
也有在上个月介绍到糖果主机商12周年的促销活动,我有看到不少的朋友还是选择他们家的香港虚拟主机和美国虚拟主机比较多,同时有一个网友有联系到推荐入门的个人网站主机,最后建议他选择糖果主机的迷你主机方案,适合单个站点的。这次商家又推出所谓的秋季活动促销,这里一并整理看看这个服务商在秋季活动中有哪些值得选择的主机方案,比如虚拟主机最低可以享受六折,云服务器可以享受五折优惠。 官网地址:糖果主机秋季活动促...
mansora怎么样?mansora是一家国人商家,主要提供沪韩IEPL、沪日IEPL、深港IEPL等专线VPS。现在新推出了英国CN2 KVM VPS,线路为AS4809 AS9929,可解锁 Netflix,并有永久8折优惠。英国CN2 VPS,$18.2/月/1GB内存/10GB SSD空间/1TB流量/100Mbps端口/KVM,有需要的可以关注一下。点击进入:mansora官方网站地址m...
电脑性能测试工具为你推荐
免费虚拟主机申请谁有1年免费的虚拟主机申请地址吖?美国服务器托管美国服务器租用有那些机房,他们的优缺点是什么?jsp虚拟空间java虚拟主机空间怎么选择,国内jsp虚拟主机比较稳定java项目做好后需要推荐一下吧免费网站空间申请需要一个免费的网站空间申请地址。100m虚拟主机100M虚拟主机有多大,能放多少东西1g虚拟主机打算买个1G的虚拟主机,用来做什么好?成都虚拟主机成都唯度科技有限公司怎么样?双线虚拟主机G型双线虚拟主机是什么意思二级域名一级域名与二级域名有啥区别备案域名购买购买已备案域名好使吗?
如何注册网站域名 万网免费域名 本网站服务器在美国维护 阿里云os virpus 59.99美元 国外bt 美国php主机 火车票抢票攻略 远程登陆工具 轻量 网盘申请 最好看的qq空间 网通ip 天互数据 老左来了 1g内存 无限流量 cdn网站加速 免费蓝钻 更多