当前位置:文档之家› LabVIEW与Matlab的无缝集成_王禹林

LabVIEW与Matlab的无缝集成_王禹林

LabVIEW与Matlab的无缝集成_王禹林
LabVIEW与Matlab的无缝集成_王禹林

收稿日期:2005-07-01;修订日期:2005-09-07 基金项目:国家自然科学基金重大、面上资助项目(50390063;50305019);上海市科委国际合作项目(045007027) 作者简介:王禹林(1981-),男,江苏南京人,博士研究生,主要研究方向:虚拟仪器、先进电子制造、机器视觉; 熊振华(1974-),男,江西南昌人,副教授,主要研究方向:先进电子制造、计算机集成优化; 丁汉(1963-),男,安徽安庆人,教授,主要研究方向:先进电子制造、机器人学.

文章编号:1001-9081(2006)03-0695-04

Lab V I E W 与Matlab 的无缝集成

王禹林,熊振华,丁 汉

(上海交通大学机械与动力工程学院,上海200030)

(wyl_sjtu@sjtu .edu .cn )

摘 要:结合实例详细介绍了LabV I E W 与Matlab 无缝集成的三种常用方法,即COM 组件法、中间文件传递参数法和VC ++参数类型转化法。利用这些方法可将两种软件取长补短,且便于软件的发布。

关键词:LabV I E W ;Matlab;COM;DLL;接口技术;无缝集成中图分类号:TP311 文献标识码:A

Seam less i n tegra ti on between LabV I E W and M a tl ab

WANG Yu 2lin,X I O NG Zhen 2hua,D I N G Han

(School of M echanical Engineering,Shanghai J iaotong U niversity,Shanghai 200030,China )

Abstract:Three methods were intr oduced with a typ ical exa mp le t o show how t o integrate Lab V I E W and Matlab seam lessly,which were COM object method,trans m itting para meter method with te mporary file and the method of encap sulating the well devel oped algorith m t o the dyna m ic link library (DLL )and transfor m ing the para meter type thr ough using VC ++.These methods hel ped t o release the s oft w are easily .

Key words:Lab V I E W ;Matlab;C OM;DLL;interface technol ogy;sea m less integrati on

0 引言

在工程领域中,Lab V I E W 和Matlab 是倍受程序开发人员青睐的两种语言。Lab V I E W 对于一些需要进行大量数据运算处理的复杂应用以及某些复杂的控制算法显得有些力不从心。而Matlab 不能实现端口操作和实时控制,在界面方面也稍逊一筹。在实际工程应用中将二者结合起来取长补短,具有非常实用的价值。

Lab V I E W 已提供了M atlab Scri p t 节点来调用Matlab 语言

开发的算法,这实际上就是通过ActiveX 控件与M atlab Server 进行通信。用该方法实现它们的混合编程简单实用,但是不能脱离Matlab 的环境,而只是将它在后台执行,因此十分不利于独立应用程序的开发,为了实现Lab V I E W 和Matlab 的无缝集成,本文以“基于蒙特卡洛法模拟求解可靠度”为例详细介绍了如下三种方法,即C OM 组件法、中间文件传递法,以及

VC ++参数类型转化法。其中文献[1]已介绍了C OM 组件

法,本文将对这种方法进行深入探讨和补充,并与另两种方法进行比较。(上述各方法所用的编程环境为Matlab 6.5,

Lab V I E W 7.1,VC ++6.0)

1 无缝集成的三种方法

不管使用上述哪种方法,均要先进行M atlab 编译环境的设置。因为无论是用Matlab C OM Builder 把M 文件编译成

COM 组件,还是用M atlab Comp lier 把M 文件编译成DLL 文

件,都需借助外部的编译器。要设置外部编译器,可在M atlab 中调用mbuild 2setup 和mex 2setup 命令。这里选择M icr os oft

V isual Studi o 6.0。

1.1 COM 组件法

Lab V I E W 5.0及以上的版本都提供了对C O M 的支持。Matlab C O M Builder 是Matlab 6.5新包含的产品,帮助用户将用M 语言开发的算法自动快速地转变为独立的C O M 组件对象,以

供其他支持C O M 的编程语言调用,实现Matlab 和其他编程语言

的整合。通过C O M 组件,可以同其他用户共享已经开发的算法,并且可以免费地随同C O M 应用程序发布Matlab 算法。

设已编写好myp r oject .m 函数如下(已简化):

functi on num =myp r oject (x,y,tuhao,i,A,B ,C,D )s =nor m rnd (A,B,i,1);cdfp l ot (s );num =0;

该函数有8个输入参数和1个输出参数,参数类型包括

整型和浮点型,函数中使用了M atlab 数学库和图形库中的函数(如nor m rnd ()和cdfp l ot ()),生成了数据量非常大的(由参数i 控制,比如10000)符合某种数学分布的两组随机数组,然后对数据进行了分析处理并绘图显示结果,具有典型性。

然后即可用Matlab Builder f or COM 创建COM 组件。过程非常简单,只需4个步骤,即创建工程、管理M 文件和M EX

文件、编译生成组件、打包和发布组件[2]

,说明如下:

1)在Component name 中输入要生成的C OM 组件的名字myp r oject 。

2)在Comp iler Code in 里面推荐选择C,因为C 代码性能较好,C ++代码可读性好,而最后不需要看中间的代码。

3)因为要使用Matlab 的图形库,所以选中U se Handle Graphics library 。

4)把myp r oject .m 加入要对其进行操作的类中,即为该类添加了一个简单的方法。

第26卷第3期

2006年3月

 

计算机应用

Computer App licati ons

 

Vol .26No .3Mar .2006

5)编译完毕后在distrib 文件夹中将生成相应的myp r oject_1_0.dll 文件并自动注册到系统中。

6)将C OM 组件打包并发布后在distrib 文件夹下生成一

个自解压文件myp r oject .exe,运行它可实现必要的动态链接库的安装和COM 组件的注册。需要注意的是打包时输入的文件夹目录不能包含中文,否则将注册失败。注册好后亦不能改变其存放路径或删除,否则将找不到注册组件。为了在没有安装Matlab 的目标机上能够使用Matlab Comp iler 生成的组件,需要一同发布MCR (Matlab Component Runti m e ),可通过MCR I nstaller .exe 进行安装。

7)Matlab7增强了M atlab Comp iler 模块功能,简化了COM 组件的开发过程,6.5版本中的Matlab COM Builder 很多设置项都不再出现。

接下来需在Lab V I E W 中调用上面生成的COM 对象。图

1描述了调用过程[1]

,这里仅作以下说明:

1)首先必须引用C OM 对象,为此在进入循环前调用“Aut omati on Open ”函数生成Refnu m,按右键点击“Select ActiveX class ”的B r owse,在列表中选择myp r oject 1.0Type L ibrary Versi on 1.0,这样myp r oject_1_0.dll 的引用就添加到Lab V I E W 程序中,其对应的图标为myp r oject 。同时生成的Refnu m

能够传递给模板中的其他相关函数节点,实现具体的

COM 对象操作。

2)Lab V I E W 程序中调用C OM 对象的myp r oject 方法,当

方法有输出变量时,第1个变量总是nargout,它的数据类型为

Long 。这个输入参数传递Matlab nargout 参数给编译函数,并

且指定要求有多少个输出变量。没有输出变量的方法不传递

nargout 变量。这里因为有一个输出变量nu m,故给nargout 变

量赋值为1。

3)虽然输入参数分别为整型和浮点型,而myp r oject 中

与其对应的数据类型为变体型,数据类型不同,但Lab V I E W 会自动将输入数据的类型转换为变体型,以满足COM 对象的输入要求。然而当C OM 对象的输出为变体型数据时,必须清楚C OM 对象所返回数据的类型,如果选择了错误的数据类型,Lab V I E W 将反馈错误信息。通过Variant t o Data 节点可以将变体型数据转换为Lab V I E W 能处理和显示的数据类型。要使用该节点,只要连接需要转换的变体型数据,并标识转换后的数据类型即可。由于调用myp r oject_1_0.dll 返回的是一个整型变量,所以把整数1连接到Variant t o Data 节点的Type 输入端口和myp r oject 方法的nu m 参数的输入端口(这里并不是赋值,而是指定数据类型)。

4)当退出循环后用Cl ose Aut omati on 函数关闭Refnu m 。

图1 LabV I E W 调用COM 对象程序图

最后的工作就是将Lab V I E W 程序以及所调用的C OM 组件打包,使其能够脱离Lab V I E W 和M atlab 的环境下运行[3]

,这里作以下说明:

1)打包时有时需在App licati on Settings 标签中选中Enable ActiveX 选项(比如使用M atlab Scri p t 节点时),否则执行程序将没有响应。

2)运行Lab V I E W 生成的程序时,必须确保已安装Lab V I E W runti m e engine (25M ),当用高版本的Lab V I E W 生成的可执行程序,在装有低版本的Lab V I E W 的计算机上运行,也需先安装Lab V I E W runti m e engine 。

3)使用COM 组件法时,打包时除需包括vi 文件,还需包括前面Matlab 生成的myp r oject .exe 文件。1.2 基于动态链接库(dll )法

W indows 中,dll 是一种很特别的可执行文件,可以被多

