图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 <stdio.h>
#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]={'\0'};
int i=0;
double x10=0;
/*********************************************/
// DAQmx Configure Code
/*********************************************/
DAQmxErrChk (DAQmxCreateTask("",&taskHandle));
DAQmxErrChk (DAQmxCreateAIVoltageChan(taskHandle,"Dev1/ai0"/*Config correct device*/,"",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\n",read);
for(i=0;i<1000;i++){
Scale(data[i], &x10);
printf("the %d Value is : %f \n",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\n",errBuff);
printf("End of program, press Enter key to quit\n");
getchar();
return 0;
}
所以,使用LabVIEW 不仅可以方便地调用各种编译软件生成的DLL 文件,自己也能生成DLL 文件供其他编译软件调用。这样,用户在编写大型项目时更加灵活,也为熟悉C 语言的工程师提供了巨大的方便。本文只对LabVIEW 和VC 相互调用DLL 文件做了简单的介绍,很多高级功能和技巧,用户可以在实际运用中逐渐掌握。