信号量
信号量技术是用来限制同时访问共享资源的数量。当访问量达到信号量设定的数量之后,其它任务只能等待,直到有任务释放访问权限。
比如打印机打印任务、银行办理业务时的叫号排队等等。
案例:使用信号量,实现两个波形图表轮流显示数据。例如:当CH1获取该信号量时,CH2处于等待状态,当CH1释放信号量时,CH2获取信号量,CH1处于等待状态。
- 在前面板中,放置两个波形图表,分别命名为CH1、CH2,放置两个圆形指示灯,分别命名为访问循环1、访问循环2,再放置一个停止按钮。最后在程序框图中,都取消控件的显示为图标,再放置两个while循环和条件结构。
- 在程序框图中,鼠标右键-同步-信号量-获取信号量引用 ,鼠标右键-同步-信号量-获取信号量 ,将其连接起来,最后将获取信号量的"信号量输出"和"错误输出"分别连接到条件结构上,"错误输出"连接到选择器端时会自动生成"无错误"和"错误"两个分支。
- 在该条件结构中放置平铺式顺序结构,添加在其后添加一帧,第一帧给访问循环1赋值为"T",访问循环2赋值为"F",即表示当前信号量被CH1使用,第二帧则放置一个for循环,给CH1传入数据,最后释放信号量 。
-
第2个while循环的设置与第一个while循环相同,不同的是赋值的对象为CH2。
-
最后创建事件结构,设置 "停止":值改变 事件,即点击停止按钮时,释放信号量引用,以上两个循环的获取信号量的"错误输出"端就会输出"T",停止while循环。最终的程序如下:
-
运行结果:
集合点
集合点技术可以使多个并行的任务同步执行。在到达集合点的任务数量与预先规定的数量不一致时,每个到达了集合点的任务都将等待,直到任务数量达到时,所有的任务才开始同步执行。
案例:使用集合点,在波形图表中绘制曲线,当第一个波形图表已经绘制完成时,第二个波形图表还未绘制完成,则第一个波形图表等待第二个波形图表,当第二个波形图标绘制完成后,两个波形图表同一时刻开始绘制曲线,循环以上操作。
-
基本设置如下,"等待循环1"或"等待循环2"亮起时,表示当前循环已结束,处于等待状态,等待循环1或2结束时,再一起开始执行;"绘制点数1"和"绘制点数2"即表示循环的次数。
-
在程序框图中放置两个while循环和条件结构,鼠标右键-同步-集合点-创建集合点 ,并在其"大小"端创建常量为2,表示等待的数量为2,接着放置等待集合点 ,将其连接起来。
-
完善第一个while循环,开始时两个圆形指示灯灭,然后给波形图标传入数据,最后结束时点亮"等待循环1?"或"等待循环2?",若第一个while循环结束,则点亮"等待循环2?",表示第一个循环结束,正在等待第二个while循环。
-
第二个while循环与第一个while循环中的设置相似。
-
添加事件结构,添加事件分支为 "停止":值改变 事件,在其中放置销毁集合点 。最终程序如下:
-
运行结果:
因为第一个while循环中的for循环次数为1,小于第二个while循环中for循环的次数,所以第一个while循环停止,亮起圆形指示灯,处于等待状态,这个时候第二个波形图标还在绘制曲线。
事件发生
顾名思义就是产生事件,它和用户事件很像,但不能像用户事件一样传递数据,它可以用来在While循环和VI之间传递触发事件。
案例:使用事件发生,实现温度计的监控,当温度计超过80℃时,报警指示灯亮,进行报警计数。
- 在前面板中,鼠标右键-数值-温度计 ,再鼠标右键-数值-垂直指针滑动杆 ,选中垂直指针滑动杆,鼠标右键-属性 ,在属性界面的标尺 部分设置刻度范围的最大值为100,将其值拉到80,作为报警上限,最后放置圆形指示灯、数值显示控件、停止按钮。
- 在程序框图中,放置获取通知器引用 、while循环 、事件结构 。while循环设置超时时间为300ms,主要是为了在300ms后给温度计赋值。
- 如下图所示。在超时时间段内没有时间发生就为传T,否则穿F。
- 总程序如下:
- 运行结果: