




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,.3.3 数据流运行机制中的节点(Thedataflownodeintheoperationalmechanism)版本8创建于:2010-9-30下午8:16作者jwdz-最后修改: 2010-10-29下午精品文档放心下载8:21作者jwdz前面已经介绍过图形化语言中端子、连线的基本作用和数据流运行机制下感谢阅读的特点。本节将介绍图形化语言中其它的节点类型基本作用和数据流运行机制下感谢阅读的特点。节点包括:内置函数、内置VI和结构。节点类似于文本编程语言中的语句、函数、和子程序。下面我们分别进行讨论。3.3.1 内置函数的数据流运行机制内置函数节点,.我们之所以称LabVIEW开发环境所提供的函数为内置函数是想表明这些谢谢阅读函数是开发环境中所特有的,并内置在开发环境中提供给图形化程序设计者使谢谢阅读用。内置函数包含在开发环境的程序框图中的“函数Functions”选项板上。精品文档放心下载它是构成图形化语言VI中最小的、最基本的可操作元素,是图形化程序执行基感谢阅读本操作的内部节点。作为图形化语言中的最小可执行元素,内置函数不仅具备了最基本的函数精品文档放心下载功能如:加、减、乘、除、常数、常量等等外,同时还具备处理更复杂事物的函感谢阅读数功能如:数组处理、字符串处理等等。如此众多、功能强大的内置函数保证谢谢阅读了LabVIEW基本上具备了通用编程语言的基本特征。精品文档放心下载内置函数图标的背景颜色为浅黄色,很容易分辨。它不同于VI,它没有前谢谢阅读面版和程序框图,只有简单的连接端口,所以我们无法查看它的内部程序代码。谢谢阅读下面给出进行数组操作用的一些内置函数。,.-1数组操作内置函数内置函数是LabVIEW图形化语言的基础内核,是从高级语言中高度抽象出感谢阅读来的最底层、最基础、最实用的图形化代码,是构成性能强大的虚拟仪器的基础感谢阅读“零部件”。内置函数的功能越丰富对待解问题的处理能力就越强。如果要想精品文档放心下载学习、使用好LabVIEW最重要的基础就是充分了解内置函数的基本特性和使用谢谢阅读方法。只有这样,才能充分发挥出图形化语言的特点,设计出满足用户需求的自谢谢阅读动化应用程序。对于内置函数的学习,最重要的是详细解读LabVIEWHelp文档,该文档精品文档放心下载中包含了每个内置函数的详细说明。对于中文版的LabVIEW,已提供了汉化的感谢阅读文档。与此同时,更多看其它LabVIEW开好者设计的例程,如OpenG、MGI感谢阅读的开源图形化代码及NI开发者社区中LabVIEW开好者所提供的例程等等也是感谢阅读,.受益匪浅的。在这方面花费一定的时间是非常值得的。内置函数的基本特点内置函数虽然数量众多、功能不一,但存在着许多共同的特点。下面我们对这些精品文档放心下载特点进行简单的总结:基于数据流的运行机制,内置函数至少有一个以上的连接端口。对于双端以上的精品文档放心下载内置函数通常是以输入端和输出端的形式呈现内置函数的内部是不可见的,程序的设计者或使用者是不可对其进行编辑和修改精品文档放心下载内置函数是构成VI或子VI的最基本操作元素之一精品文档放心下载内置函数是节点中的一部分,可通过颜色辨别(图标中的背景为浅黄色)精品文档放心下载内置函数是直接命名的内置函数通常没有公共线程(错误簇)有时候总会有些例外的事情发生,它的最后这个特点就存在着例外的现象,精品文档放心下载请看下面的例子:加、减、乘、除这些内置函数当它们的输入数据为波形数据时,精品文档放心下载它们会自动生成公共线程连接端——错误簇(做时域的加、减、乘、除)。参精品文档放心下载,.见下图。图-1内置函数加、减、乘、除作时域运算时自动生成的错误簇精品文档放心下载这是一个极为有趣且很有用的功能,在功率测量的项目中,利用这个特点谢谢阅读实现了有功功率的时域乘法计算。并且,这种时域相乘的方法反映出的的功率和精品文档放心下载功率因数特性也非常准确和直观,是一个非常简单、线性度又非常好的时域乘感谢阅读法器(性能取决于数据采集卡),前提是必须使用同步采集模块。感谢阅读千万不要小看这个特点,这里表现出一些很可贵的时域特征。感谢阅读以“乘”内置函数为例,我们知道,乘法器是比较常用的模拟运算单元电谢谢阅读路。在模拟集成电路中,集成乘法器IC——AD536就很具有代表性。但是,它谢谢阅读,.的四象限乘法特性很难做到优于0.2%,并且输入信号带宽很有限。感谢阅读在分立元件电路中,时分割乘法器很有代表性。为获得0.02%的时分割乘精品文档放心下载法器,其所付出的代价是极其昂贵的,并且输入信号带宽很有限。感谢阅读采用数据采集方法,数字乘法器(用“乘”内置函数)几乎没有任何局限精品文档放心下载性。它配合628x系列数据采集卡可以获得多路0.01%数字乘法器,带宽可达感谢阅读10KHz以上。它的角差特性更是其它类型的乘法器所无法比拟的。实际上,采感谢阅读取适当的方法或合理的技术方案,采用非同步数据采集卡也是可行的,这点我们感谢阅读已经做过技术上的验证。数字乘法器(数字采样技术)不仅具有准确度高使用简单的特点,同时它精品文档放心下载也从测量原理上简化了测量电路和数据分析处理方法。事实上,目前世界上高准谢谢阅读确度的功率电能表都采用了这一原理。本书的第一章对此有具体描述。感谢阅读还有一个例外发生就是:通过函数的前景色和背景色的色彩来划分函数的谢谢阅读方法并非是很准确的,因为我们已经发现了几个例外:比如在NILabVIEW2010精品文档放心下载Functions选板中》Programming》FileI/O》FileConstants中的精品文档放心下载“ApplicationDirectory”和“DefaultDada”都是vi,因为对它们双击后可精品文档放心下载以被打开,并且它们的标签是以.vi为后缀的。参见下图。谢谢阅读,.图-2颜色并不是确定内置函数的唯一方法感谢阅读人们会注意到,它们也有淡黄色的背景,但它们确是vi。这样的例子还有感谢阅读多少?好像真的没见过更多类似这样的情况。而前者在LabVIEW7.1.1中就已谢谢阅读经出现了。所以仅仅通过色彩来判定是否是内置函数可能是不准确的。尽管如此,谢谢阅读通过颜色来区分内置函数也不失为是一种便捷的方法。内置函数的数据流运行机制这里我们所说的内置函数的数据流运行机制是指它所构成的图形化代码的谢谢阅读数据流运行机制,而非是内置函数内部的运行机制。也就是说,数据流运行机制感谢阅读是针对图形化程序自身的特点,由于内置函数的内部我们无法查看到,所以它谢谢阅读的内部运行机制我们是不得而知的(也就是说,内部不一定是基于数据流运行机精品文档放心下载制的)。如:有些内置函数放置到程序框图上时,依据数据流的运行机制,需要对精品文档放心下载它的输入端进行赋值,否则开发环境会在即时编译之后给出有错误发生的提示,精品文档放心下载,.并显示“运行箭头”断裂。参见下图。图-1开发环境提示:输入端没有赋值,数据流感谢阅读不通点击断裂的“箭头”就会弹出错误提示列表。其实质就是数据不流通,破精品文档放心下载坏了数据流的关系,从而导致程序无法运行系统给出“出现错误”的提示。谢谢阅读图-2修复错误(给输入端赋值)当你“修复”这些错误时,“运行”箭头马上恢复正常。在这里所谓“修复”感谢阅读错误就是给它们赋值。所以在图形化程序设计中我们几乎不必担心会遗漏什么,谢谢阅读内置在开发环境中的即时编辑器会帮助我们洞察这一切。这也是LabVIEW开感谢阅读,.发环境中的一个优异性能,它会直观、明确的告诉我们不处理好这些问题甭想正感谢阅读确运行程序。并不是所有的内置函数都是这样的,按下图将函数放到程序框图上时,即谢谢阅读时编译器并没有什么反映。对于随机数发生器当然不会出现任何问题,因为它没谢谢阅读有输入端。图-3对于输出类的内置函数也必须接到指精品文档放心下载定的端口对于随机数下面的内置函数,当你放到程序框图上的时候是没有问题的,感谢阅读可是你运行它们时系统会要求你给出指定的参数设定,否者就会弹出一个错误对谢谢阅读话框进行提示。这表明即便是输出类型的内置函数也必须配置连接有效的端口,谢谢阅读这同样也是基于数据流运行机制的要求。所以,根据Help文件仔细的配置函数的输入对象是十分必要的。由于内置精品文档放心下载,.函数间的对象是依赖于连线来连接的,所以内置函数间的数据流关系是比较明显谢谢阅读的。在图形化程序设计中一定要按数据流原则进行设计。这也是LabVIEW图感谢阅读形化语言必须掌握的设计原则。最后我们来看一个例子,使用LabVIEW内置函数创建一个实用的VI。谢谢阅读-1计算数组的平均值(MGI)该例子来自MGI——Average.vi。-4计算数组的平均值该实例用了四个内置函数实现了对数组平均值的计算,并以vi的形式提供感谢阅读给公司内部或其它使用者使用。实际上,对于任何LabVIEW的开发者,都可以根据自己的需求利用内置函感谢阅读数设计专用或常用的vi,这是具有创新力和很美妙、很令人赏心悦目的工作,甚精品文档放心下载,.至说不定还可以为你带来财富,如OpenG(JKI)。精品文档放心下载3.3.2内置VI的数据流运行机制内置VI节点在前面的例-1中,已经展示了一个使用内置函数创建VI的实例。谢谢阅读这是由使用者所创建的VI,属于用户开发的VI。在LabVIEW开发环境中,为了降低工程师和科学家的程序设计难度、提高感谢阅读图形化语言的开发效率,特别提供了数千种测控专用、功能丰富、性能各异的感谢阅读VI。特别是一些满足工程应用和自动化设计所需的VI。这些VI在函数选板上精品文档放心下载同样可以看到(参见下图)。它们图标的背景颜色为白色或其它颜色,可以通过谢谢阅读颜色来区分出来。,.图-1函数选板中的内置VI为了区别这两种不同来源的VI,将LabVIEW开发环境所提供的VI称为:谢谢阅读,.内置VI(built-inVIs)。对于内置函数我们无法看到内部结构的,而内置VI用鼠标双击后可以打开。精品文档放心下载内置VI是从许多“待解问题”中高度抽象出来的。为我们解决实际测量问题提感谢阅读供了极大的帮助,也是提高虚拟仪器程序设计效率的主要因素。谢谢阅读内置VI也是节点的一部分。通常安装好LabVIEW后在函数选板上就可以感谢阅读看到,但是有些内置VI,需要安装其它软件获得。如DAQ或VISA或相应的工感谢阅读具包等等。我们经常看到有些初学者安装好LabVIEW后,发现找不到DAQ助手或I/O精品文档放心下载助手。实际上就是没有安装相应的驱动所致。内置VI与我们所创建的VI不同,由于内置VI来自于LabVIEW开发环境精品文档放心下载中的底层库,所以建议使用者轻易不要对它进行改动后保存,避免其它使用者找感谢阅读不到原来的VI。若需要改动请另创建一个新的子VI或使用新的名字,保存到精品文档放心下载使用者库中。内置VI的基本特点内置VI虽然数量众多、功能不一,但存在着许多共同的特点。下面我们对感谢阅读,.这些特点进行简单的总结:内置VI来自于LabVIEW开发环境,是由NI公司设计、开发的谢谢阅读内置VI有自己独特的前面版、程序框图和图标、连接器精品文档放心下载内置VI的内部构成具有多样性关于最后一点,所指的是内置VI内部代码的多样性。下面我们来看看。感谢阅读由内置函数构成的内置VI该内置VI在》Programming》SignalProcessing》Waveform谢谢阅读Generation》SineWaveform.vi。谢谢阅读,.图-1由内置函数构成的内置VI(LabVIEW2010)从上图我们可以清楚的看出该内置VI完全是由内置函数等图形化代码构精品文档放心下载成。应该说是纯图形化代码的。有意思的是,在LabVIEW2009中,该vi是与上图中的vi不同的,参见下谢谢阅读图。,.图-1A由内置函数构成的内置VI精品文档放心下载(LabVIEW2009)不同之处在于在LabVIEW2009中,波形合成后是直接输出的。而在谢谢阅读LabVIEW2010中,波形经过一个“inplaceelementstructure”内置函数进感谢阅读行了数据存储的优化。由此可见,对于内置函数NI也是在不断地进行优化处理,感谢阅读尽管这是一个一直用于各个版本、比较传统的内置函数。由属性节点构成的内置VI,.该内置VI在》Programming》InstrumenI/O》Serial》VISAConfigure精品文档放心下载SerialPort.vi。图-2由属性节点构成的内置VI3.由公式节点构成的内置VI该内置VI在》Programming》Numeric》Scaling》ConvertRTD谢谢阅读,.Reading.vi。图-3由公式节点构成的内置VI4.由动态链接库(CLN)节点构成的内置VI该内置VI在》Programming》SignalProcessing》SignalGeneration》感谢阅读SinePattern.vi。,.图-4由动态链接库(CLN)节点构成的内置VI感谢阅读5.由CIN节点构成的内置VI在Mac版的LabVIEW2009中还可以看到CIN节点,而在Mac版的精品文档放心下载LabVIEW2010中,已经看不到CIN节点了。想必已经被CLN所代替了。精品文档放心下载6.由LabVIEWScripting节点构成的内置VI谢谢阅读现在LabVIEWScripting已经添加到LabVIEW2010中。可是在刚刚安装精品文档放心下载完Mac版的LabVIEW2010时并没有看到LabVIEWScripting的内置函数。当感谢阅读时感觉很奇怪,但当时也没有多想。直到安装OpenG工具包时,需要设置VI谢谢阅读,.Server时才发现,选择其中的选项既可看到LabVIEWScripting的内置函数。感谢阅读在LabVIEW开发环境下,选择》Tools》Option》VIServer即可看到下感谢阅读图所示的界面。勾选VIScripting中的选项即可。谢谢阅读,.图-6在VIServer中设定LabVIEW谢谢阅读Scripting,.VIScripting是LabVIEW中一项非常重要和强大的功能。简而言之,就是精品文档放心下载使用LabVIEW图形化编程语言来创建LabVIEW中的程序元素。这些程序元素谢谢阅读当然包含一般的node,wire,structure等等。有个不太恰当的比方,比如众所谢谢阅读周知,Eclipse是一套开发Java程序语言的工具,但是Eclipse本身也是用Java谢谢阅读编写的,也就意味着在使用Java开发Java。VIScripting也类似,我们可以用精品文档放心下载LabVIEW开发LabVIEW。一种比较准确的定义是:VIScripting是LabVIEW提供的一种基于VI谢谢阅读Server技术,让用户创建、修改以及了解VI信息的强大功能。使用VIScripting感谢阅读可以得到VI的属性和行为,此外,我们还可以用VIScripting改变VI的属性和精品文档放心下载行为。VIScripting包含了一个接受指令的引擎,这些指令可以通过VIServer精品文档放心下载得到翻译,用来传给LabVIEW本身。VI中的所有东西都可以被认为是一种VI感谢阅读对象(object),包括FP/BD上的任何对象、ConnectPanel、Icon以及几乎谢谢阅读所有保存在VI中信息。所有对VI对象的修改都可以在编辑时期利用Property精品文档放心下载Node和InvokeNode完成。比如,VI接线柱的位置、颜色、接线情况都可以精品文档放心下载在编辑时期得到或修改。下图是LabVIEW爱好者使用VIScripting技术设计的vi。其中包括了我们感谢阅读,.现在使用的绝大多数内置函数。-7Scriptingvi工具包精品文档放心下载下面我们看一个具体的例子,就是使用VIScripting技术实现的“加法”精品文档放心下载函数的程序框图。显然使用VIScripting技术来实现“加法”功能是复杂得多!感谢阅读尽管如此,由于VIScripting技术还是受到LabVIEW爱好者的钟爱。如:感谢阅读Scriptingvi工具包就是由LabVIEW爱好者设计的,它来自LVAV网站。谢谢阅读,.-8采用VIScripting技术实现的“加法”函数精品文档放心下载这里尽可能的整理出各种样式的内置VI来展示。显而易见,构成VI的方式很多,谢谢阅读至于采用哪种方式设计VI,最终取决于你的习惯和熟悉程度。谢谢阅读这里还要提醒注意的是:在程序设计中要尽可能的使用内置vi,以减少节精品文档放心下载点的数量近而提高程序的运行效率。我们还注意到,在《LabVIEW编程样式》一书中作者定义出了一个模块化精品文档放心下载指标的计算公式。公式1.1模块化=(用户VI数/节点总数)x100作者给出了如何确定“用户VI和节点总数“的具体方法,并推荐模块化指感谢阅读,.标大于3.0的设计。并在试例中称模块化指标为1.9%的程序不算做一个模块。感谢阅读至于公式1.1如何得来或者是如何确定,作者没有做任何说明。谢谢阅读内置VI的数据流运行机制现在我们已经看到了内置VI的多种构成方式,可以直观的理解为除了CLN谢谢阅读和CIN外其它内置VI都应该是基于数据流的运行机制,因为它们基本上都是由感谢阅读图形化代码实现的。到目前为止,我们还不能充分理解图形化代码的数据流运行机制。这是因谢谢阅读为还有一些图形化代码我们还没有完整解读,如:结构节点。感谢阅读下面我们将开始介绍这部分的内容。3.3.3结构的数据流运行机制,.我们知道,基于文本的编程语言的程序流程的控制是基于流程控制语句。流程控谢谢阅读制语句选择和判断并决定程序当前的执行顺序。对于任何计算机编程语言来讲,流程控制语句的基本功能都是重叠的,只谢谢阅读是语法功能上存在着一些差异。LabVIEW也不利外,它也具备控制程序流程的谢谢阅读基本功能,但它是用图形化代码来表述的,而这些实现控制程序流程的图形化精品文档放心下载代码被称为:结构节点。结构节点在VI中,结构被用来控制图形化程序的执行顺序。由于图形化代码是基于精品文档放心下载数据流的,所以结构也会满足数据流运行机制的要求。事实上,在LabVIEW诞生之初,图形化的结构代码就已经被创建,Kodosky谢谢阅读为此还申请了两个美国专利。结构节点在函数选板》Programming》Structions,参见下图。谢谢阅读,.图-1函数选板上的结构节点从上图中可以看出,结构子选板中包含了许多特殊的结构节点,如循环、感谢阅读事件等,它们被用来处理不同的程序控制流程。也可以说:灵活、正确的使用它感谢阅读们是实现图形化程序设计的关键点之一。 结构节点的基本特点结构是是现代结构化语言的基本功能,图形化的结构节点基本上满足了对谢谢阅读结构要求的基本功能。但同时它还保留着自身图形化代码包括数据流运行机制的精品文档放心下载,.一些特点,这在学习使用时要给以必要的注意。1、结构节点内外都可以放置图形化代码下图中的结构节点都是以可伸缩的方框图形呈现在程序框图中的,它们的感谢阅读内部和外部都可以放置图形化代码(公式节点仅外部可以放置图形化代码)。感谢阅读图-1方框的外部和内部都可以放置图形化代码精品文档放心下载图形化结构节点的这个特点太好了,它可以直观的了解结构内部程序代码谢谢阅读的确切含义(大量的代码还可以用子vi化简)。注意:图形化语言具有自动多线程功能,随意放置代码可能会导致程序的谢谢阅读不正常运行。,.2、变量本身破坏了数据流运行机制前面我们谈到过,控件本身不可以直接作为变量来使用。但是通过设置本感谢阅读地变量或全局变量控件也可以作为变量来使用。由于图形化代码是基于数据流的感谢阅读运行机制,而变量的不恰当使用恰好破坏了数据流的运行机制,主要问题涉及谢谢阅读到数据竞争的问题。所以,会有更多的说法强调在LabVIEW中慎用变量。这是谢谢阅读在使用中需要格外注意的地方。这里给出一个例子来简要说明。精品文档放心下载例-1全局变量引起的数据竞争假设我们有A、B、C、3个While循环在同时运行(它们也可能不在同一谢谢阅读个VI中),其中两个循环都试图将不同的值写入一个全局变量,而另外一个循环谢谢阅读恰好同时正在试图读取这个全局变量中的值。问题是:C循环到底读出的是那感谢阅读个值呢?到底是A循环的值,还是B循环的值呢?感谢阅读,.图-2引起全局变量竞争的例子请注意,这是一个十分不确定的状态。此时出现了全局变量的数据竞争,谢谢阅读如果你连续运行这个vi,就会发现,Numeric3指示器会不断闪动出现Numeric精品文档放心下载控件和Numeric2控件中的不同数值。在程序设计中,要避免这种事情发生。最好的办法就是经过对全局变量初感谢阅读始化后,仅在一个地方写入全局变量,然后完全可以在不同的地方同时读这个全精品文档放心下载局变量。顺便说一下,尽管使用局部变量或全局变量可以实现基于文本中变量的功感谢阅读能。但是相比之下,图形化代码会使用更多的内存空间。这也是图形化语言的特感谢阅读,.点之一。参见下图会看得更清楚。图-3变量的内存分配(注意那些小黑点)精品文档放心下载 结构节点的数据流运行机制既然图形化语言的运行机制是基于数据流的,那么结构节点的外特性(内感谢阅读特性我们不得而知)也应该是基于数据流的运行机制。下面我们就对结构节点的谢谢阅读数据流特性进行讨论。,.1、定序结构我们知道,文本式编程语言的基本运行机制是基于控制流的。换句话说,谢谢阅读程序的运行是基于程序的书写步骤,基本上是按顺序执行的(这里暂不考虑控制感谢阅读语句的作用)。LabVIEW是基于数据流编程的图形化语言,图形化代码无法直接做到这一感谢阅读点。但是程序的运行有时往往必须要作顺序执行,如在仪器控制程序中或需要测精品文档放心下载量一段程序代码的执行时间。为解决此类问题,LabVIEW提供了独特的定序结感谢阅读构节点。定序结构节点共有两种,平铺顺序节点(FlatSequencestructure)和层感谢阅读叠顺序节点(StacketSequencestructure)。平铺顺序结构参见下图。感谢阅读-1平铺顺序结构(FlatSequencestructure)——用于代码执行时间测试谢谢阅读,.这种平铺顺序结构把程序运行分成一帧一帧的执行,从而实现了数据流程感谢阅读序的强制定序运行。这种平铺顺序结构的数据流特点被人们称为:强制数据流关感谢阅读系。平铺顺序结构的优点是:程序代码直观、清晰且便于理解。感谢阅读问题是:当程序的定序代码较多时,依据图形化的特点,必然占据巨大的谢谢阅读屏幕空间从而导致程序的可读性下降。解决这个问题的简单办法是:使用LabVIEW提供的另一种定序结构节谢谢阅读点——层叠顺序节点(StacketSequencestructure)。谢谢阅读创建层叠顺序很简单,用右键点击图-1中平铺顺序的边框,从弹精品文档放心下载出的下拉菜单中选择:ReplacewithStacketstructure即可。参见下图。谢谢阅读,.图-2层叠顺序结构(从图-1直接转换过来)精品文档放心下载右上图可见,层叠顺序结构将图-1中平铺的3帧层叠的放置起来。呈现精品文档放心下载给我们的只有1帧(0[0..2])。如果展开看见下图。谢谢阅读第0帧 第1帧 第3帧图-2~4层叠结构展开图叠层顺序结构似乎只有一个优点,程序结构简单、清晰(程序内容并不清精品文档放心下载晰)、占用屏幕空间小。叠层顺序结构的缺点可是不少:隐藏了程序的某些部分,.因为是叠层顺序结构,所以通常我们只能看到一帧的程序框图内容,从而降谢谢阅读低了程序的直观性和可读性。平铺式顺序结构没有这个问题。注意:Case结构也存在相同的问题。影响从左到右的可视流习惯因为是叠层顺序结构,所以我们不得不象扫描一样来回查找程序框图中的对谢谢阅读应关系。平铺式顺序结构没有这个问题。数据流中断,破坏了数据流所倡导的并行性LabVIEW天生就具备并行的特点,使用叠层顺序结构禁止了并行操作,因精品文档放心下载为只有当程序全部执行完后,数据才能输出。关于这个概念LabVIEWHelp中给出了这样一个例子,不可更新顺序结构的精品文档放心下载多个帧的显示控件,如下例图所示。,.图-5层叠结构的错误应用某个用于测试应用程序的VI含有一个状态显示控件,用于显示测试过程中感谢阅读当前测试的名称。如果每个测试都是从不同帧调用的子VI,则不能从每一帧中精品文档放心下载更新该显示控件。层叠式顺序结构中断开的连线便说明了这一点。由于层叠式谢谢阅读顺序结构中的所有帧都在任何数据输出该结构之前执行,因此只能由其中某一帧谢谢阅读将值传递给状态显示控件。解决这个问题可以采用While循环加Case结构,见下面的例图。感谢阅读图-6使用Case结构和While循环就可以解决这个问精品文档放心下载题这个例子也说明,尽管Case结构和层叠顺序结构在程序框图上都相近(叠精品文档放心下载放在一起),但是二者间还是存在着本质上不同的。,.顺序结构局部变量可能导致程序的可读性进一步下降甚至发生错误谢谢阅读顺序结构局部变量用来传递帧之间的数据,而且是有的帧使用,有的帧不谢谢阅读使用,使得程序可读性下降。平铺式顺序结构没有这个问题。上面列举了顺序结构的一些缺点,正是因为这些缺点以至于好多有关感谢阅读LabVIEW的书籍都发出了这样的警句“慎用顺序结构”。 其实顺序结构精品文档放心下载挺好的,在出现了平铺顺序结构后,上面所罗列的它的缺点基本上荡然无存。谢谢阅读 现在计算机的屏幕分辨率基本上是1280x800,高的已达到1920x1080(高清标准),相比那时800x600已经大很多了,特别是导航条、格式谢谢阅读刷等新操作功能的出现,使用顺序结构并不会产生太大的问题。 另外要精品文档放心下载记住LabVIEW是层次化结构的,我们还可以将其作为子vi来使用。或者干脆采谢谢阅读用平铺式顺序结构来设计,然后转换程层叠顺序结构(点击右键在快捷菜单中选谢谢阅读择转换)。现在是改变传统观念的时候了,需要的地方就放心的使用平铺式顺序结构谢谢阅读吧!顺便说一下,顺序结构不消耗系统资源。关于这一点,在《LabVIEW图形精品文档放心下载,.编程》一书中作者页曾经谈到过:顺序结构本身不增加节点或者执行程序的系统谢谢阅读开销。在定序程序的程序设计中,最好的方法我还是倾向于状态机的使用。关于精品文档放心下载状态机的介绍后面会谈到。2、循环结构节点任何程序语言都基本离不开循环处理。LabVIEW也不例外,它提供了两种谢谢阅读图形化的循环结构节点。一种定量循环(8.5以后也可以使用条件控制)——For精品文档放心下载循环;一种是条件循环——While循环。下面分别介绍。感谢阅读For循环For循环可以控制程序在循环体内重复执行的次数,具体循环次数由循环体精品文档放心下载边框外的计数端子的数值来确定。在LabVIEW8.5之前,For循环没有条件停止精品文档放心下载,.功能。现在已经增添了这个功能。For循环的数据流运行机制是:首先执行循环体外的代码,并纪录准备进入谢谢阅读循环体的所有数据值。然后For循环在执行前首先检查计数端子的数值是否设置谢谢阅读正确,并根据这个数值决定执行循环体的次数。要注意这个数值是长整数值,精品文档放心下载不符合这个规定的将会自动转换到长整数值。这里我们仅举例讨论容易忽略的某些细节问题。例-1For循环不运行图-7计数端子的数值=0,循环不执行精品文档放心下载另外一个For不执行的例子是输入数组为空数组时,参见下图。感谢阅读,.图-8输入数组为空时,循环不执行,与计数端子的数值无关谢谢阅读此时如果将数组赋值,循环将会执行。参见下图。图-9为输入数组赋值,循环执行对话呈现,循环次数与计数端子数值有谢谢阅读关例-2应用For循环的例子该例子来自于NIDeveloperCommunity的Dan_K提供的例子。感谢阅读图-10SimpleProgressBarforaForLoop精品文档放心下载,.图-11ProgressBar运行图例精品文档放心下载例-3应用For循环自动索引数组感谢阅读For循环具有自动索引数组的功能。参见下图。图-12利用For循环自动索引数组,数组大小取决于计数端子的数值谢谢阅读,.图-13数组索引进取最小个数的数组(5),与计数端子值无关精品文档放心下载图-14For循环应用实例这是我的一个简单的测量应用项目中的部分程序框图。用For循环实现6谢谢阅读个虚拟通道的创建,在多通道测量时采用这种方法可以使得程序框图简单、直谢谢阅读观、可读性强。例-4For循环的条件停止,.现在For循环的条件也可以有条件的停止。参见下图。感谢阅读图-15根据条件确定运行次数(注意上面的小红点)尽管计数端值是100谢谢阅读例-5使用For循环提取3D数组的数据感谢阅读LabVIEW中有一些内置VI来对一维和二维数组进行操作。但是没有任何精品文档放心下载一个可对三维数组进行操作的内置VI。这是因为我们可以使用这些内置VI来对谢谢阅读三维数组进行操作。下面这个例子显示了使用这些内置VI实现对3D数组的操谢谢阅读作。该VI是多态的,因此它可以处理双精度,布尔量或字符串。感谢阅读该vi在图像数据处理中很有用。该例子同样来自于NIDeveloperCommunity,作者是:ScottW谢谢阅读,.图-16 3D数组的操作上图中的子vi,如下图所示。图-17子vi程序代码,.While循环While循环也是通用程序语言中必不可少的控制语句。在LabVIEW中它也谢谢阅读是必不可少的程序控制结构。相对于For循环而言,While循环的使用率更高。可以说,几乎在绝大部谢谢阅读分程序中都可以发现它的存在。如:事件结构、状态机、连续数据采集等等。谢谢阅读While循环结构的数据流关系是这样的。在程序执行时,首先执行循环的感谢阅读外部代码(如果存在)然后执行循环体内的程序代码,执行完毕后查看条件端子感谢阅读的布尔值,如果该数值为T,退出;如果该值为F,继续进行循环,直到再次查精品文档放心下载看到条件端的值为T时才停止循环。下面我们看几个简单的例子来更多的了解谢谢阅读While循环。例-6While循环的几个例子1、While循环仅运行1次,.图-18While循环仅运行1次谢谢阅读上图所示的While循环,程序仅仅运行1次便停止下来。程序的运行结果精品文档放心下载x+1指示器显示的数值为1。下图所示的例子与此相同,差别是条件端标识不同。感谢阅读图-19While循环也仅运行1次感谢阅读在《LabVIEW图形编程》一书中,许多例子用这种形式的地方很多。实际谢谢阅读上,在这两个图中有没有这个While循环都一样,程序的运行和结果都是一致精品文档放心下载的。那这个While循环到底有什么用呢?猜想是为了使程序代码放置的更规精品文档放心下载范、更清晰。所付出的代价是多了个结构和2个节点。感谢阅读2、合理的控制While循环运行,.如果我们将停止控制开关放在While循环的外部会发生什么现象呢?我们精品文档放心下载来看下面这个例子。图-20这个While循环如何运行?谢谢阅读通过实际运行,我们会看到While循环要么执行一次(开关=T),要么就精品文档放心下载无限期执行下去(开关=F)。这里再次展现了数据流的概念,因为依据数据流的工作原理,所有输入到精品文档放心下载While循环的数据必须在执行循环前传输,而循环的输出数据只有循环结束后才精品文档放心下载输出。所以当开关为T时,While循环只执行一次,当开关为F时,While将会精品文档放心下载无限期的运行下去。这时的循环实质是死循环,设计中一定要避免这样的情况发精品文档放心下载生。这里也间接的告诉我们这样一个事实,While循环的控制量应该在循环内谢谢阅读产生。下图合理的使用While循环的方法。,.图-21合理的控制While循环的方法精品文档放心下载实际上,图-21解决了While循环合理运行的逻辑关系。这并不谢谢阅读能保证While循环真正的合理运行。因为在图-21中,该While循环是感谢阅读以最高的循环速度进行,占用了大量的CPU资源,使得其它程序运行受阻。解感谢阅读决这个问题的办法就是在While循环中插入延时节点。参见下图。谢谢阅读图-22降低CPU的使用率当然,如果While循环中的程序代码执行时间足够长的话(相当一定的延谢谢阅读迟时间),也可以不插入定时节点。还有一个解决方法是使用定时While循环(遗精品文档放心下载憾的是Mac版的LabVIEW没有定时循环)。精品文档放心下载3、特殊的While循环控制,.例-7如何暂停While循环?感谢阅读该VI给出了如何暂停一个while循环的实例。使用一个主while循环和一精品文档放心下载个附while循环及case结构。该VI的目的是让用户可以选择暂停或继续主while感谢阅读循环的功能。该例子同样来自于NIDeveloperCommunity,作者是:EfrainG。谢谢阅读图-23暂停while循环的实例感谢阅读例-8用While循环创建数组谢谢阅读用While循环创建数组,此代码演示了如何用while循环内部数据建立一精品文档放心下载个简单的数组。,.该例子同样来自于NIDeveloperCommunity,作者是:TobyHex谢谢阅读图-24用While循环创建数组感谢阅读例-9用本地变量控制两个While循环同时停止谢谢阅读用一个开关和它的本地变量来控制两个While循环停止(注意:开关的使谢谢阅读用状态)。该例子同样来自于NIDeveloperCommunity,作者是:AndyC谢谢阅读,.图-25用本地变量控制两个While循环同时停止精品文档放心下载例-10利用错误信息停止For或While循环精品文档放心下载错误处理处理机制是所有编程语言中的重要处理机制,LabVIEW也不利谢谢阅读外。在测控工程中利用错误处理机制进行错误处理是十分必要的。对于For或精品文档放心下载While循环也可以利用错误处理机制使运行中程序停下来,实时纠正错误。下精品文档放心下载图演示了发生错误后停止For或While循环的实例。精品文档放心下载图-26利用错误停止While循环精品文档放心下载,.当前面的程序有错误发生时,While循环将会停下来。对于带有条件端的For精品文档放心下载循环亦会如此。While循环和For循环中的移位寄存器在《LabVIEW图形编程》一书中是这样介绍移位寄存器的:移位寄存器是谢谢阅读一种特殊的局部变量或者说是For循环及While循环所提供的存储单元。精品文档放心下载无论前面所介绍的For循环还是While循环,都可以作为移位寄存器的载感谢阅读体(容器)。我们可以利用移位寄存器进行数据处理,但是移位寄存器不仅仅可精品文档放心下载以做纯数学的处理,由于它本身的多态性它还可以接受不同类型的数据。如:精品文档放心下载在状态机中也大量的使用了非数字类型移位寄存器。关于移位寄存器的使用想必大家都很熟悉,我们这里不想多谈了。我们只谢谢阅读想谈谈移位寄存器与数据流有关的一些概念。初始化移位寄存器的重要性移位寄存器中所保存的数据,只有关闭退出VI时才能够从内存中被清除。精品文档放心下载,.所以当它第一次装入、运行后,如果没有对移位寄存器进行初始化,那么首次运谢谢阅读行后它所保留的数据是按预期运行所产生的最终值。在下次调用时,它将首次谢谢阅读运行所保留的最终值作为初始化值,再次运行后将按预期运行产生新的最终值。谢谢阅读多次调用后,最终导致输出的数据混乱,甚至可能消耗大量的内存。这绝对是感谢阅读我们不希望看到的。移位寄存器的初始化,对应于字符串应为空,对应于数字应为零,对于布谢谢阅读尔量应为“假(F)”。注意:初始化值仅在第一次迭代发生时有效。用移位寄存器传递错误信息我们在例-10中利用了输入端的错误信息来停止了While循环。感谢阅读那么我们在看看如果While循环内部产生错误时会发生些什么?感谢阅读图-27While循环内部产生错误,但是无法停止(错误后发生)感谢阅读,.运行上图,非常遗憾的是虽然While循环内部发生了错误(人为加入),但感谢阅读是这种连接方式并不能使While循环停下来。如果打开“高亮执行”就会看得感谢阅读很清楚。改进一下在看看。-28利用移位寄存器停止While循环的方法感谢阅读我们在While循环加入移位寄存器,就可以在内部发生错误时停止While谢谢阅读循环。但这种方式需要两次迭代后才能停止。并不是最好的方法,最好的方法就感谢阅读是依据数据流的原则,在最合理的地方检测错误。参见下图。精品文档放心下载-29最简单的方法,.依据数据流的原则,将检测(条件端)接到所有代码的错误簇最末端。这谢谢阅读样就保证任何时候发生错误时(无论外部还是内部),错误出现后只需一次迭代谢谢阅读就可以停止While循环。我们给出这样一个例子只是想说明:尽管看上去在那里连线似乎都一样,感谢阅读但是数据流运行机制导致了不同的运行方式。习惯数据流的编程思维是LabVIEW图形化程序设计的最基础技能之一。谢谢阅读反馈节点从数据流的观点看,反馈节点的引入似乎破坏了数据流的关系。因为我们精品文档放心下载一般确定数据是从数据源传递到数据终端的,可是反馈节点破坏了这一原则。它精品文档放心下载允许数据逆向流动,即从数据的终端反馈到数据输入端(反馈节点上的箭头指谢谢阅读出了数据的流动方向)。其实,这里千万不能与模拟电子电路中运算放大器反馈精品文档放心下载的概念混为一谈。在模电中,反馈的概念是实时进行的,而反馈节点中反馈的感谢阅读概念是异步进行的(迭代是关键)。实质上,反馈节点就是移位寄存器的简化版谢谢阅读本。所以对移位寄存器的要求同样适应于反馈节点。,.3、条件结构节点其实,顺序结构应该是最简单的条件结构节点。事实上,这里所说的条件感谢阅读结构节点是指比较常用的Case结构节点。顺序结构与Case结构的最大不同就是:多帧的顺序结构在程序执行时是一谢谢阅读帧一帧的执行的。而多帧的Case结构在程序执行时仅执行符合条件的那一帧内精品文档放心下载的程序代码(数据流运行机制简单)。还有一个不同就是:多帧的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 杭州师范大学《影音制作》2023-2024学年第一学期期末试卷
- 2025年挖掘机行业前瞻:2月销量同比增52.8%基建回暖推动市场增长
- 主要分部分项施工方案
- 预制盖板涵施工方案
- 灌缝胶施工方案
- 光学测试试题及答案高一
- 6年级写作第3单元冬日暖阳怎么写
- 6n.m的螺丝锁付扭矩
- cof内加少量聚合物成质子交换膜
- 低代码热区功能
- 设计变更单表格
- 良性前列腺增生诊疗指南
- 中学生食品安全教育 主题班会课件(18张PPT) 上学期
- 《长方形和正方形》 完整版课件
- 《乘法交换律和结合律》教学课件数学四年级下册
- 趣味数学-高斯求和 完整版课件
- 花卉生产设施课件
- 高中体育与健康人教版高中必修全一册(新课标)第十章体操类运动-技巧模块计划
- 云南省主要矿产资源
- 临床试验疑难问题解答
- 光伏发电工程施工组织设计施工工程光伏发电工程光伏发电施工组织设计
评论
0/150
提交评论