基于LabVIEW虚拟示波器设计

news2024/11/16 3:44:36

随着计算机技术的发展,传统仪器开始向计算机化的方向发展。虚拟仪器是90年代提出的新概念。虚拟仪器技术的提出与发展,标志着二十一世纪自动测试与电子测量仪器领域技术发展的一个重要方向。所谓虚拟仪器,就是在通用的计算机平台上定义和设计仪器的测试功能,使用者操作这台计算机,就像是在使用一台专门设计的电子仪器。

   传统台式仪器是由仪器厂家设计并定义好功能的一个封闭结构,它有固定的输入/输出接口和仪器操作面板,每种仪器实现一类特定的测量功能,并以确定的方式提供给用户。从一般的仪器设计模型看,一种仪器无非是由数据采集、分析处理、人机交互和显示等几部分功能模块组成的整体。因此我们可以设想在必要的数据采集硬件和通用计算机支持下,通过软件设计实现仪器的全部功能,这就是虚拟仪器设计的核心。与传统仪器相比,虚拟仪器除了在性能、易用性、用户可定制性等方面具有更多优点外,在工程应用和社会经济效益方面也具有突出优势。一方面,目前我国高档台式仪器如数字示波器、频谱分析仪、逻辑分析仪等还主要依赖进口,这些仪器加工工艺复杂、对制造水平要求高,生产突破有困难,采用虚拟仪器技术可以通过只采购必要的通用数据采集硬件来设计资金的仪器系统;另一方面,用户可以将一些先进的数字信号处理算法应用于虚拟仪器,提供传统台式仪器不具备的功能,而且完全可以通过软件配置实现多功能集成的仪器设计。因此,可以说虚拟仪器代表了未来测量仪器设计发展的方向。虚拟仪器技术目前在国外发展很快,以美国国家仪器公司(NI公司)为代表的一批厂商已经在市场上推出了基于虚拟仪器技术而设计的商品化仪器产品。数字示波器是在科学研究和工程设计中广泛应用的一种通用仪器。

   LabVIEW是NI推出的虚拟仪器开发平台软件,它们能够以其直观简便的编程方式、众多的源码级的设备驱动程序、多种多样的分析和表达功能支持,为用户快捷地构筑自己在实际生产中所需要的仪器系统创造了基础条件。LabVIEW采用图形化编程语言--G语言,产生的程序是框图的形式,易学易用,特别适合硬件工程师、实验室技术人员、生产线工艺技术人员的学习和使用,可在很短的时间内掌握并应用到实践中去。特别是对于熟悉仪器结构和硬件电路的硬件工程师、现场工程技术人员及测试技术人员来说,编程就像设计电路图一样;因此,硬件工程师、现场工程技术人员及测试技术人员们学习LabVIEW驾轻就熟,在很短的时间内就能够学会并应用LabVIEW。该仪器是用基于图形化编程语言LabVIEW8i 而编写的,主要功能包括:双通道信号输入、触发控制、通道控制、时基控制、波形显示、参数自测量等。本虚拟仪器的数据采集的功能与普通示波器一样;波形显示模式:通道 A或B 、A+B及A-B等;实验结果表明,该仪器具有较高的精度和稳定性,而且具有友好的人机界面。
                     

第一章:虚拟仪器

1.1虚拟仪器概述

虚拟仪器(virtual instrumention)是基于计算机的仪器。计算机和仪器的密切结合是目前仪器发展的一个重要方向。粗略地说这种结合有两种方式,一种是将计算机装入仪器,其典型的例子就是所谓智能化的仪器。随着计算机功能的日益强大以及其体积的日趋缩小,这类仪器功能也越来越强大,目前已经出现含嵌入式系统的仪器。另一种方式是将仪器装入计算机。以通用的计算机硬件及操作系统为依托,实现各种仪器功能。虚拟仪器主要是指这种方式。下面的框图反映了常见的虚拟仪器方案。

虚拟仪器的主要特点有:



  •  
    • 尽可能采用了通用的硬件,各种仪器的差异主要是软件。
    • 可充分发挥计算机的能力,有强大的数据处理功能,可以创造出功能更强的仪器。
    • 用户可以根据自己的需要定义和制造各种仪器。

虚拟仪器实际上是一个按照仪器需求组织的数据采集系统。虚拟仪器的研究中涉及的基础理论主要有计算机数据采集和数字信号处理。目前在这一领域内,使用较为广泛的计算机语言是美国NI公司的LabVIEW。

虚拟仪器的起源可以追朔到20世纪70年代,那时计算机测控系统在国防、航天等领域已经有了相当的发展。PC机出现以后,仪器级的计算机化成为可能,甚至在Microsoft公司的Windows诞生之前,NI公司已经在Macintosh计算机上推出了LabVIEW2.0以前的版本。对虚拟仪器和LabVIEW长期、系统、有效的研究开发使得该公司成为业界公认的权威。

普通的PC有一些不可避免的弱点。用它构建的虚拟仪器或计算机测试系统性能不可能太高。目前作为计算机化仪器的一个重要发展方向是制定了VXI标准,这是一种插卡式的仪器。每一种仪器是一个插卡,为了保证仪器的性能,又采用了较多的硬件,但这些卡式仪器本身都没有面板,其面板仍然用虚拟的方式在计算机屏幕上出现。这些卡插入标准的VXI机箱,再与计算机相连,就组成了一个测试系统。VXI仪器价格昂贵,目前又推出了一种较为便宜的PXI标准仪器。

虚拟仪器研究的另一个问题是各种标准仪器的互连及与计算机的连接。目前使用较多的是IEEE 488或GPIB协议。未来的仪器也应当是网络化的。

