1、 1 基本 操作 创建调用 子程序 我们通过例子来说明如何创建一个 VI。 练习: 建立一个测量温度和容积的 VI,其中须调用一个仿真测量温度和容积的传感器子 VI。步骤如下: 选择 FileNew,打开一个新的前面板窗口。 从 ControlsNumeric 中选择 Tank 放到前面板中。 在标签文本框中输入“ 容积” ,然后在前面板中的其他任何位置单击一下。 把容器显示对象的显示范围设置为 0.0 到 1000.0。 a. 使用文本编辑工具( Text Edit Tool),双击容器坐标的 10.0 标度,使它高亮显示。 b. 在坐标中输入 1000,再在前面板中的其他任何地方单击一下。
2、 这时 0.0到 1000.0之间的增量将被自动显示。 在 容器旁配数据显示。 将鼠标移到容器上,点右键,在出现的快速菜单中选 Visible ItermsDigital Display 即可。 从 ControlsNumeric 中选择一个温度计,将它放到前面板中。设置其标签为“温度” ,显示范围为 0 到 100,同时配数字显示。可得到如下的前面板图。 图 练习的前面板图 WindowsShow Diagram 打开流程图窗口。从功能模板中选择对象,将它们放到流程图上组成下图(其中的标注是后加的)。 随机数发生器 乘法函数 数值常数 进程监视2 图 练习的流程图 该流程图中新增的对象有两个
3、乘法器、两个数值常数、一个随机数发生器、一个进程监视器,温度和容积对象是由前棉板的设置自动带出来的。 a. 乘法器和随机数发生器由 FunctionsNumeric 中拖出,尽管数值常数也可以这样得到,但是建议使用 c 中的方法更好些。 b. 进程监视器( Process Monitor)不是一个函数,而是以子 VI 的方式提供的,它存放在 LabVIEWActivity 目录中,调用它的方法是在 FunctionsSelect a VI下打开 Process Monitor,然后在流程图上点击一下,就可以出现它的图标。 注意: LabVIEW 目录一般在 Program FilesNatio
4、nal Instruments目录下。 用连线工具 将各对象按规定连接。 a 中的遗留问题创建数值常数对象的另一 种方法是在连线时一起完成。具体 方法是:用连线工具在某个功能函数或 VI 的连线端子上单击鼠标右键,再从弹出的菜单中选择 Create Constant,就可以创建一个 具有正确的数据格式 的数值常数对象。 选择 FileSave, 把该 VI 保存为 LabVIEWActivity 目录中的 Temp )结尾。 公式节点的帮助窗口中列出了可供公式节点使用的操作符、函数和语法规定。一般说来,它与 C语言非常相似,大体上一个用 C写的独立的程序块都可能用到公式节点中。但是仍然建议不要
5、在一个公式节点中写过于复杂的代码程序。 下面这个例子显示了如何在一个公式节点中执行不同条件时的数据发送。 请阅读下面这段程序代码,如果 X为正数,它将算出 X的平方根并把该值赋给 Y,如果 X为负数,程序就给 Y赋值 -99。 if (x = 0) then y = sqrt(x) else y = -99 end if 可以用公式节点取代上面这段代码,如下图所示: 21 注意:公式节点中变量字母 X,Y大、小写是有区别的,开方的函数 sqrt(X)中函数名称是小写。 练习 2-6 使用公式节点 目的:创建一个 VI,它用公式节点计算下列等式: y1 = x 3 x 2 + 5 y2 = m*
6、 x + b x 的范围是从 0 到 10。可以对这两个公式使用同一个公式节点,并在同一个图表中显示结果。 前面板 图 练习的面板 1. 打开一个新的前面板,按照上图(该图中包含运行结果)创建前面板中的对象。波形图显示对象用于显示等式的图形。该 VI使用两个数字式控制对象来输入 m和 b的值。 流程图 2. 按照下图创建流程图。 outputinput Y=(X=0)?sqrt(X):-99;YX30.00m20.00b1000.00.0200.0400.0600.0800.0100 1 2 3 4 5 6 7 8 9y1y2Waveform Graph22 图 练习的流程图 在创建某个输入或
7、者输出端子时,必须给它指定一个变量名。这个变量名必须与公式节点中使用的变量名完全相符。 公 式节点中,在边框上单击鼠标右键,在快捷菜单中选择Add Input,可以创建三个输入端子。在快捷菜单中选择 Add Output,创建输出端子。 x 的范围是从 0 到 10(包括 10),就必须连接 11 到计数端子。 Build Array ( FunctionsArray) 在这个例子中,它用于将两个数据构成数组形式提供给一个多曲线的图形中。通过用变形工具拖拉边角就可以创建两个输入端子。 3. 返回前面板,尝试给 m和 b赋以不同的值再执行该 VI。 4. 把该 VI 保存为 LabVIEW/Ac
8、tivity 目 录 下 的Equations.vi。 练习 2-6 结束。 程序结构 2.1循环结构 2.1.1 While循环 While 循环可以反复执行 循环体的 程序,直至到达某个边界条件。它类似于普通编程语言中的 Do 循环和 Repeat-Until 循环。 While 循环的框图是一个大小可变的方框,用于执行框中的程序,直到条件端子接收到的布尔值为 FALSE。 该循环有如下特点: 计数从 0开始( i=0) 。 先执行循环体,而后 i+1,如果循环只执行一次,那么循环输出值 i=0。 循环至少要运行一次。 23 图 4 While 循环示意图 由于在练习一中已讲过 While
9、循环的应用,大家可以自己做下面的练习,其前面板 和流程图如下 图所示: 2.1.1.1 移位寄存器( Shift Register) 移位寄存器可以将数据从一个循环周期传递到另外一个周期。在程序设计中,经常要用到它创建一个移位寄存器的方法是,用鼠标右键单击循环的 左 边或者 右 边,在快捷菜单中选择 Add Shift Register。如右图所示。 移位寄存器在流程图上用在循环边框上相应的一对端子来表示。右边的端子中存储了一个周期完成后的数据,这些数据在这个周期完成之后将被转移到左边的端子,赋给下一个周期。移位寄存器可以转移各种类型的数据数值、布尔数、数组、字符串等等。它会自动适应与它连接的
10、第一个对象的数据类型。下图表示了它的工作过程 循环变量 条件端子 控制开关1.00.00.20.40.60.810230随机信号10.00.02.04.0 6.08.0循环延时ONOFF24 图 Shift Register 的工作过程 可以令移位寄存器记忆前面的多个周期的数值。这个功能对于计算数据均值非常有用。还可以创建其他的端子访问先前的周期的数据,方法是用鼠标右键单击左边或者右边的端子,在快捷菜单中选择 Add Element。例如,如果某个移位寄存器左边的端口含有三个元素,那么就可以访问前三个周期的数据。 练习 四 使用移位寄存器 目的:创建一个可以在图表中显示运行平均数的 VI。 前
11、面板 1. 打开一个新的前面板,按照下图所示创建对象。 2. 把波形图表的坐标范围改为 0.0到 2.0。 3. 在添加开关之后,用鼠标右键单击它,在快捷菜单中选择 Mechanical ActionLatch When Pressed,再选择 OperateMake Current Values Default,把 ON状态设置为默认状态。 练习 四 的前面板 流程图 1.按下图创建流程图。 2.0 0.0 0.5 1.0 1.5 50 0 随机数 Boolean ON OFF 25 练习 四 的流程图 2.在流程图中添加 While 循环 (FunctionsStructures),创建移
12、位寄存器。 a. 用鼠标右键单击 While 循环的左边或者右边,在快捷菜单中选择 Add Shift Register。 b. 用鼠标右键单击寄存器的左端子,在快捷菜单中选择 Add Element,添加一个寄存器。用同样的方法创建第三个元素。 3.Random Number (0 1)函数( FunctionsNumeric) 产生 0到 1之间的某个随机数。 4.Compound Arithmetic 函数( FunctionsNumeric) 在本练习中,它 将返回两个周期产生的随机数的和。如果要加入其他的输入,只需用右键单击某个输入,从快捷菜单中选择 Add Input。 5.除法函
13、数( FunctionsNumeric) 在本练习中,它用于返回最近四个随机数的平均值。 6.数值常数( FunctionsNumeric) 在 While 循环的每个周期, Random Number (0 1)函数将产生一个随机数。 VI 就将把这个数加入到存储在寄存器中的最近三个数值中。 Random Number (0 1)再将结果除以 4,就能得到这些数的平均值(当前数加上以前的三个数)。然后再将这个平均值显示在波形图中。 7.Wait Until Next ms Multiple 函数 ( FunctionsTime & Dialog) 它将确保循环的每个周期不会比毫秒输入快。在本
14、练习中,毫秒输入的值是 500毫秒。如果用鼠标右键单击图标,从快捷菜单中选择 VisibleLabel,就可以看到 Wait Until Next ms Multiple 的标签。 8.用鼠标右键单击 Wait Until Next ms Multiple 功能函数的输入端子,在快捷菜单中选择 Create Constant。出现一个数值常数,并自动与功能函数连接。 9.将 Constant 设置为 500。这样连接到函数的数值常数设置了 500 毫秒的等待时间。因此循环每半秒执行一次。注意, VI 用一个随机数作为移位寄存器的初始值。如果没有设置移位寄存器端子的初始值,它就含有一个默认的数值
15、,或者上次运行结束时的数值,因此开始得到的平均数没有任何意义。 10.执行该 VI,观察过程。 11.把该 VI 保存 。 练习 四 结束。 26 附注:移位寄存器的初值: 上面的练习中对移位寄存器设置了初值 0.5。如果不设这个初值,默认的初值是。在这个例子中,一开始的计算结果是不对的,只有到循环完次后移位寄存器中的过去值才填满,即第次循环执行后可以得到正确的结果。 2.1.2 For 循环 For循环用于将某段程序执行指定次数。和 While 循环一样,它不会立刻出现在流程图中,而是出现一个小的图标,而后您可以修改它的大小和位置。具体的方法是,先单击所有端子的左上方,然后按下鼠标,拖曳出一
16、个包含所有端子的矩形。释放鼠标时就创建了一个指定大小和位置的 For循环。 For 循环将把它的框图中的程序执行指定的次数, For 循环具有下面这两个端子: N: 计数端子(输入端子) 用于指定循环执行的次数。 I: 周期端子(输出端子) 含有循环已经执行的次数。 上图显示了一可以产生 100个随机数并将数据显示在一个图表上的 For循环。在该例中, i 的初值是 0,终值是 99。 练习五 使用 For 循环 目的:用 For循环和移位寄存器计算一组随机数的最大值。 打开一个新的前面板,按照下图创建对象。 a.将一个数字显示对象放在前面板,设置它的标签为“最大值”。 b.将一个波形图表放在
17、前面板,设置它的标签为“随机数”。将图表的纵坐标范围改为 0.0到 1.0。 c.在图表的快捷菜单中选择 Visible ItemsScrollbar 和 Digital Display,并隐藏 Plot Legend。 27 d.用移位工具修改滚动栏的大小。 练习 五 的 前 面板和流程图 按照上图画流程图。 在流程图中放置一个 For循环( FunctionsStructures)。 在 For循环的边框处单击鼠标右键,在快捷菜单中选择 Add Shift Register。 将下列对象添加到流程图。 a.Random Number (0 1)函数( FunctionsNumeric) 产
18、生 0到 1之间的某个随机数。 b.数值常数( FunctionsNumeric) 在这个练习中需要将移位寄存器的初始值设成 0。 c.Max&Min函数( FunctionsComparison) 输入两个数值,再将它们的最大值输出到右上角,最小值输出到右下角。这里只需要最大值,只用连接最大值输出 。 28 d.数值常数( FunctionsNumeric) For循环需要知道需要执行的次数。本练习中是 100次。 按照上图连接各个端子。 运行该 VI。 将该 VI保存 。 练习 五 结束。 2.2 分支结构: Case Case结构含有两个或者更多的子程序( Case) ,执行那一个取决于
19、与选择端子或者选择对象的外部接口相连接的某个整数、布尔数、字符串或者标识的值。必须选择一个默认的 Case 以处理超出范围的数值,或者直接列出所有可能的输入数值。 Case结构见下图,各个子程序占有各自的流程框,在其上沿中央有相应的子程序标识: Ture、 False或、。按钮用来改变当前显示的子程序(各子程序是重叠放在屏幕同一位置上的)。 练习 六 使用 Case 结构 目的:创建一个 VI以检查一个数值是否为正数。如果它是正的, VI就计算它的平方根,反之则显示出错。 前面板 1. 打开一个新的前面板,并按照下图所示创建对象。控制对象用于输入数值,显示对象用于显示该数值的平方根。 流程图
20、2. 照下图创建流程图。 2.00Number 1.41SQRT子程序标识 按钮 条件端子 29 练习 六 的面板和流程图 3. 从 FunctionsStructures 中选择一个 Case 结构,并放置在在流程图中。 Case 结构是一个可以改变大小的方框。先来做 Ture的情况,照流程图上半部分构造。 a. Greater Or Equal To 0? 函数( FunctionsComparison) 如果输入数值大于或者等于 0就会返回一个 TRUE值。 b. Square Root 函数( FunctionsNumeric) 返回输入数值的平方根。 连好线 c. 点击 Case框的
21、选择按钮,转入 False 情况编程 数值常数( FunctionsNumeric) 这里用于显示错误的代数值 -999.00。 d. One Button Dialog 函数( FunctionsTime & Dialog) 在 这里它用于显示一个对话框,内容是 Error.。 e. 字符串常数 (FunctionsString) 用 Edit Text Tools 在对话框中输入字符串。 该 VI在 TRUE或者 FALSE情况下都会执行。如果输入的数值大于等于 0, VI会执行 TRUE Case,返回该数的平方根,否则将会输出 999.00,并显示一个对话框,内容为 Error.。 返
22、回前面板,运行该 VI。修改标签为 Number 的数字式控制对象的数值,分别尝试一个正数和负数。注意,当把数字式控制对象的值改为负 数时, LabVIEW会显示 Case结构的 FALSE Case中设置的出错信息。 4. 保存该 VI。 VI 的算法 本练习中的流程图功能相当于代码式编程语言中的下列伪代码: if (Number = 0) then Square Root Value = SQRT(Number) else Square Root Value = -999.00 Display Message “Error “ end if 练习 六 结束。 30 2.3 顺序结构和公式节
23、点 2.3.1 顺序结构( Sequence Structure) 在代码式的传统编程语言中,默认的情况是,程序语句按照排列顺序执行,但 LabVIEW中不同,它是一种图形化的数据流式编程语言。在 下 图左图中,假设有 A、 B、 C、 D个节点,其数据流向如右图所示。按照数据流式语言的约 定, 顺序结构的说明 任何一个节点只有在所有的输入数据有效时才会执行,所以图中,当且仅当 A、B、 C个节点执行完,使得 D节点的个输入数据都到达 D节点后, D节点才执行。但是你要注意,这里并没有规定 A、 B、 C个节点的执行顺序。在 LabVIEW中这种情况下, A、 B、 C的执行顺序是不确定的,如
24、果你需要对它们规定一个确定的顺序,那就需要使用本节介绍的“顺序结构”。 上 图中的右边是顺序结构的图标,它看上去像是电影胶片。它可以按一定顺序执行多个子程序。首先执行 0帧中的程序,然后执行 1帧中的程序,逐个执行下去。与 Case结构类似,这多帧程序在流程图中占有同一个位置。 练习 七 使用顺序结构 目的:创建一个 VI,计算生成等于某个给定值的随机数所需要的时间。 前面板 打开一个新的前面板,并按照下图所示创建对象。 练习 七 的前面板 我们约定数据是到 100 范围的整数。当前值用于显示当前产生的随机数。“执行次数”用于显示达到指定值循环执行的次数。匹配时间用来显示达到指定值所用的时间。 50给定数据50当前值6执行次数0.00匹配时间(秒)ADCB