个W indows 应用程序同时访问,具有固定的共享数据段,因此

可以通过dll 实现Lab V I E W 与Matlab 之间的数据传输和函数调用。简单地说,就是利用Matlab 和VC ++生成相应的可以被Lab V I E W 调用的dll,提供它们之间的基本支撑环境。

把M 文件创建为动态链接库dll,主要有三种方法:

1)使用MAT COM 。它可通过VC ++或Borland C ++将

Matlab 的源代码译成同等功能的C ++源代码,转换容易,并

支持图形函数,但对struct 等类的支持有缺陷,对class 数据类

型只能部分支持,部分M atlab 命令不能够正确编译,某些绘图语句无法实现或不能得到精细图像。

2)使用M atlab 为VC ++I D E 提供的Add 2in 。只要在

VC ++中创建工程时选择M atlab Pr oject W izard,在接下来的Step 1中的V isualMatlab App licati on Type 选择Shared M 2DLL

就可以了。接下来添加3.m 文件进行编译。

3)使用M atlab 的mcc 命令将3.m 文件编译为动态链接库(3.DLL )。

后两种方法都属于使用Matlab 数学库的方法。这三种方法都可以完全脱离M atlab 环境,但无论是M atlab 数学库还是MAT COM ,离开Matlab 环境运行都有一定的局限性,有些功能和函数不能运行,比如前面myp r oject .m 中使用的

nor m rnd 等生成服从某种分布的随机矩阵的命令用MATCOM

不能被正确编译。又因为Add 2in 也是调用Matlab Comp iler 的命令mcc 进行编译工作的,而且有时Add 2in 还会出现不能使用的情况,所以下面均采用mcc 命令来编译dll 。

mcc 有很多参数和用法可用,这里使用命令mcc 2B csglsharedlib:y oulibna me functi on1funci on2…来创建所需要的

动态链接库DLL 文件。其中参数2B 表示使用Bundle Files 作为参数,csglsharedlib 是2B 的参数,意思是生成使用Matlab 图

696 计算机应用

2006年

形库的C 共享动态链接库,y oulibna me 是你想要生成的动态链接库DLL 的文件名,functi on1为你想要加入到动态链接库DLL 中的函数名,如果有多个函数,各个函数名用空格隔开。

图2 利用中间文件传递法的V I 程序图

编译好dll 文件后,还存在着数据接口问题。由于mcc 生成的dll 中的函数所接受的参数是mx A rray 型数据,而

MATCOM 生成的dll 中的函数所接受的参数是Mm 型数据。

它们都是C ++类,对应于Matlab 中的阵列数据类型,不能由

Lab V I E W 或VC ++等直接调用,需要先进行参数类型的转化。

有两种方法:一种是使用中间文件传递参数法,这种方法利用

了中间文件(比如文本文件)存放相应的参数,Lab V I E W 或

Matlab 直接从中间文件中读取或写入参数。此时编写的M

文件应为无参数函数。这里还需注意,用mcc 编译成dll 文件,相应的函数说明变为extern L I B _mylib _C _AP I void

m lf M yp r oject ();用Add 2in 编译成dll 文件,相应的函数说明变为extern void m lf M yp r oject (void );原来的函数名myp r oject 变成了m lf M yp r oject 。这两种方法都使其参数接口变为普通的参数类型。但是用MAT COM 编译成dll 文件,相应的函数说明变为Mm myp r oject ();可以看到其函数的返回类型仍然是

Mm 型数据,所以使用中间文件传递参数法时不能使用Matcom 编译成dll 文件。第二种方法是先将M 文件编译为C ++程序文件,然后再用VC ++封装一个dll,使其参数接口

变为普通的参数类型。因此我们要使用Matlab 提供的

External I nterfaces/AP I 函数来创建mx A rray 型数据

[2]

为了使最后发布的程序真正地脱离Matlab 环境,最后还需打包一些M atlab 动态链接库。对于M atlab 6.5版本,将<

Matlab >\extern \lib \win32\下的mglinstaller .exe 解压缩,在生

成的目录bin \win32\下就是程序独立运行所需要的动态链接库文件。把这些文件拷贝到打包安装的目录中即可。

1.2.1 中间文件传递法

实现的方法是,用Lab V I E W 编写前端用户交互界面,并搜集必要的参数信息,保存在一个中间文件(如in .txt )中。用Matlab 语言编写好一个能完成特定任务的没有输入和输出参数的M 函数(如my p r oject .m ),该函数将从in .txt 读取所需的参数信息,执

行任务并返回结果到一中间文件(如out .txt )中。然后用Matlab

MCC Co mpiler 把此M 函数编译生成dll,供Lab V I E W 调用,调用完后Lab V I E W 可从out .txt 中读取结果。

所用到的M 文件为mytest .m,如下:

functi on myp r oject

fidin =f open (′c:\in .txt ′,′rt +′);fidout =fopen (′c:\out .txt ′,′rt +′);[file ]=fscanf (fidin,′%f ′);x =file (1);

?//限于篇幅,下面同样的变量赋值过程均省略,仅以x 为例

?

//中间的内容与前面的myp r oject .m 函数相同

fp rintf (fidout,′%d ′,num );fcl ose (fidin );fcl ose (fidout );

其中用f open 函数以读写文本方式打开文件,并返回指针,用fscanf 函数以浮点型格式读入数据到矩阵file 中,计算出结果后用f p rintf 函数把结果以整数格式写入输出文件,最后用fcl ose 函数关闭文件。

使用命令mcc 2B csglsharedlib:myp r oject mytest 生成动态链接库myp r oject .dll 。从my p r oject .h 文件中我们可以看到主函数被说明为extern L I B _my p r oject_C_AP I v oid m lf M ytest ()。使用dll 之前需先用my p r oject .dll 中的my p r ojectI nitialize ()函数对其进行注册,使用完毕之后需用my p r ojectTer m inate ()对其进行释放。接下来需要在Lab V I E W 中调用上面生成的dll 文件,调用过程如图2所示。

首先用“Ne w File ”函数在C 盘根目录下建立两个文本文件“in .txt ”和“out .txt ”,生成相应的参考号,并设置over write 的属性为true,同时调用my p r oject .dll 中的my p r ojectI nitialize ()对其进行注册。在循环的事件结构中使用“Nu mber To Fracti onal String ”函数把整数或浮点数转化为F 2for mat string 类型,并配合“Tab Constant ”常量把这些数据用“W rite File ”函数写入中间文件中。同时把“W rite File ”函数的pos mode 参数赋值为start 。需要注意的是,为了利用中间文件在

796第3期王禹林等:Lab V I E W 与Matlab 的无缝集成

Lab V I E W 和Matlab 中准确地传递参数,使用Tab 常数作为各

数据之间的分隔符,并利用“Concatenate Strings ”函数把各F 2for mat string 类型数据和Tab 分隔符组合在一起一次传递给“W rite File ”函数。

然后利用Lab V I E W 中的C LF 节点[4]调用myp r oject .dll 中的m lf M ytest ()函数进行数据的分析计算并返回结果到输出文件。接着调用“Open /Create /Rep lace File ”函数和“Read File ”函数从“out .txt ”中读取数据,并用“Fract/Exp String To Nu mber ”函数把结果转化为数值类型,并把值显示出来。

最后在结束程序时,例如在“Panel Cl ose ”事件中还需调用“Cl ose File ”函数关闭Refnu m,并调用myp r oject .dll 中的myp r ojectTer m inate ()函数对dll 文件进行释放。(注意不要在结束按钮事件中调用myp r ojectTer m inate ()函数,否则再次运

行程序将没有响应。

)打包时需包括my pr oject .dll 和所需的Matlab 动态链接库。

1.2.2 VC ++参数类型转化法

实现的方法是:先将M 文件编译为C ++程序文件,再用

VC 封装一个dll,使其参数接口变为普通的参数类型

。然后图3 LabV I E W 调用经VC ++封装后的dll 的程序图用Lab V I E W 编写前端用户交互界面,并调用经VC 封装过后的参数接口为普通参数类型的dll 数进行数据的分析计算并返回结果。

所用的M 函数与用COM 组件法所用的M 函数完全相同,为myp r oject .m 。

使用命令mcc 2B csglsharedlib:p r oject

myp r oject 生成动态链接

库。M atlab 会生成一系列

文件,其中p r oject .h,p r oject .lib,p r oject .dll 是我们所需要的。

为了能在VC ++中使用上面生成的p r oject .dll 进行算法

封装和参数接口类型转化,首先要对VC ++的环境进行一些

设置[5]。作以下说明:

1)在VC ++中新建“MFC App W izard (dll )”工程,取名为

myp r oject,其余取默认选项。

2)把前面生成的p r oject .h,p r oject .dll,p r oject .lib 添加到

工程中,在myp r oject .cpp 文件中添加头文件p r oject .h 。

3)在myp r oject .h 文件中添加封装后的函数说明如下:

extern "C"_decls pec (dllexport )

void myp r oject (double x,double y,double tuhao,double i,double A,

double B,double C,double D,double 3num );

在函数声明文件中,extern "C"不可少,以使编译器在调

用该函数时,以C 语言的语法格式去查找该函数。_decls pec (dllexport )的作用是输出函数声明。

