• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > 无线通信 > 技术文章 > 基于LABVIEW平台的数据采集卡软件设计

基于LABVIEW平台的数据采集卡软件设计

录入:edatop.com     点击:

DLL的调用

在LABVIEW 中调用DLL时,把编写好的DLL放在当前目录或特定目录下,然后根据应用程序的需要,确定参数个数和参数类型及调用规则,在LABVIEW中正确地配置DLL 。首先从函数模板Function 中调用CLF 节点,双击弹出设置对话框,如图2所示。对话框中,第一个参数Library Name Path 填入需要调用的动态链接库文件的名字和路径。第二个参数Function Name 是链接库中要调用的函数名称。第三个参数为线程调用方式,在DLL只被一个线程调用的情况下,两种调用方式都可选择,但在多线程调用情况下,需注意选择。Run in UI Thread 表示在用户接口线路中调用,DLL 的执行期将等到用户接口线程(即LABVIEW环境下的VI 应用程序) 执行DLL 的导出函数调用时才开始;Run in any Thread 表示允许多个线程同时调用这个DLL。在编制DLL 过程中,充分考虑了线程保护的同步机制,如使用临界区、互斥、信号量等,线程安全较为确定,那么可以选用Run in any Thread方式,这将有助于提高DLL调用的性能;反之,可选Run in UI Thread。第四个参数是对DLL的调用规则,可选择C或stdcall,在此选择stdcall。LABVIEW调用库函数设置界面如图3所示,其中Parameters项是对参数选项的设置,根据调用的函数,添加和设置相应的参数,参数名称、类型和数据类型,且要与被调用函数中的参数名相同。需要注意的是,当调用多个函数时要分别填写参数的个数和对应的类型,而且在调用过程中应保持数据位的一致。由于LABVIEW中的数据类型和不同编程语言对应的数据类型在形式上有些不一致,因此需要知道它们是如何对应的。如:LABVIEW中I16表示有符号16位整型,对应C语言中的short型。

设置后,LABVIEW将自动生成各参数的入口及出口状态,完成调用库函数节点的配置。对于外部的编程和连线,如Trigger.vi,如图4所示。

图3 LABVIEW调用库函数设置界面

图4 Trigger子VI程序框图

DLL调用中的参数类型匹配

在LABVIEW中调用动态链接库,难点在于参数类型匹配。最常用的三种数据类型是:数值类型、字符串、数值型数组。设计中,将采集数据传送到内存块过程涉及到带数组参数的函数调用,值得注意的是,LABVIEW 只支持 C 数据类型中的数值型数组,调用含有数组参数函数时,传递数组类型"Array Format"要选择"Array Data Pointer"。这个设置中还有其他两个选项(Array Handle,Array Handle Pointer),这种带有"Handle"的参数类型都是表示LABVIEW定义的特殊类型的,在第三方的DLL中不会使用到。按前述步骤设置好CLF节点,连接外部输入(采集数量size)和输出(存放采集数据的数组)后,输出没有反应,检查分析得知,数组参数作为输出值时,要为输出的数组数据开辟空间,将输入数据的指针复制给输出数组数据指针并传给驱动函数。在LABVIEW中开辟数据空间的方法有两种:

1.创建一个长度满足要求的数组,作为初始值传递给输入参数,输出数据就会被放置在输入数组所在的内存空间内。

2.直接在参数配置面板上进行设置。在 Minimum size 中写入一个固定的数值或选择函数的其它数据参数,LABVIEW 就会按此大小为输出数组开辟空间。

详细设置如表1所示。字符串的使用与数组非常类似,实际上在C语言中字符串就是一个I8数组。

表1 调用含有数组参数函数举例

图5 采集波形显示图

此外,布尔类型在DLL函数和LABVIEW VI之间传递没有专有的数据类型,需利用数值类型来传递。输入时先把布尔值转变为数值,传递给DLL函数;输出时把数值转为布尔值。对于所调用的DLL 库函数的参数类型,如果在配置框中找不到匹配的类型,可以在Type 框中选Adapt to Type,表示编程时指定的LABVIEW数据类型与DLL中参数类型进行自动匹配。LABVIEW也定义了一些特有的数据类型,例如复数类型、LV布尔类型。为了在动态链接库中能对这些类型的数据进行操作,在LABVIEW目录中的extcode.h文件对LABVIEW的各种数据类型进行了定义。在编写动态链接库时,通过引用该文件就可以在C代码中对LABVIEW的这些独有数据类型进行操作。

实验与结论

程序设计采用循环顺序执行结构,主要设置三个调用动态链接库节点。循环顺序执行结构中包括三帧,第一帧调用Config函数进行数据采集卡的初始化;第二帧循环调用datatrans函数采集数据至内存,并用波形图显示出来;第三帧调用deviceshut函数释放采集卡所占资源,程序结束。图5是设计完成的采集卡软件工作界面,图中显示了对系统采集参数、处理参数配置以及采集波形的显示等,波形显示了对正弦信号采集4096个有效数据点。

结果表明,数据卡的接口工作稳定,数据正确无误,达到了设计的目标。上述方法成功实现了LABVIEW与采集卡驱动程序的数据交换,进而利用LABVIEW丰富的函数库,能方便地实现采集卡的所有功能,搭建了以LABVIEW为应用程序的数字采集处理系统。很明显这种集成了VC++和LABVIEW图形化编程语言各自优势的采集处理系统不仅性价比高、通用性强、易于开发、数据处理简单,且可以大大缩短开发时间。采用CLF 技术,充分利用已有的动态链接程序库,可大大增强LABVIEW 和底层硬件的通信能力。

来源:维库开发网

上一篇:UWB技术在家庭和有线电视网络中的应用
下一篇:基于ARM的3DES加密算法实现

手机天线设计培训教程详情>>

手机天线设计培训教程 国内最全面、系统、专业的手机天线设计培训课程,没有之一;是您学习手机天线设计的最佳选择...【More..

射频和天线工程师培训课程详情>>

  网站地图