当前位置:文档之家› 第5讲 LabVIEW程序结构2

第5讲 LabVIEW程序结构2


用户自定义事件
LabVIEW自产的事件主要指那些由用户对界面对象进行操作的 事件,比如单击、改变某个控件的值以及程序自身状态变化等, 如果需要在程序中满足其他某种条件时也产生一个事件,就只 能用用户自定义事件了。
用户自定义事件是使用“创建用户事件”函数创建出来的事件。 当需要抛出一个用户自定义事件时,可以使用“产生用户事件”
数。
• 请谨慎选择通知或过滤事件。用于处理通知事件的事件分支,并将无 法影响LabVIEW处理用户交互的方式。如要修改LabVIEW是否处理用 户交互,或LabVIEW怎样处理用户交互,可使用过滤事件。
• 不要将前面板关闭通知事件用于重要的关闭代码中,除非事先已采取 措施确保前面板关闭时VI不中止。例如,用户关闭前面板之前,确保 应用程序打开对该VI的引用。或者,可使用前面板关闭?过滤事件,该 事件在面板关闭前发生。
函数发出一个事件。
程序抛出的用户自定义事件可以携带自定义的某些数据。 用户自定义事件可以作为一种规范的格式,用在VI的初始化、
终止等场合。处理VI被调用或开始运行时首先需要处理的事情 以及VI终止前必须处理的事情。
例:程序有两个输入控件:一是数值型控件A,二是字符串控件B,当A>10或B的长 度大于10个字符时,程序抛出一个用户自定义事件“警告”
可以明显地看出,过滤型事件比相应的通知型事件要先发出。
图4-25 事件结构框架0(过滤事继 事件
图4-26 事件结构框架1(通知事件)
(a)“确定”按钮动作前 (b)选择“是”的计算结果 (c)选择“否”的计算结果
图4-27 静态事件结构运行结果
5.3.3 事件结构的使用
通常,程序不可能只需要处理一个事件,往往在程序运行中不断有需要处理的各种 事件出现,所以,事件结构通常会被放在一个while循环结构内。我们把这种一个 事件结构外套一个while循环结构的程序模式称为“循环事件结构”。
循环事件结构非常适合应用于界面编程,所以它是LabVIEW中最常见的程序模式 之一。 实例:用量表显示旋钮和转盘的和,要求: 1. 程序自动连续运行; 2. 程序显示无卡顿; 3. 占用物理资源尽量少; 4. 可随时结束运行;
过滤型事件是在 LabVIEW 处理用户操作之前发出的,并等待相对应 的事件框架执行完成之后,LabVIEW 再处理该用户操作。这类事件的名 称之后都有一个问号。例如键盘按下?事件(Key Down? Event),当 用户处理该事件时,控件的值还没有被改变,因此,用户可以在该事件 对应的事件框架内决定是否让 LabVIEW先处理该事件,或改变键盘按下 的值之后再让LabVIEW继续处理该事件。
有时候,用户的一个操作会使得多个事件产生源都发出某一事件, 比如在“开关”上单击,则“开关”控件和“开关”控件所在的窗 格都会发出一个“鼠标按下”事件。
与键盘相关的事件,如键按下、键释放等,只在当前被选中的控件 上产生。
与鼠标相关的事件,如鼠标按下、鼠标释放等,按照从外向里的顺 序发生。
值改变事件按照从内向外的顺序发出。
注册事件节点可以注册两种 事件:LabVIEW自产事件和 用户自定义事件,前者包括 前述6类事件。
动态事件注册过程: 1、获得对象的引用,引用输 入到“注册事件”节点。 2、“注册事件”节点输出接 到动态端子上。 3、配置”动态事件“。 4、在结构外,加入”取消注 册事件“节点。
实例:编写一个VI,在VI的面板上单击时,显示出鼠标所在的坐标,但所有的事件 需要在一个子VI中处理。
件结构中处理该触发停止布尔控件。
• 如无需通过编程监视特定的前面板对象,考虑使用“等待前面板活动”函数。 • 用户界面事件仅适用于直接的用户交互。 • 避免在一个事件分支中同时使用对话框和“鼠标按下?”过滤事件。 • 避免在一个循环中放置两个事件结构。 • 使用动态注册时,确保每个事件结构均有一个“注册事件”函数。 • 使用子面板控件时,事件由含该子面板控件的顶层VI处理。 • 如需在处理当前事件的同时生成或处理其他事件,考虑使用事件回调注册函
2.本<VI>,这类事件反映当前VI状态的改变。例如:当前VI是否被关闭,是否 选择了菜单中的某一项等等。 3.动态事件(Dynamic),用于处理用户自己定义的或在程序中临时生成的事 件。 4. 窗格,包括与某一窗格有关的事件,比如鼠标进入离开窗格等。 5.分割栏,包括与分割栏先关的事件,比如鼠标拖动分割栏等。 6.控件,最常用的一种事件,用于处理某个控件状态的改变。例如,控件值的 改变,或者鼠标键盘的操作。
按照事件来源,Labview支持下列6类事件(“编辑事件” 对话框的“事件源”中)
1.应用程序,这类事件主要反映整个应用程序状态的变化,例如:程序是否关 闭,是否超时等。
事件结构中的默认事件“超时”就属于应用程序事件,如果不连接任何数据给它,默认“用 不超时”,在程序中可以传入一个表示毫秒的数值(n)给它,则每隔n毫秒,此事件会自动运 行超时处理分支中的代码;
程序运行时,禁用分支中的程序并不被生成可执行代码,因此,使 用禁用结构并不会影响程序的运行效率。而条件结构中的每一个分 支的代码都要生成可执行代码并装载在内存中。
5.2 条件禁用结构
与程序框图禁用结构类似,两者的区别在于:条件禁用结构是根据用户设定 的符号的值来判断决定执行哪个分支上的程序,类似于C语言中的#ifdef宏。
在编辑事件对话框中首先要选 择一个事件处理分支作为对象,然后 在事件源中选择合适的事件源。
编辑事件对话框中的事件列表 中放置的是选中事件源对应的所有可 能的事件名称,使用鼠标左键选择希 望的动作选项就可以为事件源创建事 件。
图4-23 编辑事件对话框
图4-24 事件结构示例
5.3.1 事件结构创建的注意事项
第五讲 LabVIEW的基本程序 结构2
5.1 程序框图禁用结构
与条件结构类似,两者的区别在于:禁用结构并非在运行时输 入分支选择条件,它执行哪一个分支是在编辑程序时就确定好 了的。
可以有多个分支,但是只有一个名为“启用”的分支,其他所 有分支都是“禁用”的,程序运行时,只运行名为“启用”的 那个分支。
上图虚线框内的程序,编写程 序时无法确定最后是否使用它,但 两种方案都需要调试。这时,应该 使用禁用结构,下图所示。
当需要运行它时,把这个分支 设为“启用”分支即可。
禁用结构会默认生成一个启用分支,需要修改一下启用分支,已保 证程序逻辑和输出数据无误。上例中,需要把文件句柄和错误数据 进出结构的隧道分别相连,才能保障后续程序得到正确的数据。
动态事件结构的创建就需要使用注册事件节点注册事件(指定 事件结构中事件的事件源和事件类型的过程称为注册事件),再将结 果输出到事件结构动态事件注册端子上。若要创建一个事件动态注册 端子,可以在事件结构框图上单击鼠标右键,在弹出的快捷菜单中选 择“显示动态事件接线端”选项即可。
图4-28 事件函数选板
事件结构和条件结构类似,区别在于:事件结构是根据发生的事件 决定执行哪一个分支中的代码;
事件发生,事件结构自动感知,不需要数据线把事件传递至事件结 构;
事件标签显示当前分支所对应的事件,事件发生时,事件结构除了 会得知是何事件发生,还会得到一些相关数据,比如事件发生的时 间、发生在哪一个控件上等,这些数据可以从事件结构左边内侧的 事件数据节点得到;
超时端子用来设定超时时间,其接入数据是以毫秒为单位的整 数值。-1为关闭超时事件。
事件数据节点由若干个事件数据端子构成,数据端子的增减可 以通过拖拉事件数据节点来进行,也可以通过单击鼠标右键从弹出的 快捷菜单中选择“添加/删除元素”选项进行。
事件结构同样支持隧道。
图4-22 添加事件分支
先在前面板 上放置控件, 然后,事件 源会自动把 它作为选项 列出。
5.3.1 事件结构的创建与简单示例
一个标准的事件结构由框架、超时端子、事件数据节点、递增/ 减按钮、选择器标签组成,如图4-21所示。和条件结构相似,事件结 构也可以由多层框架组成,但与条件结构不同的是,事件结构虽然每 次只能运行一个框图,但可以同时响应几个事件。
区域和分割线
图4-21 事件结构的基本构成
LABVIEW中的事件结构也是一种特殊的选择结构。 其他方式的事件可通过编程生成并与程序的不同部分进行通信。 LabVIEW支持用户界面事件和通过编程生成的事件,但不支持外部I/O 事件。
LabVIEW中的事件结构也是一种能改变数据流执行方式的一种结 构,使用事件结构可以实现用户在前面板的操作(事件)与程序执行的 互动。
常被用在跨平台的程序中,使程序能够适用于不同的操作系统。
配置条件对话框
符号-列出所有可用的符号。
==/!=-列出表达式中可用的比较运算符。有效的比较是:==,指定符号 与值相等;!=,指定符号与值不相等。 值-指定所选符号的值。值区分大小写,输入必须与下列有效值相同。
条件禁用结构还可以使用项目或项目运行的目标机器所定义的符号。
5.3.2 过滤事件和通知事件
按照事件的发出时间来区分,LabVIEW的事件可分为通知型事件 Notify Event)和过滤型事件(Filter Event)。
通知型事件是在LabVIEW处理完用户操作之后发出的,比如用户利 用键盘操作改变了一个字符串,LabVIEW 在改变了该控件的值之后,发 出一个值改变(Value Changed)通知型事件,告诉事件结构,控件的 值被改变了。如果事件结构内有处理该事件的框架,则程序转去执行该 框架。
连接常量数据给“创建用户事件”函数的“用户事件数据类型”参数,常量的数据 类型就是抛出事件的事件数据类型,常量的标签是创建出来的事件的名称。
项目浏览器“我的电脑”项的右键菜单“属性”对话框中添加属性
使用属性作为条件
5.3 事 件 结 构
所谓事件,是指对程序活动发生的异步通知。事件可以来自于用 户界面、外部I/O或其他方式。用户界面事件包括鼠标点击、键盘按键 等动作,外部I/O事件则指诸如数据采集完毕或发生错误时硬件触发器 或定时器发出信号。
相关主题