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

本文介绍了在Labview编程中遇到的多While循环同步问题,特别是Stop变量无法同步的挑战。通过分析和示例程序,展示了如何利用局部变量进行同步,并探讨了初始化阶段的正确做法,包括避免因初始化延迟导致的循环异常退出。最后,提出了正确的初始化方法和程序结构,确保了循环的正常运行。
摘要由CSDN通过智能技术生成

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 为正确初始化的运行结果。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

st01lsp

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

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

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

打赏作者

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

抵扣说明:

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

余额充值