LabVIEW值(信号)
LuoBeiCe
自学到了值(信号)这个属性节点。大家随便百度都可以搜到LabVIEW中的值(信号)的解释。它和“值”属性异同为:
1.我们可以通过对“值”属性或者“值(信号)“属性写入数据来改变控件的值,两种方式没有任何差别。
2.控件的“值“属性可以设置为”读取“或者”写入“。而”值(信号)“属性只能“写入”。
3.“值(信号)“属性可以触发事件结构中的值改变事件。而”值“属性不可以。
我对值改变事件的理解为:平时我们常用的事件结构里面的值改变事件很多都是针对输入控件的,当用户点击修改输入控件的值时,触发值改变事件。我称之为“主动型“值改变。这是用户输入而改变的。而”值(信号)“触发的是”被动型“值改变,大多是针对显示控件的值改变,当由程序运算导致控件值改变时,触发值改变事件。
举个例子(抄的知乎一位博主的程序(名字忘记了)):
这个程序图运行过程中,左边循环里面条件结构不停地将1赋值给数值显示控件的“值属性”,右边是一个响应数值控件值改变的事件结构。在运行的时候可以看到,“数值的值信号”控件并不会改变,因为根本就没有触发这个值改变事件。
而假如我们改变条件结构判断条件,不停地将1赋值给“数值”显示控件的“值(信号)”属性,则可以看到“数值的值信号“显示控件出现了值,这表明它的”值改变“事件被触发了。这个触发不是我们人为地手动触发,是由程序触发的。而且我发现,这个值改变事件就算每次赋值都是不变的(上个例子里面就是不停地赋值1),也可以触发事件。
最近接触到的“值信号“的应用场景。一个循环不停地产生数据,将其赋值给强度图的“值(信号)”属性,然后通过触发“值改变”事件,来不停地动态显示强度图中最大值和最小值的位置。
值(信号)另一个作用是事件转发(参考LabVIEW宝典第二版P181)。我的个人理解是将所有的会导致目标对象改变的事件都放在一个事件分支里去完成,而
其他事件都是自动触发处理的分支,其中通过转发事件来完成。
以上的一个例子目标是:通过按上下左右键,或者直接在“位置”里面输入坐标,可以改变红色控件的位置,其中如果按下“shift”键的同时按方向控件,可以加速移动。可以看到,很多事件结构都只是改变了“位置”的“值(信号)”,而最后一步“值(信号)”改变触发事件,将其值赋给控件的位置。这样的思路就清晰许多。即通过改变“位置”的值,再通过其“值(信号”“事件,间接地改变控件的位置。而不是像很多人直接就用普通的事件结构来直接改变控件位置了。