一、隧道和移位寄存器区别
在LABVIEW的循环体内,传入和传出通道有隧道和移位寄存器两种方式,并且两者可以很方便的互相替换。其中,移位寄存器必须成对出现,否则会编译错误。如下为隧道输出和移位寄存器输出:
经编译运行后,得到的结果却迥然不同。隧道程序循环执行3次后输出的结果为3,移位寄存器程序循环执行3次后结果为9,其原理在于:
- 隧道是一个局部变量值,每次进入循环体都会被循环体外部赋予一个初始值,所以即使隧道循环执行了3次,但是每一次隧道的左入口的值都为0,在循环体内加3后,隧道的右出口值为3,即使执行N次也是这样。
- 移位寄存器的值稍微不同,每一次在循环体内执行,都会把右边移位寄存器出口的值用作左边入口的值,因此执行3次以后得到了9。
正如上文提到,熟悉C/C++的同学应该会想到了,这就是我们所熟悉的局部变量和静态局部变量的区别嘛!是的,隧道相当于每次进来循环体之后把循环体外的值赋予循环体内的局部变量,所以不管循环体内执行几次,其结果也等同于只执行了一次。然而移位寄存器相当于加了static的静态局部变量,我们知道静态局部变量是不会压栈的,因此它的值会随着每次循环体的执行而往上累加。
二、索引隧道和循环隧道区别
索引隧道和循环隧道用于可遍历的数据结构而言。
以下为数组经过三种方式输出实例:
由上图可知,经过编译运行之后,得到的结果不同,原理如下:
- 索引隧道是对数组依次遍历,对每个元素操作后输出。
- 循环隧道(最终值)需指定循环次数(默认循环次数为数组长度),以数组整体为输入,最后一次循环的值为输出值。
部分资料来自于:LABVIEW手把手教学之一——隧道和移位寄存器