【LabVIEW学习篇 - 14】:信号量、集合点、事件发生

信号量

信号量技术是用来限制同时访问共享资源的数量。当访问量达到信号量设定的数量之后,其它任务只能等待,直到有任务释放访问权限。

比如打印机打印任务、银行办理业务时的叫号排队等等。

案例:使用信号量,实现两个波形图表轮流显示数据。例如:当CH1获取该信号量时,CH2处于等待状态,当CH1释放信号量时,CH2获取信号量,CH1处于等待状态。

  1. 在前面板中,放置两个波形图表,分别命名为CH1、CH2,放置两个圆形指示灯,分别命名为访问循环1、访问循环2,再放置一个停止按钮。最后在程序框图中,都取消控件的显示为图标,再放置两个while循环和条件结构。
  2. 在程序框图中,鼠标右键-同步-信号量-获取信号量引用鼠标右键-同步-信号量-获取信号量 ,将其连接起来,最后将获取信号量的"信号量输出"和"错误输出"分别连接到条件结构上,"错误输出"连接到选择器端时会自动生成"无错误"和"错误"两个分支。
  3. 在该条件结构中放置平铺式顺序结构,添加在其后添加一帧,第一帧给访问循环1赋值为"T",访问循环2赋值为"F",即表示当前信号量被CH1使用,第二帧则放置一个for循环,给CH1传入数据,最后释放信号量
  1. 第2个while循环的设置与第一个while循环相同,不同的是赋值的对象为CH2。

  2. 最后创建事件结构,设置 "停止":值改变 事件,即点击停止按钮时,释放信号量引用,以上两个循环的获取信号量的"错误输出"端就会输出"T",停止while循环。最终的程序如下:

  3. 运行结果:

集合点

集合点技术可以使多个并行的任务同步执行。在到达集合点的任务数量与预先规定的数量不一致时,每个到达了集合点的任务都将等待,直到任务数量达到时,所有的任务才开始同步执行。

案例:使用集合点,在波形图表中绘制曲线,当第一个波形图表已经绘制完成时,第二个波形图表还未绘制完成,则第一个波形图表等待第二个波形图表,当第二个波形图标绘制完成后,两个波形图表同一时刻开始绘制曲线,循环以上操作。

  1. 基本设置如下,"等待循环1"或"等待循环2"亮起时,表示当前循环已结束,处于等待状态,等待循环1或2结束时,再一起开始执行;"绘制点数1"和"绘制点数2"即表示循环的次数。

  2. 在程序框图中放置两个while循环和条件结构,鼠标右键-同步-集合点-创建集合点 ,并在其"大小"端创建常量为2,表示等待的数量为2,接着放置等待集合点 ,将其连接起来。

  3. 完善第一个while循环,开始时两个圆形指示灯灭,然后给波形图标传入数据,最后结束时点亮"等待循环1?"或"等待循环2?",若第一个while循环结束,则点亮"等待循环2?",表示第一个循环结束,正在等待第二个while循环。

  4. 第二个while循环与第一个while循环中的设置相似。

  5. 添加事件结构,添加事件分支为 "停止":值改变 事件,在其中放置销毁集合点 。最终程序如下:

  6. 运行结果:

    因为第一个while循环中的for循环次数为1,小于第二个while循环中for循环的次数,所以第一个while循环停止,亮起圆形指示灯,处于等待状态,这个时候第二个波形图标还在绘制曲线。

事件发生

顾名思义就是产生事件,它和用户事件很像,但不能像用户事件一样传递数据,它可以用来在While循环和VI之间传递触发事件。

案例:使用事件发生,实现温度计的监控,当温度计超过80℃时,报警指示灯亮,进行报警计数。

  1. 在前面板中,鼠标右键-数值-温度计 ,再鼠标右键-数值-垂直指针滑动杆 ,选中垂直指针滑动杆,鼠标右键-属性 ,在属性界面的标尺 部分设置刻度范围的最大值为100,将其值拉到80,作为报警上限,最后放置圆形指示灯、数值显示控件、停止按钮。

  2. 在程序框图中,放置获取通知器引用while循环事件结构 。while循环设置超时时间为300ms,主要是为了在300ms后给温度计赋值。
  3. 如下图所示。在超时时间段内没有时间发生就为传T,否则穿F。



  4. 总程序如下:

  5. 运行结果:
相关推荐
李小星同志35 分钟前
高级算法设计与分析 学习笔记6 B树
笔记·学习
霜晨月c1 小时前
MFC 使用细节
笔记·学习·mfc
小江湖19941 小时前
元数据保护者,Caesium压缩不丢重要信息
运维·学习·软件需求·改行学it
dot.Net安全矩阵1 小时前
.NET内网实战:通过命令行解密Web.config
前端·学习·安全·web安全·矩阵·.net
微刻时光2 小时前
Redis集群知识及实战
数据库·redis·笔记·学习·程序人生·缓存
潮汐退涨月冷风霜4 小时前
机器学习之非监督学习(四)K-means 聚类算法
学习·算法·机器学习
GoppViper4 小时前
golang学习笔记29——golang 中如何将 GitHub 最新提交的版本设置为 v1.0.0
笔记·git·后端·学习·golang·github·源代码管理
羊小猪~~4 小时前
深度学习基础案例5--VGG16人脸识别(体验学习的痛苦与乐趣)
人工智能·python·深度学习·学习·算法·机器学习·cnn
Charles Ray5 小时前
C++学习笔记 —— 内存分配 new
c++·笔记·学习
我要吐泡泡了哦6 小时前
GAMES104:15 游戏引擎的玩法系统基础-学习笔记
笔记·学习·游戏引擎