190 likes | 608 Views
PC 上 CAN 的应用程序开发. Windows 上的 CAN 应用程序开发 组态环境下 CAN-bus 网络的开发. ZLGCAN 系列接口卡. PCI-5110/21 智能 CAN 接口卡 PCI-9810/20/40 非智能 CAN 接口卡 USBCAN-I/II 智能 CAN 接口卡 ISA-5420 双路智能 CAN 接口卡 ISA-9620 双路非智能 CAN 接口卡 PC104-CAN 非智能 CAN 接口卡 CAN232 智能 CAN 接口卡 CANlite 便携式 CAN 接口卡. 虚拟 CAN 接口 (VCI).
E N D
PC上CAN的应用程序开发 Windows上的CAN应用程序开发 组态环境下CAN-bus网络的开发
ZLGCAN系列接口卡 • PCI-5110/21 智能CAN接口卡 • PCI-9810/20/40 非智能CAN接口卡 • USBCAN-I/II 智能CAN接口卡 • ISA-5420 双路智能CAN接口卡 • ISA-9620 双路非智能CAN接口卡 • PC104-CAN 非智能CAN接口卡 • CAN232 智能CAN接口卡 • CANlite 便携式CAN接口卡
虚拟CAN接口(VCI) • 总共14个函数,使用方便 • 可用于VC、VB、CB和DELPHI等其他语言 • 有详细地帮助文档 • 有完整的在VC、VB、CB和DELPHI中的使用例子 应用程序 虚拟CAN接口 驱动程序 硬件设备
VCI库的结构 ControlCAN.dll VCI_OpenDevice VCI_CloseDevice VCI_InitCan VCI_StartCan VCI_ReadBoardInfo VCI_ReadErrInfo VCI_GetReceiveNum VCI_GetReferece VCI_ReadCanStatus VCI_ClearBuffer VCI_SetReferece VCI_ResetCan VCI_Transmit VCI_Receive VCI_BOARD_INFO VCI_CAN_OBJ VCI_CAN_STATUS VCI_ERR_INFO VCI_INIT_CONFIG PCI5121.dll ISA5420.dll USBCAN.dll PC104CAN.dll CAN232.dll CANETE.dll …
接口库的工作流程 VCI_OpenDevice VCI_ReadBoardInfo VCI_InitCan VCI_ReadCanStatus VCI_ReadErrInfo VCI_ClearBuffer VCI_GetReceiveNum VCI_SetReferece VCI_GetReferece VCI_StartCan VCI_ResetCan VCI_Transmit VCI_Receive VCI_CloseDevice
VCI_OpenDevice DWORD __stdcall VCI_OpenDevice(DWORD DevType, DWORD DevIndex, DWORD Reserved); 参数 DevType 设备类型号,每种接口卡每种都有一个唯一的设备类型号 DevIndex 设备索引号,比如当只有一个PCI5121时,索引号为0,有两个 时可以为0或1。(注:当为CAN232时,0表示要打开的是COM1, 1表示要打开的是 COM2。) Reserved 当设备为CAN232时,此参数表示为用以打开串口的波特率, 可以为2400,4800,9600,14400,19200,28800,57600。 当为其他设备时此参数无意义。
在各种不同的开发环境中使接口库 • 在使用接口库之前,无论用哪种编程环境,都必须首先把接口库的全部文件都拷贝到你的当前工程目录里面。 • 总共有三个文件ControlCAN.h,ControlCAN.lib,ControlCAN.dll和一个文件夹kerneldlls。 • 在VB环境下还要把接口库拷贝到系统目录里面 (在98是windows\system目录, XP是windows\system32目录, 在2000是winnt\system32目录)。
VCI_InitCan DWORD __stdcall VCI_InitCan(DWORD DevType, DWORD DevIndex, DWORD CANIndex, PVCI_INIT_CONFIG pInitConfig); 参数 DevType 设备类型号。 DevIndex 设备索引号。 CANIndex CAN通道号。 pInitConfig 初始化参数结构(注:当为CAN232时,忽略此参数, 其值设为NULL)。
VCI_INIT_CONFIG结构 typedef struct _INIT_CONFIG { DWORD AccCode; // 验收码 DWORD AccMask; // 屏蔽码 DWORD Reserved; // 保留 UCHAR Filter; // 滤波方式 UCHAR Timing0; // 表示BTR0 UCHAR Timing1; // 表示BTR1 UCHAR Mode; // 模式 } VCI_INIT_CONFIG, *PVCI_INIT_CONFIG;
VCI_GetReference VCI_SetReference DWORD __stdcall VCI_GetReference(DWORD DevType, DWORD DevIndex, DWORD CANIndex, DWORD RefType, PVOID pData); 参数 DevType 设备类型号。 DevIndex 设备索引号。 CANIndex CAN通道号。 RefType 参数类型。 pData 用来存储参数有关数据缓冲区地址首指针。 此参数的意义根据DevType和RefType的不同而不同。
pData代表的意义 A.当设备类型为PCI5121,PCI5110或ISA5420时: B.当设备类型为CAN232时:
VCI_StartCAN DWORD __stdcall VCI_StartCAN(DWORD DevType, DWORD DevIndex, DWORD CANIndex); 参数 DevType 设备类型号。 DevIndex 设备索引号。 CANIndex CAN通道号。
VCI_Transmit ULONG __stdcall VCI_Transmit(DWORD DevType, DWORD DevIndex, DWORD CANIndex, PVCI_CAN_OBJ pSend, ULONG Len); 参数 DevType 设备类型号。 DevIndex 设备索引号。 CANIndex CAN通道号。 pSend 要发送的数据帧数组的首指针。 Len 要发送的数据帧数组的长度。
VCI_CAN_OBJ数据结构 typedef struct _VCI_CAN_OBJ { UINT ID; // 报文ID UINT TimeStamp; // 接收消息时的时间 BYTE TimeFlag; // 是否使用时间标识 BYTE SendType; // 发送帧类型 BYTE RemoteFlag; // 是否是远程帧 BYTE ExternFlag; // 是否是扩展帧 BYTE DataLen; // 数据长度(<=8) BYTE Data[8]; // 报文的数据 BYTE Reserved[3]; // 保留 } VCI_CAN_OBJ, *PVCI_CAN_OBJ;
VCI_Receive ULONG __stdcall VCI_Receive(DWORD DevType,DWORD DevIndex, DWORD CANIndex, PVCI_CAN_OBJ pReceive, ULONG Len, INT WaitTime=-1); 参数 DevType 设备类型号。 DevIndex 设备索引号。 CANIndex CAN通道号。 pReceive 用来接收的数据帧数组的首指针。 Len 用来接收的数据帧数组的长度。 WaitTime 等待超时时间,以毫秒为单位。
如何使接口库 • 在使用接口库之前,无论用哪种编程工具,都必须首先把接口库的全部文件都拷贝到你的当前工程目录里面。 • 总共有三个文件ControlCAN.h,ControlCAN.lib,ControlCAN.dll和一个文件夹kerneldlls。 • 在VB环境下还要把接口库拷贝到系统目录里面 (在98是windows\system,XP是windows\system32,在2000是winnt\system32)。
在各种编程工具中调用VCI库函数 • VC 在VC中使用接口库是最方便的,只需在工程文件中加入ControlCAN.lib文件,然后在需要使用到接口库函数的*.CPP文件中包含ControlCAN.h头文件即可。 • VB 在VB中使用就比较麻烦一点,需要把接口库中定义的数据结构和函数声明全部转换为VB可识别的形式。不过在我们提供的例子里面,已经把这些转换都做好了,你们其实只需要把那段代码拷贝到你们的程序中就可以使用了。 • CB 在CB中我们采取的是动态加载的方式,调用相对来说比较灵活,可以直接从例子中拷贝相关代码到你们的程序中使用。 • DELPHI DELPHI和VB的调用方式差不多,也需要进行数据结构和函数声明的转换,不过你们在使用的时候也只需把相关代码段拷贝到你们的程序中就可使用。