?LabVIEW 程序执行架构——移位暂存器
为什么需要移位暂存器?
假设我们现在想要设计一个可以从 0 加到 100 的程序,我想你一定可以猜到这个程序要用到循环,但是要怎么将每次循环的资料累加起来呢?不知道你有没有发现其实我们少了一个能将累加的数值传递到下个循环的元件。对于类似的应用来说,这个元件十分的重要,而在 LabVIEW 里,他就叫做 "移位暂存器 (Shift Register)"。
举例来说,如果想要累加 1 - 10 的数字,那你会怎么做呢?我们先来看看下面两个不同的程序:
程序 (a) 使用了 For Loop,而循环内做相加的动作,再将结果输出到结果一,但因为无法将每次计算的结果保留,所以并无法累加数值,而程序 (b) 虽然看起来和程序 (a) 相似,但因为使用了移位暂存器,所以能够自动保留每次计算的结果,以达到累加的效果。接着我们就来实际了解移位暂存器的动作方式。
移位暂存器动作原理
移位暂存器是一种非常特殊的功能,只会出现在 While 或 For 循环,这个功能的特性是它拥有两个节点,一个可以用来输入现在的数值,另一个则会输出上次所输入的旧数值。若循环执行了 3 次,新产生的资料会由右边的移位暂存器输入,而该输入的资料会在下个循环执行时,由左边的移位暂存器输出到循环内,你可以藉由下图了解实际动作方式。
建立移位暂存器
只需要在循环的边框上按鼠标右键并选择 Add Shift Register,就可以建立移位暂存器了,且 While 循环和 For 循环建立的方式相同:
多节点移位暂存器
移位暂存器其实不单只能保留上一次循环的资料,他还可以让你自由设定欲保留循环数值的次数,我们由下图来向大家说明。可以看到和之前不同的是左边变成了三个节点,这就表示这组移位暂存器会保留前三次输入到移位暂存器的资料。
那要怎么建立多节点的移位暂存器呢?方法有两种,一种是在移位暂存器上按鼠标右键并选择 Add Element,另一种方法则是直接使用鼠标拖曳左边的节点来新增:
初始化移位暂存器
移位暂存器既然是能够暂存先前资料的元件,当然就会有初始化的需求,不然程序很有可能记录到之前暂存的资料值。如下图两个不同的程序,循环 (a) 有加上初始数值,而循环 (b) 则没有,现在我们都将这两个循环执行一次后停止,但在不关闭程序的情况下再执行第二次,我们来比较输出的结果。
先看到 Loop A,在移位暂存器的左边加上了一个初始值为 2 的数值,所以程序不管执行了几次,左边移位暂存器节点的第一圈初始值都不会改变;再看到 Loop B,因为没有加上初始值,所以第一次执行时,左边移位暂存器节点的第一圈初始值为 0,当第二次执行该程序时,左边移位暂存器节点输出的第一圈初始值却会变成 1,也就是上一次循环右边移位暂存器节点所输入的数值。所以在使用 Shift Register 时,千万要记得做好初始化的动作喔!
讲得很好,真的谢谢你!
谢谢小编,您辛苦了
谢谢!1
功能实现的不错
谢谢小编,您辛苦了,有助于理解。
帮助很大,十分感谢