1.2 虚拟仪器的特点

虚拟仪器与传统仪器相比,有以下6个特点。

    1)传统仪器的面板只有一个,其上布置着种类繁多的显示与操作元件,易

导致许多识别与操作错误。虚拟仪器与之不同,它可以通过在几个分面板上的操作来实现比较复杂的功能。这样,在每个分面板上就可以实现功能操作的单纯化面板布置的简捷化,从而提高操作的正确性与便捷性。同时,虚拟仪器面板上的显示元件和操作元件的种类与形式不受“标准件”和“加工工艺”的限制,它们是由编程来实现的,设计者可以根据用户的认知要求和操作要求,设计仪器面板。

2)在通用硬件平台确定后,由软件取代传统仪器中的硬件来完成仪器的功能。

3)仪器的功能是用户根据需要由软件来定义的,而不是事先由厂家定义好的。

4)仪器性能的改进和功能扩展只需更新相关软件设计,而不需购买新的仪器。研制周期较传统仪器大为缩短。

5)虚拟仪器开放、灵活,可与计算机同步发展,与网络及其它周边设备互联。

    6)决定虚拟仪器具有传统仪器不可能具备的特点的根本原因在于“虚拟仪器的关键是软件”。

    虚拟仪器在工程应用和社会经济效益方面具有突出的优势。目前,我国高档台式仪器,如数字示波器、频谱分析仪、逻辑分析仪等还主要依赖进口,因为这些仪器加工工艺复杂,对制造水平要求高,生产突破有困难,而采用虚拟仪器技术后,就可以通过只采购必要的通用仪器硬件来设计自己的高性能价格比的仪器系统。   

1.3虚拟仪器现状及其发展趋势
1.3.1 虚拟仪器的发展及特点

电子测量仪器发展至尽,大体可分为四代:模拟仪器、分立元件式仪器、数字化仪器、智能仪器和虚拟化仪器。

    仪器的发展过程

    第一代——模拟仪器。这类仪器在某些实验室仍能看到,是以电磁感应基本定律为基础的指针式仪器,如指针式万用表、指针式电压表、指针式电流表等。这类指针式仪表借助指针来显示最终结果。

    第二代——分立元件式仪器。当20世纪60年代出现晶体管时,便产生了以电子管或晶体管电子电路为基础的第二代测试仪器——分立元件式仪器。

    第三代——数字化仪器。20世纪70年代,随着集成电路的出现,诞生了以集成电路芯片为基础的第三代仪器——数字化仪器。这类仪器目前相当普及,数字电压表、数字频率计等。这类仪器将模拟信号的测量转化为数字信号的测量,并以舒数字方式输出最终结果,适用于快速响应和较高准确度的测量。

    第四代——智能仪器。随着微电子技术的发展和微处理器的普及,以微处理器为核心的第四代仪器——智能仪器迅速普及。这类仪器内置微处理器,既能进行自动测试,又具有一定的数据处理能力,可取代部分脑力劳动,习惯上称其为智能仪器。其缺点是它的功能块全部都以硬件(或固化的软件)的形式存在,无论对开发还是针对应用,都缺乏灵活性。

    目前,微电子技术和计算机技术飞速发展,测试技术与计算机深层次的结核症引起测试仪器领域里的一场新的革命,一种全新的仪器结构概念导致了新一代仪器——虚拟仪器的出现。它是现代计算机计术、通信技术和测量技术相结合的产物,是传统仪器观念的一次巨大的变革,是传统仪器仪器观念的一次巨大变革,是仪器产业发展的一个重要方向。它的出现使得人类的测试技术进入一个新的发展纪元。

    国际上从1988年开始陆续有虚拟仪器产品面市。当时有5家制造商推出了30种产品,此后,虚拟仪器产品成倍增加。

1.3.2 虚拟仪器的发展方向

    随着计算机、通信、微电子技术的不断发展,以及网络时代的到来和信息化要求的不断提高,网络技术应用到虚拟仪器领域中是虚拟仪器发展的大趋势。在国内网络化虚拟仪器的概念目前还没有一个比较明确的提法,也没有一个被测量界广泛接受的定义。其一般特征是将虚拟仪器、外部设备、被测试点以及数据库等资源纳入网络,实现资源共享,共同完成测试任务。使用网路化虚拟仪器,可以在任何地点、任意时刻获取到测量数据信息的愿望成为现实。网路化虚拟仪器也适合异地或远程控制、数据采集、故障检测、报警等。

与以PC为核心的虚拟仪器相比,网络化将对虚拟仪器的发展产生一次革命,网络化虚拟仪器是仪器发展史上的又一次革命。网络化虚拟仪器将由单台虚拟仪器实现的三大功能(数据获取、数据分析及图形化显示)分开处理,分别使用独立的基本硬件模块实现传统仪器的三大功能,以网线相连接,实现信息资源的共享。

1.4虚拟仪器的设计步骤

在LabVIEW平台下,一个VI有两部分组成:前面板和流程图(或称后面板),前面板的功能等效于传统测试仪器的前面板;流程图的功能等效于传统测试仪器与前面板相联系的硬件电路。在设计时,要考虑硬件部分。虚拟仪器的设计方法包括I/O接口仪器驱动程序的设计、仪器面板的设计与仪器功能算法的设计三部分。
  • 确定程序设计的总体方案
在编制虚拟仪器程序前,必须首先对程序进行总体设计分析:一是要确定程序要实现的功能、要显示的图形对象、要输出的报表;二是确定程序的层次关系,如主程序和子程序之间的关系等、虚拟仪器程序与硬件的连接关系等。
  • I/O接口仪器驱动程序的设计
