在LabVIEW下使用ZLGCAN接口函数库
VirtualCANInterface(VCI)函数库是专门为ZLGCAN设备在PC上使用而提供的应用程序接口。库里的函数从ControlCAN.dll中导出,在LabVIEW7.0中可以直接使用这些库函数而无需额外的操作。VCI函数的使用流程如图1.1所示。

图1.1VCI函数使用流程
2、使用VCI函数
2.1数据结构
VCI函数库中定义了一些数据结构用于数据交换,在使用VCI函数前应该先创建这些数据结构。在LabVIEW中创建这些结构时应该使用簇——Cluster。一个簇就是一个由若干不同的数据类型的成员组成的集合体,类似于C语言中的结构。其成员可以是任意的数据类型,但必须都是控件或都是显示件。成员的逻辑顺序是由它们被放入簇的先后顺序决定的。
2.1.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;

图2.1VCI_BOARD_INFO结构
2.1.2VCI_CAN_OBJ结构
VCI_CAN_OBJ结构体在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;

图2.2VCI_CAN_OBJ结构
2.1.3VCI_CAN_STATUS结构
VCI_CAN_STATUS结构体包含CAN控制器状态信息。结构体将在VCI_ReadCanStatus函数中被填充。
typedefstruct_VCI_CAN_STATUS{
UCHARErrInterrupt;
UCHARregMode;
UCHARregStatus;
UCHARregALCapture;
UCHARregECCapture;
UCHARregEWLimit;
UCHARregRECounter;
UCHARregTECounter;
DWORDReserved;
}VCI_CAN_STATUS,*PVCI_CAN_STATUS;

图2.3VCI_CAN_STATUS结构
2.1.4VCI_ERR_INFO结构
VCI_ERR_INFO结构体用于装载VCI库运行时产生的错误信息。结构体将在VCI_ReadErrInfo函数中被填充。
typedefstruct_ERR_INFO{
UINTErrCode;
BYTEPassive_ErrData[3];
BYTEArLost_ErrData;
}VCI_ERR_INFO,*PVCI_ERR_INFO;

图2.4VCI_ERR_INFO结构
2.1.5VCI_INIT_CONFIG结构
VCI_INIT_CONFIG结构体定义了初始化CAN的配置。结构体将在VCI_InitCan函数中被填充。
typedefstruct_INIT_CONFIG{
DWORDAccCode;
DWORDAccMask;
DWORDReserved;
UCHARFilter;
UCHARTiming0;
UCHARTiming1;
UCHARMode;
}VCI_INIT_CONFIG,*PVCI_INIT_CONFIG;

图2.5VCI_INIT_CONFIG结构
下面以VCI_CAN_OBJ结构为例,在LabVIEW7.0中创建VCI_CAN_OBJ结构。先在ArrayCluster控件子模板选择一个簇的空壳放到前面板上,将其命名为VCI_CAN_OBJ,然后根据需要放置的控件多少用定位工具调整簇空壳的大小;按照VCI_CAN_OBJ结构成员的顺序,从Numeric控件子模板中取NumericIndicator控件或从前面板上移动控件到簇的空壳中,并按图2.6将各NumericIndicator控件重命名。
评论