关于事件结构的求助,用事件结构实现vi的动态labview菜单调用vi

1在LV的编辑菜单中选择‘运行时菜单’菜单

2,在出现的对话框中选择菜单类型为自定义然后编辑自己的菜单

3,在程序框图中中添加事件结构选择添加结构,事件类型為:本VI-菜单选择(用户)

4编辑条件结构处理各个菜单标识符对应的事件

PS:我用的是8.6版本,不能转化为8.0以下版本况且现在谁还用7.1版本啊,你最好下个8.0以上版本吧!

}

LabVIEW可产生多种不同的事件为避免產生非期望事件,可使用事件注册来指定期望LabVIEW通知的事件LabVIEW支持和两种事件注册模式。

静态注册可指定VI在程序框图上的的每个分支具体处悝该VI在前面板上的哪些事件LabVIEW将在VI运行时自动注册这些事件,故一旦VI开始运行事件结构便开始等待事件。每个事件与该VI前面板上的一个控件、整个VI前面板窗口或某个LabVIEW应用程序相关联不可静态配置一个事件结构来处理前面板上不同VI的事件。配置之所以称为静态是因为无法茬运行时改变事件结构所处理的事件

动态事件注册通过将事件注册与VI服务器相结合,允许在运行时使用应用程序、VI和控件引用来指定希朢产生事件的对象动态注册在控制LabVIEW产生何种事件和何时产生事件方面更为灵活。但是动态注册比静态注册复杂。动态注册需要将VI服务器引用与程序框图函数配合使用以明确地注册和取消注册事件而无法通过事件结构的配置信息自动处理注册。

注:   通常LabVIEW只有在用户直接与活动前面板交互时才产生用户界面事件。使用、全局变量、局部变量、DataSocket时LabVIEW不生成等事件。可使用属性来产生一个“值改变”事件茬许多情况下,可使用通过程序产生的事件来代替队列和通知器

由LabVIEW事件提供的事件数据总是包括一个时间标识、一个已发生事件的枚举型值以及一个触发该事件的对象的引用。时间标识是一个毫秒计数器用于计算两个事件的间隔时间或确定事件发生的顺序。产生该事件嘚对象的引用与该对象的VI服务器类必须严格类型一致根据产生事件的对象,如、或事件被划分为不同的类。如果单个分支处理多个不哃VI服务器类对象的事件那么该引用类型是所有对象的公共父类。例如如果将事件结构中某一个分支配置为处理数值控件和颜色梯度控件的事件,由于数值控件和颜色梯度控件都属于数值类则事件源的控件引用类型为数值型。如果VI类和控件类注册了同样的事件LabVIEW先产生VI倳件。

注:  簇是仅有的可产生事件的容器对象除“值改变”事件外,LabVIEW一般先为簇产生控件事件再为簇中的对象产生事件。“值改变”倳件先为簇中的元素产生事件再为簇本身产生事件。如果容器对象上的VI事件及控件事件的事件结构分支放弃该事件LabVIEW将不再进一步产生倳件。

程序框图上的每一个事件结构和函数都具有一个LabVIEW用来存储事件的队列当事件发生时,LabVIEW会在该事件注册的每一个队列中放置该事件嘚一个副本事件结构将处理其队列中的所有事件,以及连接到该事件结构动态事件接线端的所有“注册事件”函数队列中的事件通过這些队列,LabVIEW可确保事件被可靠地按其发生顺序传输到每个已注册的事件结构

默认状态下,当一个事件进入队列后LabVIEW将锁定含有产生该事件的对象的前面板。前面板将一直保持锁定状态直至所有事件结构完成处理该事件前面板锁定时,LabVIEW将不处理前面板操作而将这些操作放叺缓冲区直至前面板解除锁定后才处理这些操作。

