数据流编程方式(8)——结构节点(For循环) - LabVIEW Nugget
 
通过前面的讨论,我们知道了端子(控件)、连线等相关的基本知识。其实,真正构成图形化代码的主要部件还有节点。所以,下面再来谈谈节点。
 
在前面的《数据流编程方式(2)——数据流》中我们曾谈到过节点。

LabVIEW的节点包含了以下内容:
函数、
子VI、
Express VI、
结构、
公式节点和表达式节点、
属性节点和调用节点、
通过引用节点的调用、
调用库函数节点、
代码接口节点。

本节中我们主要谈谈“结构”节点。因为它是图形化代码的最基本部件,所以了解了结构节点对其它节点的了解就容易多了。
 
结构节点在函数选板中的位置参见下图。

Picture
图 8.1-1 函数选板
我们将选择其中一些比较主要的通过数据流的运行机制来了解它们。

显然,将要介绍的第一个就是for循环。
 

For 循环(For Loop)

For循环应该是最基础的图形化代码,应该包括在LabVIEW1.0中。至少我们在LabVIEW 1.2(1989年)中就已经看到它了。并且多年来外形基本上没有发生什么改变(不见老)。参见下图。

Picture
图 8.1-2 LabVIEW1.2-1989(Apple计算机)
Picture
图 8.1-3 LabVIEW2009SP1中的for循环
for循环的主体结构为一个可伸缩的方形架构框。方框内部包含两个可见的元素,一个是总数(N)接线端;另一个是计数(i)接线端。

N——总数接线端
         在标准状态下(图 8.1-3):
         N的数值决定For循环执行的循环次数。
         N=0,For循环不进行循环
         N=1,For循环执行一次循环后停止
         N=n,For循环执行n次循环后停止

i——  计数接线端
         在标准状态下(图 8.1-3):
         显示For循环已经循环过的次数。
         取值范围:0到n-1
         N=0,i=不确定
         N=1,i=0
         N=n,i=n-1
 
这些规律大家可以自行验证,这样做一做可以加深认识和理解。
 
For循环在标准状态下(图 8.1-3)的数据流运行机制是:

首先,执行For循环外的程序代码,如果循环外存在多个与数据流不相关的代码则与For循环同时执行。这点许多初学者会忽略。
举个例子说明:

例8.1-1

Picture
图8.1-4 例8.1-1
事实上,从数据流的观点来看,图8.1-4中的图形化代码是三个独立部分,所以在程序执行时是同时执行的。如果在程序设计时,规划分布的不好,放置在不同的地方,导致程序运行时问题出现 。
这是非常容易被忽视的问题。

在一些网友的问题中,我们多次发现这样的现象。比如,程序一面向控件写入数据,同时又清除控件,因为这两部分程序简没有数据流的关联,所以出现问题。改成循序结构,先清除、后写入就正确了。

还是回到我们的命题,For循环的数据流运行机制。

当For循环开始执行时,总是首先读取总数接线端的数值,然后依据这个数值决定循环的次数,上面已经谈到了总数数值与循环间的这个关系。

如果在for循环中使用移位寄存器,不管循环是否执行,都可以进行数据传递。也就是说,数据流在这时也是畅通的。参见下图。

Picture
图8.1-5
上图中,for循环的总数接线端=0,for循环不执行,但是通过移位寄存器还可以将数据“911”传递过去

看看下个图,循环不进行所以迭代也不存在。这是显然易见的。
 
Picture
图8.1-6 总数N=0

For循环的其它特性

添加移位寄存器或反馈节点

移位寄存器的应用在上面已经看到了,它起到数据迭代的作用。

Picture
图8.1-7 总数N=1
用反馈节点代替移位寄存器

反馈节点与移位寄存器有相类似的功能,但是也不完全。

Picture
图8.1-8 总数N=0
对比图8.1-6和图8.1-8就可以看到这种不同之处。

Picture
图8.1-9 总数N=1
对比图8.1-7和图8.1-9就可以看到二者是相同的。

实际上,还是使用移位寄存器更好看,更直观。

移位寄存器使用注意事项:

初始化移位寄存器是必须的,否者可能引起不易察觉的数据混乱。

存储在移位寄存器中的数据直到该VI关闭才会从内存中消失。


自动索引数组

并行For循环

添加条件终端

wade
3/5/2011 09:22:26

期待ing...

Reply
labview7i
3/5/2011 10:14:19

这么快就有看得啦!

Reply
labview7i
3/11/2011 08:38:51

各位读者:

因最近一段工作较忙,没有时间续写,见谅!

有时间会将这部分写完!

致歉!

Reply



Leave a Reply.