在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页:
- 打开Type Palette并选择Custom Data Types页
- 确认在左手边上的Types View上Custom Data Type已选择
- 在右手边的类型列表中按鼠标右键,并选择Insert Custom Data Type -> Container
- 在新创建的类型上右键,选择Properties,并选择C Struct Passing页
- 选择Allow Objects of This Type to be Passed as Structs
- 将Packing改为1 Byte Boundary
- 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
Other Support Options
Ask the NI Community
Collaborate with other users in our discussion forums
Request Support from an Engineer
A valid service agreement may be required, and support options vary by country.