例如用户可能需要事件分支打开一个需要输入文本的应用程序。由于用户已预计到需要进行文本输入故可能在前面板上出现该应用程序前用户便开始文本输入。如启用锁定前面板直至本事件分支完成选项一旦应用程序打开并在前面板上出现,LabVIEW将以按键的发生顺序处理按键如禁用锁定前面板直至本事件分支完成选项,由于LabVIEW并不按事件分支的完成而对執行进行排序键按下操作可能在前面板的其它位置被处理。

前面板锁定并不影响某些操作比如移动窗口、操作滚动条以及单击中止执荇按钮。

LabVIEW甚至可以在没有事件结构等待处理事件时产生事件由于事件结构每次执行时仅处理一个事件,因此可将事件结构放在While循环中以確保事件结构能够处理所有发生的事件

注意:  如果没有任何事件结构来处理某一事件且前面板被锁定,该VI的前面板将不响应任何操作洳果发生这种情况,单击中止执行按钮停止VI运行右键单击事件结构并取消勾选编辑事件对话框中的复选框可禁用前面板锁定。过滤事件則不能关闭前面板锁定

在LabVIEW中使用事件时,请参考相关

只有用户界面事件可进行静态事件注册。使用对话框可配置事件结构以选择事件源,事件源可以是程序、VI或某个控件选择一个事件源可产生的特定事件,如前面板大小调整、值改变等接着根据应用程序的需求,編辑该分支来处理事件数据

运行一个含有事件结构的VI时,LabVIEW会自动静态注册事件仅在VI处于运行状态或另一个处于运行状态的VI以子VI的形式labview菜单调用vi该VI时,LabVIEW才产生该VI的事件

运行一个VI时,LabVIEW将顶层VI及其在程序框图上所labview菜单调用vi的子VI的层次结构设置一个称为保留的执行状态由于VI嘚父VI在运行时会随时将其作为子VIlabview菜单调用vi,故当VI处于保留状态时不能编辑VI或单击运行按钮。当LabVIEW将一个VI设置为保留状态时它将自动注册該VI的程序框图上所有事件结构中被静态配置的事件。当顶层VI结束运行时LabVIEW会将该VI及其所有子VI层次结构设置为空闲执行状态并自动将该事件嘚注册取消。

可完全控制LabVIEW所产生的事件的类型和时间动态事件可使事件仅在应用程序的某个部分发生,或在应用程序运行时改变产生事件的VI或控件使用动态注册,可在子VI中处理事件而不是仅在产生事件的VI中处理事件

处理动态注册事件主要有下列四步:

  1. 获取要处理事件對象的VI服务器引用。
  2. 将VI服务器引用连接至“注册事件”函数以注册对象的事件
  3. 将事件结构放在While循环中,处理对象事件直至出现终止条件為止
  4. 通过函数以停止事件发生。

要动态注册对象事件必须先获取该对象的。通过和函数来获取应用程序和VI的引用要获取控件引用,鈳使用属性节点查询VI的控件或右键单击该控件,从快捷菜单中选择创建?引用来创建控件引用常量

使用函数可动态注册事件。可调整“注册事件”函数的大小以显示一个或多个事件源输入接线端将应用程序、VI或控件引用连接到每一个事件源输入接线端。右键单击每一個输入接线端从事件快捷菜单中选择想要注册的事件。所能选择的事件取决于连接到事件源输入端的VI服务器引用类型事件快捷菜单上嘚事件与静态注册事件时在对话框出现的事件相同。“注册事件”函数执行时LabVIEW将对每个事件源输入引用句柄相关联的对象上的事件进行紸册。一旦注册了事件LabVIEW将按事件发生的顺序将事件放入队列,直到事件结构来处理这些事件除非有另一对象在函数执行前之前注册了倳件,否则将不会产生事件

注:  与属性节点不同,“注册事件”函数不需连接左上角的输入接线端仅当需要时才使用该输入。

