本文讲解移位寄存器的常用场景及其数据流的方向解析。
在Labview中移位寄存器是存在于循环结构中的,也就是说for循环和while循环中,在了解移位寄存器之前首先要了解一下for循环和while循环的原理及其数据流的流动方向,题主之前讲过for循环的文章,有想了解的同学可以点击下方链接查看补充相关知识。
1.Labview for循环精讲: https://blog.csdn.net/m0_52176775/article/details/135746691?spm=1001.2014.3001.5502
由于Labview中的while循环使用方法较为简单使用场景较为广泛所以在下文中针对该循环将简单介绍。
移位寄存器
- [1. 移位寄存器定义](#1. 移位寄存器定义)
-
- [1.1 什么是移位寄存器](#1.1 什么是移位寄存器)
- [1.2 移位寄存器的三要素](#1.2 移位寄存器的三要素)
- [2. 移位寄存器的数据流方向](#2. 移位寄存器的数据流方向)
- [3. 移位寄存器的使用场景](#3. 移位寄存器的使用场景)
1. 移位寄存器定义
什么是移位寄存器呢? 移位寄存器在什么情况下才会使用呢?将本章先讲解一下移位寄存器的定义及原理。
题主提前说一下答案 :"移位" "寄存" 是两个词语,寄存 是指循环结构上的两个寄存器,相当于两个容器储存着循环中输给它的数据,移位 是指将上个循环中放到容器中的数据倒到下个循环容器中,即上次循环的数据拿到下个循环使用。详细解释请看下文。
下文中的"循环结构"特指for循环和while循环。
1.1 什么是移位寄存器
NI官方给出的解释如下:
移位寄存器可用于将上一次循环的值传递至下一次循环。如下图所示,移位寄存器以一对接线端的形式出现,分别位于循环两侧的边框上,位置相对。
也就是说,大家可以仔细观察,移位寄存器是循环结构上的一对方向相反的箭头,它们的位置是相对的,也就是说二者一直在一条水平线上,移动一个时另外一个也随着移动到相同高度。
右侧接线端含有一个向上的箭头,用于存储每次循环结束时的数据。
左侧接线端含有一个向下的箭头,用于拿取上次循环结束时的数据。
LabVIEW将数据从移位寄存器右侧接线端传递到左侧接线端。循环结构会使用左侧接线端的数据作为下一个循环的初始值。循环执行后,右侧接线端将输出移位寄存器最终保存的值。
移位寄存器
是只存在于循环结构上的 ,也就是说while循环和for循环中才会用到移位寄存器,在Labview循环结构中的移位寄存器 如下图所示:
创建方式为 :右键循环结构的框图并单击创建移位寄存器,此时程序的循环结构中就会出现左右两个方向相反的箭头,此时的移位寄存器因为还没有赋值所以是黑色的状态。
1.2 移位寄存器的三要素
本节先讲移位寄存器的三个重要的参数,讲解完成后,下一章通过图解的方式,让大家更加具象的了解移位寄存器的工作原理。
移位寄存器有如下三个重要要素:
① 初始化值
② 中间接线
③ 最终值
其各自在循环中的位置如图所示:
1.初始化值
移位寄存器是有属性的,也就是说传递的是数值还是数组、还是字符串是预先规定好的,初始化值规定了移位寄存器传递的数据类型和移位寄存器在第一次循环时的初始值这两个参数。(数据类型是指字符串、数组、数值这一类中的某一种)
2.中间接线
中间接线起到了桥梁 的作用,该位置从左侧箭头拿取上次循环 的数据,并向右传递,而右侧箭头获取的是本次循环结束时的输入该引脚的数据 。举个例子如下图所示:
在这个while循环中,终止条件是i=1,因为i从0开始计数(while循环和for循环都是从0开始,这个记住就好) ,所以while循环循环了两次,一次是i=0,一次是i=1,好的,那么我们来看,第一次循环时数值2被赋予了初始化值,也就是我们上述提到的0,此时中间接线向数值输入了一个当前i值,即0,第二次循环右侧箭头将i=0传递给了左侧箭头,进入此时左侧数值为0,中间接线又将i=1传递给了数值,此时循环终止。理论上数值2的值为0,数值控件的值为1。
3.最终值
最终值是:移位寄存器所在的循环结构结束时,移位寄存器中最后保存的那个值,就是最终值,并将最终值输出出来。
所以上面例子中最终值应该为1。如下图所示:
2. 移位寄存器的数据流方向
接下来题主将以一张图片的形式来向大家讲解移位寄存器中数据流的具体流向,以帮助大家更深刻的理解移位寄存器在Labview中具体应用场景其使用方式。
具体如下图所示:
框图中左右两个箭头代表寄存器,对应1.2节中的参数来看,移位寄存器中左侧输入初始化值 ,初始化值作为循环结构中第一次循环时的值,移位寄存器拿取该值用于在本次循环中进行数据处理 ,经过数据处理后的数值或者参数在本次循环结束后放入了移位寄存器的右侧箭头 中,那么本次循环结束。右侧箭头中存储的参数值由绿色虚线部分传递至左侧移位寄存器的箭头中,此时进入该左侧箭头的数值就作为下一次循环的初始值!
如此往复!
举两个最简单的例子:
①作0-100的所有数字的和,我们都知道这个答案是5050,那么在程序中该如何计算呢?请看下面程序:
在该程序中, for循环的次数为101次,原因是循环结构中的i值是从零开始的,所以当第101次循环的时候i=100,将每次循环后的i值加上去传递到右侧,得到最终值为5050,如果大家想了解计算过程,可以点击程序上方的高亮按钮查看具体的数据流向。
②初始化生成一个一维数组,一维数组中的元素为从0-100的偶数,使用移位寄存器如何去做?请看下面程序:
以上两种方式都可以实现题目中的目的。
相信大家通过上面的简单的例子可以了解移位寄存器的基本原理。
3. 移位寄存器的使用场景
① 数据的临时存储 与计算;上文中的几种移位寄存器均为该类型的应用场景。
② 数据传输;数据在循环结构中处理后经移位寄存器传输。
③状态机结构;用于切换程序运行分支的状态机结构,属于常用程序框架的一种,移位寄存器就是其中一种可用的结构,该结构题主会在后续中持续讲解手把手搭建框架的内容。
本章讲解了labview中的移位寄存器的使用及数据流的运行方式解析,希望大家能够仔细消化并巩固相关知识,那么本期内容到此结束欢迎大家点赞收藏加关注,有问题的地方可以评论并私聊题主,题主闲时会一对一向大家认真解答~