根据仪器的功能要求,确定仪器的接口标准。如果仪器设备具有RS-232串行接口,则直接用连线将仪器设备与计算机机的RS-232串行接口连接即可;如果仪器是GPIB接口,则需要额外配备一块GPIB-488接口板,建立计算机与仪器设备之间的通信渠道;如果使用计算机来控制VXI总线设备,则也需要配备一块GPIB接口卡,通过GPIB总线与VXI总线、VXI主机箱零槽模块通信,零槽模块的GPIB-VXI翻译器将GPIB命令,并把各模块返回的数据以一定的格式传回主控计算机。
I/O接口仪器驱动程序是控制硬件设备的驱动程序,是连接主控计算机与仪器设备的纽带。如果没有设备驱动程序,则必须针对I/O接口仪器设备编写驱动程序。
              (3) 确定虚拟仪器程序前面板
仪器前面板的设计指在虚拟仪器开发平台上,利用各类子摸板图标创建用户界面,即在前面板上布置实现所需功能的显示对象,这些对象包括开关旋钮控制、相量图、频谱图显示等,前面板布置好这些对象后,工程技术人员通过鼠标、键盘就可像操作传统仪器一样地操作虚拟仪器。
  • 构建图形化流程图
在LabVIEW开发环境中,后台流程图与前面板控制显示对象一一对应,开发人员的任务是通过连接不同的功能函数模块使数据流从输入对象经过处理传送到输出对象。与传统的文本式程序设计一样,LabVIEW也有控制流程图功能执行部分,包括Sequence、Case Statement、For Loop、While loop 结构,这些结构被描述成图形化的边界结构,开发人员不必注意传统设计所需的语法细节,只需直接将它们连接起来就可完成数据传递。在编制大型复杂的虚拟仪器应用程序时,由于所用模块很多,这时必须考虑程序的层次结构,这可以通过灵活编制子程序、采用更为简单高效的计算原理等方式来实现。
  •      调试和优化程序
和传统程序一样,在编制虚拟仪器程序时,需要不断对程序进行调试分析,LabVIEW程序调试功能十分强大易用,可以灵活设定程序断点,进行带数据探针的单步运行,加亮执行程序进行数据流追踪判断。同时,LabVIEW是目前唯一带有编辑器的图形化编程环境,他可根据用户编制程序自动产生最优化代码,加快程序运行速度。另外,用户还可以利用内置的绘图器对程序代码部分进行分析和优化。
从上面五个方面可以看出,在计算机和仪器等资源确定的情况下,有不同的处理算法,就有不同的虚拟仪器。软件在虚拟仪器的重要作用由此可见一斑。

第二章:LabVIEW概述
2.1 什么叫LabVIEW

LabVIEW是NI推出的虚拟仪器开发平台软件,它们能够以其直观简便的编程方式、众多的源码级的设备驱动程序、多种多样的分析和表达功能支持,为用户快捷地构筑自己在实际生产中所需要的仪器系统创造了基础条件。
      LabVIEW采用图形化编程语言--G语言,产生的程序是框图的形式,易学易用,特别适合硬件工程师、实验室技术人员、生产线工艺技术人员的学习和使用,可在很短的时间内掌握并应用到实践中去。特别是对于熟悉仪器结构和硬件电路的硬件工程师、现场工程技术人员及测试技术人员来说,编程就像设计电路图一样;因此,硬件工程师、现场工程技术人员及测试技术人员们学习LabVIEW驾轻就熟,在很短的时间内就能够学会并应用LabVIEW。也不必去记忆那眼花缭乱的文本式程序代码。
       LabVIEW这么容易学习和使用,是不是LabVIEW的功能十分有限呢?不。像C或C++等其它计算机高级语言一样,LabVIEW也是一种通用编程系统,具有各种各样、功能强大的函数库,包括数据采集、GPIB、串行仪器控制、数据分析、数据显示及数据存储,甚至还有目前十分热门的网络功能。LabVIEW也有完善的仿真、调试工具,如设置断点、单步等。LabVIEW的动态连续跟踪方式,可以连续、动态地观察程序中的数据及其变化情况,比其它语言的开发环境更方便、更有效。而且LabVIEW与其它计算机语言相比,有一个特别重要的不同点:其它计算机语言都是采用基于文本的语言产生代码行,而LabVIEW采用图形化编程语言--G语言。
       LabVIEW程序又称为虚拟仪器,它的表现形式和功能类似于实际的仪器;但LabVIEW程序很容易改变设置和功能。因此,LabVIEW特别适用于实验室、多品种小批量的生产线等需要经常改变仪器和设备的参数和功能的场合,及对信号进行分析研究、传输等场合。
    总之,由于LabVIEW能够为用户提供简明、直观、易用的图形编程方式,能够将繁琐复杂的语言编程简化成为以菜单提示方式选择功能,并且用线条将各种功能连接起来,十分省时简便,深受用户青睐。与传统的编程语言比较,LabVIEW图形编程方式能够节省85%以上的程序开发时间,其运行速度却几乎不受影响,体现出了极高的效率。使用虚拟仪器产品,用户可以根据实际生产需要重新构筑新的仪器系统。例如,用户可以将原有的带有RS232接口的仪器、VXI总线仪器以及GPIB仪器通过计算机,联接在一起,组成各种各样新的仪器系统,由计算机进行统一管理和操作。
      可以预见,由于LabVIEW这些其他语言无法比拟的优势,已经成为该领域的一朵奇葩!最终将引发传统的仪器产业新的革命。