4)在myp r oject .cpp 文件中添加封装参数接口函数如下:

extern "C"_decls pec (dllexport )

void myp r oject (double x,double y,double tuhao,double i,double A,double B,double C,double D,double 3num ){

double 3numm;//中间变量//创建mx A rray 型数据并对其赋值

mx A rray 3x_,3y_,3tuhao_,3i_,3A_,3B_,3C_,3D_,

3num_;

x_=mxCreate Double Matrix (1,1,mxREAL );

?

//限于篇幅,下面同样的变量赋值等过程均省略,仅以x_为例num_=mxCreate Double Matrix (1,1,mxREAL );me mcpy (mxGetPr (x_),&x,sizeof (double ));

?

//使用p r oject .dll 中的函数

num_=m lf M yp r oject (x_,y_,tuhao_,i_,A_,B _,C_,D_);numm =mxGetPr (num_);

3num =3numm;

//销毁变量,释放内存mx Destr oy A rray (x_);

?

}

这里参数接口类型都定义为double 和double 3,如果定

义为int 型参数传递会出错。

最后把该工程编译成myp r oject .dll 供Lab V I E W 调用。

调用过程如图3所示。

利用Lab V I E W 中的C LF 节点调用myp r oject .dll 中的

myp r oject 函数,在使用之前还需要在Lab V I E W 中用p r oject .

dll 中的p r ojectI nitiallize ()函数对其进行注册,使用完毕之后需要在Lab V I E W 中用p r ojectTer m inate ()对其进行释放。这两函数在p r oject .h 中可以找到。打包时需包括p r oject .dll 、myp r oject .dll 和所需的M atlab 动态链接库。2 结语

C O M 组件法最简单,但为了在没有安装Matlab 的目标机上用户也能够使用,需要安装MCR I nstaller .exe (102M ),这在一定程度上限制了它的应用。而另两种方法只需打包所需的Matlab 动态链接库,在目标机上的安装文件比C O M 组件法要小很多。另外初次执行的速度C O M 组件法也比另两种方法要慢。

中间文件传递法不要求复杂的编程技巧,只需在

Lab V I E W 和Matlab 中分别添加相应的创建文件,读写数据的

函数即可。但交互性差,因已用Matlab 封装好DLL 文件,故中间文件的文件名及其路径已定好不能再更改。而在

Lab V I E W 中使用“Ne w File ”函数创建文件,目标机上必须已

存在此文件保存的路径,否则会出错。为了满足良好的可移植性,均在C 盘的根目录下创建中间文件。另外,利用Lab V I E W

(下转第702页) 

不活动:当流程建立时,流程的所有活动都是不活动的。就绪态:活动被放进了队列,而且活动等待的条件已经成熟。执行态:活动正在执行。完成态:活动已完成。

错误态:活动执行过程因发生错误而被结束。等待:活动被放进了等待队列。

未知:活动状态为空。

根据以上活动相关的状态,可以对活动所必需包含的通用操作进行定义,如下:

Execute ():活动的功能性操作。比如,需要在这里调用组件服务的实际操作,或者服务组件之间传递消息等。

is Ready ():判读活动当前是否可以进入执行态。

finish ():当活动执行完成时,执行一些必要的扫尾工作。2.4 粗粒度服务接口呈现

细粒度的组件服务在经过流程编排以后,协作产生更强大的功能,处理更多的数据,从而表现为粗粒度的组件服务。服务如果不发布出去,或者不能够遵从W S DL 国际标准,从而为消费者所使用,就不能称之为真正的服务。

如果为流程取一个服务名称,然后整理出服务所需要的所有输入信息和输出信息,就能够像一个普通的组件一样生成一个服务接口。或者以细粒度服务为单位组织每一个细粒度服务所需要的输入输出参数,从形式上构成粗粒度服务的内部操作,并依据这些信息构造粗粒度服务的服务接口。

基于上述服务接口,就可以模仿现有的Web Service 技术中服务发布的方法,建立对应的WS DL 文件对外发布。但是由于这里的服务接口只是逻辑概念上的接口,必须在调用之前将调用形式转化为逻辑概念上的粗粒度服务在执行过程中能够实际使用的信息形式,然后再转交给执行机构。

3 结语

目前网络传输同机内传输相比,效率不理想。在使用

W eb Service 技术实现S OA 时,必须考虑到低效率的网络传输

造成的负面影响。通过提供一种对企业细粒度组件服务的整合方法,降低基于S OA 架构的企业应用中的网络传输量,从而减轻设计复杂度,提高系统开发、运行效率。

面向服务的架构的最大优点在于为企业的应用整合提供了有力的支持,但由于面向服务的体系结构考虑问题的出发点是企业业务的整合,是从宏观的角度探讨系统的复用。因此,大都从W eb Service 的角度讨论服务的组合问题,这个探讨属于业务复用的范畴,它的着眼点是业务;而本文讨论的问题的着眼点是业务内部的服务构件,讨论服务构件的粒度的转化方法,使服务构件在不同的粒度层次都能够被复用。这两个问题在特定条件下能够相互转化。参考文献:

[1] 王千祥.应用服务器的原理和实现[M ].北京:电子工业出版

社,2003.

[2] SHALLOWAY A,T ROTT JR.设计模式精解[M ].北京:清华大

学出版社,2004.

[3] VE NNERS B.深入Java 虚拟机[M ].第2版.北京:机械工业出

版社,2003.

[4] NAG APP AN R,SK OCZY LAS R,SR I G ANESH RP .Java W eb 服务

开发[M ].北京:清华大学出版社,2004.

[5] RAMANATHAN R.MakeApp licati on I ntegrati on Easy [EB /OL ].

htt p://www .fa wcette .com /webl ogicp r o /2004_09/magazine /fea 2tures/rra manathan /,2004-08-20.

[6] HOLL I N S WORT H D.TheWorkfl ow Reference [R /OL ].www.

wf mc .org/standards/docs/tc003v11.pdf,1995-01-09.

[7] Web ServicesDescri p ti on Language (Versi on 2.0)[E B /OL ].htt p://

www https://www.doczj.com/doc/d93296882.html,/T R /2005/WD 2wsdl20220050803,2005-08-03.[8] ANDRE W S T ,CURBERA F ,DHOLAKI A H ,et al.Business

Pr ocess Executi on Language f or W eb Service (Versi on 1.1)[EB /OL ].

htt p://dev2dev .

bea .

com /technol ogies/webservices/

BPEL4W S .js p,2003-05-05.

(上接第698页)

和M atlab 的文件读写功能传递参数,在实时性要求很高或参数很多的情况下并不适合

图4 程序运行效果图

VC ++参数类型转化法实现起来最为复杂,对开发者在

设置和编程上有一定要求。但它可直接传递参数而不需要中

间文件,可移植性很高。

另外Matlab 的Comp iler 具有一定的局限性,在混编的过程中只能使用M atlab 数学库中的函数和图形库中的部分函数,对于一些工具箱中的函数,如用到一些数学库之外的函数,就有可能出现错误。即使编译通过,在运行的时候也有可能出错。

利用上述的三种方法均实现了Lab V I E W 与Matlab 的无缝集成。程序的运行效果图如图4所示。这三种方法各有优缺点,用户可根据实际情况选择合适自己的方法。参考文献:

[1] 裴锋,汪翠英.利用COM 技术的LabV I E W 与Matlab 的无缝集

成[J ].仪器仪表用户,2005,12(2):97-98.

[2] 苏金明,黄国明,刘波.Matlab 与外部程序接口[M ].北京:电子

工业出版社,2004.

[3] Nati onal I nstruments Cor porati on .LabV I E W App licati on BuilderU s 2

er Guide[Z],2003.

[4] 雷振山.LabV I E W 7Exp ress 实用技术教程[M ].北京:中国铁道

出版社,2004.

[5] 刘建伟.VC ++与Matlab 混合编程的快速实现[E B /OL ].htt p://

kenbey ond .bl ogchina .co m /kenbey ond /925404.ht m l,2005-06-01.

虚拟仪器LabVIEW实验报告

实验报告一 课程名称虚拟仪器 实验项目熟悉编程环境与基本编程操作 实验仪器计算机 系别: guangdian 专业: 班级/学号: 学生姓名: 实验日期:2011年3月 成绩: _____________________ 指导教师: ____________________

实验一熟悉编程环境与基本编程操作 一、实验目的 1.理解LabVIEW的运行机制,熟悉LabVIEW编程环境。 2.掌握基本编程操作,包括VI程序的创建、编辑、运行与调试。 3.理解LabVIEW模块化编程思想,掌握子VI的创建、编辑及调用。 二、实验仪器及材料 主要设备有计算机, LabVIEW8.5软件。 三、实验内容及步骤 教材第82—83页练习4.2,创建VI后保存为Thermometer.vi。 1.打开一个新的前面板 2.从控件菜单选择一个温度计放到前面板 3.在温度计上用右键单击设定一个精确的温度值,选择Visible》Digital Display 4.将VI保存为Thermometer.vi 教材第107—108页练习5.2,打开练习4.2所创建的VI,将其转变成一个子VI。 1打开4.2创建的Thermometer.vi 2.为该VI创建一个图标,从VI图标窗格选择Edit Icon…,单击OK返回主VI

