LabVIEW中同一控件多次读写机制及程序结果疑问
LabVIEW控件多次属性读写的执行逻辑解析
咱们来一步步拆解这个程序的执行过程,就能明白为什么最终结果是Numeric=12、Result=11了:
首先得明确LabVIEW的两个核心规则:
- 属性节点读取的是控件当前内存中的值,大部分时候和前面板显示值同步,但核心看内存数据
- 程序执行遵循数据流规则:只有当一个节点的所有输入数据都准备好时,它才会执行,不是完全按视觉上的上下顺序执行。
假设初始状态:Numeric控件的内存值为10,Result控件的内存值为0。
接下来按执行顺序拆解每一步:
- 写入Result的属性节点:
- 它先读取Numeric的当前值(此时还是初始的10),加1后得到11
- 把11写入Result的Value属性,从此Result的内存值就固定为11,后续没有再修改它的操作
- 第一次修改Numeric的属性节点:
- 它读取的是Numeric的初始值10(因为前面的写Result操作完全没改动Numeric的值),加1后得到11
- 把11写入Numeric的Value属性,此时Numeric的内存值更新为11
- 第二次修改Numeric的属性节点:
- 它读取的是刚更新后的Numeric值11,加1后得到12
- 把12写入Numeric的Value属性,最终Numeric的内存值固定为12
你之前的疑惑点在于,误以为Result会使用Numeric最后修改后的12来计算,但实际上Result的写入操作在Numeric被第一次修改之前,就已经读取了初始的10,所以结果是11;而Numeric被连续两次修改,从10→11→12,最终得到12。
内容的提问来源于stack exchange,提问作者Shine Sun