我经常听到,甚至有时关注于对LabVIEW的争论,即LabVIEW是一种通用的语言还是一种用于测量和自动化的特定应用程序的开发环境。一方面,有经验的程序员指出了LabVIEW缺乏的流行编程语言所具有的特性,但是另一方面,一些用户详细阐述了他们使用LabVIEW所建立的通用应用程序,而完全没有使用任何数据采集或分析。对LabVIEW用户的调查可能与最近一个非正式的对一个团队中的开发者的调查一致,这个团队中的绝大多数人都认为LabVIEW已具有足够的功能来被归为通用语言类,而且事实上,正是以这种方式在使用它。LabVIEW被提到次数最多的不足是常用的递归和递归式数据类型,以及面向对象的结构,但是这些都不是建立通用应用程序的严重障碍。错误的问题尽管有了调查结果,但是我认为这是一个错误的问题而且试图回答它会导致错误的方向。对我来说,这有点像在问:汽车是不是用来就座的地方?当然你可以在汽车里就座,但是如果那是你利用它所做的全部,那么你失去了拥有它可以得到的主要用途。一个较好的问题是:LabVIEW可以被用作通用编程语言吗?或者更好的是:LabVIEW能够被用来创建通用的应用程序吗?这个问题的新表述在什么被视为通用这个方面仍然是同样模糊的,但是它没有强调有时显得严谨的争论,即LabVIEW是不是一种编程语言?一些人并不认为它是一种语言,因为它不是基于文本的 而且它不是顺序化的。更为奇怪的是,关于什么被看作是一种编程语言的这个问题上,那些具有计算机科学背景的人持有最为狭隘的观点。但是,经过改正后的问题最为重要的一个方面是它将包容性转换到了正确的方向。换一种方式来 表达,即最初的问题间接地暗示了通用编程语言在某种程度上是一个更大的问题或者是测量和自动化编程的一个父集,然而,实际上子集却在其他的方向。通常,测量和自动化的程序必须处理所有与通用程序一样的问题,如数据结构和算法、文件I/O、网络I/O、用户I/O和数据库存取、打印等等这些常见的问题。但是测量和自动化程序也必须处理比通用程序更多的问题,例如物理I/O、实时性约束和硬件配置。它们也可以具有一些最为苛刻的用户界面要求。测量和自动化程序处理了一个通用程序所处理问题的父集。如果工具A和工具B可以被用于一定的任务集,但是工具B具有更多的功能可使它益于完成额外的任务,哪一种工具是事实上更为通用的呢?这正是我们关于LabVIEW问题。LabVIEW适于测量和自动化应用程序的能力不是来自于它的基本编程能力被某种方式所限制,而是因为它们经过了增强和扩展。这就是为什么有必要提出“LabVIEW能够被用来创建通用的应用程序吗?”这个问题而不是 “LabVIEW是一种通用编程语言吗?”。我们不希望通过把LabVIEW仅视为一种编程语言而限制了它的范围或它将来的发展。

2.2 LabVIEW 软件的特点

LabVIEW软件的特点如下:

1) 具有图形化的编程方式,设计者无需写任何文本格式的代码,是真正的工程师的语言:

2)提供丰富的数据采集、分析及存储的库函数:

3) 提供传统的程序调试手段,如设置断点、单步运行,同时提供独具特色的执行工具,使程序动画式运行,利于设计者观察到程序运行的细节,使程序的调试和开发更为便捷;

4)32位的编仪器编译生成32位的编译程序,保证用户数据采集、测试和测量方案的高速执行;

5) 囊括了PCI,GPIB,PXI,VXI,RS-232/485,USB等各种仪器通信总线标准的所有功能函数,使得不懂得总线标准的开发者也能够驱动不同总线标准接口设备与仪器。  


第三章 示波器设计
3.1本示波器功能

本虚拟仪器涉及主要功能包括:双通道信号输入、触发控制、通道控制、时基控制、波形显示、参数自测量等。本虚拟仪器的数据采集的功能与普通示波器一样;波形显示模式:通道 A或B 、A+B及A-B等;电压参数测量,时间/频率参数测量,定位标尺,测量结果显示。由于条件有限,没有数据采集卡,我在设计数据采集时,采用了LaBVIEW内部信号发生器来产生信号;这些发生器有正弦波发生器、方波发生器、三角波发生器、锯齿波发生器,通过这些信号的输入来进行测量。

3.1.1主要功能模块

概括地讲,虚拟仪器主要由软件控制完成信号的采集、处理和显示。系统软件总体上包括数据采集、波形显示、参数测量等模块。其功能结构如下图

注释:由于条件有限,没有数据采集卡,我在设计数据采集时,采用了LaBVIEW内部信号发生器来产生信号;这些发生器有正弦波发生器、方波发生器、三角波发生器、锯齿波发生器,通过这些信号的输入来进行测量。

3.1.2波形显示模块

软件提供了三种波形显示模式:

*A  B A&B 模式:通过显示通道选择按键可以任意显示某一通道或两通道输入信号的波形;

*XY模式:当两通道都处于选同状态时,使用此模式来显示李沙育图形,测量相位差或频率;

*A+B A-B模式:当两通道都处于选通状态时使用此模式来显示两通道信号带数相加、相减后的波形。

3.2 示波器前面板设计

虚拟示波器的界面图,分为波形显示区和操作面板区。波形显示区横轴表示时间,纵轴表示幅值。单元格当前时间和幅值也可通过操作面板的“时间”框、“幅值”框显示。操作区有:显示模式转换,数据采集配置,时基控制,数据处理等。显示模式转换是选择要测量的设备类型,通道和极性选择。数据采集是调节波形幅值,波形周期和选择显示的波形是哪个通道的,先是波形的类型等。时基控制是选者扫描率,扫描数,选择手动、自动等。

