LabVIEW动态事件结构
LuoBeiCe
自学到了动态事件结构,动态事件结构与事件结构相比的优势是:可以完全控制LabVIEW产生事件的类型和时间,使其仅在应用程序的某个部分发生。
基本使用步骤为:创建用户事件-注册用户事件-产生,处理用户事件-取消注册事件。常用于鼠标移动一类的连续发生的事件中,或者需要控制事件发生时间的情况中。
我看的相关资料:
1.慕课上面常州信息职业技术学院开放的《虚拟仪器应用技术》。
2.《LabVIEW宝典(第二版)》P343。
3.LabVIEW网络讲坛之《运筹帷幄》事件结构。

上图中,如果我们想实现一下目标:点击一下“上升”按钮,右边的平面框就响应的上升一点。
这个功能只要学了点事件结构基础知识的人,应该可以实现。
但是如果我们在此基础上再加一个小条件:比如我想等程序开始运行2分钟之内,点击“上升”,平面框就上升。但是程序运行2分钟之后,再点击“上升”,
平面框就没反应了。或者说我按下一个按键之前,按下“上升”,平面框就上升,按下一个按键之后,“上升”就失灵了。
这个功能在原来的基础上多了一个控制事件响应发生的条件。这个时候就得考虑动态事件结构了。
举两个例子:

上图中实现功能为:按下“上升”,右边平面框就上升。按下“取消注册事件“之后,”上升“键就失灵了。再按下”注册事件“之后,”上升“键就又起作用了。程序框图如下:





注意:
1.我提前注册了“上升“布尔引用的动态事件。
2.可以在“窗格“-”修饰“中拿到平面框的引用,因为从“修饰”出来的是引用数组,故要索引数组。
3.在“取消注册”值改变事件中,用到了一个非法引用句柄常量,用于取消某个指定事件而不是整个注册事件。
https://zone.ni.com/reference/zhs-XX/help/371361R-0118/lvhowto/unregister_individual_event/
另一个例子是鼠标移动这一类连续发生的事件:

在上图中,我想要实现的目标是:在程序运行时,实现用鼠标拖拽控件的功能。
这个功能用动态事件结构来处理,要明确:
1.假如鼠标没有按下控件,这时移动鼠标是无法实现拖拽功能的。
2.只有在鼠标按下某个控件之后,鼠标移动才能拖拽控件。
3.我们可以注册“鼠标移动“动态事件,用以改变控件位置。鼠标按下之后,动态事件才可以触发,当鼠标抬起之后,动态事件就不可以触发。
完成上述功能的程序框图为:





注意:
1.注册动态事件时,我用了一个“通用窗格引用”,我是通过创建“服务器引用”-选择“窗格”-右击“窗格”引用,点击“创建输入控件”得到。
它的作用是,一开始没有说明是本VI的窗格,存在的意义仅仅是占了一个“鼠标移动”的位置。有种“占着茅坑不拉屎”的感觉。要在后
面的程序框图中再指明是本VI的窗格的鼠标引用。
2.“控件”鼠标按下时,通过“控件引用”来得到具体是鼠标按下的哪个控件,并将其送给移位寄存器。
3.在“鼠标释放”事件中,又用到了“非法引用句柄常量”用以取消鼠标移动注册事件。
希望以上我的理解能帮到各位。欢迎大家一起交流学习进步。
浙公网安备 33010602011771号