全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 测量仪表 >

LabVIEW Channel Wire通道线应用和注意点

时间:2023-11-06 15:12

人气:

作者:admin

标签: 线程  labview 

导读:LabVIEW Channel Wire通道线应用和注意点-上面三个循环是并行的三个线程。channel wire不定义代码执行顺序。 这是一个非常实用的设计模式,可以把需要处理的子任务做成subVI,在Message Handl...

了解了Channel Wire后,我们来看看关于Channel Wire的一些应用和注意点。 

  1、Channel Messenger Handler

操作者通过用户界面上不同的按钮,把需要不同的消息发送给消息处理线程;消息处理线程按照接收到消息的先后顺序处理这些消息。这也是一个经典的设计模式,它的实现路径就是messenger类型的channel wire。

44e9e626-7b04-11ee-939d-92fbcf53809c.png

45198a16-7b04-11ee-939d-92fbcf53809c.png

注意:上面三个循环是并行的三个线程。channel wire不定义代码执行顺序。 这是一个非常实用的设计模式,可以把需要处理的子任务做成subVI,在Message Handling Loop里调用。 2、正确使用stream channel,避免死锁 这个示例的名称是“channel-tag”,演示的功能是A、B、C三个工作站的温度一旦超过Threshold Setting设置的值就显示“Too hot!”予以警示。

453160e6-7b04-11ee-939d-92fbcf53809c.png

下图是初始代码。这个代码仔细看看是存在两个bug的。第一,有两个写通道操作(下图标记1和2的两处),但是执行顺序不确定。第二,右边三个线程可能以threshold的值为0运行,因为读通道操作可能未读到数据(右边三个线程之一或者全部在通道写入完成前开始运行了)。

455e088a-7b04-11ee-939d-92fbcf53809c.png

针对上述bug,下图代码做了改进。 第一,1初特意加了一根连接线,明确两个写通道操作的执行顺序。第二,通过移位寄存器(2和3)让读通道操作第一次执行时无限等待,直到读到数据了再往下执行,以确保threshold至少被写入了一次。

45777dc4-7b04-11ee-939d-92fbcf53809c.png

3、准确理解含有channel wire的程序执行顺序 Parallel Channels Problem,这个示例,演示了多个channel wire并用的时候,可能出现的死锁问题。程序界面上有三个Stop按钮,有可能可以正常退出这个程序,也极有可能无法正常退出。常见的结果应该是,A、B、C三部分都停止更新数据了,但是主程序无法退出。

4596b7a2-7b04-11ee-939d-92fbcf53809c.png

出现这个问题的原因在于通道的Read操作,默认是无限等待的——没有读到数据就一直等待。Producer A停止后,ConsumerA可能无数据可读,就会一直等下去,从而主程序就无法正常退出。 Producer B和Consumer B通过给Read设置20ms超时时间来解决这个问题。 Producer C和Consumer C通过Write和Read操作的last element属性来解决这个问题。

45b9f366-7b04-11ee-939d-92fbcf53809c.png

以上几个示例,都是LabVIEW自带的。LabVIEW里还有很多有关channel的示例,建议大家去看看,对开阔思路、加深理解、熟练运用channel wire都大有裨益。

编辑:黄飞

 

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信