前面板用于设置输入数值和观察输出量,用于模拟真实示波器的前面板。由于虚拟面板直接面向用户,是虚拟示波器控制软件的核心。我设计这部分时,主要考虑界面美观、操作简洁,用户能通过面板上的各种按钮、开关等控键来控制虚拟示波器的工作。根据传统示波器的面板控键的功能,利用LabVIEW 中的控制模板,分别在设计面板上放入模拟实际控键的显示器、通道选择控键、水平与垂直增益控键、触发方式选择控键及开关。打开LabVIEW 前面板编辑窗口,点击鼠标右键,显示控制模板,选择Graph m Waveform Graph ,作为示波器的显示器。在显示器模板上点击鼠标右键,对其进行属性设置,如根据示波器的频率与幅度值的变化, 利用工具模板中的文字工具,对显示器横(时间) 、纵(幅度) 坐标的刻度重新设置。

示波器的前面板如下图3-1:

图3-1 示波器前面板设计图

3.3示波器的后面板(程序设计)
3.3.1数据采集模块(模拟数据采集)

由于条件有限,没有数据采集卡,我在设计数据采集时,采用了LaBVIEW内部信号发生器来产生信号;这些发生器有正弦波发生器、方波发生器、三角波发生器、锯齿波发生器,通过这些信号的输入来进行测量。

发生器(Sine Wave.Vi)图标与端口图

方波发生器

三角波发生器

正弦波发生器

锯齿波发生器

方波发生器     均匀分布的随机信号发生器

正弦波形发生器函数图标左侧一列为输入端口,即该函数调用前的参数设置端口。

  • samples: 生成波形的总点数N。
  • amplitude:生成波形的幅值。
  • f:生成信号的数字频率。
  • phase in: 生成波形的初始相位,单位为度。
  • reset phase: 默认值为TRUE。当为TRUE时,函数以phase in 的值作为初始相位,如果该值为FALSE, 则函数以上一次调用后的phase out输出值为此次波形的初始相位(默认值为TRUE),显然,此时产生的信号波形是连续光滑的。

函数图标的右侧一列为输出端口(即该函数调用后的输出参数 ),其各自的含义如下:

  • sine wave: 数组名,该数组内存放所生成的波形数据。
  • phase out: 当reset phase 为TRUE时,该参数无效。当reset phase为FALSE时,该参数作为下一次生成正弦波的初始相位。
  • error: 错误代码。若有错误,则输出错误代码。根据错误代码,查找LabVIEW帮助文件,可以找到与错误代码对应的错误含义。

信号发生器的产生

介绍怎样产生标准频率的信号,以及怎样创建模拟函数发生器。使用分析库中的信号发生VI产生各种类型的信号。信号产生的应用主要有:

  •              当无法获得实际信号时,(例如没有DAQ板卡来获得实际信号或者受限制无法访问实际信号),信号发生功能可以产生模拟信号测试程序。
  •      产生用于D/A转换的信号

在LabVIEW 中提供了波形函数,为制作函数发生器提供了方便。以Waveform>>Waveform Generation中的基本函数发生器(Basic Function Generator.vi)为例,其图标如下:

图3-2 基本函数发生器

其功能是建立一个输出波形,该波形类型有:正弦波、三角波、锯齿波和方波。这个VI会记住产生的前一波形的时间标志并且由此点开始使时间标志连续增长。它的输入参数有波形类型、样本数、起始相位、波形频率(单位:Hz)

参数说明:

offset波形的直流偏移量,缺省值为0.0。数据类型DBL

reset signal将波形相位重置为相位控制值且将时间标志置为0。缺省值为FALSE.

signal type产生的波形的类型,缺省值为正弦波。

frequency :波形频率(单位 Hz),缺省值为10。

amplitude :波形幅值,也称为峰值电压,缺省值为1.0。

phase :波形的初始相位(单位 度)缺省值为0.0.

error in :在该VI运行之前描述错误环境。缺省值为 no error. 如果一个错误已经发生,该VI在error out端返回错误代码。该VI仅在无错误时正常运行。 错误簇包含如下参数。

status :缺省值为FALSE,发生错误时变为TRUE。

code :错误代码,缺省值为0。

source :在大多数情况下是产生错误的VI或函数的名称,缺省值为一个空串。

sampling info :一个包括采样信息的簇。共有Fs和#s 两个参数。

Fs :采样率,单位是样本数/秒,缺省值为1000。

#s :波形的样本数,缺省值为1000。

duty cycle (%):占空比,对方波信号是反映一个周期内高低电平所占的比例,缺省值为50%。

signal out:信号输出端

phase out :波形的相位,单位:度。

error out :错误信息。如果 error in 指示一个错误,error out 包含同样的错误信息。否则,它描述该VI 引起的错误状态。

使用该VI制作的函数发生器如下,由框图可以看出,其中没有附加任何其他部件。

图3-3 VI制作的函数发生器

数据采集主要是把通道A、通道B、设备,扫描率、扫描数、极性, 触发源、模式、斜坡、电平,信号分别生成一个簇然后输入到子程序OSCdaq 这个子程序是里,里面有一个自生成的波形发生器,通过外面的变量来对波形发生器进行控制。

图3-4 数据采集的总的程序图

子VI的建立

子VI(SubVI)相当于普通编程语言中的子程序,也就是被其他的 VI调用的VI。可以将任何一个定义了图标和联接器的 VI作为另一个 VI的子程序。在流程图中打开 Functions»Select a VI…. ,就可以选择要调用的子 VI 。构造一个子VI主要的工作就是定义它的图标和联接器。

每个VI在前面板和流程图窗口的右上角都显示了一个默认的图标。启动图标编辑器的方法是,用鼠标右键单击面板窗口的右上角的默认图标,在弹出菜单中选择 Edit Icon

