CAN-bus接口函数库使用手册

时间:2022-10-22 19:25:44  热度:0°C
1 CAN bus 接口函数库 使用手册V1 0 北京爱泰电子出品 2011 2 目录目录 1 接口函数库说明及其使用接口函数库说明及其使用 3 1 1 接口卡设备类型定义 3 1 2 错误码定义 3 1 3 函数库中的数据结构定义 4 1 3 1 VCI BOARD INFO 4 1 3 2 VCI CAN OBJ 5 1 3 3 VCI CAN STATUS 6 1 3 4 VCI ERR INFO 7 1 3 5 VCI INIT CONFIG 7 1 4 接口库函数说明 9 1 4 1 VCI OpenDevice 9 1 4 2 VCI CloseDevice 10 1 4 3 VCI InitCan 10 1 4 4 VCI ReadBoardInfo 15 1 4 5 VCI ReadErrInfo 16 1 4 6 VCI ReadCanStatus 22 1 4 7 VCI GetReference 23 1 4 8 VCI SetReference 25 1 4 9 VCI GetReceiveNum 28 1 4 10 VCI ClearBuffer 28 1 4 11 VCI StartCAN 29 1 4 12 VCI ResetCAN 31 1 4 13 VCI Transmit 31 1 4 14 VCI Receive 32 1 5 接口库函数使用方法 33 1 5 1 VC调用动态库的方法 34 1 5 2 VB调用动态库的方法 34 1 6 接口库函数使用流程 35 2 LINUX 下动态库的使用下动态库的使用 37 2 1 驱动程序的安装 37 2 1 1 USBCAN驱动的安装 37 2 2 动态库的安装 37 2 3 动态库的调用及编译 37 3 1 接口函数库说明及其使用接口函数库说明及其使用 1 1 接口卡设备类型定义 接口卡设备类型定义 接口卡的类型定义如下 设备名称设备名称 设备类型号设备类型号 USBCAN1 3 USBCAN2 4 PCICAN 9820 5 PC104plusCAN PCICAN 9840 14 CANET UDP 12 CANET TCP 17 1 2 错误码定义错误码定义 名称名称 值值 描述描述 ERR CAN OVERFLOW 0 x00000001CAN ***内部 FIFO 溢出 ERR CAN ERRALARM 0 x00000002CAN ***错误报警 ERR CAN PASSIVE 0 x00000004CAN ***消极错误 ERR CAN LOSE 0 x00000008CAN ***仲裁丢失 ERR CAN BUSERR 0 x00000010CAN ***总线错误 ERR DEVICEOPENED 0 x00000100设备已经打开 ERR DEVICEOPEN 0 x00000200打开设备错误 ERR DEVICENOTOPEN 0 x00000400设备没有打开 ERR BUFFEROVERFLOW 0 x00000800缓冲区溢出 ERR DEVICENOTEXIST 0 x00001000此设备不存在 ERR LOADKERNELDLL 0 x00002000装载动态库失败 ERR CMDFAILED 0 x00004000执行命令失败错误码 ERR BUFFERCREATE 0 x00008000内存不足 ERR CANETE PORTOPENED0 x00010000端口已经被打开 ERR CANETE INDEXUSED 0 x00020000 设备索引号已经被占用 4 1 3 函数库中的数据结构定义函数库中的数据结构定义 1 3 1 VCI BOARD INFO 描述 VCI BOARD INFO 结构体包含 CAN 系列接口卡的设备信息 结构体将在 VCI ReadBoardInfo 函数中被填充 typedef struct VCI BOARD INFO USHORT hw Version USHORT fw Version USHORT dr Version USHORT in Version USHORT irq Num BYTE can Num CHAR str Serial Num 20 CHAR str hw Type 40 USHORT Reserved 4 VCI BOARD INFO PVCI BOARD INFO 成员 hw Version 硬件版本号 用16进制表示 比如0 x0100表示V1 00 fw Version 固件版本号 用 16 进制表示 dr Version 驱动程序版本号 用 16 进制表示 in Version 接口库版本号 用 16 进制表示 irq Num 板卡所使用的中断号 can Num 表示有几路 CAN 通道 str Serial Num 此板卡的序列号 str hw Type 5 硬件类型 比如 USBCAN V1 00 注意 包括字符串结束符 0 Reserved 系统保留 1 3 2 VCI CAN OBJ 描述 VCI CAN OBJ结构体在VCI Transmit和VCI Receive函数中被用来传送CAN 信息帧 typedef struct VCI CAN OBJ UINT ID UINT TimeStamp BYTE TimeFlag BYTE SendType BYTE RemoteFlag BYTE ExternFlag BYTE DataLen BYTE Data 8 BYTE Reserved 3 VCI CAN OBJ PVCI CAN OBJ 成员 ID 报文 ID TimeStamp 接收到信息帧时的时间标识 从 CAN ***初始化开始计时 TimeFlag 是否使用时间标识 为 1 时 TimeStamp 有效 TimeFlag 和 TimeStamp 只在此帧 为接收帧时有意义 SendType 发送帧类型 0时为正常发送 1时为单次发送 2时为自发自收 3时为单 次自发自收 只在此帧为发送帧时有意义 RemoteFlag 是否是远程帧 ExternFlag 6 是否是扩展帧 DataLen 数据长度 AccCode AccCode 对应 SJA1000 中的四个寄存器 ACR0 ACR1 ACR2 ACR3 其中高 字节对应 ACR0 低字节对应 ACR3 AccMask 对应 SJA1000 中的四个寄存器 AMR0 AMR1 AMR2 AMR3 其中 高字节对应 AMR0 低字节对应 AMR3 请看表后说明 pInitConfig AccMask pInitConfig Reserved保留 pInitConfig Filter 滤波方式 1 表示单滤波 0 表示双滤波 pInitConfig Timing0定时器 0 pInitConfig Timing1定时器 1 pInitConfig Mode 模式 0 表示正常模式 1 表示只听模式 当滤波方式为单滤波 接收帧为标准帧时 12 RTR 对应 VCI CAN OBJ 中的 RemoteFlag 当滤波方式为单滤波 接收帧为扩展帧时 当滤波方式为双滤波 接收帧为标准帧时 13 当滤波方式为双滤波 接收帧为扩展帧时 14 返回值 为 1 表示操作成功 0 表示操作失败 示例 include ControlCan h int nDeviceType 4 int nDeviceInd 0 int nCANInd 0 int nReserved 0 VCI INIT CONFIG vic DWORD dwRel dwRel VCI OpenDevice nDeviceType nDeviceInd nReserved 15 if dwRel STATUS OK MessageBox T 打开设备失败 T 警告 MB OK MB ICONQUESTION return FALSE dwRel VCI InitCAN nDeviceType nDeviceInd nCANInd if dwRel STATUS ERR VCI CloseDevice nDeviceType nDeviceInd MessageBox T 初始化设备失败 T 警告 MB OK MB ICONQUESTION return FALSE 1 4 4 VCI ReadBoardInfo 描述 此函数用以获取设备信息 DWORD stdcall VCI ReadBoardInfo DWORD DevType DWORD DevIndex PVCI BOARD INFO pInfo 参数 DevType 设备类型号 DevIndex 设备索引号 比如当只有一个 USBCAN 时 索引号为 0 有两个时可以为 0 或 1 pInfo 用来存储设备信息的 VCI BOARD INFO 结构指针 返回值 为 1 表示操作成功 0 表示操作失败 示例 include ControlCan h int nDeviceType 4 USBCAN2 int nDeviceInd 0 16 int nCANInd 0 VCI INIT CONFIG vic VCI BOARD INFO vbi DWORD dwRel bRel VCI ReadBoardInfo nDeviceType nDeviceInd nCANInd 1 4 5 VCI ReadErrInfo 描述 此函数用以获取最后一次错误信息 DWORD stdcall VCI ReadErrInfo DWORD DevType DWORD DevIndex DWORD CANIndex PVCI ERR INFO pErrInfo 参数 DevType 设备类型号 DevIndex 设备索引号 比如当只有一个 USBCAN 时 索引号为 0 有两个时可以为 0 或 1 CANIndex 第几路 CAN 注 当要读取设备错误的时候 此参数应该设为 1 pErrInfo 用来存储错误信息的VCI ERR INFO结构指针 pErrInfo ErrCode可能为下 列各个错误码的多种组合之一 ErrCode Passive ErrData ArLost ErrData 错误描述错误描述 0 x0100 无 无 设备已经打开 0 x0200 无 无 打开设备错误 0 x0400 无 无 设备没有打开 0 x0800 无 无 缓冲区溢出 0 x1000 无 无 此设备不存在 0 x2000 无 无 装载动态库失败 0 x4000 无 无 表示为执行命令失败错误 17 0 x8000 无 内存不足 0 x0001 无 无 CAN ***内部 FIFO 溢 出 0 x0002 无 无 CAN ***错误报警 0 x0004 有 具体值见表后 无 CAN ***消极错误 0 x0008 无 有 具体值见表后 CAN ***仲裁丢失 0 x0010 无 无 CAN ***总线错误 返回值 为 1 表示操作成功 0 表示操作失败 备注 备注 当 PErrInfo ErrCode USBCAN int nDeviceInd 0 第一个设备 int nCANInd 0 VCI ERR INFO vei DWORD dwRel bRel VCI ReadErrInfo nDeviceType nDeviceInd nCANInd 1 4 6 VCI ReadCanStatus 描述 此函数用以获取 CAN 状态 DWORD stdcall VCI ReadCanStatus DWORD DevType DWORD DevIndex DWORD CANIndex PVCI CAN STATUS pCANStatus 参数 DevType 设备类型号 DevIndex 设备索引号 比如当只有一个 PCI5121 时 索引号为 0 有两个时可以为 0 或 1 CANIndex 第几路 CAN pCANStatus 用来存储 CAN 状态的 VCI CAN STATUS 结构指针 返回值 为 1 表示操作成功 0 表示操作失败 示例 include ControlCan h int nDeviceType 4 int nDeviceInd 0 int nCANInd 0 23 VCI INIT CONFIG vic VCI CAN STATUS vcs DWORD dwRel bRel VCI ReadCANStatus nDeviceType nDeviceInd nCANInd 1 4 7 VCI GetReference 描述 此函数用以获取设备的相应参数 DWORD stdcall VCI GetReference DWORD DevType DWORD DevIndex DWORD CANIndex DWORD RefType PVOID pData 参数 DevType 设备类型号 DevIndex 设备索引号 只有一个设备时 索引号为 0 有两个时可以为 0 或 1 CANIndex 第几路 CAN RefType 参数类型 pData 用来存储参数有关数据缓冲区地址首指针 返回值 为 1 表示操作成功 0 表示操作失败 备注 1 当设备类型为 USBCAN1 USBCAN2 时 RefType pData 功能描述 1 总长度 1 个字节 当 作为输入参数时 表 示 为 所 要 读 取 的 CAN ***的控制 读 CAN ***的指定控制寄存器的值 例如对 USBCAN1 BYTE val 0 VCI GetReference VCI USBCAN1 0 0 1 PVOID 24 寄存器的地址 当作为输出参数时 表示为 CAN *** 的控制寄存器的值 如果此函数调用成功 则在 val 中返回寄存器 的值 当 RefType 1 时 此时返回的 pData 各个字节所代表的意义如下 pData 0 信息保留 pData 1 表示 CAN *** BTR0 的值 pData 2 表示 CAN *** BTR1 的值 pData 3 读取该组验收滤波器模式 位功能 STATUS 7 STATUS 6 STATUS 5 STATUS 4STATUS 3STATUS 2STATUS 1 STATUS 0 MFORMATB AMODEB MFORMATB 1 验收滤波器该组仅用于扩展帧信息 标准帧信息被忽略 0 验收滤波器该组仅用于标准帧信息 扩展帧信息被忽略 AMODEB 1 单验收滤波器选项使能 长滤波器有效 0 双验收滤波器选项使能 短滤波器有效 pData 4 读取该组验收滤波器的使能 位功能 STATUS 7 STATUS 6 STATUS 5 STATUS 4STATUS 3STATUS 2 STATUS 1 STATUS 0 BF2EN BF1EN BF2EN 1 该组滤波器 2 使能 不能对相应的***和代码寄存器进行写操作 0 该组滤波器 2 禁止 可以改变相应的***和代码寄存器 BF1EN 1 该组滤波器 1 使能 不能对相应的***和代码寄存器进行写操作 0 该组滤波器 1 禁止 可以改变相应的***和代码寄存器 注 注 如果选择单滤波器模式 该单滤波器与对应的滤波器 1 使能位相关 滤波器 2 使 能位在单滤波器模式中不起作用 pData 5 读取该组验收滤波器的优先级 位功能 STATUS 7 STATUS 6 STATUS 5 STATUS 4STATUS 3STATUS 2 STATUS 1 STATUS 0 BF2PRIO BF1PRIO 25 BF2PRIO 1 该组滤波器 2 优先级高 如果信息通过该组滤波器 2 立即产生接收中 断 0 该组滤波器2优先级低 如果FIFO 级超过接收中断级滤波器 产生接收 中断 BF1PRIO 1 该组滤波器 1 优先级高 如果信息通过该组滤波器 1 立即产生接收中 断 0 该组滤波器 1 优先级低 如果 FIFO 级超过接收中断级滤波器 产生接 收中断 pData 6 9 表示该组滤波器 ACR 的值 pData a d 表示该组滤波器 AMR 的值 示例 include ControlCan h int nDeviceType 4 int nDeviceInd 0 int nCANInd 0 BYTE info 14 DWORD dwRel info 0 1 bRel VCI GetReference nDeviceType nDeviceInd nCANInd 1 PVOID info 1 4 8 VCI SetReference 描述 此函数用以设置设备的相应参数 主要处理不同设备的特定操作 DWORD stdcall VCI SetReference DWORD DevType DWORD DevIndex DWORD CANIndex DWORD RefType PVOID pData 参数 DevType 设备类型号 DevIndex 设备索引号 只有一个设备时 索引号为 0 有两个时可以为 0 或 1 26 CANIndex 第几路 CAN RefType 参数类型 pData 用来存储参数有关数据缓冲区地址首指针 返回值 为 1 表示操作成功 0 表示操作失败 备注备注 VCI SetReference 和 VCI GetReference 这两个函数是用来针对各个不同设备的一 些特定操作的 函数中的 PVOID 型参数 pData 随不同设备的不同操作而具有不同的 意义 当设备类型为 USBCAN1 USBCAN2 时 RefType pData 功能描述 1 总长度为 2 个字节 pData 0 表示 CAN ***的控制寄存器的地址 pData 1 表示要写入的数值 写 CAN 控制 器 的 指 定 控 制寄存器 当 RefType 2 时 此时的 pData 各个字节所代表的意义如下 pData 0 设置哪一组验收滤波器 共有 4 组 1 设置第1组 2 设置第 2 组 3 设置第 3 组 4 设置第 4 组 pData 1 设置该组验收滤波器模式 位功能 STATUS 7 STATUS 6 STATUS 5 STATUS 4STATUS 3STATUS 2STATUS 1 STATUS 0 MFORMATB AMODEB MFORMATB 1 验收滤波器该组仅用于扩展帧信息 标准帧信息被忽略 0 验收滤波器该组仅用于标准帧信息 扩展帧信息被忽略 AMODEB 1 单验收滤波器选项使能 长滤波器有效 27 0 双验收滤波器选项使能 短滤波器有效 pData 2 设置该组验收滤波器的使能 位功能 STATUS 7 STATUS 6 STATUS 5 STATUS 4STATUS 3STATUS 2 STATUS 1 STATUS 0 BF2EN BF1EN BF2EN 1 该组滤波器 2 使能 不能对相应的***和代码寄存器进行写操作 0 该组滤波器 2 禁止 可以改变相应的***和代码寄存器 BF1EN 1 该组滤波器 1 使能 不能对相应的***和代码寄存器进行写操作 0 该组滤波器 1 禁止 可以改变相应的***和代码寄存器 注 如果选择单滤波器模式 该单滤波器与对应的滤波器 1 使能位相关 滤波器 2 使 能位在单滤波器模式中不起作用 pData 3 设置该组验收滤波器的优先级 位功能 STATUS 7 STATUS 6 STATUS 5 STATUS 4STATUS 3STATUS 2 STATUS 1 STATUS 0 BF2PRIO BF1PRIO BF2PRIO 1 该组滤波器 2 优先级高 如果信息通过该组滤波器 2 立即产生接收中 断 0 该组滤波器 2 优先级低 如果 FIFO 级超过接收中断级滤波器 产生接收 中断 BF1PRIO 1 该组滤波器 1 优先级高 如果信息通过该组滤波器 1 立即产生接收中 断 0 该组滤波器 1 优先级低 如果 FIFO 级超过接收中断级滤波器 产生接 收中断 pData 4 7 分别对应要设置的 SJA1000 的 ACR0 ACR3 的值 pData 8 b 分别对应要设置的 SJA1000 的 AMR0 AMR3 的值 示例 include ControlCan h int nDeviceType 4 28 int nDeviceInd 0 int nCANInd 0 BYTE baud DWORD dwRel baud 0 bRel VCI SetReference nDeviceType nDeviceInd nCANInd 1 PVOID baud 1 4 9 VCI GetReceiveNum 描述 此函数用以获取指定接收缓冲区中接收到但尚未被读取的帧数 ULONG stdcall VCI GetReceiveNum DWORD DevType DWORD DevIndex DWORD CANIndex 参数 DevType 设备类型号 DevIndex 设备索引号 当只有一个设备时 索引号为 0 有两个时可以为 0 或 1 CANIndex 第几路 CAN 返回值 返回尚未被读取的帧数 示例 include ControlCan h int nDeviceType 4 int nDeviceInd 0 int nCANInd 0 DWORD dwRel bRel VCI GetReceiveNum nDeviceType nDeviceInd nCANInd 1 4 10 VCI ClearBuffer 29 描述 此函数用以清空指定缓冲区 DWORD stdcall VCI ClearBuffer DWORD DevType DWORD DevIndex DWORD CANIndex 参数 DevType 设备类型号 DevIndex 设备索引号 当只有一个设备时 索引号为 0 有两个时可以为 0 或 1 CANIndex 第几路 CAN 返回值 为 1 表示操作成功 0 表示操作失败 示例 include ControlCan h int nDeviceType 4 int nDeviceInd 0 int nCANInd 0 DWORD dwRel bRel VCI ClearBuffer nDeviceType nDeviceInd nCANInd 1 4 11 VCI StartCAN 描述 此函数用以启动 CAN DWORD stdcall VCI StartCAN DWORD DevType DWORD DevIndex DWORD CANIndex 参数 DevType 设备类型号 DevIndex 30 设备索引号 只有一个设备时 索引号为 0 有两个时可以为 0 或 1 CANIndex 第几路 CAN 返回值 为 1 表示操作成功 0 表示操作失败 示例 include ControlCan h int nDeviceType 4 int nDeviceInd 0 int nCANInd 0 int nReserved 0 VCI INIT CONFIG vic DWORD dwRel dwRel VCI OpenDevice nDeviceType nDeviceInd nReserved if dwRel STATUS OK MessageBox T 打开设备失败 T 警告 MB OK MB ICONQUESTION return FALSE dwRel VCI InitCAN nDeviceType nDeviceInd nCANInd if dwRel STATUS ERR VCI CloseDevice nDeviceType nDeviceInd MessageBox T 初始化设备失败 T 警告 MB OK MB ICONQUESTION return FALSE dwRel VCI StartCAN nDeviceType nDeviceInd nCANInd if dwRel STATUS ERR VCI CloseDevice nDeviceType nDeviceInd MessageBox T 启动设备失败 T 警告 MB OK MB ICONQUESTION 31 return FALSE 1 4 12 VCI ResetCAN 描述 此函数用以复位 CAN DWORD stdcall VCI ResetCAN DWORD DevType DWORD DevIndex DWORD CANIndex 参数 DevType 设备类型号 DevIndex 设备索引号 只有一个设备时 索引号为 0 有两个时可以为 0 或 1 CANIndex 第几路 CAN 返回值 为 1 表示操作成功 0 表示操作失败 注 在 CANET 中无此函数 示例 include ControlCan h int nDeviceType 4 int nDeviceInd 0 int nCANInd 0 DWORD dwRel bRel VCI ResetCAN nDeviceType nDeviceInd nCANInd 1 4 13 VCI Transmit 描述 返回实际发送的帧数 ULONG stdcall VCI Transmit DWORD DevType DWORD DevIndex DWORD CANIndex PVCI CAN OBJ pSend ULONG Len 参数 32 DevType 设备类型号 DevIndex 设备索引号 只有一个设备时 索引号为 0 有两个时可以为 0 或 1 CANIndex 第几路 CAN pSend 要发送的数据帧数组的首指针 Len 要发送的数据帧数组的长度 返回值 返回实际发送的帧数 示例 include ControlCan h include int nDeviceType 4 int nDeviceInd 0 int nCANInd 0 DWORD dwRel VCI CAN OBJ vco ZeroMemory vco ID 0 x00000000 vco SendType 0 vco RemoteFlag 0 vco ExternFlag 0 vco DataLen 8 lRet VCI Transmit nDeviceType nDeviceInd nCANInd 1 4 14 VCI Receive 描述 此函数从指定的设备读取数据 33 ULONG stdcall VCI Receive DWORD DevType DWORD DevIndex DWORD CANIndex PVCI CAN OBJ pReceive ULONG Len INT WaitTime 1 参数 DevType 设备类型号 DevIndex 设备索引号 只有一个设备时 索引号为 0 有两个时可以为 0 或 1 CANIndex 第几路 CAN pReceive 用来接收的数据帧数组的首指针 Len 用来接收的数据帧数组的长度 WaitTime 等待超时时间 以毫秒为单位 返回值 返回实际读取到的帧数 如果返回值为 0 xFFFFFFFF 则表示读取数据失败 有 错误发生 请调用 VCI ReadErrInfo 函数来获取错误码 示例 include ControlCan h include int nDeviceType 4 int nDeviceInd 0 int nCANInd 0 DWORD dwRel VCI CAN OBJ vco 100 lRet VCI Receive nDeviceType nDeviceInd nCANInd vco 100 400 1 5 接口库函数使用方法接口库函数使用方法 34 首先 把库函数文件都放在工作目录下 库函数文件总共有三个文件 ControlCAN h ControlCAN lib ControlCAN dll 和一个文件夹 kerneldlls 1 5 1 VC调用动态库的方法调用动态库的方法 1 在扩展名为 CPP的文件中包含ControlCAN h头文件 如 include ControlCAN h 2 在工程的连接器设置中连接到ControlCAN lib文件 如 在 VC7 环境下 在项目属性页里的配置属性 连接器 输入 附加依赖项中 添加 ControlCAN lib 1 5 2 VB调用动态库的方法调用动态库的方法 通过以下方法进行声明后就可以调用了 语法 Public Private Declare Function name Lib libname Alias aliasname arglist As type Declare 语句的语法包含下面部分 Public 可选 用于声明在所有模块中的所有过程都可以使用的函数 Private 可选 用于声明只能在包含该声明的模块中使用的函数 Name 必选 任何合法的函数名 动态链接库的入口处 entry points 区分大小写 Libname 必选 包含所声明的函数动态链接库名或代码资源名 Alias 可选 表示将被调用的函数在动态链接库

免责声明:
1. 《CAN-bus接口函数库使用手册》内容来源于互联网,版权归原著者或相关公司所有。
2. 若《86561825文库网》收录的文本内容侵犯了您的权益或隐私,请立即通知我们删除。