【发布时间】:2015-07-08 16:10:11
【问题描述】:
背景
我有一个实时应用程序RT Main,它有多个高优先级定时循环,运行一些模拟代码并使用 RT FIFO 与与外部程序对话的低优先级通信循环进行通信。我还有一个监控 VI,DT Main,在非实时桌面上运行,我用它来启动和停止实时模拟、加载参数文件等。
目前我通过网络共享变量将Stop 按钮从DT Main 传递到RT Main。我想知道的是:如何使用它来同时(接近)同时停止RT Main 上的所有循环?
我知道我可以在我的定时循环中使用启用 FIFO 的网络共享变量,但我担心从同一个 FIFO 读取多个循环时,我只会停止其中的一两个,然后 FIFO 会被清除并且其他循环不会停止。
当前计划
- 使用网络共享的
Stop按钮变量停止低优先级通信循环。 - 当此循环停止使用
RT FIFO DeleteVI 并将force destroy?输入设置为True时,删除我的所有RT FIFO。 - 让高优先级循环在下次尝试读取其(现已销毁的)FIFO 时自行关闭,这可能会导致错误。
这在下面的一个精简示例中得到了说明。
问题
我有两个问题:这行得通吗?不管这是否有效,在 LabVIEW 的实时应用程序中停止多个高优先级定时循环的“正确”方法是什么?
我不知道RT FIFO Read 和RT FIFO Write VI 在尝试读取/写入不存在的 FIFO 时是否会引发错误。有一个RT FIFO error code -2206 "RT FIFO does not exist" 我假设在这些情况下会被抛出,但我现在无法测试它(还没有硬件可以运行它),所以我无法验证。
作为记录,到目前为止,我发现 NI LabVIEW for CompactRIO Developer's Guide 非常有帮助,但似乎没有足够详细的信息来回答我的问题。
谢谢!
更新
我能够测试代码并验证我可以以这种方式停止多个定时循环,但我仍然有兴趣了解您的最佳方法是什么来关闭远程 RT VI按下桌面 VI 上的一个按钮即可实现多个循环。
【问题讨论】:
标签: while-loop real-time labview fifo