2021年数据流运行机制中的数据和简单的数据处理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.2 数据流运行机制中的数据和简单的数据处理(Operating mechanism in the data stream of data and simple data processing)
欧阳光明(2021.03.07)
版本 8
创建于: 2010-9-13 下午6:35 作者 jwdz - 最后修改: 2010-9-30 下午9:16 作者 jwdz
对于任何一种基于文本(控制流)的编程语言,数据类型和数据结构都是必不可少的一个重要组成部分。而且,在不同种类的编程语言中,它们所包含的数据类型和数据结构大体上都极为相似,如C、Java等。
作为图形化的编程语言,LabVIEW在这点上,与基于文本的编程语言有着许多的相似之处,即包含了近乎完整的数据类型和数据结构。同时,也会存在着一些不同之处,因为 LabVIEW更多的是面向工程应用的程序设计,所以它还包含了一些其它编程语言所不具备的数据类型或数据结构。
数据流——指数据在程序中的流动。因为我们将数据流编程视为LabVIEW的核心编程思想,那就必须对数据流中的数据有更多的、更深入的了解。
3.2.1 LabVIEW中的数据
我们知道,C语言中的数据通常是放置在变量中。那么LabVIEW图形化语言中的数据放置在何处呢?
事实上,LabVIEW中的数据类型和数据结构都是包括在控件选板中的控件(包括指示控件)中。这应该是LabVIEW所特有的,当然这也应该是引起我们更多关注的地方。
为了更有效的进行讨论,这里还有两点需要强调一下:
其一,通过控件和指示控件我们根本无法确定它具体的数据类型,但它的确是放置数据的地方。其实,这也很好理解,因为关心数据类型的不是用户而是程序的设计者。
其二,我们将数据类型和数据结构统称为:数据类型,并不准备对它们的含义和差别做更多的解释。
3.2.1.1 前面版——控件及指示控件
前面板上的控件和指示控件的本质类似一个容器,它们也被称为:对象。 LabVIEW中的数据就是放置在这里。
前面板上的控件和指示控件与程序框图中的端子是一一对应的(端子是控件在程序框图中的映射)。它们充分的利用了图形化操
作系统的所提供的基本特性,逼真的模拟出虚拟仪器所必需的图形化用户界面的基本元素。
它们在前面板上除了起到人机对话的操作和显示之外,还起到了与程序框图中的端子间进行数据传递的作用。尽管这种传递数据的机理是隐式的、是我们无法察觉的,但它是实是在在的存在的。同时,它们除了用来存放数据之外,本身还具有众多的属性和方法(包括本地变量和引用)供程序设计时使用(如改变大小、色彩等)。
注意:这些所有特性都是出现在程序框图中。
在关于控件的这些基本特性请参见下图。
图 3.2.1.1-1 前面版上的Thermometer指示控件和它的属性
控件作为程序中的一部分在人机对话的过程中使得用户可以直接输入数据。基于文本的编程语言不具备这种直接性。
采用控件来保存数据可以让您只关注数据以及对数据的操作,并且控件本身抽象出了诸如内存分配和语法规则等大量复杂的计算机编程工作,从而让您的工作效率更高。
3.2.1.2 程序框图——端子(控件的映射)
前面版中控件和指示控件的实例在程序框图上的映射被称为:端子。
端子类适于基于文本编程语言中的参数和常量。同样,它本身也具有众多的属性和方法供程序设计时使用。具体内容请参见下图。
图 3.2.1.2-1 程序框图上的Thermometer指示控件的端子和它的属性
由于前面版上的控件是提供给用户的,所以控件和指示控件的外貌差别一般并不是很大。而端子是提供给程序的设计者,所以它所包含的信息较多。参见下图。
图 3.2.1.2-2 前面版及程序框图中的控件和端子
在图 3.2.1.2-2 所示的端子中,我们可以看到端子所提供的一些基本信息:
•控件和指示器的外观图像(也可以以图标的形式显示)• Thermeter、Numeric控件的边框颜色较深,表示它是控件(输入)
• Thermeter2、Numeric2控件的边框颜色较浅,表示它是指示控件(输出)
•端子的下方显示出了该控件的数据类型(DBL)
•端子边框上的小箭头可以看出控件的指向(输入或输出)
对比Thermeter2、Numeric2可以看得更明了。
3.2.1.3 控件和端子的指向性(方向性)
基于数据流的运行机制,在LabVIEW中,无论图形化的控件还是端子都具有特殊的指向性(方向性)。如通过端子边框上的小箭头可以看出该控件的指向(输入或输出)。这个指向性实际上是表示数据的流入、流出方向,它同样来自数据流编程的需要。这也表明控件不可以接受数据(只能发出数据),指示控件也不可以输出数据(只能接受数据),因为那样作不符合数据流编程的基本原则。
尽管我们可以随意将一个对象从控件转换成为指示控件,或者反之,但它最终的确定性是唯一的。也就是说,一个对象不可能同时具备控件和指示控件的功能。
依据数据流编程的基本原则,在程序框图中控件的端子通常是放置在框图中的左侧,而指示控件的端子通常是放置在程序框图的右侧。而在前面版上,控件和指示控件所放置的位置是不受任意约束的,是可以任意放置的。
顺便说明,本地变量、全局变量、属性等节点也同样因数据流的需要而具有指向性。
3.2.2 LabVIEW中的数据类型
既然LabVIEW中的数据都包含在控件和指示控件中(常量除外),如图 3.2.1.2-2中所示的数据类型是DBL,所以数据类型的讨论也就是控件和指示控件的数据类型的讨论。
3.2.2.1 端子所展现的数据类型
首先我们看看LabVIEW 2009 帮助文件中所提供的以端子的形式表示的控件和指示控件的数据类型。
这种表示方法在程序框图中占用的面积小,并且很直观。见下图。
图 3.2.2.1-1-2 用端子表示的控件、指示控件的数据类型
3.2.2.2 用数据分类的方法表示的数据类型
除了上面的数据分类方法外,我们还可以参照LabVIEW给出的另一种分类方式进行分类,就是按照“显示缓存区分配”对话框中的划分方法用控件名直接表示(实质上还是针对控件进行分类)。
选择vi的》工具》性能分析》显示缓存区分配,参见下图。
图 3.2.2.2-1 显示缓存区分配
分配原则
•数组控件(Arrays)