下图显示了图标编辑器的窗口。可以用窗口左边的各种工具设计像素编辑区中的图标形状。编辑区右侧的一个方框中显示了一个实际大小的图标。图标编辑器的具体使用细节参阅有关资料。

图3-5 图标编辑器窗口

联接器是 VI 数据的输入输出接口。如果用面板控制对象或者显示对象从子 VI 中输出或者输入数据,那么这些对象都需要在联接器面板中有一个连线端子。您可以通过选择 VI的端子数并为每个端子指定对应的前面板对象以定义联接器。

定义联接器的方法是,用鼠标右键单击面板窗口中的图标窗口,在快捷菜单中选择 Show Connector

联接器图标会取代面板窗口右上角的图标。LabVIEW 自动选择的端子连接模式是控制对象的端子位于联接器窗口的左边,显示对象的端子位于联接器窗口右边。选择的端子数取决于前面板中控制对象和显示对象的个数。

联接器中的各个矩形表示各个端子所在的区域,可以用它们从 VI 中输入或者输出数据。如果必要,也可以选择另外一种端子连接模式。方法是在图标上单击鼠标右键单出快捷菜单,选择 Show Connector,再次弹出快捷菜单,选择Patterns

本子程序主要用到程序结构有While循环、分支结构、数簇、数组等。While循环模块位置为Functions->Execution Control子模板。单击鼠标左键后,指针变为手形。把鼠标指针移到框图上,可以看到,鼠标指针缩小的While循环样子。循环右下角是条件端子,用于在每次循环结束后判断循环是否继续执行。具体的循环继续条件有两种:Stop if True和Continue if True,具体采用哪种方式可在条件端子上弹出的快捷菜单指定,也可以使用操作工具在端子上单击鼠标,以切换两种不同的条件。条件不同,端子的图标也不同,默认的条件是Stop if True。左下角标有字母i的矩形框图是重复端子(Iteration Terminal),可以在每次循环中提供当前循环次数的计数值,i的初始值为0。两个端子之外的其他空白区域都可以放置程序代码。

分支结构(Case Structure)位于Functions->Programming->Structures子模版上。分支结构左边框上有一个输入端子,该端子中心有一个问号,称为选择器端子(Selector Terminal);上边框上有分支选择器标签(Case Selector Label)。

分支结构有一个或多个子框图,每一个子框图都是一个执行分支,每一个执行分支都有自己的分支选择器标签。当执行分支时只有与接入选择器端子相匹配的标签对应的框图被执行。端子的值可以是布尔型、字符串型、整型或者是枚举类型。此选择器端子的值的类型是无符号长整型。分支结构子框图是堆叠在一起的,单击标签左边和右边的增量、减量按钮将使当前显示框图在堆叠起来的多个框图中进行一次前、后切换。单击分支选择器标签右边端的向下黑色箭头,将弹出所有已定义的标签列表,可以利用这个列表在多个子框图之间实现快速跳转。与C语言的分支结构不同的是,C语言的switch语句的Default分支是可选的,在没有Default分支时,如果没有任何匹配,则任何Case后面的代码都不会执行。而对于LabVIEW的Case结构,要么在选择器标签中列出所有可能的情况,要么必须给出一种默认情况。

图3-5 数据采集中的OSCdaq子程序

3.3.2自动扫描控制

自动扫描控制主要是利用软件编程来对采集到的数据进行对扫描率和扫描数的控制程序如下图3-6:

图3-6 自动扫描控制

扫描数乘以dt乘以基频然后输入到分支结构的输入端子,若选择端子是True将判断输入端子大于6 ,又扫描率大于等于8 则扫描率加1。若第一个分子结构选择结构输入端子小于3,又扫描率小于0,则扫描率减去1。

3.3.3波形显示

图形显示对于虚拟仪器面板设计是一个重要的内容。LabVIEW为此提供了丰富的功能。。

我们不从图形的实现方法上去讨论问题,那是计算机图形学的课题。但我们需要从用户的可能的需求角度探求一下,如果你需要做虚拟仪器方面的开发,那么可能遇到些什么图形问题。LabVIEW在这方面所做的工作是非常值得借鉴的。

在LabVIEW的图形显示功能中Graph和Chart是两个基本的概念。一般说来Chart是将数据源(例如采集得到的数据)在某一坐标系中,实时、逐点地显示出来,它可以反映被测物理量的变化趋势,例如显示一个实时变化的波形或曲线,传统的模拟示波器、波形记录仪就是这样。而Graph则是对已采集数据进行事后处理的结果。它先将被采集数据存放在一个数组之中,然后根据需要组织成所需的图形显示出来。它的缺点是没有实时显示,但是它的表现形式要丰富得多。例如采集了一个波形后,经处理可以显示出其频谱图。现在,数字示波器也可以具备类似Graph的显示功能。

LabVIEW的Graph子模板中有许多可供选用的控件,其中常用的见下表:

Chart
Graph
Waveform(波形)
*
*
XY
*
Intensity(强度图)
*
*
Digital(数字图)
*
3D Surface(三维曲面)
*
3D Parametric(三维参变量)
*
3D Curve(三维曲线)
*

由表中可以看出,Chart方式尽管能实时、直接地显示结果,但其表现形式有限,而Graph方式表现形式要远为丰富,但这是以牺牲实时为代价的。

Graph控件

各种图形都提供了相应的控件,以Graph为例介绍。图4-1所示为它的控件。所有这些控件都包含在图形快速菜单的Visible Items选项下。

曲线图例可用来设置曲线的各种属性,包括线型(实线、虚线、点划线等)、线粗细、颜色以及数据点的形状等。

