新闻中心

EEPW首页>测试测量>设计应用> labview中dll的调用(包括生成dll)

labview中dll的调用(包括生成dll)

作者: 时间:2017-01-09 来源:网络 收藏

  点击Destination>> Scale.dll,点击,可选择需要保存的路径。然后再点击Support Directory,这是指明了DLL支持文件的路径(比如数据文件之类的放在哪个文件夹),选择默认即可:


图13 Destination页面

  Category中的Source Files可供用户对打包VI的属性和密码做一些设置;Advanced和Additional Exclusions可以做一些高级的设置,这些均按默认值即可。Version Information可让用户填写版本号、名称、版权、公司等信息:


图14 Version Information

点击Run-Time Languages,可对支持语言进行选择,默认即可。点击Preview>>Generate Preview,可以预览到结果:


图15 预览生成

点击Build,弹出生成状态对话框:


图16 生成状态框

点击Done,生成完成,打开DLL文件保存的路径查看:


图17 DLL文件保存路径

LabVIEW调用DLL文件

  LabVIEW可以方便地调用DLL文件,这些DLL文件可以是其他编译工具,如VC,生成的。

  LabVIEW可以直接通过CLN节点来调用DLL文件,以前面生成的Scale.dll文件为例。现有一个内部定时连续采集程序,通过调用该DLL文件,使读取的值为实际采集值的10倍(图18)。


图18 连续采集程序

方法一

  在程序框图放入Call Library Function Node,双击弹出对话框。在Function页面的Library name or path中给入生成的Scale.dll文件的路径,Function name选择Scale,其他选项默认。


图19 Function页面

  由于是LabVIEW生成的DLL文件,在Parameters页面不需要做改动,但是由于VI还有一路输出,所以还需要添加一个参数y,作为DLL文件的输出。

  如果是C语言等非LabVIEW生成的DLL函数,需要将retuen type的type选项和Data type选项改成函数定义的参数类型,对于函数里输入的参数也都需要自行添加。Callbacks和Error Checking则不需要改动。


图20 Parameters页面

  点击“OK”,将生成的CLN的输入段连接到DAQmx Read.vi,return type输出连接到波形图表上,即可实现采集值放大10倍的功能。


图21 完成后的程序

方法二

LabVIEW中还有一种方法可以调用DLL文件,在VI的选项栏,依次选择Tools——Import——Shared Library(.dll),弹出Import Shared Library对话框。


图22 生成Import Shared Library对话框

  选择Create VIs for a shared library,点击Next,在Shared Library(.dll) Files中输入Scale.dll文件的路径,Head(.h) File里填写头文件的路径。


图23 选择DLL文件路径和头文件路径

  点击Next,如果DLL文件中依赖其他的一些DLL文件,需要在Include Paths中填写这些文件的路径。其他选项可以根据客户需求设置,一般默认即可。这样一直点击Next到最后,选择Open the generated library,点击Finish。这样可以生成一个.lvlib格式的库文件,里面包含了Scale.vi,这是将调用该DLL文件的方法封装好的VI,只留下输入和输出接口,方便运用到LabVIEW的程序中。直接将Scale.vi拖放到刚才的连续采集中即可完成方法一的功能。


图24 完成的程序

VC调用LabVIEW生成的DLL文件

  刚才介绍了LabVIEW调用DLL文件的方法,使用VC调用LabVIEW生成的DLL文件也很简单。还是以之前生成Scale 的DLL文件为例,不同的是采集电压程序使用的是C语言的例程,但和LavVIEW实现的功能相同。

  首先将先前生成Scale DLL文件时,路径下所有的文件全部复制粘帖到C语言例程的文件夹下。打开连续采集程序,点击状态栏的Project——Settings,在Project Settings对话框中加载入Scale.lib的静态链接库。

  在程序中键入#include "Scale.h",以便引入该DLL函数。下面是C程序的代码,功能是有限点采集电压,通过Scale.dll文件实现采样值放大10倍的功能。加粗部分是因为调用DLL文件所做的改动。

#include

#include "NIDAQmx.h"

#include "Scale.h"

#define DAQmxErrChk(functionCall) if( DAQmxFailed(error=(functionCall)) ) goto Error; else

int main(void)

{

int32 error=0;

TaskHandle taskHandle=0;

int32 read;

float64 data[1000];

char errBuff[2048]={};

int i=0;

double x10=0;

// DAQmx Configure Code

DAQmxErrChk (DAQmxCreateTask("",&taskHandle));

DAQmxErrChk (DAQmxCreateAIVoltageChan(taskHandle,"Dev1/ai0","",DAQmx_Val_Cfg_Default,-10.0,10.0,DAQmx_Val_Volts,NULL));//

DAQmxErrChk (DAQmxCfgSampClkTiming(taskHandle,"",10000.0,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,1000));

// DAQmx Start Code

DAQmxErrChk (DAQmxStartTask(taskHandle));

// DAQmx Read Code

DAQmxErrChk (DAQmxReadAnalogF64(taskHandle,1000,10.0,DAQmx_Val_GroupByChannel,data,1000,&read,NULL));

printf("Acquired %d points",read);

for(i=0;i<1000;i++){

Scale(data[i], &x10);

printf("the %d Value is : %f ",i,x10);

}

Error:

if( DAQmxFailed(error) )

DAQmxGetExtendedErrorInfo(errBuff,2048);

if( taskHandle!=0 ) {

// DAQmx Stop Code

DAQmxStopTask(taskHandle);

DAQmxClearTask(taskHandle);

}

if( DAQmxFailed(error) )

printf("DAQmx Error: %s",errBuff);

printf("End of program, press Enter key to quit");

getchar();

return 0;

}

所以,使用LabVIEW不仅可以方便地调用各种编译软件生成的DLL文件,自己也能生成DLL文件供其他编译软件调用。这样,用户在编写大型项目时更加灵活,也为熟悉C语言的工程师提供了巨大的方便。本文只对LabVIEW和VC相互调用DLL文件做了简单的介绍,很多高级功能和技巧,用户可以在实际运用中逐渐掌握。



上一页 1 2 下一页

关键词:LabVIEWDLL指

评论


相关推荐

技术专区

关闭