北京双诺测控技术有限公司采集卡LabVIEW开发手册
本公司生产的所有采集卡的相关接口函数,均以动态链接库的形式提供给用户。在使用LabVIEW对本公司采集卡进行开发时,只需调用我们所提供的动态链接库函数即可对硬件进行相关操作。下面以本公司生产的AC6111采集卡的V2.0开发包为例,对运用LabVIEW进行开发的方法进行详细介绍。
一、在LabVIEW中调用动态链接库在LabVIEW中,提供了一个名为Call Library Function Node的节点来实现对动态链接库的调用。该节点位于Functions模板中的Advanced字模板中。如图1所示。
图1 LabVIEW中的Call Library Function Node节点
单击Call Library Function Node图标,将该图标托放到LabVIEW框图程序中。在节点上点击鼠标右键,选择“Configure…”(也可双击左健),将弹出Call Library Function Node节点的配置对话框。如图2、图3所示。
图2
图3 Call Library Function Node节点的配置对话框点击“Browse…”,找到本公司所提供的与板卡相对应的动态链接库文件(*.dll)。然后在“Function Name”Combo Box中可看到动态链接库文件中所包含的所有接口函数。下面以AC6111_READ_HARD_FIFO函数为例,对其进行配置。如图4所示。
图4 选取动态链接库中的接口函数
接下来在本公司附赠的光盘中打开“ac6111开发说明”,找到AC6111_READ_HARD_FIFO函数的具体定义。
AC6111_READ_HARD_FIFO
函数功能:从板载FIFO中读取数据。
函数原型:
int AC6111_READ_HARD_FIFO (HANDLE hDevice,unsigned long *uspData,unsigned long length)
参数:
hDevice :驱动句柄;
*uspData :指向采样数据的指针;
length :读取的长度。长度应小于4096。
返回值:如果函数执行成功,返回0;否则,返回错误代码。
其中VC DLL中的变量和LabVIEW变量的对应关系如下:
Visual C/C++ ———— LabView
HANDLE ———— U32 (Type:Numeric; Data type:Unsigned 32-bit Integer; Pass:Value)
unsigned short * ———— U16数组(Type:Array; Data type:Unsigned 16-bit Integer; Array Format:Array Data Pointer)
short * ———— I16数组(Type:Array; Data type:Singled 16-bit Integer; Array Format,Array Data Pointer)
unsigned long * ———— U32数组(Type:Array; Data type:Unsigned 32-bit Integer; Array Format,Array Data Pointer)
long * ———— I32数组(Type:Array; Data type:Singled 32-bit Integer; Array Format,Array Data Pointer)
int * ———— I32数组(Type,Array; Data type:Singled 32-bit Integer;Array Format,Array Data Pointer)
char * ———— String
struct ———— Cluster(Type:Adapt to Type; Data Format:Handles By Value; Function Prototype:void*)
在“Function Name”中选择AC6111_READ_HARD_FIFO,在“Calling Conventions”中选择stdcall(WINAPI)。目前,在“Parameter”选项中只有一个参数Return type,由于AC6111_READ_HARD_FIFO函数的返回值为int,根据VC变量和LabVIEW变量的对应关系,在“Type”中选择Numeric,在“Data Type”中选择Signed 32-bit Integer。如图5所示。
图5 配置函数返回值
然后来配置HANDLE参数,选择“Add a Parameter After”,这时在“Parameter”中出现了另一个参数,我们把它重命名为hDevice。在“Type”中选择Numeric,在“Data Type”中选择Unsigned 32-bit Integer,在“Pass”中选择Value。
用同样方法来配置其它参数,注意第二个参数unsigned long *uspData在“Type”中要选择Array。完成所有参数的配置后,在“Function Prototype”中可以看到AC6111_READ_HARD_FIFO函数在LabVIEW中的完整定义。如图6所示。
图6 配置函数参数
回到LabVIEW的框图程序中,可以看到Call Library Function Node节点已经具有了与参数相对应的输入、输出端,可将他更名为AC6111_READ_HARD_FIFO。如图7所示。
图7 配置后的Call Library Function Node节点其它动态链接库中的接口函数也使用同样的方法进行配置。
例1:DA功能的实现首先在LabVIEW的前面板中添加四个Control类型的“Num Ctrl”,并分别命名为instance、pError、DA MODE、DA0 数据,“DA0 数据”赋值为4095。如图8所示。
图8 DA输出前面板下一步进入LabVIEW的框图程序中,用前面所介绍的方法为AC6111_CreateDevice、AC6111_DA_ Mode、AC6111_DA0、AC6111_CloseDeivice四个函数配置Call Library Function Node节点。修改上一步添加的四个“Num Ctrl”的数据类型,使其与相对应的上述四个函数的各个参数的数据类型相匹配。然后,如图9所示连接所有节点。
图9 DA输出框图程序运行程序,DA0通道将输出 +10V。
二、在LabVIEW中调用Sub VI
目前,本公司对AC6111、AC6112、AC6115、AC6682、MP310、MP312六款产品所涉及的所有DLL函数的调用全部编译为Sub VI的形式,用户只需通过Functions模板中左下角的Select a VI(如图10所示),将所需Sub VI添加到LabVIEW的框图程序中,即可完成对DLL函数的调用。无需用户使用Call Library Function Node节点自己配置DLL函数的调用,并可避免用户在配置DLL函数时造成的不必要的错误。( 注:此方法只支持LabVIEW7.0及更高版本! )
图10 Select a VI
用此方法修改例1,则实现DA功能的框图程序如图11所示。
图11 调用Sub VI实现DA输出的框图程序
本公司生产的所有采集卡的相关接口函数,均以动态链接库的形式提供给用户。在使用LabVIEW对本公司采集卡进行开发时,只需调用我们所提供的动态链接库函数即可对硬件进行相关操作。下面以本公司生产的AC6111采集卡的V2.0开发包为例,对运用LabVIEW进行开发的方法进行详细介绍。
一、在LabVIEW中调用动态链接库在LabVIEW中,提供了一个名为Call Library Function Node的节点来实现对动态链接库的调用。该节点位于Functions模板中的Advanced字模板中。如图1所示。
图1 LabVIEW中的Call Library Function Node节点
单击Call Library Function Node图标,将该图标托放到LabVIEW框图程序中。在节点上点击鼠标右键,选择“Configure…”(也可双击左健),将弹出Call Library Function Node节点的配置对话框。如图2、图3所示。
图2
图3 Call Library Function Node节点的配置对话框点击“Browse…”,找到本公司所提供的与板卡相对应的动态链接库文件(*.dll)。然后在“Function Name”Combo Box中可看到动态链接库文件中所包含的所有接口函数。下面以AC6111_READ_HARD_FIFO函数为例,对其进行配置。如图4所示。
图4 选取动态链接库中的接口函数
接下来在本公司附赠的光盘中打开“ac6111开发说明”,找到AC6111_READ_HARD_FIFO函数的具体定义。
AC6111_READ_HARD_FIFO
函数功能:从板载FIFO中读取数据。
函数原型:
int AC6111_READ_HARD_FIFO (HANDLE hDevice,unsigned long *uspData,unsigned long length)
参数:
hDevice :驱动句柄;
*uspData :指向采样数据的指针;
length :读取的长度。长度应小于4096。
返回值:如果函数执行成功,返回0;否则,返回错误代码。
其中VC DLL中的变量和LabVIEW变量的对应关系如下:
Visual C/C++ ———— LabView
HANDLE ———— U32 (Type:Numeric; Data type:Unsigned 32-bit Integer; Pass:Value)
unsigned short * ———— U16数组(Type:Array; Data type:Unsigned 16-bit Integer; Array Format:Array Data Pointer)
short * ———— I16数组(Type:Array; Data type:Singled 16-bit Integer; Array Format,Array Data Pointer)
unsigned long * ———— U32数组(Type:Array; Data type:Unsigned 32-bit Integer; Array Format,Array Data Pointer)
long * ———— I32数组(Type:Array; Data type:Singled 32-bit Integer; Array Format,Array Data Pointer)
int * ———— I32数组(Type,Array; Data type:Singled 32-bit Integer;Array Format,Array Data Pointer)
char * ———— String
struct ———— Cluster(Type:Adapt to Type; Data Format:Handles By Value; Function Prototype:void*)
在“Function Name”中选择AC6111_READ_HARD_FIFO,在“Calling Conventions”中选择stdcall(WINAPI)。目前,在“Parameter”选项中只有一个参数Return type,由于AC6111_READ_HARD_FIFO函数的返回值为int,根据VC变量和LabVIEW变量的对应关系,在“Type”中选择Numeric,在“Data Type”中选择Signed 32-bit Integer。如图5所示。
图5 配置函数返回值
然后来配置HANDLE参数,选择“Add a Parameter After”,这时在“Parameter”中出现了另一个参数,我们把它重命名为hDevice。在“Type”中选择Numeric,在“Data Type”中选择Unsigned 32-bit Integer,在“Pass”中选择Value。
用同样方法来配置其它参数,注意第二个参数unsigned long *uspData在“Type”中要选择Array。完成所有参数的配置后,在“Function Prototype”中可以看到AC6111_READ_HARD_FIFO函数在LabVIEW中的完整定义。如图6所示。
图6 配置函数参数
回到LabVIEW的框图程序中,可以看到Call Library Function Node节点已经具有了与参数相对应的输入、输出端,可将他更名为AC6111_READ_HARD_FIFO。如图7所示。
图7 配置后的Call Library Function Node节点其它动态链接库中的接口函数也使用同样的方法进行配置。
例1:DA功能的实现首先在LabVIEW的前面板中添加四个Control类型的“Num Ctrl”,并分别命名为instance、pError、DA MODE、DA0 数据,“DA0 数据”赋值为4095。如图8所示。
图8 DA输出前面板下一步进入LabVIEW的框图程序中,用前面所介绍的方法为AC6111_CreateDevice、AC6111_DA_ Mode、AC6111_DA0、AC6111_CloseDeivice四个函数配置Call Library Function Node节点。修改上一步添加的四个“Num Ctrl”的数据类型,使其与相对应的上述四个函数的各个参数的数据类型相匹配。然后,如图9所示连接所有节点。
图9 DA输出框图程序运行程序,DA0通道将输出 +10V。
二、在LabVIEW中调用Sub VI
目前,本公司对AC6111、AC6112、AC6115、AC6682、MP310、MP312六款产品所涉及的所有DLL函数的调用全部编译为Sub VI的形式,用户只需通过Functions模板中左下角的Select a VI(如图10所示),将所需Sub VI添加到LabVIEW的框图程序中,即可完成对DLL函数的调用。无需用户使用Call Library Function Node节点自己配置DLL函数的调用,并可避免用户在配置DLL函数时造成的不必要的错误。( 注:此方法只支持LabVIEW7.0及更高版本! )
图10 Select a VI
用此方法修改例1,则实现DA功能的框图程序如图11所示。
图11 调用Sub VI实现DA输出的框图程序