LabVIEW与虚拟仪器设计王泽保巴林凤杨品本文作者王泽保先生清华大学计算机系高级工程师巴林凤先生杨品先生教授虚拟仪器是虚拟现实技术在仪器业中的一种应用是一种比较新的技术具有传统仪器所无法实现的许多功能LabVIEW是美国NI公司所推出的一种虚拟仪器开发平台它的出现给虚拟仪器的设计和开发带来了很大的便利一什么是虚拟仪器虚拟仪器(VirtualInstrument,VI)的概念是由美国NI公司提出来的它在计算机上加入一组特定的软件并配置一些硬件使计算机能完成许多仪器的功能从而变成一种综合了许多仪器的装置使用者在操作这台计算机时就像在操作一台专门为他设计的传统电子仪器VI是测控技术和计算机技术相结合的产物VI系统中软件是关键其功能可以由用户自己设计自己定义以满足特殊要求不仅如此VI在与网络外设等其他应用的连接方面在仪器更新方面都具有传统仪器无法比拟的优势VI系统的构成可以由图1来说明从图1中可以看出需要一些特定的接口硬件来与被测的对象进行数据通信这些接口硬件中有一些已经形成了国际标准比如通用接口总线(GeneralPurposeInterfaceBus,GPIB)接口是基于ANSI/IEEE488-2-1987标准的一种被广泛采用的接口而串行口则已经是计算机的通用接口之一另外的一些接口就需要特殊的规范与专用的硬件每一种VI的开发平台几乎都在支持标准接口的同时又支持一些特殊而专用的接口规范NI公司在提出VI概念时也提出了其软件开发平台即LabVIEW正如前面所介绍的这个平台有着极强的硬件访问能力以及高度集成的且简易的编程开发界面尤其在测量仪器的虚拟实现方面有强大优势二什么是LabVIEWLabVIEW和我们所熟知的C语言编译器PASCAL编译器一样也是一个程序开发平台它的一个显著的与一般编译器不同的特点在于它是由一种基于图形的程序设计语言G语言构成的G语言的每一条语句都是由图形来表示的这种图形化的程序设计方法在众多文本式程序语言的计算机语言家庭中是别出心裁的因而在表现形式上它与那些基于文本的诸如BASICCPASCAL语言有很大区别然而在本质上G语言和那些文本语言一样也是一种通用语言只不过它带有自已的函数库和过程库在这个意义上G语言可以设计一般的普通程序另外LabVIEW中G语言所带的库中加强了对数据获取分析表示以及数据存储等方面的功能尤其在GPIB和串行仪器控制方面有很大的优势所以LabVIEW在VI设计和VI控制领域比较流行被称为工程师语言LabVIEW是一种结构化解释型开发平台结构化是指LabVIEW的程序完全支持顺序结构循环结构和条件结构3种标准结构同时又是由模块化的形式组成的它的每一个子程序都称为一个VI子程序间可以互相调用所谓解释型是指用LabVIEW开发的软件无法在Windows操作系统下直接运行而且目前LabVIEW还不支持P-Code代码所以软件必须在LabVIEW的平台支持下运行也就是说LabVIEW不能生成真正的可执行(EXE)文件比如要用LabVIEW来实现一个波形发生器的仪器可以按照以下几步完成首先确定产生波形的函数比如要生成三角波那么用下面这个函数即可其中Y表示波形的振幅d表示波形的周期这样通过调节Y和d就可以得到不同形状的三角波了−−≤≥−=ddxYYdxxYdYxxf)2(420,4)(且接下来要用LabVIEW解释这个公式可以使用LabVIEW的公式节点(FormulaNode)实现然后将这个子VI应用到整个三角波发生器中这个程序中同时还实现了梯形波(将三角波取一个阈值)图2显示了波形发生器的前面板的布局可以看到用LabVIEW设计的VI的界面是很漂亮的三LabVIEW在实现虚拟软磁盘控制器中的应用从上面看出LabVIEW在测量仪器的虚拟实现上有很明显的优势不仅如此它在其他仪器设备的虚拟实现上也能发挥很大的作用比如在软磁盘控制器的虚拟实现上我们利用LabVIEW虚拟实现了其中的几个关键部件软磁盘接口控制器在微型计算机中是连接CPU和软磁盘驱动器的接口它的功能是将CPU的并行数据流变成串行数据流写入软磁盘中或者相反在这两个过程中实行对各种参数的控制并在传输中对可能出现的各种情况进行检索和处理接口控制器大体可分为5大部分即FDC主控器时钟定时电路接口及译码电路写预补偿电路和和读出锁相电路由于篇幅所限下面只着重分析一下读出锁相电路的虚拟实现读出锁相电路的作用是用锁相环(Phase-LockedLoop,PLL)电路来对从软磁盘驱动器读出的数据进行跟踪和调制从而消除因软磁盘驱动器的转速不均等机械误差导致的数据频率缓慢变化而带来的误差影响对于1.44MB软盘驱动器控制电路采用如图3所示的电路来实现读出锁相功能这个电路的输入数据是来自磁盘驱动器的读出数据其输出来自读数窗口该窗口的频率跟随读出数据的频率而变化根据这个逻辑图我们设计了一个适合用LabVIEW来实现的结构图(见图4)这个图的每一部分都将是一个LabVIEW的子VI首先分别实现这些子VI然后连接起来最终形成整个锁相电路这里以移位寄存模块和时钟鉴相模块为例分析一下虚拟实现带有反馈结构的复杂电路时常见问题的解决方法移位寄存器(74LS164)的作用是实现鉴相比较波形用以进行对读出数据频率变化的分析它的主要特点是采用反馈结构来生成特定波形在硬件中将输出引脚连接到输入引脚即可但在LabVIEW的虚拟实现过程中这样的做法是非法的因为它将导致子VI的递归调用而递归调用在目前版本的LabVIEW中是不支持的那么要在LabVIEW程序中实现反馈就得利用循环结构体的移位寄存器(Shifter)它是循环结构体提供的一种功能用以将本次循环的结果送到下一次循环整个读出锁相电路的LabVIEW程序放置在一个循环结构体中用循环的次数来表示数字化的时间那么每一个反馈都可利用这个大循环结构的移位寄存器来实现时钟鉴相电路(MC4044)的作用是判断两个输入波形的相位差波形如图5所示其实现原理为以R和V为输入U1和D1为输出U1表示R领先于V的相位差D1表示V领先于R的相位差R和V的输入波形是假想的可以看出MC4044的鉴相器以负边沿来确定输入信号的相应当R领先于V则置U1为低电平直到V的负边沿到来对V领先于R来说情形与上类似它是一个模拟电路直接按照电路来实现是不可能的对于这种电路应采用功能模拟的办法从对其输入与输出关系的分析上入手来解决对于图5中描述的波形再说明如下(1)通常情况下保持输出U1和D1的高电平状态(2)R的下降沿到来时如果D1为高电平则设置U1为低电平如果D1为低电平则设置U1为高电平(3)V的下降沿到来时如果U1为高电平则设置D1为低电平如果U1为低电平则设置D1为高电平基于以上的解释根据这样的子VI我们得到了一个可以判断两个波形相位差的VI它的输出结果将作为读出锁相电路提供时钟同步的判断标准四结束语在用LabVIEW进行复杂电路的虚拟实现时要把握几个原则一是要灵活多变对不同的结构或部件采用不同的处理方法二是要理解虚拟实现时的时间概念在逻辑电路中时间是一个重要的概念相位频率等重要性质都基于时间来定义的而虚拟实现中的时间与真实器件的时间是不一样的它需要一个离散的数字化的时间在这里我们采用循环的循环次数表示时间的一个嘀嗒(Tick)三是对于LabVIEW本身的许多对程序设计的要求要仔细理解以避免因程序设计的缺陷而产生的错误综上所述NI公司的LabVIEW是一个很好的VI开发平台其应用范围不仅仅在测控仪器方面在许多其他方面也可展开应用但目前版本的LabVIEW还多少存在一些局限我们期待它的完善也希望我国的VI有更大的发展全文完