图形模板可用来对曲线进行操作,包括移动、对感兴趣的区域放大和缩小等。

光标图例可用来设置光标、移动光标,帮助你用光标直接从曲线上读取感兴趣的数据。

刻度图例用来设置坐标刻度的数据格式、类型(普通坐标或对数坐标),坐标轴名称以及刻度栅格的颜色等。

波形显示主要是通过软件对测量波形进行显示下图3-7为波形显示的主程序

图3-7为波形显示的主程序

下图3-8为波形显示子程序——生成时间轴序列

图3-8生成时间轴序列

A、B显示模块的调节按钮元素通过Bundle中把它们打包生成一个簇然后通过Unbundle By Name 把输入簇中的元素按标签解包,A、B通道电压数据分别用分支结构来对其进行显示A、显示B、显示A&B等。

3.3.4测量波形的各种参数

测量波形的各种参数主要测量波形的幅值、周期、频率等。主程序如下:

图3-9 测量波形的各参数程序

当测量信号输入到分支结构输入端子时,电压数据通过 Index Array 数组,当选择通道按钮按下时则有它来控制索引电压数据数组,然后输入到osc测量子VI中。

测量表如下图3-10:

图3-10测量表
子程序如图3-11:

图3-11测量表程序

3.3.5手动/自动程序

事件结构位于Functions->All Functions->Strunctures 子模板上。事件结构包含有几个基本组成部分:上方边框中间是事件选择标签,用于标识当前显示的子框图所处理事件的事件源;事件数据节点为子框图提供所处理事件的相关数据;超时端子隶属整个事件结构,用于为超时事件提供超时时间参数。事件数据节点有若干事件数据端子组成,分为手动、自动、Time out .超时端子接入的,以毫秒为单位的整数值指定了超时时间,在等待其他类型事件发生的时间超过时间后,将自动触发Time out事件。为超时端子接入-1值表示不产生Time out事件。事件结构的组织方式与Case结构相似,都是把多个子框图堆叠在一起。根据所发生事件的不同,每次只有一个子框图得到执行,并且该子框图执行完后,事件结构随之退出。

.
图3-12 手动/自动程序



3.4总程序

如图3-13

图3-13总程序图

结  论

虚拟示波器设计完成后,经使用,所有控制键和功能正常,符合使用要求。本设计论文的主要工作就是利用LabVIEW设计两通道数字示波器系统。主要完成了以下几方面的工作:
1)              认真研读了教材《LabVIEW的虚拟仪器设计》(电子工业出版社),同时又在参考大量国内外文献资料的基础上,总结了虚拟仪器的概念、特点及虚拟仪器的设计步骤。并对虚拟示波器设计所用到的LabVIEW知识进行了较为详细的阐述。
2)              利用LabVIEW编程设计了两通道数字示波器,达到了传统示波器所具有的基本功能。

通过验证,由于现实条件和时间上的原因,本文设计的两通道数字示波器系统还很不完善,还有以下几方面的工作要做:
1)              含有数据采集卡的示波器设计,由于没有数据采集卡,本次设计的示波器,它的数据采集是通过软件模拟实现的。
2)              具有更多功能的虚拟示波器设计。本次设计的两通道数字示波器具有传统示波器的基本功能,还需要丰富更多的功能,如显示模式可以加上微分、积分、A+B和A-B等功能。
3) 也不具有数据存储功能,利有网络远程操作等

因此,我还要不断地学习,不断地探索不断完善虚拟示波器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1793091.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《UDS协议从入门到精通》系列——图解0x23:通过地址读取内存

《UDS协议从入门到精通》系列——图解0x23:通过地址读取内存 一、简介二、数据包格式2.1 服务请求格式2.2 服务响应格式2.2.1 肯定响应2.2.2 否定响应 三、通信示例 Tip📌:本文描述中但凡涉及到其他UDS服务的,将陆续提供链接跳转方…

electron自定义顶部

我的项目是采用的electron-vite搭建的,希望下面的内容可以给你带来帮助 自定义菜单栏Vue <template><div class"title-bar"><div class"left-section"><img src"../assets/icon.png" alt"Icon" class"icon…

idea 常用插件推荐

文章目录 1、Lombok2、Convert YAML and Properties File3、Grep Console4、MyBatisX5、Free MyBatis Tool6、MyBatis Log EasyPlus &#xff08;SQL拼接&#xff09;7、MyBatisPlus8、Eclipse theme9、Eclipse Plus Theme10、Rainbow Brackets Lite - Free and OpenSource&…

在大模型落地这件事上,智谱玩出花了

大数据产业创新服务媒体 ——聚焦数据 改变商业 2024年6月5日&#xff0c;仅仅用了一上午的功夫&#xff0c;智谱就连发了三个产品&#xff0c;分别是智谱清言、GLM4-9B、智谱MaaS平台。 在这次的发布会与智谱在2024年1月16日开的发布会不太一样&#xff0c;后者更注重技术分享…

计算机网络 期末复习(谢希仁版本)第1章

大众熟知的三大网络&#xff1a;电信网络、有线电视网络、计算机网络。发展最快起到核心的是计算机网络。Internet是全球最大、最重要的计算机网络。互联网&#xff1a;流行最广、事实上的标准译名。互连网&#xff1a;把许多网络通过一些路由器连接在一起。与网络相连的计算机…

QT 使用信号和槽,让QLabel的内容实时与QLineEdit同步,类似vue框架的双向绑定

在窗口里放置一个单行文本编辑器&#xff08;QLineEdit&#xff09;和一个标签控件&#xff08;QLabel&#xff09;&#xff0c;实现的效果就是当编辑器的内容被编辑时&#xff0c;标 签控件同步显 示编辑控件里的内容 1&#xff09;当 lineEdit 控件被用户编辑时&#xff0c;它…

