From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.



在TestStand和LabVIEW Dll之间传递结构类型



主要软件:
主要软件版本: 3.0
主要软件修正版本: N/A
次要软件: LabVIEW Run-Time Engine

问题:
我已经创建了几个LabVIEW代码模块,以供TestStand调用。这些VI将簇类型作为它们的输入和输出。当我使用LabVIEW适配器直接调用这些VI时,这是非常简单的。但是我将这些VI编译成为dll后,我好像就不能在TestStand的dll中调用并将VI的簇正确的设定。那么我该怎么办呢?

解答:
首先需要判断LabVIEW dll是否是通过标准调用规范来生成的。在LabVIEW下生成dll时候会有这样一个选项供选择。如果想要更多的创建LabVIEW dll的信息,可以看相关链接中的教程。

与LabVIEW Dll通讯的下一个步骤就是为dll中传递的簇类型定义一个自定义的数据类型。通常来讲,在TestStand中,LabVIEW的簇被当作一个容器,所以必须为每个簇都定义一个自定义数据类型(容器)。按照下面的步骤来创建一个LabVIEW簇的自定义数据类型。首先,LabVIEW dll必须通过标准调用规范来生成,从而可以很好地与TestStand进行解析。对于每个需要在dll中传递的簇类型都定义一个结构类型。你可以通过在Sequence File type中的Custom Data Types栏或者在你的结构类型的Type Palette的属性窗口中配置C Struct Passing页:
  1. 打开Type Palette并选择Custom Data Types页
  2. 确认在左手边上的Types View上Custom Data Type已选择
  3. 在右手边的类型列表中按鼠标右键,并选择Insert Custom Data Type -> Container 
  4. 在新创建的类型上右键,选择Properties,并选择C Struct Passing页
  5. 选择Allow Objects of This Type to be Passed as Structs
  6. 将Packing改为1 Byte Boundary
  7. 1-首先在packing中选择1 byte boundary
    2-然后为每个属性选择合适的类型
    . LabVIEW字符串 用于字符串类型
    . Unsigned 8-bit integer 用于布尔型
    . LabVIEW Array 用于数组类型

创建C/C++ Dll步骤用于调用LabVIEW Dll,并指定相应的代码模块。在Edit C/C++ DLL Call窗口中
1- 选择LabVIEW DLL
2- 选择要调用的函数名
一个弹出的信息会通知你关于函数原型的信息没有找到
3- 通过添加参数来编辑原型,为每个结构类型参数(每个簇)选择:
. C Struct 用于类别,
. 你的自定义结构类型
. By Pointer 用于传递参数

如果需要的话,你可以参考TestStand中的StrucPassing例子。这个例子演示了如果传递一个TestStand容器(作为LabVIEW簇)到LabVIEW函数中。该使用的容器包含了各种不同的数据类型。LabVIEW VI被编译成一个DLL,并且被当作函数来调用。要注意当以参数方式传递参数时,LabVIEW VI经常使用1位packing规范。具体可以参考TestStand内置的例子(位于<TestStand>\Examples\StructPassing\LabVIEW for further information.)StrucPassing.

相关链接:
KnowledgeBase 3KPBEO73: Calling Functions, in a C/C++ DLL, that have a C Struct as a Parameter from TestStand
Developer Zone Tutorial: Building DLLs in LabVIEW 6.x or later

附件:





报告日期: 05/31/2006
最近更新: 02/20/2008
文档编号: 3XU5DUDO