北京双诺测控技术有限公司采集卡 LabⅤIEW开发手册 本公司生产的所有采集卡的相关接口函数,均以动态链接库的形式提供给用户。在使用 LabVIew对本公司采集卡进行开发时,只需调用我们所提供的动态链接库函数即可对硬件 进行相关操作。下面以本公司生产的AC611.集卡的V20开发包为例,对运用 LabVIEw 进行开发的方法进行详细介绍。 、在 LabvIew中调用动态链接库 在 Labview中,提供了一个名为 Call Library Function Node的节点来实现对动态链接 库的调用。该节点位于 Functions模板中的 Advanced字模板中。如图1所示。 图命 图1LabⅤIEW中的 Call Library Function Node节点 单击 Call Library Function Node图标,将该图标托放到LabⅤEW框图程序中。在节点 上点击鼠标右键,选择“ Configure..”(也可双击左健),将弹出 Call Library Function Node 节点的配置对话框。如图2、图3所示 Call Library Function Node Description and Tip. Advanced Palette 图2
北 京双诺测 控技术有 限公司 采集卡 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
2 Call Library Function Library Name or Path Browse Function Name FuncName Run in UI Thread Calling Conventions Parameter return type Type Void Add a Parameter Before Add a Parameter After Delete this Parameter Function Prototype /oid FuncName(void 图3 Call Library Function Node节点的配置对话框 点击“ Browse..”,找到本公司所提供的与板卡相对应的动态链接库文件(*d)。然 后在“ Function Name” Combo box中可看到动态链接库文件中所包含的所有接口函数。下 面以AC611 READ HARD FIFO函数为例,对其进行配置。如图4所示 Call Library Function Library Name or Path E光盘 Wwwlablwwlab sdk20AC611tvER AC6111.DLL Browse Function Name AC6111 READ HARD FIFO AC6111 DO Calling Conventions AC6111 INI Parameter AC6111 IO MODE AC6111 PROGRAM TEST AC6111 RCOUNTER TypeAC6111_READ_HARD_FIFO Add a Parameter Before AC6111 READ KFIFO AC6111 REW Add a parameter After AC6111 RTIMER AC6111 RUM Delete this Parameter Function Prototype id AC6111_ READ_HARD FIFO(void)
图 3 Call Library Function Node 节点的配置对话框 点击“Browse…” ,找到本公司所提供的与板卡相对应的动态链接库文件(*.dll)。然 后在“Function Name”Combo Box 中可看到动态链接库文件中所包含的所有接口函数。下 面以 AC6111_READ_HARD_FIFO 函数为例,对其进行配置。如图 4 所示
图4选取动态链接库中的接口函数 接下来在本公司附赠的光盘中打开“ac611开发说明”,找到 AC6 111 READ HARD FIFO函数的具体定义 AC6ll1 READ HARD FIFO 函数功能:从板FIFO中读取数据 函数原型: intA C6lll READ HARD FIFO (HANDLE hDevice, unsigned long*usp Data, unsigned long length) 参数: dEvice 驱动句柄 updAta:指向采样数据的指针 length :读取的长度。长度应小于4096。 返回值:如果函数执行成功,返回0;否则,返回错误代码。 其中VCDL中的变量和LabⅥIEW变量的对应关系如下: Visual c/c++ Lab view HANDLE U32(Type: Numeric; Data type: Unsigned 32-bit Integer; Pass: Value unsigned short U16 !H(Type: Array; Data type: Unsigned 16-bit Integer Array Format: Array Data Pointer 116 3tl(Type: Array; Data type: Singled 16-bit Integer; Array Format Array Data Pointer unsigned long*—U32数组(Type:Aray; Data type: Unsigned32- bit Integer Array Format: Array Data Pointer long 132 l(Type: Array; Data type: Singled 32-bit Integer; Array Format Array Data Pointer int*—32数组(Iype:Aray; Data type: Singled32- bit integer; Array Format Array Data Pointer) char s struct Cluster (Type: Adapt to Type, Data Format: Handles By Value; Function Prototype: void*)
图 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”中选择AC6l1 READ HARD FIFO,在“ Calling Conventions” 中选择 stdcall( WINAPI)。目前,在“ Parameter”选项中只有一个参数 Return type,由于 AC6l1 READ HARD FIFO函数的返回值为int,根据ⅤC变量和 LabvIew变量的对应关 系,在“Type”中选择 Numeric,在“ Data Type”中选择 Signed32- bit Integer如图5所示。 Library Name or Path 匕盘 Wwwlabwwwlab sdk20AC6111wER Browse AC6111. DLL Function Name AC6111_READ_HARD_FIFO Calling Conventions stdcall (WINAPI) Parameter return type √ return type Type Numeric Add a Parameter Before Data Type Signed 32-bit Integer Add a Parameter After Delete this Parameter Function Prototype ng AC6111_READ_HARD_FIFO(V Lκcas」」 图5配置函数返回值 然后来配置 HANDLE参数,选择“ Add a parameter After”,这时在“ Parameter”中出现 了另一个参数,我们把它重命名为 dEvice。在“Type”中选择 Numeric,在“ Data Type” 中选择 Unsigned32- bit Integer,在“Pass”中选择 value 用同样方法来配置其它参数,注意第二个参数 unsigned long* updAta在“Tpe”中要 择Aray。完成所有参数的配置后,在“ Function Prototype”中可以看到 AC61 READ HARD FIFO函数在 Labview中的完整定义。如图6所示
在“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 所示
2 Call Library Function Function Name AC6111_READ_HARD_FIFO Run in UI Thread Calling Conventions return t Parameter. TyDe Array Parameter Bef Data Type Unsigned 32-bit Integer Add a Parameter After Array Format Array Data Pointer Delete this Parameter Function Prototype long Ac6111 READ HARD FIFo(unsigned long dEvice, unsigned long*uspData, unsigned Io K Help 图6配置函数参数 回到 LabVIeW的框图程序中,可以看到 Call Library Function Node节点已经具有了与 参数相对应的输入、输出端,可将他更名为AC6l11 READ HARD FIFO。如图7所示。 11 READ HARD FIFO 图7配置后的 Call Library Function Node节点 其它动态链接库中的接口函数也使用同样的方法进行配置。 例1:DA功能的实现 首先在LabⅥIEW的前面板中添加四个 Control类型的“ Num Ctrl”,并分别命名为 nstance、 pError、 DA MODE、DA0数据,“DA0数据”赋值为4095。如图8所示。 pErre DA MODE A0数据 图8DA输出前面板
图 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的框图程序中,用前面所介绍的方法为AC6l1 CreateDevice AC6 111 DA Mode、AC61l!DAO、AC61 CloseDeivice四个函数配置 Call Library Function Node节点。修改上一步添加的四个“ Num Ctrl”的数据类型,使其与相对应的上述四个函 数的各个参数的数据类型相匹配。然后,如图9所示连接所有节点 AC6111 Create Device 23 AC6111DA0 bA0效据 图9DA输出框图程序 运行程序,DA0通道将输出+10V 、在LabⅤIEW中调用 Sub vi 目前,本公司对AC6l11AC6112、AC615、AC6682、MP310、MP312六款产品所涉 及的所有DLL函数的调用全部编译为SubⅥ的形式,用户只需通过 Functions模板中左下 角的 Select aⅥ(如图10所示),将所需SubⅥ添加到 Labview的框图程序中,即可完成 对DLL函数的调用。无需用户使用 Call Library Function Node节点自己配置DLL函数的调 用,并可避免用户在配置DLL函数时造成的不必要的错误。(注:此方法只支持 LabⅤIEW7.0及更高版本!)
下一步进入 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 及更高版本! )
All F □口x lect a VI.. [23I 8_ 國旧 口皿 图10 Select a vi 用此方法修改例1,则实现DA功能的框图程序如图11所示 AC6111 Create Device. vil DA MODE AC6111 DA Mode. vi AC6111 DA0 vi AC6111 Close Deivice vi 调用SubⅥ实现DA输出的框图程序
图 10 Select a VI 用此方法修改例 1,则实现 DA 功能的框图程序如图 11 所示。 图 11 调用 Sub VI 实现 DA 输出的框图程序