1、概述
Virtual CAN Interface (VCI) 函数库是专门为ZLGCAN 设备在PC 上使用而提供的应用程序接口。库里的函数从ControlCAN.dll 中导出,在LabVIEW7.0 中可以直接使用这些库函数而无需额外的操作。VCI 函数的使用流程如图 1.1 所示。
图 1.1 VCI 函数使用流程
2、使用VCI 函数
2.1 数据结构
VCI 函数库中定义了一些数据结构用于数据交换,在使用VCI 函数前应该先创建这些数据结构。在LabVIEW 中创建这些结构时应该使用簇——Cluster。一个簇就是一个由若干不同的数据类型的成员组成的集合体,类似于C 语言中的结构。其成员可以是任意的数据类型,但必须都是控件或都是显示件。成员的逻辑顺序是由它们被放入簇的先后顺序决定的。
2.1.1 VCI_BOARD_INFO 结构
VCI_BOARD_INFO 结构体包含ZLGCAN 系列接口卡的设备信息。结构体将在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;
图 2.1 VCI_BOARD_INFO 结构
2.1.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;
图 2.2 VCI_CAN_OBJ 结构
2.1.3 VCI_CAN_STATUS 结构
VCI_CAN_STATUS 结构体包含CAN 控制器状态信息。结构体将在VCI_ReadCanStatus函数中被填充。
typedef struct _VCI_CAN_STATUS {
UCHAR ErrInterrupt;
UCHAR regMode;
UCHAR regStatus;
UCHAR regALCapture;
UCHAR regECCapture;
UCHAR regEWLimit;
UCHAR regRECounter;