3从图标弹出菜单中选择Show Connector创建连接器。 4将端子指派给温度指示器,使用Writing工具单击连接器端子,端子就会变成黑色,然后单击温度计指示器。 5在温度计指示器的弹出菜单选择Description and Tip…为温度指示器编制文档 6选择File》Save将修改保存。 四、收获与体会

虚拟仪器实验 labviEW

实验一储液罐状态监控系统设计 一、实验目的 通过该系统设计,初步了解LabVIEW虚拟仪器设计软件的前面板、程序框图及各个选项板的功能。 二、实验内容 设计储液罐状态监控仿真系统,要求如下 1、监测一个储液罐的实际液位、温度、进口压力、出口压力 2、用曲线图显示被测量液位随时间的变化情况 3、液位超标时用指示器报警 4、手动和自动两种方式调节储液罐的液位高度 5、用调节步长按钮决定自动调节的快慢程度 6、设计储液罐状态监控系统前面板 三、实验步骤 1、前面板设计 整个贮液罐监控系统前面板需要的控件有:停止键、手自动切换、液位超标指示灯、步长调节旋钮、高度设定、实际高度显示、进出口压力显示、温度显示和实际液位高度波形图。 停止键、手自动切换、液位超标在新式布尔量控件中进行选择,步长调节旋钮在数值控件中选择旋钮、压力表在数值中选择量表控件,设定高度、实际高度、温度在数值控件中分别选择垂直指针滑动杆垂直填充滑动杆和温度计,液位高度波形图选择波形图表。 2、程序框图设计 程序采用While循环结构,结束用停止布尔按钮结束,除设定高度和调节步长是手动设置外,其他输入如压力和温度的设定均采用编程—数值—随机数的方式给定,手自动切换布尔量连接比较选项中的选择节点,用于切换手自动,液位超标将实际高度和超标高度比较,输出一布尔量。 四、实验结果

五、思考题 1、将整个VI设计成一个子VI。在另一个VI中调用。 在前面板右上角,编辑连线板,对VI的输入和输出对应控件进行编辑,然后保存,即可生成VI,可在其他VI中调用,在其他VI中的调用图如下:

实验二分组数据的练习 一、实验目的 通过该实验,熟悉LabVIEW中常用的分组数据:数组、簇及波形的使用。 二、实验内容 习题4-3到4-11。 三、实验步骤 4-3.4.5 前面板只有三个数组的显示控件,分别为原数组显示、原数组大小显示和转置后的数组显示,程序框图中建立一二维数组常量,将要显示的数组填入,并添加一二维显示控件,在数组中分别选择数组大小和二维数组转置节点,其后分别连接显示控件。 4-6 前面板中选择簇输入控件,并在簇中加入字符型输入控件,数值型输入控件,布尔型输入控件,然后添加一布尔型显示控件,用于提取簇元素注册的显示。程序框图中从簇与变体函数子选板中选择按名称解除捆绑函数,输入端连接簇输入控件的输出,然后选择“注册”后输出端连接布尔控件的输入端。 4-7 前面板中在“字符串与路径”控件中选择组合框控件,然后在它的属性编辑项中编辑5个人的姓氏拼音首字母,它们的值分别为各自的中文姓名,编辑好后建立一字符串显示控件,程序框图中将组合框的输出端与字符串显示控件连接即可。 4-8 前面中中建立一字符串显示控件,程序框图中在定时函数子选板中选择“获取日期时间/字符串”函数,然后放置两个字符串常量分别为班级和姓名,将日期、时间、班级、姓名四个字符串接入字符串选板中的“连接字符串”函数节点,该节点的输出端接入字符串显示控件的输入端。 4-9 前面板中建立一字符串显示控件,程序框图中建立五个随机数,然后均与常数10相乘得到0-10的随机数,选择字符串选板中的“连接字符串”函数节点,将相乘后的随机数接入输入端,在“连接字符串”的格式字符串端建立字符串常量定义格式为两位小数点,数之间用逗号隔开。 4-10 前面板中建立一个一维数组输入控件,建立一个一维数组输出控件,程序框图中建立一个For循环,用数组选板中的“一维数组移位”和“替换数组子集”,每次替换数组最后一个元素并进行移位,替换的新元素值为0-10的随机数,For循环建立移位寄存器,使移位后的数组能进入下次循环中。 4-11 已知标定数据,前面板中建立电压的数值输入控件和压力的数值输出控件,程序框图中用数组选板中的“以阈值插值一维数组”进行电压对压力的插值找到索引值,然后进行显示。 四、实验结果 4-3.4.5

用labview设计一个计算器(虚拟仪器)

科目: 姓名:学号: 院系:类别:(学术、专业)

实验一Labview 计算器 一、实验目的 通过利用labview设计一个简易计算器熟练的掌握labview基本功能和基本操作方法。 二、实验要求 利用设计的计算器可以进行简单的四则运算、可以进行平方、开根号和倒数运算、计算器可以进行清零和关闭计算器操作、在输入数据时不慎将某个数字输错可以运用BackSpace清除该值等一些基本简单的运算。 三、实验原理和框图 1、前面板设计 前面板是LabVIEW的图形用户界面,在LabVIEW环境中可以对这些对象的外观和属性进行设计,LabVIEW提供了非常丰富的界面对象,可以方便地设计出生动、直观、操作方便的用户界面。本系统中前面板显示程序的输入和输出对象,即,控件和显示器。本程序中控件主要是按钮,显示器主要是文本显示。 在前面板设计过程中先在前面板整齐排列放置22个确定按钮,将这22按钮的标签隐藏,然后修改这22个确定按钮的名字分别为:0~9十个数字、小数点、正负号、加、减、乘、除、等号、倒数、根号、清零、退格和X的Y次方。 前面板还包括一个文本显示控件用于显示计算的结果和计算器的某些提示,通过改变显示控件的大小使之于计算器的大小相适应。计算器的前面板还有程序框图中while循环的停止按钮,当按钮按下时计算器停止工作退出到LabVIEW的编辑界面。 为了前面板的美观和防止按钮的移动,分别将前面板的各个按钮和文字进行组合和对前面板进行装饰,装饰采用修饰中的平面框。如下图所示:

2.后面板设计 程序框图对象包括接线端和节点,将各个对象连线连接便创建了程序框图,接线端的颜色和符号表明了相应输入控件或显示控件的数据类型。程序框图是程序的核心,程序要实现的功能都是通过程序框图反应出来的。本课程设计的程序框图主要运用了while循环、时间结构、条件结构和平铺顺序等结构。

虚拟仪器LabVIEW实验报告

现代仪器设计LabVIEW实验报告 实验内容: 1.熟悉LabView软件操作方法 2.了解LabView的一般编程方法 3.虚拟信号发生器制作

1.熟悉LabView软件操作方法 虚拟仪器(virtual instrumention)是基于计算机的仪器。虚拟仪器主要是将仪器装入计算机。以通用的计算机硬件及操作系统为依托,实现各种仪器功能。虚拟仪器的研究中涉及的基理论主要有计算机数据采集和数字信号处理。目前在这一领域内,使用较为广泛的计算机语言是美国NI公司的LabVIEW。 LabVIEW(Laboratory Virtual instrument Engineering)是一种图形化的编程语言,它广泛地被工业界、学术界和研究实验室所接受,视为一个标准的数据采集和仪器控制软件。利用它可以方便地建立自己的虚拟仪器,其图形化的界面使得编程及使用过程基本上不写程序代码,取而代之的是流程图。 前面板的设计需用控制模板。控制模板(Control Palette)用来给前面板设置各种所需的输出显示对象和输入控制对象。每个图标代表一类子模板。可以在前面板的空白处,点击鼠标右键,以弹出控制模板。 程序框图的设计需用功能模板。功能模板(Functions Palette)是创建流程图程序的工具,只有打开了流程图程序窗口,才能出现功能模板。功能模板该模板上的每一个顶层图标都表示一个子模板。可以点击“窗口”—“显示程序框图”打开,也可以在流程图程序窗口的空白处点击鼠标右键以弹出功能模板。

流程图上的每一个对象都带有自己的连线端子,连线将构成对象之间的数据通道。不是几何意义上的连线,因此并非任意两个端子间都可连线,连线类似于普通程序中的赋值。数据单向流动,从源端口向一个或多个目的端口流动。不同 的线型代表不同的数据类型。下面是一些常用数据类型所对应的线型和颜色:

虚拟仪器LABVIEW大作业

LABVIEW回声探测器实验作业 安 徽 工 业 大 学 电气信息学院 自动化093

回声探测器 LabVIEW是由美国国家仪器公司创立的功能强大而又灵活的仪

器和分析软件应用开发工具。它是一种基于图形化的、用图标来代替文本行创建应用程序的计算机语言。在以PC为基础的测量和工控软件中,LabVIEW的市场普及率仅此次于C++/C语言。LabVIEW已经广泛地被工业界、学术界和研究实验室所接受,被公认为是标准的数据采集和仪器控制软件,LabVIEW使用的编程语言是G语言。G语言用图表表示函数,用连线表示数据流向。这次编程所用的是较新版本的LabVIEW 8.5。 一.设计目的:该实验基于labview8.5虚拟平台,使用图形语言编程,由回声发生器子VI产生回声信号,通过回声探测器进行探测分析。本实例利用两个波形图来分别显示回声信号和回声探测信号,并对这两个信号进行比对分析。 本实验设计主要内容包括三个部分:回声产生部分,回声探测部分,和结果显示部分。 回声探测器实例的前面板如图1:

图1 1.程序框图主要功能模块介绍:如图2回声探测器实例的程序框图 主要有四个功能模块组成,分别为回声产生子Vi功能模块,回声探测功能模块,结果显示功能模块,While循环功能模块,下面对每个功能块实现的具体处理功能和任务进行详细介绍。 图2 1>.回声产生子VI功能模块 回声产生子VI功能模块用来产生回声信号,此子VI命名为 回声产生器.vi, 图3给出了回声 产生子VI功能图

回声信号 图3 该子Vi主要用来产生回声信号,可将该模块产生的信号输入相应的波形图和回声探测功能模块中。另外,该子VI可以通过改变输入控件的参数来产生不同的信号。 2>.回声探测功能模块 回声探测功能模块的功能是通过“快速希尔伯特变换”,“实部虚部至极坐标转换”和“自然对数”等一系列函数节点的运算,将回声产生子VI功能模块产生的回声信号信息特征探测出来,“快速希尔伯特变换”函数变换是在FFT函数进行傅立叶变换的基础上执行离散希尔伯特变换的。其调用路径是“函数——信号处理——变换——快速希尔伯特变换”。 “实部虚部至极坐标转换”函数是将一复数坐标的直角坐标形式转换成极坐标形式,本例利用该函数将两个直角坐标系的数组转换为极坐标形式,其调用路径是“函数——编程——数值——复数——实部虚部至极坐标转换”。 “自然对数”函数是计算输入数值的自然对数值,其调用路径是

LabVIEW虚拟仪器实验报告

1.实验目的: 熟悉LabVIEW软件的基本编程环境。 2.实验内容: 创建一个VI程序,并将此程序保存为子VI。此VI要实现的功能是:当输入发动转速时,经过一定运算过程,输出发动机温度和汽车速度值。 3.实验步骤 (1)启动LabVIEW,创建一个VI。 (2)在前面板中放置一个温度计控件,并修改控件标签名为发动机温度和设置最大值为100。该控件从“控件—经典—经典数值”子选项板中获得。 (3)按同样的方法在前面板中放置一个仪表控件,并修改仪表控件的标签名为汽车速度,标尺刻度范围为0~150。 (4)按同样的方法在前面板中放置一个数值输入控件,并修改控件标签名为发动机转速。 (5)从“窗口”下拉菜单中选择“显示程序窗口”切换到程序框图窗口。 (6)在程序窗口中创建乘法函数,该函数中函数选项板中的“函数—编程—数值”子选项板中选择,并和发动机转速输入控件连线,为乘法函数创建一个常量,修改为图中所示值。 (7)按同样的方法创建加法函数、平方根函数和除法函数,并按图中所示修改常量值和连好线。 (8)切换至前面板,在发动机转速控件中输入数值,点击运行按钮,运行VI程序。 (9)修改图标为T/V以表示该子VI输出量为发动机温度和汽车速度,并保存为vi.vi。 前面板: 程序框图:

1.实验目的: 熟悉子VI的调用。 2.实验内容: 创建一个VI程序,并在编写程序过程中调用实验一中创建的子VI。此VI要实现的功能是:通过旋钮控件来控件输入的发动机转速值,中间调用实验一中创建的子VI作为计算过程,从子VI输出的值分别输出至不同的数值显示发动机的温度以及当前汽车速度,同时判断当汽车速度超过100时,系统将产生蜂鸣声,报警提示。 3.实验步骤: (1)启动LabVIEW,创建一个VI。 (2)在前面板中创建一个旋钮控件,修改标签名为发动机转速,设置数值范围为0~5000,从旋钮控件中调出一个数字显示控件来同步显示旋钮控件当前值。 (3)在前面板创建两个数值显示控件,并修改标签名为汽车速度和发动机温度。 (4)切换至程序框图窗口。 (5)在程序框图中创建一个大于或等于函数。 (6)在程序框图中调用实验一的子函数,从函数选板中的“函数—选择VI”选在实验一创建的子vi.vi。 (7)在程序框图中创建一个蜂鸣器函数,并按图示连线情况连线。 (8)切换至前面板,在发动机转速中输入数值,点击运行按钮运行。 前面板: 程序框图:

虚拟仪器技术Labview 课程实验报告

Labview 课程实验报告 学院:电气工程 专业:建筑电气与智能化 姓名:杨震 班级:建电122 学号:1212062056 指导老师:茅靖峰

第一部分基础题 1、用LabVIEW的基本运算函数编写以下算式的程序代码: (前面板) (程序框图) 该程序要求用labview基本运算函数编写算式的程序代码,在前面板上我添加了两个数值显示控件用以显示两个算式的运算结果;在程序框图中运用软件自带的加、减、乘、除运算进行组合从而表示算式,再结果的后面加上一个双精度浮点数函数将程序运算结果强制转换后输入到显示控件中得到结果。

2、利用摄氏温度与华氏温度的关系°C=5(°F-32)/9编写一个程序求华氏度(°F)为32°,64°,4°,6.98°,6°,104°,212°时的摄氏温度。 (前面板) (程序框图) 该程序要求转换华氏度对应的摄氏度,本质上是对数据进行运算。在前面板上创建两个数组一个是数值输入数组用以输入华氏度的值,一个是数值显示数组用以显示对应的摄氏度的值。在程序框图中加入For循环将公式节点放入For循环中在公式节点上添加一个输入和一个输出分别连接两个数值控件,最后在公式节点中编辑二者运算关系完成设计。

3、用数组创建函数创建一个二维数组显示件,成员为: 1 2 3 4 5 6 2 3 4 5 6 1 3 4 5 6 1 2 4 5 6 1 2 3 编程将上述创建的数组转置为: 1 2 3 4 2 3 4 5 3 4 5 6 4 5 6 1 5 6 1 2 6 1 2 3 (前面板) (程序框图) 先在前面板中创建二维数组用以存放生成的数组元素数组为显示型控件,通过观察我们发现题目中的数组第一行为1-6顺序的六个元素从一开始后逐一加一,第二行则是5个数组元素平移,第三行为4个以此类推第四行3个所以我们在程序框图中用For循环和加一来生成第一行数组For循环的循环次数为六次,第二行数组则在第一行数组的基础上运用一维数组平移函数平移5位的到,以此类推生成四行数组,再使用数组生成函数生成二维数组输出到显示数组中显示出来,至于数组的转置直接运用数组转置函数得到,在该函数的输出端口右键创建显示控件。在前面板中调整创建的显示控件以确保显示所有转置的数组,实验完成。

虚拟仪器labview介绍.doc

虚拟仪器工程平台LabVIEW介绍 文章发表于:2008-05-19 21:48 虚拟仪器是一种全新的仪器概念,在自动化检测领域的应用正方兴未艾,而NI(National Instruments)公司的实验室虚拟仪器工程工作平台LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是科学家和工程师们进行虚拟仪器应用开发的首选工作平台。为了介绍虚拟仪器和LabVIEW的一些相关背景知识,本文将自己本科毕业设计论文中的一部分作了少许改动呈现于此(呵呵,其实是偷懒),希望能给未接触过虚拟仪器和LabVIEW的人一些感性认识。 一、虚拟仪器 1、传统电子仪器的弱点 传统电子仪器主要由三大模块组成:即对被测信号的采集与控制、分析与处理、测量结果的表达与存储。传统电子仪器的这些功能块都是以硬件或者固化的软件的形式存在的,因此具有以下弱点:(1)灵活性和可扩展性差:传统电子仪器是一套自封闭系统,具有固定的用户界面、组成模块和数据处理功能。例如仪器面板由固定的输入、输出信号接插件、旋钮、按钮、显示仪表、显示面板等组成,仪器内部由传感器、信号处理器、A/D和D/A转换器、微处理器、存储器和内部总线等专门化的电路组成。然而,用户有时只需要用到仪器中的一小部分功能,或者作其他功能使用时却达不到所需指标,而用户无法改动厂家固定好的仪器模块,灵活性和可扩展性差。 (2)成本高,技术更新慢:传统电子仪器价格昂贵,动辄几十万上百万人民币。开发周期长,技术更新慢,而且存在元器件老化等问题,维护费用高,使用寿命短。 (3)数据显示、分析和存储功能不够强大:传统电子仪器的图形显示界面比较小,依靠人工读取数据,从中获得的信息量小。由于硬件设备的限制,往往无法实现更灵活、更特殊的数据分析功能,更难以进行数据编辑、存储、打印等功能。 2、虚拟仪器的概念 如上所述,传统电子仪器存在的诸多弱点使传统仪器已渐渐不能满足工业自动化和测量领域的需要。随着计算机技术日新月异的飞速发展,计算机强大的数据处理能力使得它的应用范围越来越广。1986年,美国NI公司(National Instruments)提出虚拟仪器的概念,以“软件即仪器”为口号,彻底打破了传统电子仪器只能由生产厂家定义,用户无法改变的局面,从而引起仪器和自动化工业的一场革命。 简单地说,虚拟仪器技术就是利用计算机技术实现的对测控系统的抽象。平常使用的示波器、数字万用表、信号发生器、数据记录仪,以及传感器等传统仪器,都可使用通用计算机和专用的控制器和显示器来模拟,实现向虚拟仪器的转变。例如图1就是一个虚拟仪器正在运行时的截图,从外观看与实际仪器无二:

Labview实验

Labview虚拟仪器实验指 导书 宋爱娟 2009.2

目录 实验一 Labview的认识性实验(2学时) (3) 实验二 Labview的基本操作(2学时) (4) 实验三数据操作实验(2学时) (6) 实验四 labview结构在编程中的应用(4学时) (10) 实验五 labview中字符串、数组、簇的实验(2学时) (16) 实验六图表和图形实验(4学时) (23) 实验七专业测试系统的搭建实验(2学时) (28) 实验八创建子VI(2学时) (32) 实验九人机界面交互设计实验(2学时) (35) 实验十波形编辑及频谱分析实验(3学时) (39) 实验十一救援用LED灯实验(4学时选作) (41)

实验一Labview的认识性实验 一、目的 1、熟悉Labview的基本组件 2、熟悉Labview的前面板、程序框图、快捷和下拉菜单 3、掌握Labview的选项板及在线帮助 二、环境 1、WINDOWS2000环境(将显示属性中的分辨率设置为1024*768) 2、Labview8.6软件 三、内容与步骤: [练习1] 启动Labview,查找Labview示例 步骤: 1.打开文件VibrationAnalysis.vi(c:/ProgramFiles/National Instruments/LabVIEW 8.6/examples/apps/demos.llb) 2.单击按钮Run运行该程序 3.改变采样速率 4.改变采样速度,验证希望速度与实际速度是否一致 [练习2] 熟悉前面板与程序框图的切换及观察程序流的执行过程 1.在练习1的基础上,利用快捷方式将前面板切换到程序框图。 2.单击高亮度显示按钮观察代码的数据流向。 [练习3] 熟练打开运行一个VI 1.练习查找所定VI,另用帮助查找含有FILTER的示例,找到其中的Express Filter.VI程序双击打开 2.运行该程序 3.改变仿真频率、仿真幅度和仿真噪声幅度观察指示器的值与图中值是否一致。 4.观察数据流执行过程 [练习4]练习查找运行 1.将上面程序在框图窗口双击程序框图中的Simulate Signal,将正弦信号改为其他信号之后运行程序。 2.熟练查找其他程序并运行 [练习5] 1.在Labview启动界面中选择新建选项 2.打开空VI或VI模板 3.任意打开VI模板并运行。

虚拟仪器——LABVIEW课程设计报告

) 课程设计任务书 课程名称:虚拟仪器 ? 题目:基于声卡的音频采集分析仪与信号发生器设计 学院:环化学院系:化工系 专业:测控技术与仪器 班级: 学号: 学生姓名: } 起讫日期: 17 ~ 18 周 指导教师:职称:中级 系分管主任:刘雷

审核日期: 一、课程设计的要求和内容(包括原始数据、技术要求、工作要求) * 虚拟仪器技术是测试技术和计算机技术相结合的产物,它融合了测试理论、仪器原理和技术、计算机接口技术、高速总线技术以及图形化软件编程技术于一身,实现了测量仪器的集成化、智能化、多样化及可编程化,本课程设计的任务是帮助学生学习和了解虚拟仪器的原理及开发技术,掌握虚拟仪器软件平台LabVIEW的基本的编程方法及调试技术,并结合计算机声卡来完成一个信号发生器与时频分析仪的设计。 具体要求与内容: 1. 具备数字存储示波器、信号发生器和信号分析仪三个主要功能模块; | 2. 可以通过前面板交互界面实现示波器与信号发生器功能切换; 3. 采集数据可以在单次和连续两种方式进行切换,采集的数据可以进行存储,类型可以在WAV、BIN和TXT三种类型进行切换,数据存储要求用子VI实现; 4. 对于信号发生器,要求可以叠加各种噪声,要求可以改变信号相关参数,同时能够实现两个以上信号叠加为一个复合信号; … 5. 时频分析仪应该能够完成大部分时域和频域分析,可实现信号分析前的加窗或滤波器操作,可以对原始数据和结果数据进行保存,示波器的各个参数灵活可调并且可以将已存数据重新载入进行分析观察。对于音频信号可以选择性的进行播放。