【Java数据结构】二叉树详解(四)

&#x1f512;文章目录&#xff1a; 1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; 2.给定一个二叉树, 找到该树中两个指定节点的最近公共祖先 2.1第一种思路 2.2第二种思路 3.根据一棵树的前序遍历与中序遍历构造二叉树 4.根据一棵树的中序…

【Web API DOM03】事件监听

一&#xff1a;什么是事件监听 指程序检测有无某一事件发生&#xff0c;如果发生&#xff0c;就调用一个函数做出反应&#xff1b;也称为绑定事件或注册事件 比如鼠标经过显示下拉菜单、点击侧边栏播放轮播图 二&#xff1a;怎么用事件监听 1 语法规范&#xff1a; 元素对…

Python 全栈体系【四阶】(五十七)

第五章 深度学习 十三、自然语言处理&#xff08;NLP&#xff09; 2. 传统NLP处理技术 2.4 关键词提取 关键词提取是提取出代表文章重要内容的一组词&#xff0c;对文本聚类、分类、自动摘要起到重要作用。此外&#xff0c;关键词提取还能使人们便捷地浏览和获取信息。现实…

【C++进阶】深入STL之vector:深入研究迭代器失效及拷贝问题

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;初步了解vector &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀STL之vector &#x1f4d2;1. 迭…

【Java基础】线程的五大状态

新建状态 使用 new 关键字和 Thread 类或其子类建立一个线程对象后&#xff0c;该线程对象就处于新建状态。它保持这个状态直到程序 start() 这个线程。 就绪状态 当线程对象调用了start()方法之后&#xff0c;该线程就进入就绪状态。就绪状态的线程处于就绪队列中&#xff…

【机器学习基础】Python编程04:五个实用练习题的解析与总结

Python是一种广泛使用的高级编程语言,它在机器学习领域中的重要性主要体现在以下几个方面: 简洁易学:Python语法简洁清晰,易于学习,使得初学者能够快速上手机器学习项目。 丰富的库支持:Python拥有大量的机器学习库,如scikit-learn、TensorFlow、Keras和PyTorch等,这些…

(学习笔记)数仓建模

数仓建模 OLAP数仓分层数据模型数据模型建设方法模型建设具体流程模型数据域事实表设计事实表拉链表 数据模型规范表命名(采用阿里one-data设计)字段命名(采用阿里one-data设计)数据模型标注规范 数据模型发展周期 OLAP OLTP&#xff1a;概念全称OnLine Transaction Processin…

【大模型】Ollama+open-webui/Anything LLM部署本地大模型构建RAG个人知识库教程(Mac)

目录 一、Ollama是什么&#xff1f; 二、如何在Mac上安装Ollama 1. 准备工作 2. 下载并安装Ollama 3. 运行Ollama 4. 安装和配置大型语言模型 5. 使用Ollama 三、安装open-webui 1. 准备工作 2. Open WebUI ⭐的主要特点 3. Docker安装OpenWebUI&#xff0c;拉去太慢…

操作系统教材第6版——个人笔记3

2.1 处理器 2.1.1 处理器与寄存器 处理器部件的简单示意 用户程序可见寄存器 可以使程序员减少访问主存储器的次数&#xff0c;提高指令执行的效率所有程序可使用&#xff0c;包括应用程序和系统程序数据寄存器&#xff1a;又称通用寄存器地址寄存器&#xff1a;索引、栈指针…

妙手ERP接入TEMU美国本土店,支持高效产品刊登、订单管理、库存管理

​​​​​​​ 众所周知&#xff0c;拼多多向来是低价卷王&#xff0c;而TEMU完美继承了拼多多的基因&#xff0c;靠着全托管模式一路狂奔&#xff0c;两年多便扩展至全球60个国家与地区&#xff0c;市场规模预计达到450亿美元&#xff0c;吸引着越来越多的卖家入驻。 在平台…

32C3-2模组与乐鑫ESP32­-C3­-WROOM­-02模组原理图、升级口说明

模组原理图&#xff1a; 底板原理图&#xff1a; u1 是AT通信口&#xff0c;wiif-tx wifi-rx 是升级口&#xff0c;chip-pu是reset复位口&#xff0c;GPIO9拉低复位进入下载模式 ESP32-WROOM-32 系列硬件连接管脚分配 功能 ESP32 开发板/模组管脚 其它设备管脚 下载固件…

Unity DOTS技术(八)状态组件

文章目录 一,简介二.实例 一,简介 因为在ECS中没有回调,因而无从得知组件是否被销毁.所以我们需要使用ISystemStateComponentData. 什么时ISystemStateComponentData状态组件? 当物体被销毁时ISystemStateComponentData组件不会被销毁.因而我们可以在组件被销毁时在该组件中…

搭建大型分布式服务(三十八)SpringBoot 整合多个kafka数据源-支持protobuf

系列文章目录 文章目录 系列文章目录前言一、本文要点二、开发环境三、原项目四、修改项目五、测试一下五、小结 前言 本插件稳定运行上百个kafka项目&#xff0c;每天处理上亿级的数据的精简小插件&#xff0c;快速上手。 <dependency><groupId>io.github.vipjo…

Clo3D导出服装动画,使用Unity3D展示

1.前言 Clo3D是一款应用于时装行业的3D服装设计软件,其强大的布料模拟算法可在3D空间中实现设计、制版、试衣和走秀,大幅提升数字作品逼真度和制作效率。为了让服装动画效果展示在Unity3D上模拟效果&#xff0c;需要Clo3D模拟出逼着的衣服动画。总体流程为Clo3D - Mixamo -Blen…