LabView编程基础:隧道和移位寄存器 |
您所在的位置:网站首页 › 反馈节点和移位寄存器有何区别 › LabView编程基础:隧道和移位寄存器 |
目录 一、隧道 二、隧道运行结果 三、移位寄存器添加方法1(从隧道替换为移位寄存器) 四、移位寄存器方法1运行结果 五移位寄存器添加方法2(直接添加移位寄存器) 六、移位寄存器方法2运行结果 七、切记:移位寄存器必定成对出现,否则程序会出现编译错误。 八、分析 下面的两个源代码,希望实现的功能是传入一个参数0,通过三次循环,每次在循环体内加3,输出的结果赋值给一个数值显示控件。通过代码的结果,来看看隧道和移位寄存器到底有什么区别。 一、隧道1、前面板创建一个数值显示控件 2、程序框图 (2.1)程序框图添加一个For循环,循环次数为3 (2.2)、程序框图For循环外面添加一个常数0,For循环内部添加一个加号和常数3 (2.3)加号连线到数值显示控件 哇!系统提示错误:已连接两个不同类型的接线端。 右键单击自动索引隧道 弹出下拉菜单,选择隧道模式为:最终值 哈,没有错误啦! 运行一下观察运行结果,显示控件显示3。 参见下图,程序框图已经添加了隧道,如何将隧道替换为移位寄存器呢? 1、循环隧道替换为移位寄存器
2、FOR循环右边边框上的实心方块替换为移位寄存器 左边的实心方块会变成一个空心方块,方块内有一个向下的箭头。 鼠标也会变成一个空心方块,方块内有一个向上的箭头。 鼠标点击FOR循环右边边框上的实心方块(隧道)。 当鼠标点击FOR循环右边边框上的实心方块(隧道)后,FOR循环右边边框上的实心方块(隧道)变成移位寄存器(空心方块,方块内有一个向上的箭头) 运行一下观察运行结果,显示控件显示9。 参见下图,程序框图中没有添加隧道,如何添加移位寄存器呢? 1、连线常数0和加法 2、FOR循环边框左边添加移位寄存器 鼠标点击FOR循环左边边框上的实心小方块 弹出下拉菜单,选择“替换为移位寄存器” 可以观察到FOR循环左边边框上的实心小方块变成空心小方块,小方块内有一个向下的箭头。FOR循环右边边框上自动添加了一个空心小方块,小方块内有一个向上的箭头。 3、连线加号到FOR循环右边边框上的空心小方块内的箭头。 4、连线FOR循环右边边框上的空心小方块内的箭头到最右边的数值显示控件。 运行一下观察运行结果,显示控件显示9。 移位寄存器必定在FOR循环的左边边框上有一个,在FOR循环的右边边框上也要有一个。 八、分析我们发现分别使用隧道和使用移位寄存器运行,得到的结果却迥然不同。隧道程序循环执行3次后输出的结果仍为3,而二次移位寄存器程序循环执行3次后如愿以偿的得到了9这个值,其原理在于: (1)、隧道是一个局部变量值,每次进入循环体都会被循环体外部赋予一个初始值,所以即使循环执行了3次,但是每一次隧道的左入口的值都为0,在循环体内加3后,隧道的右出口值为3,即使执行N次也是这样。 (2)、移位寄存器的值稍微不同,每一次在循环体内执行,每次都会把右边移位寄存器出口的值用作左边入口的值,因此执行3次以后得到了9。 正如上文提到,熟悉C/C++的同学应该会想到了,这就是我们所熟悉的局部变量和静态局部变量的区别嘛! 是的,隧道相当于每次进来循环体之后把循环体外的值赋予循环体内的局部变量,所以不管循环体内执行几次,其结果也等同于只执行了一次。然而移位寄存器相当于加了static的静态局部变量,我们知道静态局部变量是不会压栈的,因此它的值会随着每次循环体的执行而往上累加。 总结:隧道就相当于C/C++中的循环体内的局部变量,移位寄存器就相当于C/C++中的循环体外的静态局部变量。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |