LabVIEW又称为G语言,简单易学、形象直观,采用图形化的编程方式,是专为测试、测量和控制应用而设计的系统工程软件。
前面几篇文章依次讲解了LabVIEW中顺序顺序结构、条件结构及循环结构的编程方法,下面再讲一种与软件界面响应有关的事件结构的编程方法。
事件结构框架特点
在程序设计中,我们经常需要对用户界面的各种操作(如单击鼠标、按下键盘、改变控件的值等)作出响应,在早期的LabVIEW版本中,是采用轮询方式来检测的,其缺点是不够灵活,占用CPU资源较多,而且操作频率较快时可能会检测不到变化,从而漏掉某个事件的发生。
在LabVIEW6系列版本后,引入了事件结构,这种程序处理结构克服了轮询方式结构的缺点,极大改善了界面处理的运行效率,同时也降低了CPU的占用,提高了软件用户的使用体验。严格意义上来说,事件结构不是纯粹的程序运行控制结构,它是一种监测GUI界面上各种事件发生并采取相应处理措施的一种机制。
事件结构的框架样式如下图所示:
上图中,事件结构框架中包括了事件类型、超时端口、事件附加数据及事件框等要素信息。
下面通过简单的例子,演示LabVIEW中事件结构的编程方法。
示例说明
本例运行界面如下图所示:
实现的功能是,在软件运行过程中监测键盘、鼠标等事件,在“事件信息”字符串显示控件中显示当前的各种运行信息。本例包括了如下事件处理:
1. “键按下”事件:当按下键盘时在界面上显示当前按下的字符。
2. “鼠标按下”事件:当鼠标按下时在界面上显示当前按下的是左、中、右哪个键及当前的鼠标位置信息。
3. “值改变”事件:当点击退出按钮时程序退出运行。
4. “超时”事件:每隔1s显示一次当前的日期时间信息。
程序框图实现过程
本例中涉及到了多种类型事件,主框架采用事件结构配合while循环的方式实现。在事件结构分支中添加各种事件,每响应一次事件执行一次while循环,直到执行退出按钮的值改变事件时退出整个程序,且在while循环中添加了一个移位寄存器,用以保存前面的提示信息。
在程序开始运行时可以作一些初始化工作,本例中在最外层顺序结构的第一帧中初始化“事件信息”的值,其代码如下图所示:
在顺序结构的第2帧中对各种事件分别进行处理,下面依次给出4个事件的处理程序框图代码。
(1)“超时”事件
程序框图代码如下图所示:
“超时”事件中实现每隔1s显示一次当前的日期时间信息,超时时间设置为1000ms,使用“获取日期/时间字符串”函数得到当前的日期时间,使用“连接字符串”函数与移位寄存器中已有的提示信息相连接,送到“事件信息”控件中显示即可。
注意,若超时时间设置为-1,则永不执行该分支代码,这也是其默认值。
(2)“键按下”事件
程序框图代码如下图所示:
“键按下”事件中,当键盘上有按键按下时,可在其附加数据中得到当前按键的“I16”类型字符值,其对应的是该按键的ASCII码,将其转换为U8类型的变量,然后使用LabVIEW内置函数“强制转换类型”将其转换为字符串类型,就可得到该按键对应的具体字符。
(3)“鼠标按下”事件
程序框图代码如下图所示:
“鼠标按下”事件中,当鼠标在窗口主界面上按下时,其附加数据中的“按钮”值包含了当前按下了哪个键的信息,其中1、2、3分别代表了按下了左键、右键及中键。附加数据中的“坐标”则给出了当鼠标按下时当前其所在窗口上的位置信息。
(4)“值改变”事件
程序框图代码分别如下图所示:
“值改变”事件中实现了当按下前面板上的“退出”按钮时,退出该程序。
总结
本文举了一个很简单的例子演示LabVIEW中事件结构的编程方法,当然,在实际软件编程中,不同的事件源(如控件、VI本身等)会产生不同类型的事件,每种事件类型中又会给出其对应的附加数据,根据这些附加数据信息,就可以实现我们的处理目的,其编程方式完全是类似的。
需要注意的是,不同于其它高级编程语言,在LabVIEW平台中事件结构一般不会单独出现,它通常是与while循环结构进行结合使用的。
本文由编码那些事原创,请关注+转发+收藏+点赞,带你一起长知识!
领取专属 10元无门槛券
私享最新 技术干货