超低频任意波形信号发生器设计_第1页
超低频任意波形信号发生器设计_第2页
超低频任意波形信号发生器设计_第3页
超低频任意波形信号发生器设计_第4页
超低频任意波形信号发生器设计_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE超低频任意波形信号发生器设计(LabVIEW)摘要本文介绍了广泛应用于虚拟仪器程序设计的LabVIEW图形化集成开发平台,指出了它相对于传统程序设计语言的优点。探讨了在LabVIEW环境下,基于LabJackU12数据采集卡的任意波形发生器的设计,描述了LabJackU12的功能、特性、驱动及软硬件开发环境。并给出了该波形发生器在上述硬件的基础上,利用LabVIEW来编写驱动程序和软面板的方法。系统主要功能包括产生各种标准波形,利用鼠标绘制任意波形,波形编辑,波形的模拟输出等,具有操作简单、人机界面友好、软件可读性、可维护性好和系统易于升级等特点,能满足实际测试的各种需要。基于虚拟仪器技术的测量仪器设计方法,是设计虚拟仪器系统以替代传统仪器,实现仪器快速开发的有效途径,有效地解决了在超低频率情况下信号发生的问题。关键词:超低频任意波形LabVIEWLabJackU12数据采集卡DesignofUltra-lowFrequencyArbitraryWaveformSignalGenerator(LabVIEW)ABSTRACTItcombinedcomputerhardware,measurementanditshardware,andsoftwareofvirtualinstrument.LabVIEW,agraphicsintegrateddevelopmentenvironmentwidelyusedinvirtualinstrumentsdesign,isintroduced.Itsadvantagesrelativetothetraditionalprogramlanguagesarepresented.Inthispaper,TheDesignofArbitraryWaveformGeneratorwasanalyzedbaseonLabJackDAQcard,withLabVIEW.LabJackU12’sfunction,peculiarity,driversandconditionofsoft-hardwarewaswritten.Basedonthesehardware,themethodthatThearbitrarywaveformgeneratorappliesgraphprogramminglanguageLabVIEWtoprogramdriveandsoft-panelwasintroduced.Themainfunctionsofthesystemincludesgeneratingconventionalwaves,usingmousetodrawarbitrarywaves,editingwaveformandwaveformanalogout,andsoon.Andithasadvantagesofsimpleoperation,kindinterfacebetweencomputerandusers,readableandmaintainableblockprogram,andeasilyupgrade.Thesystemcansatisfytherequirementsofmanypraticaltesting.Finally,ThedesignmethodofanalyzedinstrumentsbasedonVirtualinstrumenttechnologyistheavailabilitywayofceleritydevelopmentinstruments,thispaperhelpstheinstrumentsinstead,ToeffectivelysolvetheultralowfrequencysignalinthecaseoftheproblemKeyWords:Ultra-lowFrequencyArbitraryWaveformGeneratorLabVIEWLabJackU12DAQ(Dataacquisition)Card目录TOC\o"1-3"\h\u1603第一章概述 111241.1课题设计的意义及要求 1266821.1.1意义 1143261.1.2要求 1258001.2虚拟仪器的概念及特点 275011.2.1虚拟仪器的概念 2216231.2.2虚拟仪器的特点 21.3超低频的概况和实现方法···························································································31.3.1超低频概念·······································································································31.3.2超低频实现方案和推到公式·············································································31.3.3超低频在程序中的应用····················································································314845第二章LabVIEW和LabJack 4305632.1LabVIEW简介 4284642.1.1LabVIEW概念 4185632.1.2LabVIEW编程语言的特点 4185042.2LabJack数据采集卡 5317212.2.1硬件安装 514462.2.2软件安装 55802.2.3硬件说明 526585第三章方案的选择与设计 6271313.1方案的选择 6152023.1.1任意波形发生器简介 6118983.1.2非虚拟的任意波形发生器 849243.1.3虚拟的任意波形发生器 838453.2设计的原理以及模块的划分 8125273.2.1硬件部分 843693.2.2软件部分 9199653.2.3仪器总体设计思想 10129113.2.4设计模块的划分 1023013第四章任意波形发生器的软件设计 11127544.1任意波形发生器前面板的设计 1264164.1.1波形图指示器的创建以及属性的设置 12185464.1.2功能按钮的创建以及属性的设置 13134184.1.3数字控件和指示器的创建以及属性的设置 13178824.1.4通道编辑菜单的创建以及属性的设置 14182184.2任意波形发生器框图程序的设计 1566494.2.1while循环 15197874.2.2本地变量 16122954.2.3case结构 16209724.2.4创建波形 1750174.7任意波形绘制VI前面板的设计 22189814.7.1输入控件的创建以及属性的设置 2269534.7.2输出指示器的创建以及相应功能的实现 2237924.7.3用来绘制并显示波形的簇的创建以及相关的注意事项 23291044.8任意波形绘制VI框图程序的设计 24311704.8.1初始波形簇通道的创建 24207124.8.2不同通道波形颜色的分配 25146144.8.3初始化波形图的属性 25175684.8.4判断波形图中的鼠标位置是否移动 26284034.8.5记忆鼠标的前一次位置值 27321474.8.6波形的显示和输出 2729684.9绘制新点子VI前面板的设计 28194034.10绘制新点子VI框图程序的设计 28175674.10.1判断数组中是否存在波形数据 2913524.10.2数组中不存在波形数据的情况 30316364.10.3绘制新点方向的确定 307104.10.4数组中存在波形数据的情况 315307第五章系统的运行与调试 32217475.1调试中遇到的错误 324284第六章结论 3419890参考文献 3526624致谢 36天津理工大学2012届本科毕业设计说明书PAGE36第一章概述1.1课题设计的意义及要求1.1.1意义仪器设计是电信专业的一个主要分支,而虚拟仪器技术是仪器技术和计算机技术深层次相结合的产物,已经成为21世纪测试技术和仪器技术发展的主要方向。波形发生器作为一种常用的信号源,是现代测试领域内应用最为广泛的通用仪器之一。在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都需要有信号源,由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上,用其他仪器观察、测量被测仪器的输出响应,以分析确定它们的性能参数。信号发生器是电子测量领域中最基本、应用最广泛的一类电子仪器。它可以产生多种波形信号,如正弦波,三角波,方波等,因而广泛用于通信、雷达、导航、宇航等领域。1.1.2要求1、课题说明:本课题要求采用虚拟仪器方式设计超低频任意波形发生器。虚拟仪器是将传统仪器由硬件实现的数据分析、处理与显示等功能改由功能强大的计算机来完成,通过配置数据采集卡设备和实现不同功能的软件所构成的仪器。硬件采用多功能数据采集卡和软件采用LabVIEW开发环境。2、技术指标:模拟输出:双路输出电压范围:0~+5V输出频率范围:0~20Hz分辨率:10位用鼠标绘制任意波形。波形编辑。输出波形可在函数发生器屏幕上同步显示3、其它要求:(1)查找相关资料,了解课题要求。(2)使用多功能数据采集卡(3)设计对模拟输出通道控制的接口驱动程序。(4)使用LabVIEW开发环境(5)仪器面板设计(要求输出波形同步显示)(6)主框图程序设计1.2虚拟仪器的概念及特点1.2.1虚拟仪器的概念虚拟仪器是传统仪器功能与外形的模块化和软件化。虚拟仪器主要由通用的计算机资源、应用软件和仪器硬件等构成。使用者利用应用软件将计算机资源和和仪器硬件结合起来,通过友好的图形界面来操作计算机,完成对测试信号的采集、分析、判断、显示和数据处理等功能。在虚拟仪器系统中,硬件仅仅是为了解决信号的调理、以及输入、输出问题。软件才是整个仪器系统的关键,主要用于实现对数据的读取、分析和处理、显示以及对硬件的控制等功能,这些功能在传统电子仪器中往往通过硬件来实现。任何一个使用者都可以通过修改软件的方法,很方便地改变、增减仪器系统的功能与规模,所以有“软件就是仪器”之说[1]。常见的虚拟仪器组建方案如图1.1所示:图1.1常见的虚拟仪器的组建方案1.2.2虚拟仪器的特点虚拟仪器与传统仪器相比,其特点归纳为:1.软件是虚拟仪器的核心,虚拟仪器的硬件确立后,它的功能主要是通过软件来实现的,软件在虚拟仪器中具有重要的地位。2.虚拟仪器的性价比高。3.虚拟仪器具有良好的人机界面。4.仪器或系统的功能、规模由用户自己定义,加上虚拟仪器的开放性和功能软件的模块化,组建系统变得更加灵活、简单,技术更新较快。5.易于构建网络化的测量仪器,基于计算机网络技术和接口技术,虚拟仪器系统具有方便、灵活的互联性。6.虚拟仪器的软、硬件都具有开放性、模块化、可重复使用及互换性等特点[2]。1.3超低频的概况及实现方法1.3.1超低频的概况超低频信号在医学、科研和实验教学中有广泛的应用。传统的低频信号发生器用RC文氏电桥振荡器作为主振器,再经过放大器和输出衰减器后得到信号。这种信号发生器结构简单,输出频率在几百-几千赫兹范围内波形较好,但当要求输出频率较低时(如零点几赫兹-几十赫兹),输出波形不稳定,也不精确。1.3.2超低频实现方案和推导设缓冲区内的周期为T,频率为f。AOUpdata的执行时间为20ms,,,假定至少要10个点确定一个波形,那么,由于理论上规定最少2个点以上确定一个波形,那么20Hz就是频率的上限。以上若用两个点,除三角波外无法构成任意波形,实际值至少十个点构成标准波形,任意波形要用到更多的点,所对应的频率上限也就越低。频率下限的确定:设f≤1/(1024×(执行时间+△t)),执行时间=20ms,总时长=执行时间+△t(通过在程序中加入一个延时程序来实现)当t延时=0时,f=0.0488Hz;当f=0.00488Hz时,t延时=184.8ms;当f=0.0001时,t延时=9980ms。由此可得t延时无限增大,f就会无限接近于0;所以下限为0,超低频范围0~5Hz。由于波形为任意波形,Labjack输出数据的位数为10位,所以采样点数为1024。并且在手绘波形图中很难出现相同波形,所以周期是Labjack输出一整个手绘波形所用的时间,具体公式为,此时的频率是,此时的频率为最高频率,应用在程序中的图形表示为:用0接入一个时钟延时,此时的时长就是Labjack的执行时间0.02s。对延时系统加以调节,加入时间延时△t,总时长为0.02+△t。公式为。此时在前面板创建一个频率输入控件,用于调节超低频率,并且创建一个△t显示控件,用于所用延时的显示。具体如图1.2图1.2用于超低频所用到的延时程序此时用于输入的延时时间不再是执行时间0.02s,而是在用输入频率计算下的总时长。具体公式为:,而显示的延时时长。到这里,我完成了超低频的实现方案。第二章LabVIEW和LabJack2.1LabVIEW简介2.1.1LabVIEW概念LabVIEW虚拟仪器软件是由美国NI公司开发的虚拟仪器开发平台,其层次化的编程结构,图形化的编程语言,丰富的函数、功能强大的工具包以及性价比高、通用性强、易于开发、扩展性好的特点都使得其成为当前最流行的虚拟仪器开发平台。NI公司的LabVIEW7.1开始界面如图2.1所示。图2.1LabVIEW7.1开始界面2.1.2LabVIEW编程语言的特点1.实现了仪器控制与数据采集的完全图像化编程,设计者无需编写任何文本形式的代码。2.提供了大量的面向测控领域应用的库函数,如面向数据采集的DAQ库函数、内置GPIB、VXI、串口等数据采集驱动程序。3.提供了大量与外部代码或应用软件进行连接的机制。4.具有强大的网络连接功能,支持常用网络协议,便于用户开发各种网络测控、远程虚拟仪器系统。2.2LabJack数据采集卡2.2.1硬件安装在计算机正常运行状态下,用提供的连接线把LabJackU12接到计算机的USB口上。这根USB连接线为LabJackU12提供了电源以及它与计算机间的通讯。状态发光二极管会快速闪4次(频率大约4赫兹),然后保持暗状态,这说明计算机正在访问查寻。上电时,状态发光二极管会闪4次,在被计算机识别后会再闪1次后停留在亮的状态。若它没有被禁用,在进行短时读(Burst)和连续读(Stream)操作时也会闪。通过软件,如AISample,AIBurst,或AIStreamStart等函数可以控制该发光二极管的亮暗。由于它要用4-5毫安的电流,在某些应用中,可以禁用它以减少负载。2.2.2软件安装虽然Windows已包含了LabJack所需的USB底层驱动程序,但是它还需要高级驱动程序来进行数据的传送和接收。2.2.3硬件说明1.LabJack特性LabJackU12的正面图如图图2.2LabJackU12的正面图2.LabJack的外部特征有:LabJackU12有两个模拟电压输出的螺丝接线端。其电压输出在0和电源电压(一般为+5伏)之间,具有10位分辨率。输出电压是线性的,精度一般为±5%。如果要输出+5伏电压,其实际电压值会是100%的电源电压值。同样,要输出2.5伏,其实际值将是电源电压值的50%。在没有负载情况下,最大输出电压值几乎等于+5伏的100%。但它会随着负载的增加而降低。比如要输出2.5伏的电压,+5伏的电源电压测量值为5.1伏,那么实际的输出就是2.55伏(空载情况下)。另一种更好的方法是用模拟通道来直接测量模拟输出端的值。在每个模拟输出通道上有一个低通滤波器,其3dB截止频率为22赫兹。在上电或复位时,模拟输出电压初始化成0伏。模拟输出通道可以承受连续对地短路,不论其输出值大小。模拟输出口是输出口,千万不要把他们接到任何电压源上。软件用EAnalogOut或AOUpdate来输出电压,它们的执行时间为20ms,这相当于每通道的最大刷新频率约为50赫兹。AOUpdate还控制和读取20个数字输入输出口的状态和计数器的计数值。第三章方案的选择与设计3.1方案的选择3.1.1任意波形发生器简介任意波形发生器是信号源的一种,它具有信号源所有的特点和要领,我们传统都认为信号源主要给被测电路提供所需要的已知信号(各种波形),然后用其它仪表测量感兴趣的参数。可见信号源在电子实验和测试处理中,并不测量任何参数,而是根据使用者的要求,仿真各种测试信号,提供给被测电路,以达到测试的需要。3.1.2非虚拟的任意波形发生器1.工作原理任意波形发生器工作原理主要有两种:(1)一种是基于直接数字合成(DDS)技术的任意波形发生器。DDS技术的任意波形发生器的优点在于它非常高的频率分辨率和快速输出转换能力,缺点是在高频状态下的波形衰减。(2)另一种是传统的任意波形发生器。传统的发生器波形存储器可以分段工作,时钟频率可变,便于产生复杂的波形。2.有待改进之处传统的任意波形发生器多基于专用的硬件设备,这些设备价格昂贵、通用性差、可扩展能力弱。3.1.3虚拟的任意波形发生器任意波形发生器主要由软件控制完成信号的产生和输出。系统软件总体上包括波形的产生、波形显示、波形的存储、波形的加载以及波形的输出等模块。利用LabJack硬件和LabVIEW、VC及Delphi开发的虚拟仪器是仪器发展的方向,“软件就是仪器”。3.2设计的原理以及模块的划分3.2.1硬件部分选用LabJackU12数据采集卡对任意波形发生器所产生信号的进行采集,采集卡通过USB接口与电脑相连,USB接口既是采集卡的供电接口,又是采集卡与电脑进行数据通信的接口。采集到的信号将实时送入示波器或虚拟示波器(计算机)中进行信号的显示和分析处理。LabJackU12与计算机的系统连接图,包括:PC机、数据采集卡、USB电缆以及所要使用的端口。连接如图3.1所示:图3.1LabJackU12与计算机的系统连接图1.LabJackU12波形发生模块LabJackU12有两个模拟电压输出的螺丝接线端。其电压输出在0和电源电压(一般为+5伏)之间,具有10位分辨率。输出电压是线性的,精度一般为±5%。如果要输出+5伏电压,其实际电压值会是100%的电源电压值。同样,要输出2.5伏,其实际值将是电源电压值的50%。在没有负载情况下,最大输出电压值几乎等于+513伏的100%。但它会随着负载的增加而降低。2.设备驱动程序此设计用到的函数主要有:AOUpdate设定模拟输出电压,也可控制P读取20个数字IPO和计数器;GetErrorString把其它函数返回的出错代码转化成字符。正确安装数据采集卡、驱动程序、并将数据采集卡与计算机相连之后,即可通过LabVIEW编程进行数据的输出然后将数据通过数据采集卡与示波器或虚拟示波器(计算机)相连用以显示采集到的波形数据。3.2.2软件部分1.基于LabVIEW的软件设计平台LabVIEW虚拟仪器平台以简单直观的编程方式、众多源码级的设备驱动程序、丰富实用的分析表达功能和支持功能,使用户能快速地构建虚拟仪器系统。软件提供简单、直观、易于操作的图形编程方式,使用户得心应手地编制软件,构成仪器并实现任务和要求。虚拟系统由各种虚拟仪器组成,虚拟仪器由特定功能的元件组成其相互之间的关系,将成为关键。2.利用LabVIEW来编写驱动程序和软面板LabVIEW是NI公司开发的专用虚拟仪器平台,全图形化的编程方式大大缩短了虚拟仪器的开发时间。它提供了模拟真实仪表前面板的各种输入量控制及输出量显示的图形元件,用于构建前面板,还提供大量方便数据采集及仪器控制函数,用于构建仪器的软件。3.LabVIEW7.0虚拟仪器软件的构成LabVIEW虚拟仪器软件由前面板和程序框图两部分组成。(1)前面板是图形用户界面。是模仿真实仪器的测试及应用界面,该界面上有交互式的输入和输出两类控件,分别称为输入控件(Controls)和显示控件(Indicators)。输入控件包括开关、旋钮、按钮和其他各种输入设备;显示控件包括图形(Graph和Chart)、LED和其他显示输出对象。(2)程序框图是实现VI逻辑功能的图形化源代码。是虚拟仪器的“代码”,编程者根据仪器工作的目的,调用LabVIEW的功能函数模块,连线控制程序流。框图中的编程元素除了包括与前面板上的控件对应的连线端子(Terminal)外,还有函数、子VI、常量、结构和连线等。如果将VI与标准仪器相比较,那么前面板就相当于仪器的面板,而框图则相当于仪器箱内的功能部件。3.2.3仪器总体设计思想任意波形发生器的开发,基于LabVIEW的这个软件开发平台。根据LabVIEW7.1的特点结合信号源的需求,确定仪器的总体设计思想:1.利用鼠标绘制任意波形,波形编辑等。2.创建友好界面,实现输出波形相关参数的调整与同步显示。实现输出波形的精度高、功能强、稳定性好。3.2.4设计模块的划分软件设计是任意波形发生器设计的核心。根据上述总体设计思想,将该系统软件由波形编辑软面板、波形创建模块、波形编辑模块、波形处理模块和波形输出模块等部分构成,其波形编辑软件的功能框图如图3.2所示。1.波形编辑软面板波形编辑软件的主要功能是为了满足各种仿真实验的需要,不仅可以产生传统函数发生器产生的正弦波、方波、三角波以及锯齿波,还可以通过手工绘制来产生需要的波形。该软面板的编辑波形和处理波形的功能以菜单的方式进行选择,分别设置有“波形创建”、“手工绘制”、“波形编辑”、“波形处理”、“波形加载”、“波形存储”“波形清除”菜单项。2.波形创建模块(1)信号产生模块是该任意波形发生器的核心部分,该部分程序的主体是一个case结构。(2)任意波形模块的功能是生成用户利用波形图(graph)中的鼠标控件属性绘制的任意波形。在while循环中,读取graph中活动光标的当前位置,并与上次循环时的位置进行比较。如果有所不同,将调用子程序以生成新的波形。子程序主要功能就是判断是否需要更新波形。如果是的话,则在原位置和新位置间连直线替换原波形,并返回一布个布尔值为true的不尔常量,且保存新的光标位置以供下次循环调用。3.波形编辑模块波形编辑模块的功能是对当前通道内波形的编辑,可以手工编辑并修改波形。手工绘制波形是可以用最直观、最方便的方法对已有波形信号进行修改的方法。在波形显示区手工绘制波形的过程就如同在画图软件中使用铅笔绘画一样。4.波形处理模块波形的算术处理是指对已有的两个或者多个波形进行相加、相减、相乘、相除的处理,可以规类为在波形的纵向对其进行编辑。本设计中只涉及对波形的相加处理。5.波形输出模块波形输出模块的功能是将用户选择的波形数据送到LabJackU12数据采集卡上,并控制该卡进行D/A转换,在指定的通道上输出相对应的模拟波形并送到示波器或虚拟示波器(计算机)上用以显示波形数据。第四章任意波形发生器的软件设计4.1任意波形发生器前面板的设计从波形图指示器中观测你所创建,编辑或想要输出的波形。通过通道选择不尔按钮可以选择你想要输出波形的通道,然后从通道编辑菜单中实现创建波形,编辑波形,波形处理,加载或存储波形,清除波形等功能。当需要输出波形时,按下开始按钮。终止波形的输出按下退出按钮。如图4.1所示:图4.1任意波形发生器的前面板4.1.1波形图指示器的创建以及属性的设置1.如何创建用位置工具从control模板中的graph子模板内选择waveformgraph指示器并放到前面板中的合适位置。标签是可见的,图例也是可见的。2.属性的设置(1)图例的设置通过右键单击指示器在弹出的快捷菜单中选择VisibleItems选项并从它的下拉菜单中对以上二属性进行设置。由于我所设计的任意波形发生器是双通道的,也就是可以同时输出两组波形数据,所以总共要创建四个波形图指示器,两个用来作为0、1通道已经创建波形的编辑区,另两个用来作为0、1通道输出波形的实时显示区。为了更清晰的分辨不同通道的波形,我分别对0、1通道波形的属性进行设置,右键单击想要设置的通道波形的图例,在弹出的快捷菜单中对相应的属性进行设置。我将0通道的波形设置为黄色,1通道的波形设置为红色,线的类型都为细实线。(2)其它属性的设置要想进一步对指示器的属性进行设置,右键单击指示器在弹出的快捷菜单中选择properties这一项可对指示器的外观,数值的格式和精度,线的属性,坐标范围和文件描述进行设置。因为采样点数为1024,所以我将X轴的范围设置为0到1023,精度位为1位,即从0.0到1023.0。Y轴的范围设置为0到5,精度位为1位,即从0.0到5.0。为了让两个通道的波形能够很清晰的显示在指示器上,我将图的主格线设置为绿色,将副格线设置为透明。如果主格、副格同时显示会使显示效果显得非常凌乱,除非你想要进行精确的计算和比较,那样才会是不错的选择。4.1.2功能按钮的创建以及属性的设置1.开始和退出按钮两个按钮的机械动作都定义为当按下时转换动作也即当按钮被按下时,控制量的状态发生改变,并一直保持到下一次按钮被按下时。这种动作不受程序读取控制量数值次数的影响。这里有一点需要注意,就是对于已经创建本地变量的布尔控件的机械动作只能定义为转换,不能定义为锁定;如果定义为锁定,则VI的任务栏的运行箭头会产生断裂,单击它会显示错误信息并提示你布尔值的锁定行为与本地变量不兼容。具体信息是如果一个布尔控件创建了相应的本地变量则它不能应用锁定的机械行为。一个具有转换行为并具有读属性的布尔控件值的本地变量会将自身的值复位到缺省状态。2.通道选择按钮的创建用位置工具从control模板的boolean子模板内获取rocker控件并放到前面板上合适位置上,它用来选择你想要创建的波形的输出通道。4.1.3数字控件和指示器的创建以及属性的设置1.演示模式用位置工具从control模板classiccontrols子模板中的classicboolean内选取dialogradiobutton并且将标签命名为演示模式。右键单击控件在弹出的快捷菜单中选择properties选项,将布尔控件开状态的颜色设为浅绿色,将布尔控件关状态的颜色设为深绿色。在演示模式下,任意波形发生器是不需要数据采集卡的。如果此时输出波形,错误提示区指示器会显示Noerror信息,本地标识号指示器的的值为0。在非演示模式下,任意波形发生器是需要使用数据采集卡的。如果此时输出波形,错误提示区指示器会显示NoLabJacksfound信息,本地标识号指示器的的值为-1。2.本地标识号用位置工具从control模板中的numeric子模板中选取数字指示器并且将标签命名为本地标识号。3.错误提示区用位置工具从control模板中的numeric子模板中选取数字指示器并且将标签命名为错误提示区。4.波形指示器用位置工具从control模板中的graph子模板内选择waveformgraph指示器并放到前面板中的合适位置。我总共要创建四个波形图指示器,两个用来作为0、1通道已经创建波形的编辑区并分别将标签命名为0通道波形编辑区和1通道波形编辑区,另两个用来作为0、1通道输出波形的实时显示区并分别将标签命名为0通道输出波形显示区和1通道输出波形显示区。4.1.4通道编辑菜单的创建以及属性的设置1.簇空壳的创建用位置工具从control模板中的array&cluster子模板内选择一个簇的空壳并放到前面板中合适的位置上,然后根据所要放置的控件的多少(也即所要实现功能的多少)用位置工具调整簇空壳的大小。2.簇元素的添加从control模板中的boolean子模板内选择布尔按钮控件,根据需要我总共创建了5个并按顺序依次将它们放入簇空壳中。布尔控件的文本名分别为创建任意波形,编辑当前波形,从文件中载入波形,保存波形到文件中,清除波形。这些只是在布尔值为假时所显示的文本内容,对于布尔值为真时的文本内容的创建可通过右键单击布尔控件在弹出的快捷菜单中选择Properties选项进行设置,而且也可通过此方法对控件的外观,机械属性以及功能描述进行设置。3.簇的使用注意事项这里有一点需要注意的是簇的成员可以是任意的数据类型,但是必须同时都是控制件或同时都是显示件。4.簇元素的介绍下面我分别对布尔型控制件的簇中的每个元素的功能进行介绍,以方便我们能够很好的熟识任意波形发生器前面板的功能。(1)任意波形:通过鼠标去画你想要的波形。(2)编辑波形:不管它是通过标准波形库创建的还是通过手工绘制产生的。你都可以编辑当前通道内的波形。(3)载入波形:从文件中加载之前被保存过的波形数据然后将它放到被选择的通道指示器中编辑和显示。(4)保存波形:把当前通道内的波形数据以文件的形式保存起来。(5)清除波形:清除当前通道内的波形数据。4.2任意波形发生器框图程序的设计此框图程序主要由两个while循环,和一个主case结构构成。最外面的循环实现控制波形的输出,内部的循环实现控制波形的产生。主case结构用来实现前面板中所创建的通道编辑菜单内的按钮的功能。如图4.2所示:图4.2任意波形发生器的框图程序4.2.1while循环1.while循环的创建我们首先从function模板的structure子模板中选择while循环并按下鼠标将边框拖到合适位置后松开鼠标即可,它会一直重复内部子框图程序一直到条件端子的条件不满足为止。这个端子是一个输入端子,接收一个特殊的布尔值。布尔值依赖于while循环的连续性行为。2.条件端子右键单击条件端子并且从快捷菜单中选择StopifTrue或者ContinueifTrue。你也可以将错误簇连到条件端子,右键单击端子然后从快捷菜单中选择StoponError选项或者ContinuewhileError选项。3.while循环的使用while循环至少执行一次,属于当型循环。计数端i会提供当前的循环次数,第一次循环时为0。4.退出按钮状态的恢复如图4.3所示图4.3退出按钮状态的恢复(1)问题的分析我在这里用前面板创建的退出按钮布尔控件来控制条件端子,但是在做这件事之前,我要从function模板的boolean子模板中选择取反(not)函数对布尔控件进行取反后再连接到条件端子。因为我所设置的循环条件是布尔值为真时继续循环,所以要想使退出按钮真正起作用,必须将它取反之后再连到条件端子。或者你也可以将循环条件设置成布尔值为假时继续循环,这样就不用加取反函数了。我还是采用前一种设置,由于这个布尔控件的机械属性是当按下时状态发生转换(switchwhenpressed),所以一旦我们按下这个按钮,它就会一直保持布尔值为真的状态,取反后条件端子判断为假,循环无法继续运行,也就是任意波形发生器无法正常启动。(2)问题的解决为了解决这个问题,我们可以创建一个退出按钮的本地变量,然后将取反后的值写入本地变量,这样每当我们按下退出按钮后,它就会自动恢复到原来的状态。在这里我具体谈谈有关本地变量的作用和特点。4.2.2本地变量定义本地变量是LabVIEW为改善图形化编程的灵活性局限而专门设计的一个特殊节点,主要解决数据和对象在同一VI程序中的复用。2.为什么要引用本地变量(localvariable)在LabVIEW中,前面板上的每一个控制或指示在框图程序上都有一个对应的端口,控制通过这个端口将数据传送给框图程序的其它节点,框图程序也可以通过这个端口为指示赋值。但是,这个端口是唯一的,一个控制或一个指示只有一个端口。而用户在编程时,经常需要在同一个VI框图程序中的不同位置多次为指示赋值,或多次从控制中取出数据,或者是为控制赋值(write属性),从指示中取出数据(read属性)。显然,这时仅用一个端口是无法实现这些操作的。本地变量的引入,巧妙地解决了这个问题。当你创建了一个本地变量时,相应前面板中对象的本地变量图标就会显示在框图程序上。向本地变量写入数据与将数据传递给其相应的端子是等同的,除此之外你也可以将数据写入控件或者从指示器中读取数据[14]。如前所述,使用本地变量可以在框图程序的不同位置访问前面板对象。前面板对象的本地变量相当于其端口的一个拷贝,它的值与该端口同步。也就是说,两者所包含的数据是相同的。3.本地变量的特点及局限一个本地变量就是其相应前面板对象的一个数据拷贝,要占用一定的内存。所以,应该在程序中控制本地变量的数量。LabVIEW是一种并行处理语言,只要节点的输入有效,节点就会执行。当程序中有多个本地变量时,就要特别注意这一点,因为这种并行执行可能造成意想不到的错误。本地变量与传统编程语言中的局部变量相似,就是它只能在同一个VI中使用,不能在不同的VI之间使用。4.2.3case结构还记得吗,我在前面板曾创建过一个内含八个布尔控件的簇,这八个按钮都对应着不同的功能,我们如何实现对不同功能的选择性执行,这就要用到case结构。1.case结构的创建我从function模板的structure子模板中选择case结构,放到while循环内合适的位置上,拖到合适大小松开鼠标即可。2.case结构的使用选择结构可以包含一个或多个子框图程序或子case,当执行case结构时只会执行其中某一种“情况"。(1)选择端子被连到选择端口的值会判断要执行哪一个case并且它可以是布尔型,字符串型,整型或枚举类型。我这里用到的是整型,选择端口的图标颜色也会随连接的数值类型而改变。默认情况是连接一个布尔量,图标为绿色,共有两个子框图程序。(2)子框图程序设置右键单击case结构的边框来添加或删除case。我总共创建了7个数值型case从0到6。.用标签工具去输入在case的选择标签中的值并且去配置每一个case要用的值。单击在选择标识上的增减箭头就可以滚动并通过有效的子框图程序。对于每一个case结构来说,用标签工具在case结构的顶部的case选择标识中输入一个单值或列表以及一定范围的数据。你也可以创建多个输入和输出通道并且为一个case结构指出一个缺省case。用标签工具修改子框图程序标识,可以设置子框图程序与选项的对应关系。我将它设置为..0或6..,前者表示小于或等于0的选项值都执行这个子框图程序,后者表示大于或等于6的选项值都执行这个子框图程序。如果你无意间将case结构的顺序弄错,没关系,你可以通过在选择结构边框的弹出菜单上选RearrangeCase...选项,之后会弹出一个对话框,在对话框中的CaseList中拖动子框图程序名到需要的位置。(3)数据通道的要求向选择结构边框内输入数据时,各个子框图程序连接或不连接这个数据通道都可以。但是从选择结构边框向外输出数据时,各个子框图程序都必须为这个通道连接数据。否则通道图标是中空的,程序运行按钮也是断开的。当各个子框图程序都为这个通道连接好数据以后,通道图标才变为实心的,程序才可以运行。但是如果允许没有连线的子框图程序输出默认值,可以在数据通道弹出菜单上选择UseDefaultIfUnwired选项。这时数据通道变为灰色,程序执行到没有为数据通道连线的子框图程序时,就输出相应数据类型的默认值。4.2.4创建波形1.判断通道编辑菜单中的按钮是否被按下我们如何去检索通道编辑菜单中哪个按钮被按下,首先我们要将簇转化为数组函数,这里我们要用到ClustertoArray函数,如图4.4所示:图4.4簇转换成数组函数 从function模板的array子模板中选择ClustertoArray即可。然后将这个函数的输出端作为Search1DArray函数的输入端,如图4.5所示:图4.5一维数组索引函数从function模板的array子模板中选择Search1DArray,这个函数在以startindex为开始的位置去查找一维数组中的一个元素,你没有必要在调用这个函数前对数组进行排序,因为查找是线性的。索引元素输入端的值是一个布尔值为真的常量,元素的类型应该和一维数组的类型相匹配。如果函数没有找到元素,则元素的索引值为-1。那么对应到case结构中为第0个case,对应的功能是不执行任何操作,也就是没有按钮被按下。由于函数返回的元素索引值是从0开始的,而我在case结构中所设置的的执行功能是从第1个case开始,所以要将一维数组索引函数所返回的元素索引值加上1后再连接到case结构的选择端子上,以使按下的按钮和其对应的功能匹配。2.六个功能case(1)第一个功能case:我们要创建一个子VI,它允许你从标准波形库中创建你自己的输出波形。如图4.6所示:图4.6第一个功能case的设计这个VI有一个通道选择输入端和一个波形输出端,我们将通道选择按钮连到它的输入端。注意,这个布尔控件是放在case结构以外的,因为在其它的case中也要使用它。它是作为输入通道而使用的,所以并不要求所有的子case都要连接到它。因为要实现0或1通道波形的选择性输出,所以我还要在这个case中创建一个缺省的case结构,假case中放入一个标签名为0通道波形编辑区的数组型指示器(直接右键单击波形库VI的输出端在弹出的快捷菜单中选择create选项并在下拉菜单中选选择indicater选项),真case中放入一个标签名为1通道波形编辑区的数组型指示器。将通道选择按钮也连到这个case结构的选择端子上,同时不要忘记将波形库VI的输出端连到不同通道的数组指示器上。(2)第二个功能case:实现任意波形的绘制,我们要创建一个子VI,它允许你画自己的波形。如图4.7所示:图4.7第二个功能case的设计这个VI同样包含一个通道选择输入端、初始波形输入端以及一个最终波形输出端。我们将通道选择按钮连到它的输入端。由于技术指标中已经指出分辨率是10位,所以每个缓冲区采样1024-个点。如果是这样,我们要用到ArraySubset函数,如图4.8所示:图4.8子数组函数从function模板中array子模板中选择即可,它的输出端会返回以index开始的数组的一部分并且包含length个元素。当你将一个数组连到这个函数的输入端时,函数会自动调整大小用以显示你所连接的数组中每一维的索引输入。我们要将最终波形输出端连接到ArraySubset函数的array输入端,然后在length输入端创建一个数值为1000的常量。在index输入端不被连接的情况下,缺省值是0。所创建的数值常量应作为输入通道放置在case结构之外,因为这些常量值在其他的子case中也要被用到,所以要将它设为部分子case的输入通道。同样我要创建一个用于显示不同通道波形的case结构,条件为真时将数据写入1通道的波形编辑区,条件为假时将数据写入0通道的波形编辑区。但这里所使用的通道指示器是前一个功能case中所创建的通道指示器的本地变量。(3)第三个功能case:实现对当前通道内波形的编辑,同样我们要用到任意波形绘制子VI和ArraySubset函数。如图4.9所示:图4.9第三个功能case的设计这个子case与上一个子case的不同之处在于它内部多创建了一个case结构,这个case结构的创建以及内部所放置的通道波形编辑区指示器和前面一个子case中所设计的如出一辙。但对于内部这个要作为初始波形输入端并实现不同通道波形选择的case结构,我们要将其内部的本地变量改为读属性(右键单击本地变量在弹出菜单中选择changetoread选项即可)。其它函数,结构,以及子VI端口的连接都和上一个功能case一样。(4)第四个功能case:实现将已经存在的波形数据从文件中提取并将其放入0或1通道波形编辑区指示器中编辑和显示。如图4.10所示:图4.10第四个功能case的设计这里我们要用到一个ReadFromSGLFile子VI(从function模板中fileI/O子模板内的binaryfileVIs中选择ReadFromSGLFile.vi即可)。从这个VI的1Darray输出端输出的波形也需要通过ArraySubset函数来限制每个缓冲的采样点数,然后再将这个函数的subarray输出端连接到用来实现不同通道波形选择输出的case结构内的的0和1通道波形编辑区指示器上。(5)第五个功能case:实现将当前通道波形编辑区指示器中的波形数据以文件的形式储存起来。如图4.11所示:图4.11第五个功能case的设计用新创建的用来实现不同通道波形选择的case结构中具有读属性的0,1通道波形编辑区指示器的本地变量读取数据,然后通过ArraySubset函数实现要存入文件中波形数据的采样点数的限制,最后将输出端连到WriteToSGLFile子VI的1Darray输入端上。(6)第六个功能case:实现对当前通道内的波形数据清零。如图4.12所示:图4.12第六个功能case的设计首先我们要创建一个空数组,这就要用到InitializeArray函数,如图4.13所示:图4.13初始化数组函数从function模板中array子模板内选取即可,这个函数可以创建一个n维数组,它的每一个元素都被初始化为element输入端的值。用位置工具调整这个函数的大小并且增加输出数组的维数。如果anydimensionsize输入端的值是0,则说明函数创建了一个空数组。然后将initializedarray输出端连接到用作不同通道波形选择输出的case结构内的通道波形编辑区指示器上,这样就可以实现对当前通道内波形数据的清除。(9)波形图的属性节点为什么要用属性节点?通过改变前面板对象属性节点的属性值,可以在程序运行中动态地改变前面板对象的属性。若需要同时改变前面板对象的多个属性,一种方法是创建多个属性节点,另外一种更加简捷的方法是在一个属性节点的图标上添加多个端口。添加的方法是操作工具拖动属性节点图标下边缘(或上边缘)的尺寸控制点,或在属性节点的右键弹出菜单中选择AddElement.属性节点与本地变量类似,也有读和写两种属性,在属性节点图标某一端口的右键弹出菜单中选择ChangetoRead或ChangetoWrite可改变该端口的读写属性,选择ChangeAlltoRead或ChangeAlltoWrite可改变属性节点图标中所有端口的读写属性。4.7任意波形绘制VI前面板的设计这个VI允许你通过拖动鼠标来手动绘制你想要的波形。如图4.32所示:图4.32任意波形绘制VI的前面板4.7.1输入控件的创建以及属性的设置从function模板array&cluster子模板中选择array空壳,然后将numeric子模板中的numericcontrol放到数组空壳中并命名为InitialWaveform,形成一个一维的数组控件。用来将已经创建的波形数据输入到框图程序中并根据用户需要进行编辑。从function模板boolean子模板中选择rocker布尔控件,命名为channel。用来实现对不同通道的选择输出。从function模板classiccontrol子模板的classicboolean中选择labeledoblongbutton,然后对它的属性进行设置,右键单击控件在弹出的快捷菜单中选properties选项。将按钮的开启状态的文本内容设为停止,关闭状态的文本内容设为完成。这个按钮可实现将手工绘制完毕的波形送回至任意波形发生器的前面板中编辑和显示。4.7.2输出指示器的创建以及相应功能的实现从function模板array&cluster子模板中选择array空壳,然后将从numeric子模板中选择的numericindicater放到数组空壳中并命名为FinalWaveform,形成一个一维的数组指示器。用来储存已经编辑好的波形数据。4.7.3用来绘制并显示波形的簇的创建以及相关的注意事项1.显示件的创建以及属性的设置从function模板array&cluster子模板中选择一个cluster空壳并放到前面板中合适的位置上,然后再创建2个numericindicater。第一个数字指示器中的缺省值被设为0,作为波形图簇元素中的Xo起始点,第二个数字指示器中的缺省值被设为1,作为波形图簇元素中的dx增量。从function模板graph子模板中选择一个waveformgraph,对波形图的属性进行设置,同样是从它的快捷菜单中选择properties选项,将横坐标范围设为0.0到1023.0,纵坐标的范围设置为0到5。数字的表达方式均为浮点型,横坐标的精度位为1位。波形图的底格色为绿色,显示主格并将副格设为透明。将鼠标的颜色设为白色,显示鼠标但不显示鼠标的名称,允许拖拽鼠标。2.两个簇中元素的匹配将已经创建的数字指示器和波形图指示器放到空簇中,放置顺序是先将缺省值为0的数字指示器放入,再将缺省值为1的数字指示器放入,最后再放入波形图指示器。图4.33两个簇中元素不匹配所产生的坏线提示如果两个簇中元素的顺序不匹配,就会产生坏线。你可以从文本帮助窗口(contexthelp)中看到如下解释:你已经连接了两个包含不同元素的簇并且会提示你在两个簇中的哪些元素有冲突。这样,你可以将冲突元素从新排序以保持两个簇中元素顺序的一致。如图4.33所示:4.8任意波形绘制VI框图程序的设计在这里我们创建一个while循环,并在循环边框上创建移位寄存器,实现绘制波形时对旧点的记忆,从而可以将绘制的完整波形呈现在用户面前。当然我还利用了while循环的移位寄存器实现鼠标点的记忆功能。同时,我还在while循环内创建了一个case结构,通过case结构实现对是否绘制新点来进行判断。如图4.34所示:图4.34任意波形绘制VI的框图程序4.8.1初始波形簇通道的创建1.bundle函数的使用从function模板cluster子模板中选择bundle函数,如图4.35所示:图4.35捆绑函数它将多个元素集合成一个簇。当你创建一个新簇时,你一定要连接所有的输入端。输出端簇中元素的顺序一定要和输入端簇中元素的顺序保持一致。在缺省情况下,bundle函数只有两个输入端,你可以通过用操作工具拖动属性节点图标下边缘(或上边缘)的尺寸控制点直接调整函数的大小或在函数输入端的右键弹出菜单中选择addinput选项来添加一个输入端[19]。4.8.2不同通道波形颜色的分配从本小节的题目分析,波形颜色属于前面板波形指示器的属性之一。要想实现属性的设置,首先我们要创建一个相关对象的属性节点。这里有一点需要注意,就是创建属性节点只能从前面板中创建,而相关对象的属性节点的图标只会在框图程序中显示。所以右键单击前面板上的波形图指示器在弹出的快捷菜单中选择create»propertynode。然后回到框图程序中,我们可以看到它的缺省属性为visible,直接单击属性节点上的白色区域,弹出的菜单中包含了有关波形图的所有属性,属性被选择为plotcolor。在缺省状态下,我们只能从属性节点中读取属性,而且在属性节点图标上右侧的小方向箭头是指向右的,这表示你正在读取属性值。为了实现设置属性信息的功能,右键单击节点图标,然后从快捷菜单中选择ChangetoWrite将属性节点的属性改为设置属性。图4.36不同通道波形颜色的分配节点会按照从上到下的顺序执行每一个连线端。如果在一个连线端产生了错误,则节点就会在这个连线端停止执行、返回一个错误并且也不会执行其它的连线端。你可以右键单击节点然后从快捷菜单中选择ErrorsInsideNode这一选项来忽略错误然后继续执行其它连线端。错误输出簇会报告造成错误的属性。我们用select函数实现不同通道波形颜色的选择,如图4.36所示:从function模板comparison子模板中选择select函数,将前面板创建的通道选择布尔控件连接到函数的选择端子(s)上,将一个红色的colorboxconstant连接到函数的真(t)输入端上,将一个黄色的colorboxconstant连接到函数的假(f)输入端上。将函数的输出端连接到新创建的波形图属性节点上以实现对不同通道波形颜色的设置。最后强调一点,我们可以从图中看到,在select函数的输出端还有一条连接到while循环左边框上的通道,这是为什么呢?其实不连接这条线,不同通道波形颜色分配的功能也能够实现。但是,这样做的后果可能导致未知的错误。所以,为了保险起见,这条指明了数据流向的线还是非连不可的。4.8.3初始化波形图的属性在绘制图形前,我们首先要复位鼠标的位置和波形图的坐标范围。然后再读取鼠标的位置作为while循环左边框上移位寄存器的初值用以保证事件的正确顺序。如图4.37所示:图4.37初始化波形图的属性同样,我们要创建波形图的属性节点,这里我们要用到的属性如下:ActiveCursor属性:通过这个属性我们可以获取和设置有效的鼠标并且设置鼠标的属性和行为方式。例如,你能够用SelectedCursor属性指出当前图形或图表中你所选择的鼠标,然后用ActiveCursor属性将鼠标设置到你想要通过用鼠标属性和它的行为方式来修正的鼠标上。ActiveCursor属性并不会返回用户选择的鼠标。用SelectedCursor属性来获取用户选择的鼠标。Range属性:波形图的坐标范围被指定为一个包含最小值、最大值、增量、最小增量和起始位置的5个元素的簇。CursorPosition属性:是用来设置或读取X-Y坐标中鼠标的位置。从图中可以看到,我将波形图的X坐标范围设为从0到1023,增量为1,最小增量为0.1,起始位置为0。将波形图的Y坐标的范围设为从0到5,增量为1,最小增量为0.1,起始位置为0。同时我还将鼠标的初始位置定位在坐标原点。以上三个属性都是通过使用bundle函数将各个元素捆绑成簇然后写入波形图的属性节点中。在对波形图的属性设置完毕后,我们还要在同一个属性节点上增加一个CursorPosition属性,此时是读取刚才所设置的鼠标位置值,然后将它作为用来记忆鼠标位置值的移位寄存器的初始值。4.8.4判断波形图中的鼠标位置是否移动在while循环中再创建一个波形图的属性节点并将此节点的属性设置为ActiveCursor属性,然后将常量0写入这个属性中用来读取当前鼠标的位置,用一个NotEqual?函数与记忆鼠标位置值的移位寄存器初始值进行比较。如果函数返回的值为真,则表明鼠标的位置不在起始点,而是被移动了。所以我们要创建一个新的case结构用来完成绘制新点的操作,同时将NotEqual?函数的输出端连接到case结构的条件端子上。如图4.38所示:图4.38判断波形图中的鼠标位置是否移动当条件端子的条件为真时,我们要将当前的坐标位置值和用来记忆上一次鼠标坐标位置的移位寄存器的值作为绘制新点子VI的输入端,通过这个VI完成绘制方向的判断以及两点之间的插值运算从而可以在波形图上看到连续的曲线。这个VI还有一个原始波形簇输入端,是作为case结构左边框上的输入通道;一个更新后的最终波形簇输出端,是被作为case结构右边框上的输出通道;一个用来判断是否更新波形图的布尔值输出端,同时也被作为case结构右边框上的输出通道。只有是第一次while循环或者画新点子VI的更新标志输出端为真时,才将更新后的波形图显示在前面板上的波形图指示器中。条件端子的条件为假时,则表明鼠标的位置没有被改变。我们只需将原始波形簇直接穿过case结构,同时将一个布尔值为假的布尔常量作为输出通道连接到假case的右边框上,用来作为不进行波形更新的标志。4.8.5记忆鼠标的前一次位置值用select函数,将刚才介绍过的更新标志值作为此函数的s输入端,如果函数判断输出端的布尔值为真,也就是说发生了波形更新,则输出当前鼠标的位置值;如果函数判断输出端的布尔值为假,也就是说没有发生波形更新,则输出上一次的鼠标位置值,也就是被储存在while循环右边框上移位寄存器中的鼠标位置值。最后我们将select函数输出端的值连接到while循环右边框上的移位寄存器中用来记忆鼠标的当前位置值并将值传递给左移位寄存器中以实现移位寄存器间值的传递。4.8.6波形的显示和输出前面已经提过通过更新标志位和i值作为是否有更新的波形输出的判断条件。而这个条件是要连接到一个case结构的条件端子上,于是我们创建一个case结构,在条件为真时,也就是在真case中创建一个用来显示更新后的波形的簇。然后将绘制新点子VI波形簇的输出通道直接连到这个更新后的波形显示簇上。对于这个更新后的波形簇中的元素顺序以及它的数据类型,一定要和连入的簇中的的元素顺序以及它的数据类型保持一致。否则,会产生不匹配的坏线。对于波形的输出,将绘制新点子VI的波形簇输出端的直接连到while循环的右移位寄存器上用来储存波形簇的值,以实现新旧波形簇值的传递和记忆。同时,将这个簇在while循环外的输出通道上连接一个unbundle函数,分离出它的波形数组元素并连接到一个一维数组指示器上以实现波形数据的输出。4.9绘制新点子VI前面板的设计如图4.39所示:图4.39绘制新点子VI的前面板4.10绘制新点子VI框图程序的设计这个VI的设计主要包括以下几部分,波形图中数据是否为零的判断、绘制点方向的判断、起始点位置的计算、添加点数的计算以及新数据开始位置的计算,还有一个就是对于起始点位置超出数组大小后的处理。如图4.40所示:图4.40绘制新点子VI的框图程序4.10.1判断数组中是否存在波形数据如果图形簇中的元素数组,它的大小为零也就是没有数据,这个判断是通过用ArraySize函数完成的然后再使用EqualTo0?函数将它的输出端连接到case结构的条件选择端用来实现数组是否存在波形数据的判断。如图4.41所示:图4.41判断数组中是否存在波形数据的设计4.10.2数组中不存在波形数据的情况当case结构的条件选择端的条件为真时,我们所要做的就是将原有的图形簇中的元素,用,的值进行替换。而为了保证操作的准确性,我们要对数组中是否有数据再一次进行判断,所以我们在case结构中的真case中再创建一个case结构,同样将EqualTo0?函数的输出端作为判断的条件连到新创建的case结构的条件选择端上。完成替换所要使用的是BundleByName函数,但是在对进行替换前,要先使用一个BuildArray函数(从function模板中array子模板中选择即可)将Yf标量值转换成为数组,然后再进行簇中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论