微波EDA网,见证研发工程师的成长!
首页 > 测试测量 > 测试测量技术文库 > 在LabVIEW下使用ZLGCAN接口函数库

在LabVIEW下使用ZLGCAN接口函数库

时间:07-11 来源:互联网 点击:
1、概述

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控件重命名。


图2.6在前面板上创建VCI_CAN_OBJ结构的簇

此时,簇壳内的成员的数据类型都为默认的Double类型。在簇壳内的边框上弹出快捷菜单,选择Representation。在下一级子菜单中选择与VCI_CAN_OBJ结构成员类型一致的类型。


图2.7设置成员类型

2.2调用VCI库函数

在LabVIEW中调用VCI库函数的过程比较简单。LabVIEW在Advanced函数子模板中提供了CallingLibraryFunctionNode,只要知道动态连接库里被导出的函数名称及其参数,就可以通过CallingLibraryFunctionNode调用。ZLGVCI函数库已经提供了库里的函数声明,因此,在LabVIEW中使用VCI函数库将通过CallingLibraryFunctionNode来实现。

以调用VCI_OpenDevice函数为例。在LabVIEW图形代码窗口中放上调用库函数节点,用鼠标双击节点或使用快捷菜单命令Configure弹出如图2.8所示的对话框。


图2.8调用库函数1

单击Browse…按钮,打开一个文件对话框,找到ControlCAN.dll文件。或者直接输入库文件路径和名称。

在FunctionName下拉列表框中照到VCI_OpenDevice函数。或直接输入函数名。


图2.9调用库函数2

在CallingConventions下拉列表框中选中stdcall(WINAPI),因为VCI库函数使用的是stdcall调用约定。

Parameter框中的returntype不变。Type框中选Numeric。DataType框中选Unsigned32-bitInterger。即指定返回32位整形数。

单击AddaParameterAfter按钮,Parameter框中的选项变为图2.10所示。将缺省值agr1改为DevType,因为在VCI_OpenDevice函数声明中

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top