项目2 认识LabVIEW中的数据类型
LabVIEW数据大致被分为标量类(单元素)、结构类(包括一个以上的元素)两大类。标量类有数值、字符和布尔量等,结构类有数组、簇和波形等。LabVIEW数据控件模板将各种类似的数据类型集中在一个子模板上以便于使用。
LabVIEW用颜色和连线来表示各类数据。表2-1给出了几种常用的数据类型的端子图标及其颜色,更多的类型将在后面介绍。连线是程序设计中较为复杂的问题,程序框图上的每一个对象都带有自己的连线端子,连线将构成对象之间的数据通道。因为这不是几何意义上的连线,所以并非任意两个端子间都可连线,连线类似于普通程序中的变量。数据单向流动,从源端口向一个或多个目的端口流动。不同的线型代表不同的数据类型。表2-2给出了几种常用数据类型所对应的颜色和线型。
表2-1 几种常用的数据类型的端子图标及其颜色
表2-2 几种常用数据类型所对应的颜色和线型
2.1 任务1 字符串型数据操作
2.1.1 认识控件与函数选板
在控件选板→新式中包含“字符串与路径”子选板,如图2-1所示。字符串(String)是LabVIEW中一种基本的数据类型;路径是一种特殊的字符串,专门用于对文件路径的处理。字符串型与路径子选板中共有3种对象供用户选择,即字符串输入/显示、组合框和文件路径输入/显示。
图2-1 “字符串与路径”子选板
在程序框图的函数选板中,也有关于字符串的运算函数。“字符串”函数子选板如图2-2所示。
图2-2 “字符串”函数子选板
路径控件用于输入或返回文件或目录的地址。路径控件与字符串控件的工作原理类似,但LabVIEW会根据用户使用操作平台的标准句法将路径按一定格式处理。
组合框控件可用来创建一个字符串列表,在前面板上可按次序循环浏览该列表。在字符串控件中最常用的是字符串输入和字符串显示两个控件。在默认情况下创建的字符串输入与显示控件是单行的,长度固定。
图2-3所示是一个字符串输入、一个字符串显示的简单的字符串操作。
图2-3 简单的字符串操作
2.1.2 字符串的显示方式
字符串控件用于输入和显示各种字符串。用鼠标右键单击字符串控件,在弹出的快捷菜单中,关于定义字符串的显示方式有以下4种。
1)正常显示。字符串控件在默认情况下为正常显示状态,显示字符的一般形式,在字符串中可以直接输入<Enter>或<空格>键,系统自动根据键盘动作为字符串创建隐藏的‘\’形式的转义控制字符。
2)\代码显示。有些字符具有特殊含义或无法显示,如<Enter>键等,可使用‘\’转义代码表示出来,如“\n”为换行符,该显示方式适用于串口通信等。
3)密码显示。当制作登入窗口时,密码行需要使用该显示方式。
4)十六进制显示。在一些设备交互数据或者读写文件时,需要使用十六进制的方式显示其中的数据。
图2-4所示是输入图示字符串后不同显示方式的对比。
图2-4 输入图示字符串后不同显示方式的对比
2.1.3 日期时间的显示
创建一个字符串显示控件要求程序运行后显示系统当前的日期和时间。
日期/时间字符串程序框图如图2-5所示。当时间格式字符串为空的时候,显示的是系统当前的日期和时间,查看帮助信息可以获得日期/时间的其他相关信息。
图2-5 日期/时间字符串程序框图
结合帮助信息,其他字符串函数将在后面用到时再进行介绍。
2.2 任务2 数值型数据操作
2.2.1 认识控件与函数选板
数值型(Numeric)是LabVIEW的一种基本的数据类型,可以是浮点数、整数、无符号整数和复数。新式的数值型控件包含了各种形象的输入控件和显示控件,如图2-6所示。数值输入控件快捷菜单如图2-7所示。
图2-6 新式的数值型控件
图2-7 数值输入控件快捷菜单
数值运算相关函数在数值子选板中,“数值”子选板如图2-8所示。在函数选板的“编程”子选板和“数学”子选板中都可以找到。数值子选板包含了加减乘除等基本运算函数,还包含了一些常量。图中的“数学与科学常量”中有Π、自然对数等。数值运算函数支持标量和数组的运算。
图2-8 “数值”子选板
2.2.2 数值属性
数值控件中的“数值输入控件”比较常用,图2-9所示是“数值输入控件属性”对话框。选择其中的选项可对该控件进行一些操作和设置。“显示项”包含标签、标题、单位标签、增量/减量几个选项。默认勾选标签为可见和“显示增量/减量按钮”,如图所示控件上的“数值”就是它的标签、空件右侧的上下箭头就是增量/减量,去掉勾选就不再显示该部分。在图2-7所示中选择“查找接线端”就会切换到程序框图的对应接线端子上;“数据操作”用来进行数据的复制粘贴等以及设置初始化默认值、当前值为默认值。选择“属性”可以打开属性窗口,通过该窗口对数值外观、数据类型、数据输入和显示格式等属性进行设置,还可添加说明信息、进行数据绑定和设置快捷键等,如图2-8所示。
图2-9 “数值输入控件属性”对话框
2.2.3 数值表示法
在LabVIEW中的数值型的表示方法有多种,用鼠标右键单击数值控件或接线端子,在弹出的快捷菜单里选择“表示法”,可以看到数据类选项如图2-10所示。默认的数值类型是双精度浮点数(DBL),颜色为橙色。各类型数据的数据长度是不相同的。
图2-10 数据类型选项
需要注意的是,在数值运算过程中应尽量做到数据类型保持一致,否则会有强制类型转换点出现,强制转换是将低精度的数值转换为高精度数值再进行计算,运算中的强制类型转换点如图2-11所示。当中的“数值”为双精度浮点数,而“数值2”为整数,在进行加法运算时,在数值2的接入端有一个红点,即为强制转换点。有强制类型转换点,就有内存的重新分配,就会占用一定的资源,所以要尽量避免。
图2-11 运算中的强制类型转换点
2.2.4 用随机数产出模拟温度
运用数值函数产生一个20±5的随机数,用该随机数可以模拟某时刻室内温度的变化情况。
分析:±5的随机数可以考虑0-1随机数乘以10,然后减去5来实现。随机数产生的具体VI实现如图2-12所示,多次单击运行或者连续运行,会发现结果随机数在指定范围的变化,为了看清数据变化情况,可加一个等待函数(ms),等待1s。
图2-12 随机数产生的具体VI实现
2.2.5 比较函数
与数值运算相关的还有“比较函数”子选板,如图2-13所示。比较函数选板可以进行数值比较、布尔值比较、字符串比较、数组比较和簇比较。不同数据类型的数据在进行比较时适用的规则不同。
图2-13 “比较函数”子选板
2.2.6 温度的比较与警示
综合应用数值型数据、字符串和比较函数,接上面的任务,产生的温度随机数与21℃比较,当高于21℃时,文本显示为温度偏高,否则文本显示为温度正常。
两种状态的温度比较编程实现如图2-14所示。多次单击运行或连续运行,可以查看温度情况显示栏的结果变化。
图2-14 两种状态的温度比较编程实现
可以进一步深入上述任务,考虑两个阀值的比较情况:将温度低于18℃记为低温警报,高于21℃设置为高温警报。
该问题实际上有3种情况,即高温警报、低温警报和正常,可以考虑用两个选择函数实现。3种状态的温度比较编程实现如图2-15所示。多次单击运行或连续运行,可以查看结果变化。
图2-15 3种状态的温度比较编程实现
2.3 任务3 布尔型数据操作
2.3.1 认识控件与函数选板
布尔(Boolean)控件代表一个布尔值,也可认为是逻辑变量,取值只能是真(True)或假(False)。这两个值分别用一个字节来表示,当该字节所有的数值为0的时候值为假,否则,值为真。“布尔”型控件选板如图2-16所示,包括各种开关、按钮和指示灯等。“布尔函数”选板包含在函数选板中的布尔子选板中,如图2-17所示,包含了与、或和非等常用函数。与数值运算类似,布尔量的算法也可以支持标量和数组的运算。
图2-16 “布尔”型控件选板
图2-17 “布尔函数”选板
2.3.2 机械动作
在布尔型输入控件中一共有6种机械动作。机械动作的选择在快捷菜单中,用鼠标右键单击布尔控件选择“机械动作”选项,如图2-18所示。
图2-18 “机械动作”选项
不同的机械动作模拟了不同种类的开关。第1行是转换型的,如电灯的开关;第2行是触发型的,松手后开关恢复原位。按列来看,第1列是按下后立刻执行动作;第2列是按下松手后才执行动作;第3列是按下执行动作,松手后又恢复原位。
2.3.3 简单的布尔操作
简单的布尔数据操作如图2-19所示,比较布尔开关和布尔常量控制布尔灯的异同。
图2-19 布尔数据操作
2.3.4 温度报警程序设计
对应上述问题,如果温度出现报警情况时,亮红色警示灯,否则亮绿灯。
本问题涉及两个情况,对应布尔灯的真和假,真的时候设置布尔灯颜色属性为红色,假的时候为绿色。高温警报和低温警报两种情况用与函数连接,温度报警的编程实现如图2-20所示。多次单击运行或连续运行,可以查看结果变化。
图2-20 温度报警的编程实现
2.4 任务4 数组和簇操作
2.4.1 认识控件与函数选板
数组控件在“数组、矩阵与簇”选板中,如图2-21所示。数组(Array)由元素和维度组成。元素是组成数组的数据,维度是指数组的长度、深度。数组中存放的是相同的数据类型,可以是数值型,也可以是布尔型或字符型等,最常用的是数值型的数组。可以创建数组控件和数组常量。
图2-21 “数组、矩阵与簇”选板
2.4.2 创建数组
在控件选板中选择如数值、字符串和布尔量等控件,将其拖放到之前的数组外框中,得到一个一维数组。创建数组如图2-22所示。图2-22a所示是放置一个双精度的由数值控件构成的一维数组。
图2-22 创建数组
a)一维数组 b)二维数组 c)程序框图中接线板的状况
如图2-22b所示,若需要创建的是二维数组只需要通过上下拖拉的方式,在左侧索引部分即可得到所需维数的数组。图2-22b所示得到的是一个二维数组,图2-22b所示是程序框图中接线板的状况。
在程序框图中,标量的连线是一条细线,一维数组是较粗的实心线,二维数组的连线是由两根细线组成的,如图2-22c所示。除了可以创建数值型数组,还可以创建字符串型和布尔型数组。
对于数组的相关运算,其实在查看其他数据类型的例程时应有所接触。对数组可以进行加减乘除的运算,此外,还可以索引某个元素、索引某行/某列、测量数组维度,重新组成新数组等。图2-23所示是“数组”的函数选板。
图2-23 “数组”的函数选板
2.4.3 数组的大小和索引运算
图2-24所示是一维数组函数的综合运用,即创建数组、使用数组函数,并在创建的数组中进行数组大小运算和索引运算。
图2-24 一维数组函数的综合运用
对于二维数组常常涉及索引,索引从0开始,函数中索引端口的顺序是先行后列,即先是行索引,后是列索引。如果行索引为空,只有列索引,那么索引的是对应的列,反之是行;如果既有行索引又有列索引,那么索引的将是对应的元素,图2-25所示的例子能很好地说明这一点。另外,创建一维、二维数组可以用后面将要讲到的for循环结构来实现。
图2-25 二维数组的几种索引方式比较
图2-25所示为二维数组的几种索引方式比较。
2.4.4 创建和使用簇
前面介绍的数组是同一类型数据的集合,若需要创建多种数据类型的集合,则需要使用LabVIEW中特有的数据类型——簇(Cluster),类似于C语言当中的结构体。
最常见的簇是LabVIEW中自带的错误簇。错误簇中包含有布尔量、数值和字符串。在编程时使用错误簇,可以将所有子VI以及函数的错误簇按照数据流向的先后连接起来,这样不仅可以将错误传递下去,而且方便找到对应的错误源,还可以控制程序的执行顺序。
虽然簇可以包含多种数据类型(比如,在簇中可以包含另一个簇),但是在同一个簇中只能包含输入控件或者显示控件,不可能同时包含输入/显示控件。簇的创建与数组类似,即将簇的外框拖放到前面板上。簇的创建方式如图2-26所示。
图2-26 簇的创建方式
在簇中添加所需的元素,可创建一个新的簇。在程序框图中的接线端如图2-26d所示。如果需要簇的外框大小和其包含的元素大小相匹配,在簇控件上用鼠标右键单击,选择“自适应大小”(size to fit)就可以得到调整后的簇的外貌,并且会根据新修改的元素分布自动修改其外框大小。
“簇的函数”选板如图2-27所示,最常用的4个选项是按名称捆绑、捆绑、按名称解除捆绑和解除捆绑。
图2-27 “簇的函数”选板
当有大量的数据需要传递的时候,若数据类型一致,则推荐使用数组将数据整合在一起;若数据类型有多种,则推荐使用簇将各种数据捆绑在一起,然后再进行传递。
2.4.5 簇的编号与排序
在创建一个簇时,LabVIEW会按照簇中元素创建的先后次序给簇中的元素进行默认编号。编号从0开始,依次为1、2、…。当然,也可根据编程需要自己定义元素的编号。在簇框架用鼠标右键单击弹出的选单中,选择重新排序簇中的控件,如图2-28所示,Lab-VIEW的前面板会变为元素顺序编辑器,在编辑器中用鼠标单击元素的编号,即可改变元素的编号,其余编号依次轮回。在编辑完所有编号后,用鼠标单击工具条上的“OK”按钮确定。
图2-28 簇中控件的排序
2.5 任务5 图形数据操作
强大的数据图形化显示功能是LabVIEW最大的优点之一。利用图形与图表等形式来显示测试数据和分析结果可以直观地看出被测试对象的变化趋势,从而使虚拟仪器的前面板变得更加形象和直观。LabVIEW提供了丰富的图形显示控件。编程人员通过使用简单的属性设置和编程技巧就可以根据需求定制不同功能的“显示屏幕”。
2.5.1 生成波形数据
波形是一种特殊类型的簇,元素的数量和类型固定,包括数据采集的起始时间t0、时间间隔dt、波形数据y和属性。波形数据在“函数”→“信号处理”→“波形生成”选板,如图2-29所示。该选板上的函数较多,使用基本相似。主要介绍正弦波形、基本函数发生器和仿真信号。
图2-29 “波形生成”选板
1.正弦波形
正弦波形生成VI用来生成正弦波信号,有多个输入端,可以进行正弦波的幅值、频率和相位等设置,如图2-30所示,其中的输入端子依次如下。
图2-30 正弦波形生成VI
偏移量:波形信号的直流偏移量,默认值为0.0。
重置信号:值为TRUE时,相位可重置为相位控件的值,时间标识可重置为0,默认值为FALSE。
频率:波形的频率,单位为赫兹,默认值为10。
幅值:波形的幅值,默认值为1.0。
相位:波形的初始相位,以度为单位,默认值为0。如重置信号为FALSE,则VI忽略相位。
错误输入:表明节点运行前发生的错误。该输入将提供标准错误输入功能。
采样信息:包括Fs(每秒采样率,默认值为1000),#s(波形的采样数,默认值为1000)。
信号输出:生成的正弦波信号。
错误输出:包含错误信息,该输出将提供标准错误输出功能。
2.基本函数发生器
基本函数发生器如图2-31所示,该函数能够根据信号类型创建输出波形。信号类型选项有:Sine Wave(正弦波)、Triangle Wave(三角波)、Square Wave(方波)和Sawtooth Wave(锯齿波)。该函数还可以进行幅值、频率、相位、偏移量以及采样信息等的设置。
图2-31 基本函数发生器
3.仿真信号
仿真信号是一个Express VI,该VI能仿真正弦波、方波、三角波、锯齿波和噪声等信号。图标如图2-32所示。信号类型的选择及一些信息的配置,在交互式对话框中进行。放置该VI或者在放置好的节点上双击鼠标左键,弹出对话框如图2-33所示。在该对话框中,最上面是信号类型复选框,可以在此选择信号类型类(比如选择正选信号),下面就要对这个信号进行频率、幅值、相位和偏移量等的设置,如果是方波信号还可以设置占空比。对该信号还可以加入噪声,噪声类型也有多个选项,详细描述参见帮助文件。
图2-32 仿真信号
图2-33 “配置仿真信号”对话框
2.5.2 分析处理波形数据
波形分析处理相关函数位于“函数”→“编程”→“波形”选板,如图2-34所示。其中包含了分解波形数据、组成波形数据的函数以及波形分析和波形文件保存等。
图2-34 “波形”选板
在“信号处理”选板中,除了波形生成外,还有一些与波形分析处理有关的函数,如图2-35所示。图中的每个选项展开后都包含了多个函数,这些函数以后用到再详细介绍,这里简单介绍一下“信号生成”选板。
图2-35 “信号处理”选板
在图2-35中的“信号处理”选板中,各个函数的功能与“波形生成”的功能相似,生成的信号类型也类似。它们的主要区别是“波形生成”模板包含了信号的时间信息,波形是时间的函数;而“信号生成”模板则不包括。“波形生成”模板中各模块参数设置更为灵活,功能更强大,其中的许多模块是在“信号生成”模板的基础上进一步开发的。
2.5.3 显示波形数据
波形(Waveform)控件在“图形”控件子选板中,如图2-36所示。其中3个常用的波形控件有波形图表、波形图、XY图和Express XY图。波形图表主要用来显示波形数据,如最常见的正弦波、方波等。所有从外部硬件采集到的数据都可以用波形图表来显示。在波形中显示的数据有数组、标量和波形数据等。
图2-36 “图形”控件子选板
1.波形图表
波形图表是一个图形控件,使用波形图表可以将新获取的数据添加到原图形中去,波形图表的坐标可以是线性或是对数分布的,其横坐标表示数据序号,纵坐标表示数据值。在波形图表控件的鼠标右键快捷菜单中,有着丰富的内容,其中显示项中包含图表标签、标尺和辅助组件等。
在一个波形图表中可以显示多条曲线。对于二维数组,在波形图表中默认情况下它将输入数组转置,即把生成数组的每一列数据当作一条一维数组来生成曲线。图2-37a所示的2行6列数组默认为2个点的6条曲线;数组转置后,变成6个点的2条曲线。对应程序框图如图2-37b所示。曲线上加点的方法是:用鼠标右键单击波形图标,选择“属性”,在打开的属性对话框上选择“曲线”,打开图2-38所示的界面。可以对曲线0、曲线1……进行加点、填充和修改颜色等属性设置。
图2-37 波形图表
a)波形图表前面板 b)波形图表程序框图
图2-38 曲线属性设置
波形图标的曲线可以进行分格显示,如图2-39所示。把右上角的“图例”拖拽,出现“曲线0”“曲线1”。在曲线显示区用鼠标右键单击,选择“分格显示”,2条曲线就分别显示在两个窗口中。把图例每个曲线波形的Y标尺幅度可以单独进行设置,使不同大小的曲线都能清晰地在波形图表中显示。
图2-39 波形图表分格显示
如果要在一个波形图表绘制多条曲线,需要用捆绑函数将两个数据捆绑成一个簇,然后连接到波形图表中。
2.波形图
尽管波形图和波形图表在外观及很多附件功能上相似,但对比波形图表,波形图不能输入标量数据,也不具备数字显示和历史数据查看功能;输入二维数组时,默认为输入数组不转置。
波形图在显示时先清空历史数据,然后将传递给它的数据一次绘制成曲线显示出来。在自动刻度下,它的横坐标初始值恒为0,终值等于数据量;在固定刻度下,横坐标在程序运行时保持固定,用户可以根据要求设置横坐标的初始值和终值。波形图表在已有采集数据的基础上不断更新显示新的输入数据,适用于实时检测数据波形。而波形图属于事后记录波形数据的图表,适用于事后数据的分析。此外,波形图控件的游标图例功能可以在波形记录后方便地查询曲线上任意曲线点的坐标值或采样点值。和波形图表一样,波形图的输入数据可以是一维数组、二维数组和波形数据。不同的是波形图不能输入标量数据,但可以输入由3个元素组成的簇数组。
1)程序框图如图2-40a所示,当输入数据为一维数组时,波形图直接根据输入的一维数组数据绘制一条曲线,图2-40b所示的波形图显示。还可以为波形图的横坐标添加时间,方法是在波形图上用鼠标右键单击,在弹出的快捷菜单上选择“属性”,打开属性对话框,选择“显示格式”选项,如图2-40c所示,图中的时间(X轴)类型中选择“绝对时间”,时间格式选择“24小时制”,日期格式选择“系统日期格式”。
图2-40 波形图显示
a)程序框图 b)前面板 c)X轴日期时间设置
送入波形图2中的数据是“簇”,它包含了t0=10;Δt=2,以及y(一维数组)的信息。把这3个信息按照顺序捆绑起来即可,波形显示图2-40b所示的波形图2。比较两个波形图的显示,各点的取值y相同,计时起点和步长不同。
2)把“基本函数发生器”生成的波形数据用波形图显示,程序如图2-41所示。图2-41a为程序框图,在基本函数发生器的信号类型、频率、幅值、相位、采样信息和占空比等端子上用鼠标右键单击,创建输入控件,前面板就会放置相应的输入控件,如图2-41b所示。在前面板的信号类型控件上单击鼠标,选择Triangle Wave(三角波),频率默认10.0Hz,修改为2Hz,其他选项不变。运行程序,显示效果见图2-41b。选择不同类型信号或修改频率、相位和幅值等信息,波形显示会相应变化;选择Square Wave(方波时)还可以修改占空比。
图2-41 波形图显示基本函数波形
a)显示基本函数波形程序框图 b)显示基本函数波形前面板
3.XY图
在显示均匀波形数据时通常使用波形图,其横轴默认为采样点序号,Y轴默认为测量数值,这是一种理想情况。但在大多数情况下,绘制非均匀采样数据或封闭曲线图时无法使用波形图。因此,当数据以不规则的时间间隔出现或当要根据两个相互依赖的变量(如Y/X)时,就需要使用XY图,即笛卡儿图。它可以绘制多值函数曲线,如圆、双曲线等。XY图也是波形图的一种,它需要同时输入X轴和Y轴的数据,X、Y之间相互联系,不要求X坐标等间距,且通过编程能方便地绘制任意曲线。与波形图类似,XY图也是一次性完成波形的显示刷新。
当X数组、Y数组的长度不一致时,在XY图中将以长度较短的数据组为参考,而长度较长的数据组多出来的数据将在图中无法显示。在使用XY图来绘制曲线时,需要注意数据类型的转换。
例如,要画一个心形图案,给出X数据和Y数据,分别是20个元素的一维数组,把两一维数组捆绑后,送XY图显示,如图2-42所示。设置显示曲线宽度,并加点,可以看到,图中用20个点绘制了一条心形曲线。
图2-42 用XY图显示心形曲线
a)程序框图 b)XY图显示
2.5.4 图形数据操作
1.读取显示二维图片
二维图片控件位置在“控件”→“图形”→“控件”,如图2-43所示。与二维图片相关的函数位于“编程”→“图形与声音”选板,如图2-44所示。其中的“图片函数”和“图形格式”中,包含了大量与图片相关函数。下面用一个例子来说明这些函数的使用方法。
图2-43 “图形”控件选板
图2-44 “图形与声音”函数选板
1)事先做好一个BMP格式的图片,可以命名为“二维图片.BMP”。在前面板放置一个二维图片控件,并拖拽,再放置一个“文件路径输入控件”(位置在“控件”→“新式”→“字符串与路径”),并修改为“BMP文件路径”。在程序框图窗口编写程序如图2-45a所示。图中的“读取BMP文件”在“图形格式”选板中;“绘制平化像素图”在“图片函数”选板中。
图2-45 二维图片显示
a)程序框图 b)前面板
2)在“二维图片”上用鼠标右键单击,弹出的快捷菜单中选择“创建”→“属性节点”→“可见”,用来创建一个可见属性节点。在该属性节点上用鼠标右键单击,在快捷菜单上选择“全部转为写入”。在前面板上放置一个“水平摇杆开关”,把开关连接到属性节点的“Visible”输入端(见图2-45a)。前面板如图2-45b所示,找到“二维图片.BMP”所在位置,把路径填写到路径控件中。单击连续运行按钮,运行程序。运行时,开关拨向左侧,图片不可见,拨到右侧,图片可见。
2.绘制三维图
“三维图片”控件在“控件”→“新式”→“图形”选板。三维图片相关函数位于“函数”→“图形与声音”→“三维图片控件”,如图2-46所示。图中的“几何”选板中函数用于绘制基本形状,如锥面、柱面、长方体和网格等;“对象”选板中函数集包含了创建、查找对象两个函数。对于一个三维场景来说,对象是一个最基本的元素。一个三维场景中可以有一个或多个对象;在一个对象中,也可以放置一些基本的形状,也能导入三维建模文件中的模型,也能插入更多的子对象。对三维图片控件的编程,实质就是对对象的编程。“变形”控制三维场景中对象变形的函数。如控制或获取某对象的旋转、缩放和平移等,此函选板有9个函数。“助手”是用户设置三维场景时的常见操作,如设置光源、设置某对象的表面图像等。“加载文件”用于在三维场景中加载来自于第三方文件的几何模型,有加载ASE几何、加载STL几何和加载VRML文件。
图2-46 三维图片相关函数
下面来绘制一个圆锥三维图,并且让该图按照要求旋转。步骤如下:
1)在“几何”中选择“创建锥面”,放置在程序框图窗口,并在该函数的每个输入端上创建输入控件,如图2-47a所示。
图2-47 三维图绘制程序
a)程序框图 b)设置调用节点 c)前面板 d)视角控制器设置
2)在“对象”中选择“创建对象”,放置在程序框图窗口,在“名称”端子上创建常量,命名为“圆锥”。
3)放置一个调用节点,位置在函数选板上“编程”→“应用程序控制”→“调用节点”,该节点的“引用”端子连接到“创建对象”的“场景:新对象”端子上,该节点如图2-47b所示。在节点的“方法”上单击鼠标左键,弹出的快捷菜单上选择“设置可绘制对象”。“创建锥面”函数的“新锥形引用句柄”作为调用节点“Dravable(可绘制对象)”端的输入信号。此时,在前面板放置一个“三维图片”控件就可以显示该三维图了。
4)在“三维图片”上用鼠标右键单击,创建属性节点,选择“背景色”,并在该节点的背景色输入端创建一个输入控件,就可以对背景进行颜色设置了。
5)前面板如图2-47c所示。“颜色”控件中是三原色红、绿、蓝以及Alpha(用于指定RGB颜色的不透明度),用来设置三维图的颜色,取值在0~1之间;“背景色”控件用来设置背景的颜色。“高度”控件用来设定圆锥对象垂直轴的长度、“半径”控件用来设定对象的半径、“详细”控件用来设置绘制对象时至高点的数量。详细值越高,几何对象的近似度就越大,取值在0~1之间,默认值为1。
在前面板的“三维图片”控件上用鼠标右键单击,“视角控制器”选项中,“球面”和“自动重绘”选项前面打勾。可以实现运行时,用鼠标拖动三维图形,来按照固定点旋转,见图2-47d。
6)如果希望该三维图形旋转起来,就需要一个While循环,把“三维图片”至于循环体内,用函数“旋转对象”来实现旋转功能,在该函数的两个输入端创建输入控件,用来设置旋转轴和旋转角度。把该函数的“场景.对象输出”引用端子连接到“三维图片”的输入端,即完成程序设计。
2.6 思考题
1.用0~100的随机数代替摄氏温度,将每500ms采集的温度变化波形表示出来,并设定上限为85,下限为45,温度高于上限或者低于下限分别点亮对应的指示灯,并将其上、下限也一并在波形中表示出来。
2.生成一个0~100的随机整数,与60比较,大于等于60记为通过,绿灯亮;小于60记为不及格,红灯亮;将比较结果捆绑后放在一个簇里显示。