在LabWindows/CVI仪器驱动中建立多输出



主要软件:
主要软件版本: N/A
主要软件修正版本: N/A
次要软件: LabVIEW Development Systems

问题: 如何在我的LabWindows/CVI仪器驱动中建立多输出?

解答: 仪器驱动可以在LabWindows/CVI中建立并像VI一样在LabVIEW中引入。这一创建仪器驱动的办法比单纯建立DLL更适合LabVIEW,因为LabVIEW可以使用CVI的函数面板文件信息来建立驱动VI。

一个LabWindows/CVI创建的仪器驱动可以通过选择菜单栏“Tools”下“Instrumentation”的“Import CVI Instrument Driver”引入到LabVIEW中。这将创建一个库文件(一个.lib文件),它包含LabVIEW由CVI函数面板生成的VI。因为LabVIEW是由CVI函数面板文件生成得到的仪器驱动,改变LabVIEW VI的唯一办法就是通过修改函数面板以及相应的C代码。

为了在CVI函数中添加一个输出,在函数的函数面板上添加一个输出指示器。由于C语言函数只能有一个返回值,为了得到一个新的返回值就需要修改传递给该函数的参数。在函数面板上添加了输出之后,可以看到函数原型已经改变并包含了添加的输出参数(它们都创建为指针型变量,原因会在下面谈到)

例如,假设一个函数有一个整型输入,并根据它的符号返回另一个整型数值。一个典型的C语言函数原型应该是:

int _stdcall my_function (int input_integer);

现在,假设我们要把这个函数作为一个VI用于LabVIEW中,并返回这个数的平方值(不采用数组类型)。考察现在这个函数可能的原型:

int _stdcall my_function (int input_integer, int* number_squared);

如果调用函数声明一个整型变量用以存储“number_squared”参数,它将把变量地址传递到“my_function”并把该地址所存储值设为平方数。这样,my_function“返回”多个值。

考察my_function的相应调用:

int main{
int num = 10; //number to square
int num_squared = 0; //variable to be returned by my_function
int ispositive = 0; //variable to be returned by my_function

ispositive = my_function(num, &num_squared);

return 0;
}

在函数运行之后,相应的参数应该是
ispositive = = 1,且
num_squared = = 100.

在LabVIEW运行引入仪器驱动时生成的VI时,系统分配一个整型变量的空间,LabVIEW调用仪器驱动的DLL把整型变量的位置通过应用传递给函数。

为了保证这个过程,my_function需要定义如下:

int _stdcall my_function (int input_integer, int* number_squared){
*number_squared = input_integer * input_integer;
return (input_integer >= 0);
}

当仪器驱动引入到LabVIEW并为这个函数创建一个VI,这个VI将有两个输出端口,分别对应于函数的返回值以及它函数面板的输出值。

相关链接: KnowledgeBase [3DR983BJ]: Creating a LabVIEW Interface for an Existing LabWindows/CVI Instrument Driver

附件:





报告日期: 10/16/2006
最近更新: 10/16/2006
文档编号: 3JMFB9HY