` 基于声卡的音频采集分析仪与信号发生器设计: 摘要:要在LABVIEW环境中进行对声卡采集编程,就是运用常用周期信号及测试领域特殊信号的双通道模拟输出。由于专用数据采集卡成本比较昂贵、而且和计算机兼容性比较差等缺点,这个论文就是应用性能良好、价格低廉的计算机声卡设计一套基于 LabVIEW 的信号采集分析系统。该系统具有双通道、高保真、22K 甚至 44KHz 的采样率,实现了音频信号的实时采集、实时存储、回放、信号分析(时域分析和频域分析)等多种功能。实验结果表明:该设计方案具有设计简便、成本低、通用性高、扩展性好、界面大方简洁等优点,可广泛应用于工程测量和科学实验室等环境。 》 关键词:声卡;数据采集;虚拟仪器;LabVIEW ; 引言:数据采集是信号分析与处理的一个重要环节,在许多工业控制与生产状态监控中,都需要对各种物理量进行数据采集与分析。但是,专用数据采集卡的价格一般比较昂贵,而我们PC机的声卡就是一个很好的双通道数据采集卡。实际测量中,在满足测量要求的前提下,可以充分利用计算机自身资源,完成数据采集任务,从而节省成本。 虚拟仪器是基于计算机的软硬件测试平台。虚拟仪器技术的优势在于可由用户定义自己的专用仪器系统,且功能灵活,很容易构建,所以应用面极为广泛。目前应用最广、发展最快、功能最强的图形化软件集成开发环境是美国国家仪器公司的创新软件产品[1]。它是将仪器装入计算机中, 以通用的计算机

虚拟仪器实验报告

实验一: 1.实验目的: 熟悉LabVIEW软件的基本编程环境。 2.实验内容: 创建一个VI程序,并将此程序保存为子VI。此VI要实现的功能是:当输入发动转速时,经过一定运算过程,输出发动机温度和汽车速度值。 3.实验步骤 (1)启动LabVIEW,创建一个VI。 (2)在前面板中放置一个温度计控件,并修改控件标签名为发动机温度和设置最大值为100。该控件从“控件—经典—经典数值”子选项板中获得。 (3)按同样的方法在前面板中放置一个仪表控件,并修改仪表控件的标签名为汽车速度,标尺刻度范围为0~150。 (4)按同样的方法在前面板中放置一个数值输入控件,并修改控件标签名为发动机转速。 (5)从“窗口”下拉菜单中选择“显示程序窗口”切换到程序框图窗口。 (6)在程序窗口中创建乘法函数,该函数中函数选项板中的“函数—编程—数值”子选项板中选择,并和发动机转速输入控件连线,为乘法函数创建一个常量,修改为图中所示值。 (7)按同样的方法创建加法函数、平方根函数和除法函数,并按图中所示修改常量值和连好线。 (8)切换至前面板,在发动机转速控件中输入数值,点击运行按钮,运行VI程序。(9)修改图标为T/V以表示该子VI输出量为发动机温度和汽车速度,并保存为vi.vi。 前面板: 程序框图:

实验二: 1.实验目的: 熟悉子VI的调用。 2.实验内容: 创建一个VI程序,并在编写程序过程中调用实验一中创建的子VI。此VI要实现的功能是:通过旋钮控件来控件输入的发动机转速值,中间调用实验一中创建的子VI作为计算过程,从子VI输出的值分别输出至不同的数值显示发动机的温度以及当前汽车速度,同时判断当汽车速度超过100时,系统将产生蜂鸣声,报警提示。 3.实验步骤: (1)启动LabVIEW,创建一个VI。 (2)在前面板中创建一个旋钮控件,修改标签名为发动机转速,设置数值范围为0~5000,从旋钮控件中调出一个数字显示控件来同步显示旋钮控件当前值。 (3)在前面板创建两个数值显示控件,并修改标签名为汽车速度和发动机温度。(4)切换至程序框图窗口。 (5)在程序框图中创建一个大于或等于函数。 (6)在程序框图中调用实验一的子函数,从函数选板中的“函数—选择VI”选在实验一创建的子vi.vi。 (7)在程序框图中创建一个蜂鸣器函数,并按图示连线情况连线。 (8)切换至前面板,在发动机转速中输入数值,点击运行按钮运行。 前面板:

虚拟仪器_LABVIEW课程设计报告

课程设计任务书 课程名称:虚拟仪器 题目:基于声卡的音频采集分析仪与信号发生器设计 学院:环化学院系:化工系 专业:测控技术与仪器 班级: 学号: 学生: 起讫日期: 17 ~ 18 周 指导教师:职称:中级 系分管主任:雷 审核日期:

一、课程设计的要求和容(包括原始数据、技术要求、工作要求) 虚拟仪器技术是测试技术和计算机技术相结合的产物,它融合了测试理论、仪器原理和技术、计算机接口技术、高速总线技术以及图形化软件编程技术于一身,实现了测量仪器的集成化、智能化、多样化及可编程化,本课程设计的任务是帮助学生学习和了解虚拟仪器的原理及开发技术,掌握虚拟仪器软件平台LabVIEW的基本的编程方法及调试技术,并结合计算机声卡来完成一个信号发生器与时频分析仪的设计。 具体要求与容: 1. 具备数字存储示波器、信号发生器和信号分析仪三个主要功能模块; 2. 可以通过前面板交互界面实现示波器与信号发生器功能切换; 3. 采集数据可以在单次和连续两种方式进行切换,采集的数据可以进行存储,类型可以在WAV、BIN和TXT三种类型进行切换,数据存储要求用子VI实现; 4. 对于信号发生器,要求可以叠加各种噪声,要求可以改变信号相关参数,同时能够实现两个以上信号叠加为一个复合信号; 5. 时频分析仪应该能够完成大部分时域和频域分析,可实现信号分析前的加窗或滤波器操作,可以对原始数据和结果数据进行保存,示波器的各个参数灵活可调并且可以将已存数据重新载入进行分析观察。对于音频信号可以选择性的进行播放。

基于声卡的音频采集分析仪与信号发生器设计: 摘要:要在LABVIEW环境中进行对声卡采集编程,就是运用常用周期信号及测试领域特殊信号的双通道模拟输出。由于专用数据采集卡成本比较昂贵、而且和计算机兼容性比较差等缺点,这个论文就是应用性能良好、价格低廉的计算机声卡设计一套基于 LabVIEW 的信号采集分析系统。该系统具有双通道、高保真、22K 甚至 44KHz 的采样率,实现了音频信号的实时采集、实时存储、回放、信号分析(时域分析和频域分析)等多种功能。实验结果表明:该设计方案具有设计简便、成本低、通用性高、扩展性好、界面大方简洁等优点,可广泛应用于工程测量和科学实验室等环境。 关键词:声卡;数据采集;虚拟仪器;LabVIEW ; 引言:数据采集是信号分析与处理的一个重要环节,在许多工业控制与生产状态监控中,都需要对各种物理量进行数据采集与分析。但是,专用数据采集卡的价格一般比较昂贵,而我们PC机的声卡就是一个很好的双通道数据采集卡。实际测量中,在满足测量要求的前提下,可以充分利用计算机自身资源,完成数据采集任务,从而节省成本。 虚拟仪器是基于计算机的软硬件测试平台。虚拟仪器技术的优势在于可由用户定义自己的专用仪器系统,且功能灵活,很容易构建,所以应用面极为广泛。目前应用最广、发展最快、功能最强的图形化软件集成开发环境是美国国家仪器公司的创新软件产品[1]。它是将仪器装入计算机中, 以通用的计算机硬件及操作系统为依托, 可以实现各种仪器的功能。 LabVIEW是一种图形化编程语言,广泛应用于工业界、学术界和研究实验室,主要应用于仪器控制、数据采集、数据分析、数据显示等领域,适用于多种不同的操作系统平台。与传统C、C++等编程语言不同,LabView采用强大的图形化语言编程,面向测试工程师而非专业程序员,编程方便,人机交互界面直观友好,具有强大的数据可视化分析和仪器控制能力等特点[2]。

LabVIEW虚拟仪器程序设计从入门到精通

人民邮电出版社 1局部变量:1.层叠式顺序结构中,对于不同帧之间传递数据利用数据局部变量;2当一个控件既作为输入控件,又作为输出控件的时候利用局部变量;3在不同循环体之间的数据传递。 2全局变量:在不同的VI之间传递数据,但是对于内存资源的占用很大; 3共享变量:在不同的计算机或者网络之间共享。 4顺序结构强制破坏了LabView从左到右的数据流编程习惯,在平铺式结构中可以做到从右到左。顺序结构破坏了LabView的优点之一:并行运行机制,因此一般不太提倡。 5那么程序中需要利用顺序执行程序的时候我们一般认为控制数据依存关系,此时,是通过数据的到达而不是数据的值来触发新结构对象的执行,数据的接收对象不一定需要该数据的值。 事件结构 事件结构是一个非常强大的功能,为事件驱动,可用于编写等待事件发生的高效代码,代替循环检测事件是否发生的低效代码。对比条件结构和事件结构,在条件结构中,系统采用轮询的方式来检测“单击”按钮是否发生,但是在事件结构的技术过程中,只有单击按钮被按下以后触发,才执行一次循环。 因此,事件结构在执行前面板UI接口事件具有很强大的优越性。 事件结构的建议: ●避免在循环外使用事件结构; ●在“值”改变事件分支中读取触发布尔控件的接线端; ●条件结构用于处理触发布尔操作的撤销操作; ●不要使用不同的事件数据将一个分支配置为处理多个过滤事件; ●避免一个事件分支中同时使用对话框和“鼠标按下?”过滤事件; ●避免在一个循环中放置两个事件结构。 利用公式节点可以有效简化数值中的公式的繁琐结构。 禁用结构一般用于系统调试,避免程序在编辑中不停的删除、复制和修改中产生不必要的错误。

Labview虚拟仪器课程设计实验报告

课 程 设 计 L a b v i e w 虚拟仪器课程设计 2013 年 7 月 13 日 设计题目 Labview 虚拟仪器课程设计 成绩 设计题目 学 号 专业班级 生物医学工程10-1班 学生姓名 指导教师 付静

合肥工业大学课程设计任务书 虚拟心电图仪的设计 课 程 设 计 主 要 内 容 了解虚拟仪器的概念,并通过基本习题掌握Labview 软件的使 用方法及虚拟仪器的设计流程, 在此基础上完成虚拟心电图仪的设计,实现心电信号的显示、保存、R-R 间期及心率等参数的计算。 指 导 教 师 评 语 建议:从学生的工作态度、工作量、设计(论文)的创造性、学术性、实用性及书面表达能力等方面给出评价。 签名: 20 年 月 日

一、虚拟心电图仪设计主要内容 心电图仪的前面板及框图程序的设计,要求实现心电信号的回放显示、保存、R-R间期及心率等参数的计算。 二、实验设备 装有Labview的PC一台 三、设计思路 1、心电图仪前面板的设计 (1) 考虑到设计的心电图仪能够实现对心电信号波形显示,以及回放显示功能,所以设置了两个Wave Graph 面板,一个用于实时显示,一个用于回放显示,如下图示: 实时显示面板: 回放显示面板: 注释:在设计的过程中考虑过将实时显示和回放显示放在一个Wave Graph 中,但是由于这种分开设计的方法更加简单明了,所以最终选择了这种设计. (2) 考虑到设计有要求能够显示R-R间期及心率等参数,还要有保存功能键,再结合实际需要,所以,最后的完整面板如下图示: (因为图太大,所以把整张图截成了两部分)

labview虚拟仪器课程设计

虚拟仪器 ----基于labview的简单设计专业:测控技术与仪器 2010年 6 月 引言

LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发的,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产生代码,而LabVIEW使用的是图形化编辑语言G编写程序,产生的程序是框图的形式。由于学习时间尚短,自身能力有限,还未充分掌握虚拟仪器的设计方法,故借鉴于已成设计,仔细研习的同时,进一步熟悉labview的编程技巧。 一、硬件部分设计 本文中所用到的MSP-060101是一款16bit、500ksps的单通道USB数据采集卡。它具有接口简单、量程可选(±1V与±10V)、速度快、精度高、驱动函数接口简单等优点,非常适合用来快速实现虚拟示波器和频谱分析功能。 MSP-060101硬件连接非常简单,将采集卡插入PC的USB接口,按说明安装好驱动程序,就可以进行数据采集了,不需要外接电源和其他繁琐的设备。MSP-060101前端接信号的端口只有两个,分别接到差分输入信号的正端和负端即可,简单明了,一目了然。 二、底层函数 连接好硬件,接下来了解该卡驱动函数的使用。该卡驱动函数只有两个,封装于M SP-16bitDAQCard.dll中,用户可通过调用DLL的方式来执行函数。函数定义如下:int SetSampleRate (int SampleRate, int DeviceNumber) int GetVoltage (float *DataArray, int ArraySize, float mult, float Offset, int DeviceNumber) SetSampleRate 函数用来设置采集卡的采样率。其参数为SampleRate(采样率,1K-500K范围内任意设置)和DeviceNumber(设备序号,同时支持10块采集卡)。 GetVoltage 函数用来采集电压数据。其参数为DataArray(缓存数组)、ArraySi ze(缓存长度)、mult(增益系数)、Offset(偏移量)和DeviceNumber(设备序号)。 这两个函数都有返回值,如果函数执行成功,则返回1,否则返回0。 在LabVIEW中,是通过Call Library Function Node来调用DLL函数的。为了便于使用,我们将调用DLL的代码做成子VI函数,子VI主要有两个,即采集数据.VI 和频率设置.VI。其内部程序框图如下:

虚拟仪器实验作业

石家庄铁道大学实验报告课程名称虚拟仪器技术分院试1304 班桌号 实验者姓名钱玉喜实验日期2016 年月日 评分教师签名 实验项目名称实验一 练习1:分别利用for和while循环的移位寄存功能,用两种方法求0+5+10+15…+45+50的值(等差数列的和)。

练习2:设计一评分程序,输入不同的分数会得到不同的评论,分数小于60,“不及格”指示灯会亮起来,同时显示字符串“你没有通过考试”;分数在60~69之间,“及格”指示灯会亮起来,同时显示字符串“及格”;分数在70~79之间,“中等”指示灯会亮起来,同时显示字符串“你考试通过了”;分数在80~89之间,“良好”指示灯会亮起来,同时显示字符串“成绩良好”;分数在90~99之间,“优秀”指示灯会亮起来,同时显示字符串“恭喜”;分数为100,“第一名”指示灯会亮起来,同时显示字符串“第一名”;如果输入为0~100以外的数字,会有错误提示,同时显示字符串“错误”。

石家庄铁道大学实验报告课程名称虚拟仪器技术分院试1304 班桌号 实验者姓名钱玉喜实验日期2016 年月日 评分教师签名 实验项目名称实验二 练习3:用顺序结构实现数值匹配:输入1~100之间的任意1个整数,然后系统随机产生1~100之间的整数,直到和预先输入的整数一样,然后输出匹配的次数和匹配的时间。

练习4:设计一个VI,用移位寄存器对连续产生的随机数进行100次累加,用累加值除以循环次数100,求这些随机数的平均数。再用判断平均数是否在0.45~0.55范围内,如果在此范围内则点亮指示灯,并计算程序运行所耗的时间。提示:可以用‘比较’子模板中的‘判定范围并强制转换’函数判断数的范围。

LabView考试试题

一、填空 1. VI虚拟仪器的三个主要组成部分是_前面板_、_程序框图_和_图标/连接器_。 2. LabView有三种操作模板,分别是_控件模板_、_函数模板_和_工具模板_。 3. CIN节点需要调用__*.lsb__格式文件,这种文件可以通过__Visual C++__来生成。 4. 虚拟仪器设计中连线为虚线时表示___数据类型不匹配出错_,当RUN按钮显示为折断的箭头时,表示程序___有错误发生__。 5. 在LabView中_局部变量_主要用于程序内部传递数据,_全局变量_主要用于程序之间传递数据。 6. 程序框图由_端口_、_节点_和_连线_组成的可执行代码。 二、选择 1. 当一个函数的error in带有错误信息时,下列哪种说法是正确的( D ) A该函数会对错误信息进行处理。 B 该函数不会作任何操作,而是直接将错误信息传递给error out,且不会将自身函数发生的错误添加进去。 C 该函数会发出错误警告,且使程序终止运行。 D 该函数直接将错就错传递给error out,且会将自身函数发生的错误加进去。 2. 下列哪种说法是错误的(B)

A虚拟仪器采用的是面向对象和可视化编程技术。 B 在程序运行的过程中波形的可变性是不可改变的。 C 在LabView中,VI程序的运行时数据是流动的。 D 在创建子程序时,可以使用连线工具给前面板的控制器和指示器分配端口。 3. 下列哪种说法是对的( C ) A While循环只有条件端口接收到的值为True时才停止循环。 B While循环不满足条件时,一次也不执行循环。 C For循环当N<1时,一次也不循环。 D For循环可以嵌套,While循环不可以嵌套。 4. 当数据采集卡组态成DIFF模式时,将使用差分连接方式,使用这种连接方式下列说法错误的是( C ) A可以减少尖峰噪声 B 增加噪声抑制 C 增大尖峰噪声 D 增加共模信号抑制 5. 下列哪种总线产品对PCI总线完全兼容。(A ) A PXI总线 B GPIB总线 C VXI总线 D RS232串口 三、简答 波形图和波形图表有什么区别? 波形图是显示一组或多组数据的显示器,即用于显示测量值为均匀采集的一条或多条曲线;波形图连接的往往是数组控件。 波形图表是显示一个或多个数据轨迹的显示器,即显示一条或多条曲线的特殊数值显示控件,一般用于显示以恒定速率采集到的数据;波形图表连接的是数值控件。 XY坐标图用来绘制多变量函数曲线,可显示任何均匀采样和非均匀采样的点的集合

LabVIEW虚拟仪器程序设计及应用

《LabVIEW虚拟仪器程序设计及应用》learning with labview 8.5 吴成东人民邮电 16k 第1章 LabVIEW概述 1.1 LabVIEW的起源与发展 LabVIEW的全称为Laboratory Virtual Instrument Engineering Workbench(实验室虚拟仪器集成环境),是由美国国家仪器公司(National Instruments,NI)创立的一种功能强大而又灵活的仪器和分析软件应用开发工具。它是一种基于图形化的、用图标来代替文本行创建应用程序的计算机编程语言。在以PC为基础的测量和工控软件中,LabVIEW的市场普及率仅次于 C++/C语言。LabVIEW已经广泛地被工业界、学术界和研究实验室所接受,被公认为是标准的数据采集和仪器控制软件。 LabVIEW使用的编程语言通常称为G语言。G语言与传统文本编程语言的主要区别在于:传统文本编程语言是根据语句和指令的先后顺序执行,而LabVIEW则采用数据流编程方式,程序框图中节点之间的数据流向决定了程序的执行顺序。G语言用图标表示函数,用连线表示数据流向。 1.2.1 LabVIEW的优势选择LabVIEW进行开发测试和测量应用程序的一个决定性因素是它的开发速度。LabVIEW的优势主要体现在以下几个方面:(1)提供了丰富的图形控件,采用了图形化的编程方法,把工程师从复杂枯涩的文件编程工作中解放出来;(2)采用数据流模型,实现了自动的多线程,从而能充分利用处理器(尤其是多处理器)的处理能力;(3)内建有编译器,能在用户编写程序的同时自动完成编译,因此如果用户在编写程序的过程中有语法错误,就能立即在显示器上显示出来;(4)通过DLL、CIN节点、ActiveX、.NET或MATLAB脚本节点等技术,能够轻松实现LabVIEW与其他编程语言的混合编程;(5)内建了600多个分析函数用于数据分析和信号处理;(6)通过应用程序生成器可以轻松地发布可执行程序、动态链接库或安装包;(7)提供了大量的驱动和专用工具,几乎能够与任何接口的硬件轻松连接;(8)NI同时提供了丰富的附加模块,用于扩展LabVIEW在不同领域的应用,如实时模块、PDA模块、数据记录与监控(DSC)模块、机器视觉模块与触摸屏模块。 第2章 LabVIEW程序对象的基本操作 第3章 LabVIEW的数据类型LabVIEW作为一种通用的编程语言,与其他文本编程语言一样,它的数据操作是最基本的操作。LabVIEW是用“数据流”的运行方式来控制VI程序。 数据流是LabVIEW的生命,运行程序就是将所有输入端口上的数据通过一系列节点送到目的端口。LabVIEW主要的数据类型包括标量类型(单元素),如数值型、字符型和布尔型;还包括了结构类型(包括一个以上的元素),如数组和群集。LabVIEW数据控件模板将各种类似的数据类型集中在一个子模板上以便于使用。 数据类型主要有数值量、逻辑量、字符串、文件路径等几类。相同的数据类型可能有不同的表现形式,所以一个数据类型子模板有相当多的项目,如一个数值类型可以显示为一个简单的数字、一个条图、一个滑块、一个模拟计量器或者显示在一个图表中。LabVIEW作为一个完整的编程语言,基本可以支持所有的数据类型。还拥有特殊的一些数据类型。 数值型数值型是LabVIEW的一种基本的数据类型,可以分为浮点型、整型数和复数型3种基本形式 布尔型的值为1或者0,即真(True)或者假(False),通常情况下布尔型即为逻辑型。 LabVIEW提供了功能丰富的数组函数供用户在编程时调用。LabVIEW中的数组是数值型、布尔型、字符串型等多种数据类型中的同类数据集合。 3.3 数组型数据 LabVIEW提供了功能丰富的数组函数供用户在编程时调用。LabVIEW中的数组是数值型、布尔型、字符串型等多种数据类型中的同类数据集合。 数组由元素和维度组成。数组中的每一个元素都有其唯一的索引数值,对每个数组成员的访问都是通过索引数值来进行的。索引值从0开始,一直到n?1。n是数组成员的个数。 3.4 簇型数据 与数组类似,簇也是LabVIEW中一种集合型的数据结构,它对应于C语言等文本编程语言中的结构体变量。 3.5 字符串型数据字符串与路径字符串是LabVIEW中一种基本的数据类型。路径也是一种特殊的字符串,专门用于对文件路径的处理。字符串型与路径子选板中共有三种对象供用户选择:字符串输入/显示、组合框和文件路径输入/显示。 第4章 LabVIEW的循环与结构 本章主要介绍了LabVIEW的2循环(For循环、While循环)和3结构(条件结构、顺序结构、事件结构)。For循环和While循环主要用于重复执行位于循环内部的程序。条件结构和顺序结构主要用于控件数据流。事件结构主要用于对来自于用户界面、外部I/O或其他方式事件的异步通知。 本章还介绍了在程序框图中如何设置局部变量和全局变量、属性节点,如何直接使用公式节点、MathScript节点、MATLAB节点。通过这些循环与结构、节点的使用,在很多情况下可以大大简化程序框图。

相关主题
文本预览
相关文档 最新文档