圖20 Parameters 頁面
點擊“OK ”,將生成的CLN 的輸入段連接到DAQmx Read.vi ,return type 輸出連接到波形圖表上,即可實現(xiàn)采集值放大10 倍的功能。
圖21 完成后的程序
方法二
LabVIEW 中還有一種方法可以調(diào)用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 中填寫這些文件的路徑。其他選項可以根據(jù)客戶需求設置,一般默認即可。這樣一直點擊Next 到最后,選擇Open the generated library ,點擊Finish 。這樣可以生成一個.lvlib 格式的庫文件,里面包含了Scale.vi ,這是將調(diào)用該DLL 文件的方法封裝好的VI ,只留下輸入和輸出接口,方便運用到LabVIEW 的程序中。直接將Scale.vi 拖放到剛才的連續(xù)采集中即可完成方法一的功能。
圖24 完成的程序
VC 調(diào)用LabVIEW 生成的DLL 文件
剛才介紹了LabVIEW 調(diào)用DLL 文件的方法,使用VC 調(diào)用LabVIEW 生成的DLL 文件也很簡單。還是以之前生成Scale 的DLL 文件為例,不同的是采集電壓程序使用的是C 語言的例程,但和LavVIEW 實現(xiàn)的功能相同。
首先將先前生成Scale DLL 文件時,路徑下所有的文件全部復制粘帖到C 語言例程的文件夾下。打開連續(xù)采集程序,點擊狀態(tài)欄的Project ——Settings ,在Project Settings 對話框中加載入Scale.lib 的靜態(tài)鏈接庫。
在程序中鍵入#include "Scale.h" ,以便引入該DLL 函數(shù)。下面是C 程序的代碼,功能是有限點采集電壓,通過Scale.dll 文件實現(xiàn)采樣值放大10 倍的功能。加粗部分是因為調(diào)用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 不僅可以方便地調(diào)用各種編譯軟件生成的DLL 文件,自己也能生成DLL 文件供其他編譯軟件調(diào)用。這樣,用戶在編寫大型項目時更加靈活,也為熟悉C 語言的工程師提供了巨大的方便。本文只對LabVIEW 和VC 相互調(diào)用DLL 文件做了簡單的介紹,很多高級功能和技巧,用戶可以在實際運用中逐漸掌握。