Labview 多循环同时运行的变量初始化和同步问题

1.问题背景

    在Labview编程过程中,有时候会使用多while循环同时运行,以获得更好的实时性,尤其是做数据采集的时候。笔者在一个应用实例中出现Stop变量无法同步的问题,经过调试找出解决方案,记录一下并作为学友们的参考。

    以下是为这个问题设计的一个demo程序。其功能是在两个同时运行的while中,定时更新计数值i,并且可以使用同一个stop按键停止。

    这里边使用“局部变量”来做变量同步,要注意的是,Labview的局部变量作用域是当前vi,C的局部变量作用域是当前函数。局部变量在vi里边相当于一个游离的X,非常方便对数据进行操作,同时,副作用是可能破坏程序逻辑。

2.现象分析

   图1是初步设计的程序。注意这个时候是不能正常运行的,因为stop按键的动作属性属性(图2,按键时改变并反弹)不匹配。

图1 初步设计的程序

 

修改为图3的按键动作属性,即可正常运行。

 

图3 采样局部变量时按键属性需要设置为“按键时值改变”

但是,这样的改变带来的问题就是,当程序停止后,无法再重新运行,因为stop被保持为true。

改进的方法是在初始化的时候,同样通过局部变量操作将stop设为false。图4

图4 加入初始化操作

图5 加入对stop初始化后的运行结果

到此,并不是完美的。因为在一个比较复杂的程序中,程序的初始化阶段可能有很多操作,也可能导致一些延时。图6模拟了我的程序的初始化的情况。

图7为这种情况下所出现的问题:一个循环不工作了!!

 

图6 对复杂程序变量初始化的模拟

 

图7 根据图6对复杂情况初始化的模拟,结果发现,一个循环不工作了!

出现这个问题的原因是:

如图6的初始化方法,当初始化时延较大的时候,第一个循环在stop变量还没有被初始化情况下,就开始运行了,结果就是直接退出。而第二个循环是可以正常运行的。

图8是推荐的正确初始化方法,通过顺序结构,确保初始化完整地完成以后,再进入各个循环的执行环节。

图8 正确的初始化方法,通过顺序结构进行执行顺序控制,确保初始化完整执行

图9 正确的运行结果

 图9 为正确初始化的运行结果。

一个简单的问题的分析,希望对大家有所帮助。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
LabVIEW是一款功能强大的编程环境,可用于实现各种各样的应用程序。要在LabVIEW中同时运行多个队列,可以使用以下方法: 首先,在主VI中创建多个队列。可以使用LabVIEW提供的队列数据结构,通过Front Panel中的控件库将其拖动到Block Diagram中。可以根据需求创建任意多个队列,每个队列可以用于处理不同类型的数据。 然后,使用并行编程的思想将队列与处理操作相关联。在主VI的Block Diagram中,使用多个While Loop结构,并在每个While Loop内部处理不同的队列。将每个队列与相应的While Loop相关联,以确保每个队列都可以同时进行数据处理。 接下来,可以使用LabVIEW中的条件结构来确定如何处理队列。可以使用队列的空或非空状态作为条件,根据不同的条件执行不同的处理操作。例如,当队列为空时,可以等待新的数据写入队列;当队列非空时,可以将数据从队列中读取并进行相应的处理。 最后,将数据从主VI传递到子VI。可以使用LabVIEW的调用VI功能来实现。将需要处理数据的子VI放置在主VI中,通过调用VI将数据从主VI传递到子VI。这样,可以在主VI中处理多个队列,并将数据传递给相应的子VI进行进一步的处理。 总体而言,LabVIEW可以通过并行编程和条件结构的使用,实现主VI同时运行多个队列的功能。这样,可以更高效地处理多个不同类型的数据,并提高程序的执行效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

st01lsp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值