求一个labview 计算器vi下载输入编号的vi,具体就是按下一个布尔按钮后,弹出一个让你输入编号的对话框,输入

文档分类:
在线文档经过高度压缩,下载原文更清晰。
淘豆网网友近日为您收集整理了关于虚拟仪器基于labview的模拟电路实验虚拟系统的设计的文档,希望对您的工作和学习有所帮助。以下是文档介绍:虚拟仪器基于labview的模拟电路实验虚拟系统的设计 昆明理工大学综合设计实验报告信息工程与自动化学院自动化系题目基于 labview 的模拟电路实验虚拟系统的设计姓名学号专业设计时间 一、选题分析目前,电路和电子技术实验是电类专业学生必修并且非常重要的专业基础课,实验中常用的传统仪器包括:数字万用表、函数信号发生器、示波器、直流稳压电源等。很多专业性实验还需要一些特殊仪器,比如波特仪、直流电桥、逻辑分析仪等。熟练使用仪器是学生通过实验必须具备的一个基本技能,但实验中往往由于学生紧张,仪器较多,结果学生经常忙于调节仪器而没有太多时间专注于对实验原理的研究和实验结果的分析,导致实验的效果并不理想,也不利于学生更深层次的学习和提高。虚拟仪器的设计思想是基于计算机的强大功能,采用接口标准化的硬件进行数据采集,而对数据的分析、处理、显示则通过软件编程实现,即采用“软面板”,用户自己定义仪器功能。我们可以在通过电路实验练习掌握传统仪器,在这种基础之上接触并学习虚拟仪器,并将虚拟仪器运用到电子技术实验中,就可以减少对仪器问题的困惑,而使我们分析及解决问题能力得以提升,并且可以早(来源:淘豆网[/p-.html])点通过使用虚拟仪器提前与专业接触,更有利于与后续专业课的学习和提高[1]。积分微分器的实质是对信号进行处理,传统的积分微分器的设计是用窗口函数将理想积分微分器的脉冲响应截断来实现的,不同的窗口函数以及不同的窗口宽度对设计的积分微分器都有较大的影响。对于虚拟仪器来说,则具有丰富的函数功能、数值分析、可编程性以及直观等众多优势。因此,研究虚拟积分微分器具有十分重要的实际意义。LabVIEW 是一种图形化编程语言,作为数据采集和仪器控制软件的标准被广泛应用于工业界、学术界和研究性实验室。LabVIEW 是功能强大、灵活的多平台仪器和分析软件系统。通过采用虚拟仪器开发语言 LabVIEW 开发一个积分微分器,阐述基于 LabVIEW 的虚拟仪器在模拟电路实验中应用的实践性,并完成系统的仿真调试,让学生能够真正地的理解并完全地掌握 LabVIEW 技术。二、方案设计与论证1、虚拟仪器 VI 的设计(1)、在虚拟仪器前面板设置窗口控件,并创建“流程图”中的端口。首先在前面板开发窗口使用工具模块中的相应工(来源:淘豆网[/p-.html])具,从控制面板中取出和放置好所需要的软件,进行控件属性参数设置,标贴文字说明标签。前面板是模仿实际仪器的面板,通过鼠标和键盘为控制对象输入数据,然后在计算机屏幕上显示结果。(2)编写试验系统的流程图,虚拟仪器从流程图中接受命令。在流程图编辑窗口,放置节点、图框,并创建前面板控件,在流程图编辑窗口使用工具模板中相应工具,从 Functions 模板中取用并放置好所需要的图标,它们是流程图中的“节点”、“图框”。(3)数据流编辑,是使用连接工具按数据流的方向将端口、节点、图框相连,实现数据从源头按规定的运行方式达到目的终点。(4)运行检验,有两种检验方法,即仿真检验和实测检验。(5)数据观察。当检验观察中发现错误时,用鼠标点击“HighlightExecution&按钮,观察数据流中各个节点的数值。(6)命令存盘,保存设计好的虚拟仪器 VI。2、信号发生器的实现信号发生器是指产生所需参数的电测信号的仪器。按信号波形可分为正弦信号、函数信号、脉冲信号和随机信号等四大类。信号发生器又称为信(来源:淘豆网[/p-.html])号源或者振荡器,在生产实践和科技领域中有着广泛的应用。各种波形曲线均可以用三角函数方程式来表示。能够产生多种波形,如三角波、锯齿波、矩形波、正弦波的电路被称为函数信号发生器。3、基本信号发生器的实现基本信号发生器是用来产生各种常用的信号波形,包括正弦信号、余弦信号、方波信号、三角波信号、锯齿波信号等。用到的函数是 Basic Function Generator函数,其中用输入控件来控制信号的类型、频率、幅值和相位等参数,用图表显示信号波形。基本信号发生器的前面板及流程图如图 1-1、1-2 所示。图1-1基本信号发生器流程图图 1-2 基本信号发生器前面板图4、模拟信号发生器的实现模拟信号发生器用函数 Simulate Signal 来实现,将信号的幅值、频率、相位等参数放在一个簇来完成,模拟信号波形用 Waveform Graph 来显示,通过改变信号的参数可以得到不同的波形。模拟信号发生器的前面板和流程图如图1-3,1-4所示。图1-3 模拟信号发生器流程图图1-4 模拟信号发生器前面(来源:淘豆网[/p-.html])板图5、积分微分器的设计(1)仪器面板图采用 Waveform Graph 来显示信号积分微分前后的波形,信号类型可以选择波形的类型(如正弦波、方波、三角波或锯齿波),可以通过前面板上的按钮(幅值、频率、相位和偏移量)来设定仿真信号的一些参数[9]。(2)仿真信号的生成采用 LabVIEW 中设计的典型信号生成模块。将仿真信号生成和函数处理经过必要的连接放入一个 Whlie 循环结构中就构成了积分微分器流程图。6、积分微分器流程设计积分微分器的流程图如图1-5所示。图 1-5 积分微分器流程图程序运行过程如图1-6所示:图 1-6 程序运行过程图参数设置主要对输入波形的类型还有参数进行设置,如正弦波、方波、三角波、锯齿波等设置,还有进行参数的设置,如频率、振幅、偏移量、延时、相位进行设置。参数设置如图 1-7。图 4-7 参数设置图7、积分微分器前面板的实现前面板就是用户用来跟程序交互的一个工具。当运行 VI 时,打开前面板,然后向执行程序输入数据。前面板用于设置输入数值和观察输出值,可以通(来源:淘豆网[/p-.html])过运用前面板上的按钮等来实现各种所需的操作,利用 LabVIEW 中的控制模块可以完成对信号的选择和各种参数的设定。如频率、幅值、相位、偏移量等。如果经过处理后的信号不与理论效果相符,还可以通过重置按钮重新设定参数等,虚拟积分微分器的前面板如图 1-8 所示。图 4-8 前面板图由上图可知,前面板由三个波形图构成,上边的是积分微分前的波形图,下边的是经过积分微分的波形图。左边的是对波形参数设置的按钮。如果经过积分微分处理后的波形图与理论不符合,可以通过信号重置按钮重新都参数进行设定。三、程序的前面板和程序框图的设计与调试步骤1、积分微分器流程图设计最后,生成仿真信号、选择和函数处理,再连线后加入一个 While 循环结构设置一个延时器,就完成了积分微分器的基本流程了。积分微分器程序框图如图1-9,1-10 所示。图 1-9 正弦波/方波程序图当按下布尔,条件变为真时,程序选择输入为三角波、锯齿波,如下图:图 1-10 三角波/锯齿波程序图2、积分微分器的调试过程积分电路是一种应用比较广泛的模(来源:淘豆网[/p-.html])拟信号运算电路。它是组成模拟计算机的基本单元。积分电路是控制和测量系统中学用的重要单元,利用其充放电过程可以实现延时、定时以及各种波形的产生。[10]对于输入信号的不同,积分电路可表现出不同的输出特性:积分电路能将输入的矩形波电压变换成斜坡电压,具有变换波形的作用,也就是说能把一个方波变成三角波,即若输入为方波信号,则积分电路表现为充电与放电交替进行的状态,对外表现为三角波,积分电路也具有移相的作用,也就是能把正弦波变成余弦波。若输入为正弦波,则积分电路表现为输出超前输入 9O 度相位的正弦波。微分是积分的逆运算,微分电路也具有移相作用,当输入电压为正弦波时,输出波形将滞后 90 度,成为余弦波。当输入信号为三角波信号时,输出电压的波形为方波,输出电压与输入电压的相位相反。当按下信号选择器按钮选择正弦波的布尔按钮选择为假之后,并对输入波形参数进行设置,设置延时为 0.5s,幅值为 10,频率为 80,相位为 40,偏移量为 0时,然后进行微分流程,波形在前面板显示。四、实验实验结果及分析1、正弦波积分微分结果图 1-11 正弦波积分微分波形图2、方波积分微分结果变化波形之后,选择方波运行,结果如下图所示:图 1-12 方波积分微分波形图3、三角波积分微分结果按下布尔按钮选择为真的一支之后,然后选择输入三角波,结果如下图所示:播放器加载中,请稍候...
该用户其他文档
下载所得到的文件列表虚拟仪器基于labview的模拟电路实验虚拟系统的设计.doc
文档介绍:
虚拟仪器基于labview的模拟电路实验虚拟系统的设计 昆明理工大学综合设计实验报告信息工程与自动化学院自动化系题目基于 labview 的模拟电路实验虚拟系统的设计姓名学号专业设计时间 一、选题分析目前,电路和电子技术实验是电类专业学生必修并且非常重要的专业基础课,实验中常用的传统仪器包括:数字万用表、函数信...
内容来自淘豆网转载请标明出处.风格设定:
您的位置:&&&&&&&&&工控与测量
基于LabVIEW8.6和S3C2440的数字波形表界面设计
作者:&&&&时间:&&&&来源:EDN&
WindowsCE LabVIEWtoueh panelWindows CE 50
S3C2440AS3C2440A
LabVIEWLabVIEWtouch panelLabVIEWWindows CE
3)& Tab Control
Modern&& Containers&&Tab Control&&4 Modern&&Graph&&XY Gr-aphModern&&Numeric&&Numeric Indicator2
funcTIons&&programming&&waveform&&analog waveform&&wave measurement&&Basic DCRMSBasic DCRMSviDCRMSDC valueRMS value
functions&&mathematic&&numeric&&viu(t)mathematics&&probability and StatisticsviAV
programming&&waveform&&analog waveformviY3
Copyright(C)2008 Electronic Design & Application World All rights reserved. &《电子设计应用》杂志社 版权所有
地址:北京海淀区复兴路15 号138 室 &&联系电话:(86)10- &&传真:(86)10- &&京ICP备号-3 北京市公安局备案号:[labview教程]labview2010经典基础教程完整_好文章摘抄-牛bb文章网
>New VI 或者从右半部分中的New>>Blank VI 都可以打开如下界面:上图中前图是虚拟仪器的" />
您的位置:&>&&>&&>&[labview教程]labview2010经典基础教程完整
[labview教程]labview2010经典基础教程完整
作者:opopnjf&&时间: 06:26:16
所属专栏:
第一讲:认识Labview1.1 Labview 简介在开始菜单里找见NI Labview7.1 点击打开,会出现如下界面:从File&&New VI 或者从右半部分中的New&&Blank VI 都可以打开如下界面:上图中前图是虚拟仪器的前面板,是用户使用的人机界面,后面的是程序框图界面(即后面板)。在LabVIEW的用户界面上,应特别注意它提供的操作模板,包括工具(Tools)模板、控制(Controls)模板和函数(Functions)模板。这些模板集中反映了该软件的功能与特征。下面我们来大致浏览一下。工具模板(Tools Palette)该模板提供了各种用于创建、修改和调试VI程序的工具。如果该模板没有出现,则可以在Windows菜单下选择Show ToolsPalette命令以显示该模板。当从模板内选择了任一种工具后,鼠标箭头就会变成该工具相应的形状。当从Windows菜单下选择了Show Help Window功能后,把工具模板内选定的任一种工具光标放在流程图程序的子程序(Sub VI)或图标上,就会显示相应的帮助信息。下面的两个模板是多层的,其中每一个子模板下还包括多个对象。控制模板(Control Palette)注意:只有打开前面板时才能调用该模板该模板用来给前面板设置各种所需的输出显示对象和输入控制对象。每个图标代表一类子模板。如果控制模板不显示,可以用Windows菜单的Show ControlsPalette功能打开它,也可以在前面板的空白处,点击鼠标右键,以弹出控制模板。控制模板如右图所示,它包括如下所示的一些子模板。子模板中包括的对象,我们在功能中用文字简要介绍。功能模板(Functions Palette)注:只有打开了流程图程序窗口(即后面板),才能出现功能模板。功能模板是创建流程图程序的工具。该模板上的每一个顶层图标都表示一个子模板。若功能模板不出现,则可以用Windows菜单下的Show Functions Palette功能打开它,也可以在流程图程序窗口的空白处点击鼠标右键以弹出功能模板。功能模板如右图所示,其子模块如下所示。(个别不常用的子模块未包含)下面我们通过练习掌握如何应用Labview7.1练习一:建立一个测量温度和容积的VI步骤如下:1. 选择 FileoNew VI,打开一个新的前面板窗口。2. 从 Controls&&All Controls&&numeric中选择 Tank放到前面板中。(注:如果前面板中没有Controls模版,可在菜单栏选window&&show controls palette,即可打开或直接点击鼠标右键)3. 在标签(Tank)文本框中输入“容积” ,然后在前面板中的其他任何位置单击一下。4. 同样从Controls&&All Controls&&numeric中选择Thermometer放到前面板中5. 在标签文本框中输入“温度计” ,然后在前面板中的其他任何位置单击一下。6. 把容器显示对象的显示范围设置为0.0到1000.0。a.双击容器坐标的10.0 标度,使它高亮显示。在坐标中输入 1000,再在前面板中的其他任何地方单击一下。 这时0.0到1000.0之间的增量将被自动显示。7. 在容器旁配数据显示。将鼠标移到容器上,点右键,在出现的快速菜单中选Visible Iterms&&Digital Display即可。前面板如下图所示:图1-1 练习一的前面板图8. Windows&&Show block Diagram 打开流程图窗口,在窗口中建立如下程序:图1-2 练习一的流程图该流程图中新增的对象有两个乘法器、两个数值常数、两个随机数发生器、一个延时函数,一个while循环,一个布尔常量,温度和容积对象是由前棉板的设置自动带出来的。a. 乘法器(Multiply)、随机数发生器(Random number (0--1))和数值常数(Numberic constant)由Functions&&AllFunctions&&Numeric中拖出。(注:如果面板中没有Functions模版,可以从菜单栏中选Window&&Show Functions palette 或点击鼠标右键)b. 延时函数(Time delay)可以从Functions&&AllFunctions&&Time&Dialog&&Time delay中拖出,在自动弹出的对话框中输入要延时的时间(比如0.5s)。9.连线:把鼠标放到函数端子上,当鼠标自动变为连线模式并出现一闪一闪时,点击一下鼠标左键然后找要连接的函数端子,当鼠标出现一闪一闪时,再次点击鼠标左键,这时就把两个函数连接起来了。10. 最后选Functions&&All Functions&&Structures&&While Loop,在已编好的程序左上角点击鼠标左键,然后移动鼠标,直到出现的虚线把程序全包含起来再点鼠标左键,就创建了一个While循环。在右下角条件端子上点击鼠标右键,再弹出的菜单里选Creat constant就可,目的是让循环能够维持下去。11. 在前面板中,单击Run(运行)按钮,运行该 VI12. 在后面板的工具栏中点击类似灯泡状的按钮,就可以看见程序中各个数据流的走向。13. 选择 FileoSave, 把该VI 保存到任意目录下。14. 选择FileoClose,关闭该 VI 。练习一 结束附注与说明:1. 显示对象(Indicator)、控制对象(Control)和数值常数对象显示对象和控制对象都是前面板上的控件,前者有输入端子而无输出端子,后者正好相反,它们分别相当于普通编程语言中的输出参数和输入参数。数值常数对象可以看成是控制对象的一个特例。在前面板中创建新的控制对象或显示对象时,LabVIEW 都会在流程图中创建对应的端子。端子的符号反映该对象的数据类型。例如,DBL 符号表示对象数据类型是双精度数;TF符号表示布尔数;I16 符号表示16位整型数;ABC符号表示对象数据类型是字符串。一个对象应当是显示对象还是控制对象必须弄清楚,否则无法正确连线。有时他们的图标是相似或相同的,可以根据需要明确规定它是显示对象还是控制对象。方法是将鼠标移到图标上,然后点右键,可出现快速菜单(例见右图)。如果菜单中的第一项是Chang to Control,说明这是一个显示对象,你可以根据需要,将其变为控制对象。如果菜单中的第一项是Chang to Indicator ,说明这是一个控制对象,你也可以根据需要,将其变为显示对象。2. 关于连线连线是程序设计中较为复杂的问题。流程图上的每一个对象都带有自己的连线端子,连线将构成对象之间的数据通道。因为这不是几何意义上的连线,因此并非任意两个端子间都可连线,连线类似于普通程序中的变量。数据单向流动,从源端口向一个或多个目的端口流动。不同的线型代表不同的数据类型。下面是一些常用数据类型所对应的线型和颜色:当需要连接两个端点时,在第一个端点上点击连线工具(从工具模板栏调用),然后移动到另一个端点,再点击第二个端点。端点的先后次序不影响数据流动的方向。当把连线工具放在端点上时,该端点区域将会闪烁,表示连线将会接通该端点。当把连线工具从一个端口接到另一个端口时,不需要按住鼠标键。当需要连线转弯时,点击一次鼠标键,即可以正交垂直方向地弯曲连线,按空格键可以改变转角的方向。接线头是为了帮助正确连接端口的连线。当把连线工具放到端口上,接线头就会弹出。接线头还有一个黄色小标识框,显示该端口的名字。线型为波折号的连线表示坏线。出现坏线的原因有很多,例如:连接了两个控制对象;源端子和终点端子的数据类型不匹配(例如一个是数字型,而另一个是布尔型)。可以通过使用定位工具点击坏线再按下 &Delete& 来删除它。选择 EditoRemove Bad Wires 或者按下&Ctrl-B& 可以一次删除流程图中的所有坏线。当 VI 无法运行,或者显示 Signal has Loose Ends (信号丢失终端)的错误信息时,这是一个快捷的调试方法。程序调试技术(以下操作大家可以用练习一尝试)1.找出语法错误如果一个VI程序存在语法错误,则在面板工具条上的运行按钮会变成一个折断的箭头,表示程序不能被执行。这时该按钮被称作错误列表。点击它,则LabVIEW弹出错误清单窗口,点击其中任何一个所列出的错误,选用Find功能,则出错的对象或端口就会变成高亮。2.设置执行程序高亮在LabVIEW的工具条上有一个画着灯泡的按钮,这个按钮叫做“高亮执行”按钮上。点击这个按钮使它变成高亮形式,再点击运行按钮,VI程序就以较慢的速度运行,没有被执行的代码灰色显示,执行后的代码高亮显示,并显示数据流线上的数据值。这样,你就可以根据数据的流动状态跟踪程序的执行。3.断点与单步执行为了查找程序中的逻辑错误,有时希望流程图程序一个节点一个节点地执行。使用断点工具可以在程序的某一地点中止程序执行,用探针或者单步方式查看数据。使用断点工具时,点击你希望设置或者清除断点的地方。断点的显示对于节点或者图框表示为红框,对于连线表示为红点。当VI程序运行到断点被设置处,程序被暂停在将要执行的节点,以闪烁表示。按下单步执行按钮,闪烁的节点被执行,下一个将要执行的节点变为闪烁,指示它将被执行。你也可以点击暂停按钮,这样程序将连续执行直到下一个断点。4.探针可用探针工具来查看当流程图程序流经某一根连接线时的数据值。从Tools工具模板选择探针工具,再用鼠标左建点击你希望放置探针的连接线。这时显示器上会出现一个探针显示窗口。该窗口总是被显示在前面板窗口或流程图窗口的上面。在流程图中使用选择工具或连线工具,在连线上点击鼠标右键,在连线的弹出式菜单中选择“探针”命令,同样可以为该连线加上一个探针。1.2 子VI的建立子VI(SubVI)相当于普通编程语言中的子程序,也就是被其他的 VI调用的VI。可以将任何一个定义了图标和联接器的 VI作为另一个 VI的子程序。在流程图中打开 FunctionsoSelect a VI?. ,就可以选择要调用的子 VI 。构造一个子VI主要的工作就是定义它的图标和联接器。每个VI在前面板和流程图窗口的右上角都显示了一个默认的图标。启动图标编辑器的方法是,用鼠标右键单击面板窗口的右上角的默认图标,在弹出菜单中选择 Edit Icon。下图显示了图标编辑器的窗口。可以用窗口左边的各种工具设计像素编辑区中的图标形状。编辑区右侧的一个方框中显示了一个实际大小的图标。图标编辑器的具体使用细节参阅练习二图标编辑器窗口联接器是 VI 数据的输入输出接口。如果用面板控制对象或者显示对象从子 VI 中输出或者输入数据,那么这些对象都需要在联接器面板中有一个连线端子。您可以通过选择 VI的端子数并为每个端子指定对应的前面板对象以定义联接器。定义联接器的方法是,用鼠标右键单击面板窗口中的图标窗口,在快捷菜单中选择 Show Connector。联接器图标会取代面板窗口右上角的图标。LabVIEW 自动选择的端子连接模式是控制对象的端子位于联接器窗口的左边,显示对象的端子位于联接器窗口右边。选择的端子数取决于前面板中控制对象和显示对象的个数。联接器中的各个矩形表示各个端子所在的区域,可以用它们从 VI 中输入或者输出数据。如果必要,也可以选择另外一种端子连接模式。方法是在图标上单击鼠标右键单出快捷菜单,选择 Show Connector,再次弹出快捷菜单,选择Patterns。下面我们通过一个练习说明具体操作。练习二:子VI的建立及调用步骤如下:1. 打开一个NEW VI2. 在前面板中放置一个Number control 控件(数据输入控件)和一个Number Indicator控件(数据显示),都在All controls&&numberic模板下并把标签分别改为 X 和 X^6,如下图:3. 后面板程序图如下图连接,这是一个计算X 的6次方程序4. 在前面板中,用鼠标右键单击窗口右上角的图标,在快捷菜单中选择 Edit Icon….,也可以双击图标激活图标编辑器。注意只能在前面板中编辑图标和联接器。5. 删除默认图标。使用Select Tool(矩形框),单击并拖动想要删除的部分,按下&Delete&。也可以通过双击工具框中的阴影矩形删除图标。6. 用 Text Tool(文本工具) 创建文本(写好后可以用方向键移动文字在图标中的位置)。得到图标将如下图所示。7. 单击OK,关闭编辑器。新创建的图标就显示在屏幕右上角的图标窗口中。8. 用鼠标右键单击前面板中的图标窗口,在快捷菜单中选择Show Connector,设置联接器端子连接模式。在默认情况下,LabVIEW 会根据前面板中的控制对象和显示对象的数目确定联接器的端子连接模式。因为前面板中有两个对象,所以联接器有两个端子,如右图所示。用鼠标右键单击联接器窗口,在快捷菜单中选择Rotate90 Degrees(旋转90度),注意联接器窗口的变化,如右图所示。9. 端子连接到X和X^6:a. 点击联接器左部端子。光标自动变成连线工具,同时端子变成黑色。b. 单击X控件对象。一个移动的虚线框把它包围起来,选中的端子的颜色变为与控制/显示对象的数据类型一致的颜色。如果单击前面板中的任何空白区域以后,虚线消失,选中的端子变暗,这表示您已经成功地把显示对象和上部端子连接起来。如果端子是白色,则表示没有连接成功。c. 重复步骤a 和 b,把右部的端子和X^6连接起来。c. 用鼠标右键单击联接器,在快捷菜单中选择Show Icon.10.选择FileoSave ,保存该 VI,保存名为X^6。这样这个 VI 就完成了,并也可以作为子 VI被其他的VI调用。子VI 的图标在主 VI 的流程图中代表它。11.调用子VI。新建一个New VI12.在前面板中放置一个Number control 控件和一个Number Indicator控件,并把标签分别改为 X 和 X^6,如下图13.后面板操作。在Functions&&All Functions&&Select a VI ,选中并打开刚才保存的VI,并连接好线如下图:14.运行该程序练习二 结束1.3 使用三种图表模式目的:查看 VI 分别在三种模式下执行时图表的显示。练习三:建立前面板及流程图如下步骤:1.在前面板放置chart(Controls&&All Controls&&Graph&&Waveform chart)控件2.在后面板放置Sine函数(Functions&&All Functions&&Numberic&& Trigonometric&&sine)及Wait Until Next ms Multiple 函数(Functions&&All Functions&&Time&Dialog&& Wait Until Next ms Multiple)并在左端子建立常数如100。最后放置while循环该程序中利用一个while循环产生连续的sin(i)函数值,并及时地在chart图表上显示出来,现在前面板上的chart是一个strip,这是一个坐标式显示器,与纸带式图表记录器相似。每接受一个新数据,新数据就将显示在右侧,而原有数据移动到左侧3.用鼠标选中chart,点击右键,可在快速菜单中选择AdvancedoUpdate Mode子菜单。可以选择更换其他两种更新模式。示波器模式是一个返回式的显示器,与示波器类似。每接受一个新数据时,它就把新数据绘制在原有数据的右侧。当数据曲线到达显示区的右边缘时,VI 会删除全部图形,从左边缘重新开始绘制曲线。示波器模式显然要快于条状图模式,因为它不会因为滚动产生溢出。扫描模式更接近于示波器模式,但是当数据曲线到达显示区的右边时,不会变成空白,而是会出现一个移动的垂线,标记新数据的开始,并当VI添加新数据时穿过整个显示区。练习三 结束。第二讲 程序结构循环结构While循环While 循环可以反复执行循环体的程序,直至到达某个边界条件。它类似于普通编程语言中的 Do 循环和 Repeat-Until 循环。While 循环的框图是一个大小可变的方框,用于执行框中的程序,直到条件端子接收到的布尔值为 FALSE。该循环有如下特点:计数从0开始(i=0)。先执行循环体,而后i+1,如果循环只执行一次,那么循环输出值i=0。 循环至少要运行一次。条件端子循环变量图4-1 While 循环示意图由于在练习一中已讲过While循环的应用,大家可以自己做下面的练习,其前面板和流程图如下图所示:2.1.1.1 移位寄存器(Shift Register)移位寄存器可以将数据从一个循环周期传递到另外一个周期。在程序设计中,经常要用到它.创建一个移位寄存器的方法是,用鼠标右键单击循环的左边或者右边,在快捷菜单中选择 AddShift Register。如右图所示。移位寄存器在流程图上用在循环边框上相应的一对端子来表示。右边的端子中存储了一个周期完成后的数据,这些数据在这个周期完成之后将被转移到左边的端子,赋给下一个周期。移位寄存器可以转移各种类型的数据--数值、布尔数、数组、字符串等等。它会自动适应与它连接的第一个对象的数据类型。下图表示了它的工作过程.图2-3 Shift Register的工作过程可以令移位寄存器记忆前面的多个周期的数值。这个功能对于计算数据均值非常有用。还可以创建其他的端子访问先前的周期的数据,方法是用鼠标右键单击左边或者右边的端子,在快捷菜单中选择Add Element。例如,如果某个移位寄存器左边的端口含有三个元素,那么就可以访问前三个周期的数据。练习四 使用移位寄存器目的:创建一个可以在图表中显示运行平均数的VI。前面板1. 打开一个新的前面板,按照下图所示创建对象。2. 把波形图表的坐标范围改为0.0到2.0。3. 在添加开关之后,用鼠标右键单击它,在快捷菜单中选择Mechanical ActionoLatch When Pressed,再选择OperateoMake Current Values Default,把ON状态设置为默认状态。练习四 的前面板流程图1.按下图创建流程图。练习四 的流程图2.在流程图中添加 While 循环(FunctionsoStructures),创建移位寄存器。a. 用鼠标右键单击While循环的左边或者右边,在快捷菜单中选择Add Shift Register。b. 用鼠标右键单击寄存器的左端子,在快捷菜单中选择Add Element,添加一个寄存器。用同样的方法创建第三个元素。3.Random Number (0C1)函数(FunctionsoNumeric)――产生0到1之间的某个随机数。<pound Arithmetic 函数(FunctionsoNumeric)――在本练习中,它将返回两个周期产生的随机数的和。如果要加入其他的输入,只需用右键单击某个输入,从快捷菜单中选择Add Input。5.除法函数(FunctionsoNumeric)――在本练习中,它用于返回最近四个随机数的平均值。6.数值常数(FunctionsoNumeric)――在While循环的每个周期,Random Number (0C1)函数将产生一个随机数。VI就将把这个数加入到存储在寄存器中的最近三个数值中。Random Number (0C1)再将结果除以4,就能得到这些数的平均值(当前数加上以前的三个数)。然后再将这个平均值显示在波形图中。7.Wait Until Next ms Multiple函数 (FunctionsoTime & Dialog)――它将确保循环的每个周期不会比毫秒输入快。在本练习中,毫秒输入的值是500毫秒。如果用鼠标右键单击图标,从快捷菜单中选择VisibleoLabel,就可以看到Wait Until Next ms Multiple的标签。8.用鼠标右键单击Wait Until Next ms Multiple 功能函数的输入端子,在快捷菜单中选择Create Constant。出现一个数值常数,并自动与功能函数连接。9.将Constant设置为500。这样连接到函数的数值常数设置了500毫秒的等待时间。因此循环每半秒执行一次。注意,VI用一个随机数作为移位寄存器的初始值。如果没有设置移位寄存器端子的初始值,它就含有一个默认的数值,或者上次运行结束时的数值,因此开始得到的平均数没有任何意义。10.执行该 VI,观察过程。11.把该 VI 保存。练习 四 结束。附注:移位寄存器的初值:上面的练习中对移位寄存器设置了初值0.5。如果不设这个初值,默认的初值是0。在这个例子中,一开始的计算结果是不对的,只有到循环完3次后移位寄存器中的过去值才填满,即第4次循环执行后可以得到正确的结果。2.1.2 For循环For循环用于将某段程序执行指定次数。和While 循环一样,它不会立刻出现在流程图中,而是出现一个小的图标,而后您可以修改它的大小和位置。具体的方法是,先单击所有端子的左上方,然后按下鼠标,拖曳出一个包含所有端子的矩形。释放鼠标时就创建了一个指定大小和位置的For循环。For循环将把它的框图中的程序执行指定的次数,For循环具有下面这两个端子:N: 计数端子(输入端子)――用于指定循环执行的次数。I: 周期端子(输出端子)――含有循环已经执行的次数。上图显示了一可以产生100个随机数并将数据显示在一个图表上的For循环。在该例中,i 的初值是0,终值是99。练习五 使用For循环目的:用For循环和移位寄存器计算一组随机数的最大值。1.打开一个新的前面板,按照下图创建对象。a.将一个数字显示对象放在前面板,设置它的标签为“最大值”。b.将一个波形图表放在前面板,设置它的标签为“随机数”。将图表的纵坐标范围改为0.0到1.0。c.在图表的快捷菜单中选择Visible ItemsoScrollbar和Digital Display,并隐藏Plot Legend。d.用移位工具修改滚动栏的大小。练习五 的前面板和流程图2.按照上图画流程图。3.在流程图中放置一个For循环(FunctionsoStructures)。4.在For循环的边框处单击鼠标右键,在快捷菜单中选择Add Shift Register。 5.将下列对象添加到流程图。a.Random Number (0C1)函数(FunctionsoNumeric)――产生0到1之间的某个随机数。b.数值常数(FunctionsoNumeric)――在这个练习中需要将移位寄存器的初始值设成0。c.Max&Min函数(FunctionsoComparison)――输入两个数值,再将它们的最大值输出到右上角,最小值输出到右下角。这里只需要最大值,只用连接最大值输出。d.数值常数(FunctionsoNumeric)――For循环需要知道需要执行的次数。本练习中是100次。6.按照上图连接各个端子。7.运行该VI。8.将该VI保存。练习五 结束。2.2 分支结构:CaseCase结构含有两个或者更多的子程序(Case),执行那一个取决于与选择端子或者选择对象的外部接口相连接的某个整数、布尔数、字符串或者标识的值。必须选择一个默认的Case以处理超出范围的数值,或者直接列出所有可能的输入数值。Case结构见下图,各个子程序占有各自的流程框,在其上沿中央有相应的子程序标识:Ture、False或1、2、3?。按钮用来改变当前显示的子程序(各子程序是重叠放在屏幕同一位置上的)。练习六使用 Case结构目的:创建一个VI以检查一个数值是否为正数。如果它是正的,VI就计算它的平方根,反之则显示出错。前面板1. 打开一个新的前面板,并按照下图所示创建对象。控制对象用于输入数值,显示对象用于显示该数值的平方根。流程图2. 照下图创建流程图。练习六的面板和流程图3. 从FunctionsoStructures中选择一个 Case结构,并放置在在流程图中。 Case 结构是一个可以改变大小的方框。先来做Ture的情况,照流程图上半部分构造。a. Greater Or Equal To 0? 函数(FunctionsoComparison)――如果输入数值大于或者等于0就会返回一个TRUE值。b. Square Root 函数(FunctionsoNumeric)――返回输入数值的平方根。连好线c. 点击Case框的选择按钮,转入False情况编程数值常数(FunctionsoNumeric)――这里用于显示错误的代数值-999.00。d. One Button Dialog函数(FunctionsoTime & Dialog)――在 这里它用于显示一个对话框,内容是Error...。e. 字符串常数 (FunctionsoString)――用Edit Text Tools在对话框中输入字符串。该VI在TRUE或者FALSE情况下都会执行。如果输入的数值大于等于0,VI会执行TRUE Case,返回该数的平方根,否则将会输出-999.00,并显示一个对话框,内容为Error...。返回前面板,运行该VI。修改标签为Number的数字式控制对象的数值,分别尝试一个正数和负数。注意,当把数字式控制对象的值改为负数时,LabVIEW会显示Case结构的FALSE Case中设置的出错信息。4. 保存该 VI。VI 的算法本练习中的流程图功能相当于代码式编程语言中的下列伪代码:if (Number &= 0) thenSquare Root Value = SQRT(Number)elseSquare Root Value = -999.00Display Message "Error.. "end if练习 六 结束。2.3 顺序结构和公式节点2.3.1 顺序结构(Sequence Structure)在代码式的传统编程语言中,默认的情况是,程序语句按照排列顺序执行,但LabVIEW中不同,它是一种图形化的数据流式编程语言。在下图左图中,假设有A、B、C、D4个节点,其数据流向如右图所示。按照数据流式语言的约定,顺序结构的说明任何一个节点只有在所有的输入数据有效时才会执行,所以图中,当且仅当A、B、C3个节点执行完,使得D节点的3个输入数据都到达D节点后,D节点才执行。但是你要注意,这里并没有规定A、B、C3个节点的执行顺序。在LabVIEW中这种情况下,A、B、C的执行顺序是不确定的,如果你需要对它们规定一个确定的顺序,那就需要使用本节介绍的“顺序结构”。上图中的右边是顺序结构的图标,它看上去像是电影胶片。它可以按一定顺序执行多个子程序。首先执行0帧中的程序,然后执行1帧中的程序,逐个执行下去。与Case结构类似,这多帧程序在流程图中占有同一个位置。练习 七 使用顺序结构目的:创建一个 VI,计算生成等于某个给定值的随机数所需要的时间。前面板打开一个新的前面板,并按照下图所示创建对象。练习七的前面板我们约定数据是0到100范围的整数。当前值用于显示当前产生的随机数。“执行次数”用于显示达到指定值循环执行的次数。匹配时间用来显示达到指定值所用的时间。流程图练习 七 的流程图(共3帧)1. 在流程图中放置顺序结构(FunctionsoStructures)。2. 用鼠标右键单击帧的边框,在快捷菜单中选择Add Frame After,创建一个新帧。重复这个步骤,再创建一个帧。共3桢。3. 选中第0桢,设置读取初始时间(子)程序4. 第0帧的下边框上含有一个小方框,其中有一个箭头。这个方框叫做顺序局 部变量,可以在同一个顺序结构中的各个帧之间传递数据。用鼠标右键单击第0 帧的底部边框,选择Add Sequence Local,创建顺序局部变量。顺序局部变量显示为一个空的方块。当您将某个功能函数与顺序局部变量相连时,方块中的箭头就会自动显示。5. Tick Count (ms) 函数(FunctionsoTime & Dialog)――返回启动 到现在的时间(以毫秒为单位)。在这里例子里需要使用两个这个函数。另一个在第2帧中。6. 按图连好线。转入第1帧。该帧是匹配计算,内含一个循环结构。该图中使 用的新函数有:Round to Nearest函数(FunctionsoNumeric)――在该例中,它用于取0到100之间的随机数到距离最近的整数。Not Equal?函数(Functionso Comparison)――在该例中,它将随机数和前面板中设置的数相比较,如果两者不相等会返回TRUE值,否则返回FALSE。Increment函数(FunctionsoNumeric)――在该例中,它将While循环的计数器加1。7. 按图连好线。转入第2帧在第0帧中,Tick Count (ms)功能函数将以毫秒为单位表示当前时间。这个数值被连到顺序局部变量,这样它就可以被后续的帧使用。在第1帧中,只要函数返回的值与指定值不等,VI就会持续执行While循环。在第2帧中,Tick Count (ms)功能函数以毫秒为单位返回新的时间。VI从中减去原来的时间(由第0帧通过顺序局部变量提供)就可以计算出花费的时间。 8. 返回前面板,在Number to Match控制对象中输入一个数值,执行该VI。 9. 把该VI保存。练习 七 结束。附注与说明:设置数据范围在设定一个数据对象时,可以设置对输入数据的限制,利用快捷键选择Data Range? 选项,将会出现如下对话框:图 设置数据范围它可以防止用户创建的控制对象或显示对象的值超出某个预设的范围。您可以选择忽略这个值,将它强制修改到范围以内,或暂停程序的执行。在程序执行时,如果发生溢出错误,溢出错误符号将显示在工具栏中的执行按钮的位置。而且,一个立体的黑框将把发生溢出的控制对象包围起来。2.3.2 公式节点(Formula Node)公式节点是一个大小可变的方框,可以利用它直接在流程图中输入公式。从FunctionsoStructures中选择公式节点就可以把它放到流程图中。当某个等式有很多变量或者非常复杂时,这个功能就非常有用。例如等式:y = x2 + x + 1使用公式节点可以表示为:公式节点示意图利用公式节点可以直接输入一个或者多个复杂的公式,而不用创建流程图的很多子程序。使用文本编辑工具来输入公式。创建公式节点的输入和输出端子的方法是,用鼠标右键单击第0帧的底部边框,选择Add Input (Add Output)。再在节点框中输入变量名称。变量名对大小写敏感。然后就可以在框中输入公式。每个公式语句都必须以分号(;)结尾。公式节点的帮助窗口中列出了可供公式节点使用的操作符、函数和语法规定。一般说来,它与C语言非常相似,大体上一个用C写的独立的程序块都可能用到公式节点中。但是仍然建议不要在一个公式节点中写过于复杂的代码程序。下面这个例子显示了如何在一个公式节点中执行不同条件时的数据发送。 请阅读下面这段程序代码,如果X为正数,它将算出X的平方根并把该值赋给Y,如果X为负数,程序就给Y赋值-99。if (x &= 0) theny = sqrt(x)elsey = -99end if可以用公式节点取代上面这段代码,如下图所示:注意:公式节点中变量字母X,Y大、小写是有区别的,开方的函数sqrt(X)中函数名称是小写。练习 八 使用公式节点目的:创建一个VI,它用公式节点计算下列等式:y1 = x 3 C x 2 + 5y2 = m* x + bx的范围是从0到10。可以对这两个公式使用同一个公式节点,并在同一个图表中显示结果。前面板Waveform Graphmb练习 八 的面板打开一个新的前面板,按照上图(该图中包含运行结果)创建前面板中的对象。波形图显示对象用于显示等式的图形。该 VI使用两个数字式控制对象来输入m和b的值。流程图按照下图创建流程图。练习 八 的流程图在创建某个输入或者输出端子时,必须给它指定一个变量名。这个变量名必须与公式节点中使用的变量名完全相符。公式节点中,在边框上单击鼠标右键,在快捷菜单中选择Add Input,可以创建三个输入端子。在快捷菜单中选择Add Output,创建输出端子。x的范围是从0到10(包括10),就必须连接11到计数端子。Build Array (FunctionsoArray)――在这个例子中,它用于将两个数据构成数组形式提供给一个多曲线的图形中。通过用变形工具拖拉边角就可以创建两个输入端子。返回前面板,尝试给m和b赋以不同的值再执行该 VI。把该VI保存。练习 八 结束。第三讲 数据类型:数组、簇和波形3.1 概述数组是同类型元素的集合。一个数组可以是一维或者多维,如果必要,每维最多可有231-1个元素。可以通过数组索引访问其中的每个元素。索引的范围是0到n C 1,其中n是数组中元素的个数。图3-1所显示的是由数值构成的一维数组。注意第一个元素的索引号为0,第二个是1,依此类推。数组的元素可以是数据、字符串等,但所有元素的数据类型必须一致。图3-1 数组示意图簇(Cluster)是另一种数据类型,它的元素可以是不同类型的数据。它类似于C语言中的stuct。使用簇可以把分布在流程图中各个位置的数据元素组合起来,这样可以减少连线的拥挤程度。减少子VI的连接端子的数量。波形(Waveform)可以理解为一种簇的变形,它不能算是一种有普遍意义的数据类型,但非常实用。3.2 数组的创建及自动索引3.2.1 创建数组一般说来,创建一个数组有两件事要做,首先要建一个数组的“壳”(shell),然后在这个壳中置入数组元素(数或字符串等)。如果需要用一个数组作为程序的数据源,可以选择FunctionsoArrayoArray Constant,将它放置在流程图中。然后再在数组框中放置数值常量、布尔数还是字符串常量。下图显示了在数组框放入字符串常量数组的例子。左边是一个数组壳,中间的图上已经置入了字符串元素,右边的图反映了数组的第0个元素为:”ABC”,后两个元素均为空。图3-1 数组的创建在前面板中创建数组的方法是,从Controls模板中选择Array & Cluster,把数组放置在前面板中,然后选择一个对象(例如数值常量)插入到数组框中。这样就创建了一个数值数组。也可以直接在前面板中创建数组和相应的控制对象,然后将它们复制或者拖曳到流程图中,创建对应的常数。还有很多在流程图中创建和初始化数组的方法,有些功能函数也可以生成数组。3.2.2 数组控制对象、常数对象和显示对象通过把数组与数值、布尔数、字符串或者簇组合在一起,可以在前面板和流程图中创建任何一种控制对象、常数对象和显示对象。数组元素不能是数组、图表或者图形。3.2.3 自动索引For循环和While循环可以自动地在数组的上下限范围内编索引和进行累计。这些功能称为自动索引。在启动自动索引功能以后,当把某个外部节点的任何一维元素连接到循环边框的某个输入通道时,该数组的各个元素就将按顺序一个一个地输入到循环中。循环会对一维数组中的标量元素,或者二维数组中的一维数组等编制索引。在输出通道也要执行同样的工作DD数组元素按顺序进入一维数组,一维数组进入二维数组,依此类推。在默认情况下,对于每个连接到For循环的数组都会执行自动索引功能。可以禁止这个功能的执行,方法是用鼠标右键单击通道(输入数组进入循环的位置),在快捷菜单中选择Disable Indexing。练习 九 创建一个自动索引的数组目的:使用 For 循环的自动索引功能创建数组,并用一个图形(Graph)显示该数组。前面板图3-2 练习 九 的面板1. 打开一个新的前面板。2. 选择ControlsoArray & Cluster,在前面板中放置一个数组。设置它的标签为Waveform Array。3. 选择ControlsoNumeric,在数组框中插入一个数字式显示对象。如右图所示。它用于显示数组的内容。4. 选择ControlsoGraph,在前面板中放置一个波形图。设置它的标签为Waveform Graph。5. 隐藏图例和模板。6. 用鼠标右键单击图形,并在快捷菜单中取消选中 YScaleoAutoscale Y,禁止自动坐标功能。7. 使用文本工具,把Y轴的范围改为-0.5到1.5。8. 按照下图创建流程图。图3-2 练习 九 的流程图由FunctionsoSelect a VI?寻找LabVIEW\activity目录下的Generate Waveform VI ,它的作用是返回波形中的某一点。这个VI需要输入一个索引,我们将循环周期连接到这个输入。注意Generate Waveform VI连出来的连线在循环边界变成一个数组时会变粗,正是在这个边界处形成了一维数组。For循环会自动累计边界内的数组。这种功能叫做自动索引。在这个例子中,连接到循环计数输入的数值常数令For循环创建了一个由100个元素组成的数组。Bundle函数( Functionso Cluster)――将图块中的各个组件组合成一个簇,在正确连接以前需要改变该函数的图标的大小。将移位工具放在图标的左下角。变形工具会变成如左图所示,拖曳鼠标直到出现第三个输入端子。数值常数( FunctionsoNumeric)――三个数值常数用于设置For循环执行的周期数N=100,初始X=0和delta X=1。9. 从前面板执行该VI。该VI将把自动索引后的波形图数组显示在波形图中。10.把 X的delta值改为0.5,X的初始值改为20。再次执行该VI。注意,波形图现在同样显示100个点,而每个点的初始值为20,X的delta值为0.5(见X轴)。11.只需在显示器中输入元素的索引号就可以查看波形数组中的任何元素。如果输入的数比数组的元素个数大,那么显示器将变暗,表示您没有为该元素设置索引。如果需要一次查看多个元素,可以通过改变数组显示对象的大小来实现。 把定位工具放置在数组框的右下角。工具将变成右图所示的变形工具。当工具变形时,用鼠标拖曳数组的右边或者下边。数组现在就可以按照元素索引的上升顺序显示多个素,以某个与指定索引对应的元素开始,如下图所示。图3-3 练习 九 中多个数组元素的同时观察在前面的流程图中,您为波形图指定了初始的X值和delta X值。默认的X初始值是0,delta X 值是1。这样,也可以把波形数组直接连接到波形图端子, 而无需指定初始的X值和delta X值,如图3-4所示。图3-4 练习 九使用默认X及Delta X时简化后的流程图12.按上图删除 Bundle功能函数和它所连接的常数对象。方法是用移位工具选择该功能函数和连接的常数对象,按下&Delete&。再选择EditoRemove Bad Wires。按照上图完成流程图的连线。13.执行该VI。注意初始的X值是0,delta X值是1。? 多图区图形可以创建含有多条曲线的图形,方法是创建一个数组,用它来汇集传给单图区图形的类型的数据元素。图3-5 练习 九 多图区图形的流程图14.按照上图创建流程图。正弦函数(FunctionsoNumericoTrigonometric)――在这里,它用于在For循环中创建一个由数据点组成的数组,表示一个正弦波周期。Pi常数(FunctionsoNumericoAdditional Numeric Constants)Build Array (FunctionsoArray)――在这里,它用于创建合适的数据结构(一个二维数组),在波形图中绘制两条曲线。。用移位工具拖曳边角可以增大该函数的面积,创建两个输入端子。15. 返回前面板,执行该 VI。注意同一个波形中的两个图区。默认情况下,它们的X初始值都是0,delta X初始值都是1。下图是该程序的运行结果(前面板未改动)。16. 把该VI保存为LabVIEW\Activity 目录中的Graph Waveform Arrays.vi。17. 可以修改图形中的某个图区的外观。方法是,用鼠标右键单击这个图形,再从弹出菜单选择对应的图例。Array图3-6练习 九 多图区图形的面板显示练习 九 结束。在上面这个例子中,由于计算端子连接了一个值为100的常数对象,所以 For循环将执行100次。下面这个例子显示了另外一种控制循环执行次数的方法。练习 十 对输入数组使用自动索引功能目的:打开并执行一个VI,它将在一个For循环中使用自动索引功能处理一个数组。1. 选择FileoOpen?,打开Examples\General\arrays.llb中的Separate Array Values VI 。2. 打开流程图。下面的示意图显示的是在TRUE和FALSE时的情况。图3-7 练习 十 的流程图注意,Input Array引出的连线与For循环外的粗线不同,表示这是一个数组,而循环内部的细线则表示这是一个数组元素。 数组元素在每个循环期间将自动编号。? 用自动索引功能设置 For 循环的计数器注意,计数器端子还没有连线。当您对某个进入For循环的数组使用自动索引功能时,循环就将根据数组的大小执行相应的次数,这样就无需连接某个值到计数器的端口。如果对一个以上的数组使用自动索引功能,或者在使用自动索引功能之外还需要设置计数器时,实际的循环次数将是其中最小的数。3. 执行该VI。在输入的八个数中,可以看到4个属于正数数组,另外4个属于负数数组。4. 从流程图中将一个值为5的常数对象连接到For 循环的计数器端子。执行该 VI。可以看到尽管输入数组仍然有八个元素,但是3个位于正数数组,另外2个位于负数数组。这说明,如果设置了N并开启了自动索引功能,那么实际循环的次数将取较小的数。5. 关闭该VI,不要保存任何修改。注:练习 十 的算法说明下面是一段伪代码,解释上面的算法,假定输入数组为A(已赋值),B(正数)、C(负数)。Sbr 、Scr分别是与B数组、C数组对应的右寄存器数组,Sbl 、Scl分别是与B数组、C数组对应的左寄存器数组,size运算为测数组实际大小,ins运算为将一个数插入数组中最左边的空位。练习 十 结束。3.3 数组功能函数LabVIEW提供了很多用于操作数组的功能函数,位于FunctionsoArray中。其中包括Replace Array Element,、Search 1D Array、Sort 1D Array、 Reverse 1D Array和 Multiply Array Elements等等。? 创建数组――Build Array函数(FunctionsoArray),用于根据标量值或者其他的数组创建一个数组。开始时,Build Array函数具有一个标量输入端子。您可以根据需要向该功能函数中加入任意数量的输入,输入可以是标量或者数组。如果要添加其他的输入,用鼠标单击函数的左侧,在弹出菜单中选择Add Element Input或者Add Array Input。还可以用变形工具来增大节点的面积(把移位工具放置在某个对象的边角就会变成变形光标)。也可以使用变形光标或者选择Remove Input来删除输入。下图显示了利用流程图中的常数对象的值创建和初始化数组的两种方法。左侧的方法是,将5个字符串常数放入一个一维字符串数组中。右侧的方法是,将三组数值常数放入三个一维数值数组,再将这三个数组组成一个二维数组。这样最后产生的是一个3x3的数组,三列分别是3, 4, 7; C1, 6, 2; 5, C2, 8.。还可以通过结合其他的含有标量元素的数组来创建数组。例如,假设有两个数组,三个标量元素,可把它们组成一个新的数组,顺序是:数组1,标量1,标量2,数组2,标量3。? 初始化数组(Initialize Array)――用于创建所有元素值都相等的数组。下图中,该功能函数创建了一个一维数组。元素输入端子决定每个元素的数据类型和数值,维长度输入端子决定数组的长度,例如,假设元素类型是长整型,值为5,维长度为100,那么创建的数组是一个一维的、由100个值为5的长整型元素组成的数组。也可以从前面板控制端子、流程图常数或者程序其他部分的计算结果得到输入。创建和初始化一个多维数组的方法是,用鼠标右键单击函数的右下侧,在弹出菜单中选择Add Dimension。还可以使用变形光标来增大初始化数组节点的面积,为每个增加的维添加一个维长度输入端子。也可以通过缩小节点的方法来删除维,即从函数的弹出菜单中选择Remove Dimension,或者使用变形光标。下面的示意图显示了怎样初始化一个三维数组。如果所有的维长度输入都是0,该函数会创建一个具有指定数据类型和维数的空数组。? 数组大小――Array Size函数,返回输入数组中的元素个数。? 数组子集(Array Subset)――选取数组或者矩阵的某个部分。该函数可以返回从某个指针开始的部分数组,并包括了长度元素。下图显示了一些数组子集的例子,注意,数组索引从0开始。? 索引数组(Index Array)――用于访问数组中的某个元素。下图显示了一个索引函数的例子,它用于访问数组中的第三个元素。注意,因为第一个元素的索引为0,所以第三个元素的索引是2。将一个二维数组与Index Array函数相连,Index Array就会含2个索引端子。将一个三维数组与Index Array函数相连,Index Array就会含3个索引端子。余类推。可以使用的索引端的符号是一个黑方快,被禁止使用的索引端(Disable Indexing)是一个空心的小方框。当给一个被禁止使用的索引端连接上一个Constant 或 Control是它会自动变为黑方快,即变为可以索引,相反原来一个可以使用的索引端上连接的Constant 或 Control被删去时,索引端符号会自动变为空心的小方框,即变为禁止使用。也可以按照任何维的组合提取子数组,下面的示意图显示了怎样从一个二维数组中提取一个一维的行或者列数组。还可以从一个三维数组中提取一个二维数组,方法是禁止两个索引端子,或者通过禁止一个索引端子提取一个一维数组。下图显示了从三维数组提取数组的各种方法。下面的规则对使用剪切数组进行了规定:输出对象的维数必须等于被禁止的索引端口的数目。例如0个索引端口被禁止=标量元素1个索引端口被禁止=二维元素2个索引端口被禁止=三维元素启动的端子所连接的数值必须指定输出元素。这样,您就可以理解,上图中左下方的例子的作用是,利用0列和3行的所有元素产生一个一维数组,而右上方的例子的作用是利用第一帧中的所有元素产生一个二维数组。新的第0个元素是与原有元素最近的元素。练习 十一 使用创建数组功能函数目的:使用创建数组函数,把一些元素和输出组织成一个更大的数组。图3-8 练习 十一 的面板和框图1. 按照图3-8创建一个前面板。2. 从ControlsoNumeric模板中选择一个数字控制对象放置在前面板中,设置它的标签为scalar 1。3. 复制并粘贴该数字显示对象,创建两个新的对象,并分别设置它们的标签为scalar 2和scalar 3。4. 创建一个数字控制对象的数组,设置它的标签为array 1。复制并粘贴它,创建一个新的数组,设置它的标签为array 2。5. 在array 1、scalar 1、 scalar 2、scalar 3、array 2中输入数值1到9。6. 创建流程图。选择FunctionsoArray,在流程图中放置一个Build Array功能函数。用定位工具增大函数额面积,以容纳5个输入。7. 把数组和标量与Build Array连接起来。创建输出的一维数组,它由 array 1、scalar 1、 scalar 2、array 2、scalar 3中的元素所组成,如图所示。8. 执行该VI。可以看到array 1、scalar 1、 scalar 2、scalar 3、array 2中的数值出现在同一个一维数组中。9. 保存该VI。练习 十一 结束。3.5 簇3.5.1 创建簇控制和显示在前面板上放置一个簇壳(Cluster shell)就创建了一个簇。然后你可以将前面板上的任何对象放在簇中。例如数组,你也可以直接从Control 工具板上直接拖取对象堆放到簇中。一个簇中的对象必须全部是Control,或全是Indicator,不能在同一个簇中组合Control与Indicator,因为簇本身的属性必须是其中之一。一个簇将是Control或Indicator,取决于其内的第一个对象的状态。如果需要可以使用工具重置簇的大小。右图所示是一个含4个Control的簇。也可以在流程图上用类似的方法创建簇常数。如果你要求簇严格地符合簇内对象的大小,可在簇的边界上弹出快速菜单选择自动定义大小(Autosizing)簇的序(Order)簇的元素有一个序,它与簇内元素的位置无关。簇内第一个元素的序为0,第二个是1,等等。如果你删除了一个元素,序号将自动调整。如果你想将一个簇与另一个簇连接,这两个簇的序和类型必须同一。如果想改变簇内元素的序,可在快速菜单中选择ReOrder Controls In Claster,这时会出现一个窗口,在该窗口内可以修改序。3.5.2 使用簇与子VI传递数据一个VI的连接窗口最大有28个端子,如果你不希望使用全部28个端子传递数据,这既烦琐又易出错。通过把控制或显示对象捆绑成一个簇的方法,仅使用一个端子就可以实现该功能。? 捆绑(Bundle)数据Bundle功能将分散的元件集合为一个新的簇,或允许你重置一个已有的簇中的元素。可以用位置工具拖曳其图标的右下角以增加输入端子的个数。最终簇的序是取决于被捆绑的输入的顺序。右图中Bundle图标中部的Claster端子用于用新元素重置原簇中的元素。? 分解(Unbundle)簇Unbundle功能是Bundle的逆过程,它将一个簇分解为若干分离的元件。如果你要对一个簇分解,就必须知道它的元素的个数。LabVIEW还提供一种可以根据元素的名字来捆绑或分解簇的方法,稍后介绍。练习 十二 簇目的:学习创建簇、分解簇,再捆绑簇并且在另一个簇中显示其内容。图3-10 练习3-4的面板和框图1.打开前面板,创建一个簇壳(Array & Cluster palette),标签改为InputCluster,拖曳至适当大小。2.在这个簇壳中放置一个数字Control,两个布尔开关,和一个串Control。 3.仿照以上步骤,创建Output Cluster如上。注意将各Control改为相应的indicator。4.用快速菜单查看两个簇的序是否一致,若有差别,改之。5.在前面板上设置一个[STOP]按钮。注意其缺省值为FALSE,不要改变它的状态。6.建立如上面所示的流程图。注意在[STOP]按钮与循环条件端子之间接入了一个NOT函数,因为按钮缺省值为FALSE,经NOT函数后变为TRUE,这就意味着当按钮状态不变时,循环继续执行,相反一旦按钮动作,则循环终止。 8.关闭并保存程序。练习 十二 结束3.5.3 用名称捆绑与分解簇有时你并不需要汇集或分解整个簇,而仅仅需要对其一、两个元素操作。这时你可以用名称来捆绑与分解簇。在Cluster 工具模板中除了Bundle及Unbundle功能外,还提供有Bundle By Name和Unbundle By Name功能。它们允许根据元素的名称(而不是其位置)来查询元素。与Bundle不同,使用Bundle By Name可以访问你需要的元素,但不能创建新簇;它只能重置一个已经存在的簇的元素,同时你必须给Bundle By Name图标中间的输入端子一个输入以申明要替换其元素的簇。Unbundle可返回指定名称的簇元素,不必考虑簇的序和大小。例如,如果你想重置上例中Boolean 2的值,就可以使用Bundle By Name功能而不必担心簇的序和大小。与此类似如果你要访问串的值,可以使用Unbundle By Name功能。图3-11 用名称操作簇在上面的例子中,Cluster Control中有两个元素,一个是数据类型(名称是Numeric),另一个是字符串型(名称是String),另一个控制是字符串“ABCD”,框图如右所示,运行该程序,即可将簇内的字符串值重置。(本例中为了使Bundle By Name的输入端由Numeric 变为String,需使用快速菜单中的Select Item 项操作。)3.5.4 数组和簇的互换有时你会发现,将数组变为簇(或者相反)很方便。尤其是因为LabVIEW包括的关于数组的操作功能多于簇。例如,前面板上有一个多按钮的簇,你希望颠倒这些按钮值的序。好了,Reverse 1D Array功能正好可用,但是它仅可用于数组。这没关系,你可以使用功能Cluster to Array将簇转换为数组,使用Reverse 1D Array切换开关的值,最后再利用Array to Claster 变换回簇。3.6 Waveform数据类型在数据采集和信号分析中经常要遇到波形数据,在LabVIEW 6i中增加了Waveform数据类型,使得波形的描述更加简洁。Waveform数据类型包含了波形的数据(Y)、起始时刻(t0)和步长ΔX,使用Waveform 模板的Build Waveform 函数可以建立一个波形。许多用于数据采集和波形分析的VI和函数的缺省状态都接受或返回Waveform数据类型。当你将一个Waveform数据类型连接到Waveform Graph或Chart时,会自动画出相应的曲线。图3-12 使用Waveform的波形发生例子图3-12是一个使用Waveform函数产生正弦波的例子。其中仅仅调用了Sine Waveform一个函数,只要将有关参数指定,就可产生正弦波。Sine Waveform实际上是一个子VI,点击其图标,就可看到下层的程序,还是比较复杂的。在LabVIEW 6I以前的版本中用户就需要那样去编程。Waveform数据类型是根据原有的数据类型进一步“打包”组合而成,这种打包也不可避免地带来一些负作用,有时还需要对Waveform数据类型“解包”。有关这一数据类型的函数或VI在 Functionso Waveform之中。它们有:Build Waveform :构造波形数据类型Get Waveform Components:提取波形元素(Y,Δt,t0)Set Waveform Attribute :设置波形属性Get Waveform Attribute:提取Waveform属性Waveform Operations:波形运算Waveform Generation :波形发生Waveform Measurements :与波形相关的测量Waveform File I/O :Waveform格式的文件I/O其中后4个是类目,分别还有下一层函数。补充部分:安装文件的制作首先,编写一个完整的程序并存盘,关闭文件。例如:第二步:点击tools中的下拉菜单Build Application or shared library,出现如下画面在“Target” 菜单中将“Target File Name”改为文件名111.exe。在“Source Files”菜单中添加准备生成安装文件的VI及其所需的一些支持文件。点击“Add Top-Level VI…”,选中要添加的文件,另外如果程序中包含有子程序,在“Add Support File…”中添加。在“Application Settings” 菜单中将“Show LABVIEW Real-Time target selection dialog when launched”前的对勾去掉,该项功能为程序运行时选择在本机还是网络上运行,去掉对勾即默认在本机运行。在“Installer Settings” 菜单中选择“Create installer”然后点击“Build”,生成安装文件。点击“Done”,选择“No”。安装文件默认的保存路径为C:\WINDOWS\TEMP\app。第三步:安装文件。在C:\WINDOWS\TEMP\app\Installer\disks中有Setup文件,点击安装。安装完后提示安装“Welcome to the LABVIEW 6.0 Run-Time Engine Insallation Wizard”。按照提示,完成安装。第四步:运行程序。这时我们可以看到程序运行已经脱离LABVIEW环境。对于程序界面的修改,可以在LABVIEW环境下的File\VI Prorerties中进行设置,在Category中选择Windows Appearance,在该菜单下的Windows Title中选择Customize…,在出现的对话框中进行选择。课 程 设 计 步 骤1、 用Function/waveform/waveform Genaration/sin waveform.vi产生正弦波。2、3、 设置波形数据,包括振幅、相位、频率、采样率的设置。 用Function/waveform/Get Waveform Components,从得到的正弦波输出(蔟数据)中提取正弦波数据(数据类型不匹配,这里相当于从蔟中提取数组数据)。4、5、6、 用加法器把几个波形数据累加,得到输出。 加开关,可以控制是否输入,用case结构。 加李萨如图形显示。(把300、500、700Hz信号通过累加器累加,并与100Hz信号通过Bundle函数合成,送到XY Gaph 显示。) 7、界面装饰。 欢迎您转载分享:
相关好文章摘抄
热点好文章摘抄
精彩书库推荐

我要回帖

更多关于 labview如何调用子vi 的文章

 

随机推荐