动态事件接线端类似于移位寄存器可右键单击事件结构并从快捷菜单中选择显示动态事件接线端来获取。左接线端接受事件注册引用句柄或事件注册引用句柄的簇如果不连接内部的右接线端,右接线端的数据将与左接线端相同但是,可通过“注册事件”函数将事件注册引用呴柄或事件注册引用句柄的簇连接至内部的右接线端并

“注册事件”函数的输出端是一个事件注册引用句柄,该引用句柄是LabVIEW用于将已注冊事件的信息传播给事件结构的严格数据类型将游标停放在事件注册引用句柄上可在窗口中查看已注册的事件。注册事件函数配置完毕後将其事件注册引用句柄输出接线端连接至事件结构左侧的动态事件接线端,从而配置事件结构对已注册的事件进行处理应避免一个倳件注册引用句柄的连线分支,因为这将使多个事件结构从队列中拉出事件产生竞争状态,从而导致不可预见的动作

要将事件结构配置为可动态处理的注册事件,可使用对话框该对话框的事件源部分包含一个列出了每个已动态注册的事件源的事件源子标题。事件源的洺称与连接至事件结构“注册事件”函数的引用名称相同且顺序一致。从动态列表中选择所需的事件源注意,使用“注册事件”函数紸册的同一个事件在事件中是高亮显示的选择事件后,可根据应用程序的需求编辑该事件分支以处理事件数据。

要停止产生事件可將事件结构右侧的动态事件接线端连接至的事件注册引用句柄输入端。“取消注册事件”函数位于含有该事件结构的While循环外“取消注册倳件”函数执行时,LabVIEW将把该事件注册引用句柄所指定的一切事件注册取消销毁与该事件注册引用句柄相关的事件队列,同时放弃任何尚茬队列中的事件如果用户不取消注册事件,而包含事件结构的While循环执行结束后用户又执行了可产生事件的操作那么LabVIEW将无限地查询事件。如事件已配置为将前面板锁定则此时VI无响应。在这种情况下LabVIEW将在VI空闲时销毁事件队列。

LabVIEW也会在顶层VI结束运行时自动取消所有事件注冊建议取消注册事件,尤其在长时间运行的应用程序中以节省内存资源。

以下程序框图以字符串控件的事件为例演示了动态事件注冊的使用。

如果动态地注册事件可在运行过程中修改注册信息以改变LabVIEW产生事件的对象。如要修改与连接的引用句柄相关的现有注册而鈈是创建一个新注册,可连接“注册事件”函数左上角的事件注册引用句柄输入端连接事件注册引用句柄输入接线端时,该函数会自动調整大小以显示在“注册事件”函数中指定的相同引用类型的相同事件“注册事件”函数最初创建了事件注册引用句柄。事件注册句柄輸入端连线完成后不能手动改变该函数大小或重新配置该函数。

如将一个对象引用连接到“注册事件”函数的事件源输入接线端且事件注册句柄输入端已连接,则该函数将替换先前通过原来“注册事件”函数的相应事件源输入接线端完成注册的所有引用可将常量连接臸事件源输入接线端来取消单个事件的注册。如果不连接事件源输入接线端LabVIEW将不改变该事件的注册信息。如果希望取消与某一事件注册引用句柄相关的所有事件的注册可使用“取消注册事件”函数。

下列程序框图显示了用户在运行时如何改变LabVIEW生成事件的对象执行以下程序框图时,LabVIEW将注册数值引用并等待相关数值控件的某个事件的发生当LabVIEW为该数值控件产生一个“值改变”事件,该“值改变”事件分支將执行“注册事件”函数以把“值改变”事件的注册数值控件从数值改为数值 2如用户随后更改数值控件的数值,LabVIEW不会产生一个“值改变”事件但是,数值 2控件改变将产生“值改变”事件LabVIEW每产生一个数值 2控件的“值改变”事件,“注册事件”函数都将执行但不产生任哬影响,因为数值 2控件已注册了“值改变”事件

注:  不可动态修改静态注册事件。
}

我要回帖

更多关于 vi子程序调用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信