【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. 运行结果:
相关推荐
陈无左耳、4 小时前
HarmonyOS学习第3天: 环境搭建开启鸿蒙开发新世界
学习·华为·harmonyos
柃歌5 小时前
【UCB CS 61B SP24】Lecture 7 - Lists 4: Arrays and Lists学习笔记
java·数据结构·笔记·学习·算法
柃歌5 小时前
【UCB CS 61B SP24】Lecture 4 - Lists 2: SLLists学习笔记
java·数据结构·笔记·学习·算法
虾球xz6 小时前
游戏引擎学习第115天
学习·游戏引擎
BUG 劝退师6 小时前
C语言预处理学习笔记
c语言·笔记·学习
Chambor_mak7 小时前
stm32单片机个人学习笔记16(SPI通信协议)
stm32·单片机·学习
知初~8 小时前
Scala基础学习
开发语言·学习·scala
花王江不语8 小时前
设计模式学习笔记
笔记·学习·设计模式
前端熊猫8 小时前
CSS Grid 布局学习笔记
css·笔记·学习·grid
梦里是谁N9 小时前
【deepseek之我问】如何把AI技术与教育相结合,适龄教育,九年义务教育,以及大学教育,更着重英语学习。如何结合,给出观点。结合最新智能体Deepseek
人工智能·学习