labview事件结构学习
第9章_labview的高级应用(事件结构编程技巧)

通过“坐标”获取鼠标的位置,并把该坐标值赋给“鼠标 按下”的控件,从而达到控件被鼠标拖动的视觉效果。
在“鼠标释放”的分支中,通过“非法引用句柄常量”取 消对“鼠标移动”事件的注册,从而实现在鼠标释放后, 控件的位置不再跟随鼠标发生变化。
• 动态注册:动态事件注册与VI服务器相结合,
允许在程序运行时使用控件、VI或应用程序 的引用来动态地指定和改变产生事件。动态 注册在控制LabVIEW产生何种事件和何时产 生事件等方面更为灵活。
用布尔控件制作 的自定义控件
为这个自定义控 件动态注册了 “鼠标按下”事
件
1:放置“注册事件”函数 2:在“注册事件”函数输入端上连接一个引用 3:在“注册事件”函数事件源,选择该引用所对应的事件
第九章
Labview 的高级应用 ——事件结构之谜
用户界面
事
件
外部I/O
程序的其它部分
超时节点
事件结构
事件选择器
动态事件注册
事件数据节点程序代码Step2:处理事件分支程序
事件结构在循环体外, 因此不再执行
Step1:值第一次被改变 Step3:值再次被改变
事件结构编写黄金法则1
将事件结构放入While循环中!
生产者消费者 循环
事件结构
• 通知事件:
如“鼠标移动”、“键按下”等
• 过滤事件:
如“鼠标移动?”、“键按下?”等
数字”0-9” “-“ ”Backspace“
事件过滤节点
事件结构注册模式
• 静态注册:事件结构的每个分支具体处理哪 些事件,一旦VI开始运行,LabVIEW将自动 注册这些事件,并且在VI运行的整个过程中 无法改变事件结构所处理的事件。
labview第五章结构

子分支定义输出数据通道。
例子
设定默认的子分支,当
所有条件都不满足时,
执行默认子分支
LabVIEW是一种数据流程序设计语言,没有明确的先后顺序,当节点
所有输入端的数据全部有效时,节点才执行。
顺序结构,它是一种按先后顺序执行的结构,看上去象电影胶片的帧, 每一帧为一段框图程序,按照帧的顺序来执行框图程序。
5. 编辑该事件触发后需执行的相应代码,
并将其和事件源控件一起放入该分支事件 框中。
6. 添加下一个分支的事件源控件、分支及 程序。。。
7.创建一个While循环,将事件结构放入循
环中。
例:用事件结构实现密码登陆:当用户输入密码为123456
时弹出“密码正确登陆成功”对话框,单击“确定”按钮
如果在全局变量声明VI中建立多个控件,可以用操 作工具在全局变量的图标上单击,在列出的所有变 量对象中选择所需的对象。
(3)使用示例
利用全局变量在不同VI中传递数据。
创建一个全局变量声明Ⅵ,其中包含一个数值型控件并命名为 “数值”和布尔型控件并命名为“状态”,保存为“GV.vi”。
新建一个VI命名为“采集信息.vi”,前面板中有一个旋钮开关和按
2.输入端口的设置
条件结构有一个条件输入端口
,根据连到该
端口 的值来判断执行哪一个子分支。
条件输入端口的数据类型有布尔型、整型、字符 串型和枚举型。
3.增减分支及默认分支的设置
应设置一个默认项来处理超出条件选项范围的情 况。 鼠标右键,选择“本分支设置为默认分支”。
4.数据通道的设置
LabVIEW事件结构

LabVIEW事件结构2011-01-12 15:30:57| 分类:硬件学习 | 标签:测量 vi 菜单事件例图|字号订阅使用LabVIEW图形化语言开发的应用程序界面是图形化用户操作界面,也称为:GUI (graphical user interface),它的作用是与操作者实现人机对话形式的互动操作。
这种对界面操作的互动响应在LabVIEW 6.1发布之前,只能通过“轮询(polling)”的方式来实现。
轮询的方式的缺点是:需占用一定的CPU资源(在没有事件发生时)和灵活性不好。
在LabVIEW6.1引入事件结构(Event Structure)后,采用事件结构来设计、实现的GUI操作则变得更加灵活、方便,并且不占用CPU的资源,这与先前采用轮询的方式来查询事件的方式相比要合理的多。
下面结合应用项目中的设计实例来介绍GUI设计中的事件驱动。
有关事件结构的一些基本概念、原理及使用方法在LabVIEW Help及许多书中都作了详细的讲解,这里我就不作更多地介绍了。
事件结构通常包括以下部分:1、Event cases——包含有若干个注册的事件源及同等数目的Event case层,在每个Event case层中包含对该事件响应的处理程序。
2、While循环——用来检测连续不断产生的事件事件结构中的While循环,是用来确保检测到连续不断发生的事件。
如果没有这个While循环,无论有多少事件发生只能对第一个发生的事件进行处理,处理完后程序将退出事件结构。
—————————————————————————————————————————菜单选项事件结构实例Agilent VT1415A是C尺寸、单槽寄存器基VXI模块,可以提供64个通道的多功能输入/输出的闭环控制功能。
第1步、创建一个项目:综合参数测量仪按照我的设计习惯,首先在桌面上创建一个新的文件夹,命名为《综合参数测量仪》。
然后,打开、运行LabVIEW开发环境,并选择开发环境中的:新建》项目。
labview控制程序流程——labview事件结构

labview控制程序流程——labview事件结构1 事件结构及它的图形化表示法事件被用来通知用户有异步活动发生。
图形化语言的事件响应包括:用户界面事件、外部I/O 事件和程序其它部分的事件。
对事件的处理程序也被称为:事件驱动程序。
事件驱动程序可以分为若干个分支,每个分支处理不同的事件响应。
所以对事件的响应结果也可以控制程序的流程。
事件驱动机制来自于可视化的操系统,可视化操作系统对用户事件提供了简洁、有效的响应方式,最常见的事件来自于鼠标和键盘。
虚拟仪器借助于操作系统的事件处理机制实现了图形化语言的事件响应能力。
在没有引入事件结构之前,LabVIEW 是借助于轮询的方式来查询用户操作,由于轮询的方式会占用一定的CPU 资源,甚至可能遗漏事件,所以这种处理方式并非理想。
事件结构的出现避免了对CPU 资源的占用,同时也避免了事件的遗漏。
事件结构在函数选板》编程》结构子选板中可以找到,并可以将其直接拖拽到程序框图中,图形化表示的事件结构,参见下图。
图 1 图形化的事件结构与Case 结构和循环结构类似,事件结构也包含了一个主框架,这个框架内将用来放置事件处理的事件驱动程序代码。
如果事件处理任务众多,会有众多事件分支存在,在结构上类似Case 的多帧结构(选择器标签)。
当在程序框图上拖放一个事件结构时,我们只能看到上图所示的一帧已经预先注册的超时事件(Timeout),超时事件分支。
它具有定时延迟的基本功能(不包括While 循环),参见下图。
图 2 具有定时延迟的基本功能当然也可以采用另一种表示方法,参见下图。
图 3 利用事件结构内部节点获得中止时间通过这个例子也好理解内部节点中时间的含义(是事件响应的停止时间)。
超时事件超时事件是一种特殊的事件,当然也可以看成是默认的事件分支。
如果存在其它事件源时,超时事件完全可以被忽略或取消。
看下面一个例子。
图 4 仅有的两个事件之一超时事。
LabVIEW事件结构的妙用

LabVIEW事件结构的妙用首先,我们回顾一下上期节目:LabVIEW网络讲坛乊悬案迷思中关于事件结构的几个重要知识点。
事件结构的基本组成部分:事件结构五大基本组成部分事件结构由——事件选择器、超时接线端、事件数据节点、事件过滤节点和动态事件接线端5个基本部分组成。
事件结构编程的3条黄金原则:在使用LabVIEW事件结构迚行编程的时候,我们应该注意:1.不要将事件结构放置在while循环乊外,而应该放置在while循环的内部;2.不要在事件结构的内部使用循环处理事件,可选择采用生产者消费者结构,在生产者循环中放置事件结构,在消费者循环中处理事件;3.记得为事件结构添加一个单独处理停止按钮的分支。
遵守以上三条原则将使我们的程序更加健壮,避免在使用事件结构的时候出现前面板死锁等问题。
过滤事件与通知事件:在LabVIEW中,以问号结束的事件被称为过滤事件,其余的事件被称为通知事件。
对于通知事件,程序可以感知事件的发生并且响应该事件,然后再处理在事件结构中定义的任务;而对于过滤事件,程序感知事件发生后,首先处理在事件结构中定义的任务,然后根据事件过滤节点的值(Discard?)来决定是否响应该事件或是否改变事件数据。
因此我们建议,在希望参与处理用户操作时使用过滤事件,因为过滤事件可以放弃事件或修改事件数据。
如果仅需要知道并响应用户执行的某一特定操作,则应使用通知事件。
在本期节目中,我们着重介绍动态注册事件的用法。
静态和动态两种事件注册模式:静态注册指定了事件结构的每个分支具体处理哪些事件。
一旦VI开始运行,LabVIEW将自动注册这些事件,并且在VI运行的整个过程中无法改变事件结构所处理的事件。
而动态事件注册与VI服务器相结合,允许在程序运行时使用控件、VI或应用程序的引用来动态地指定和改变产生事件的对象。
动态注册在控制LabVIEW产生何种事件和何时产生事件等方面更为灵活。
Demo 1和Demo 2帮助大家更好地理解动态注册事件编程方法。
labview事件结构使用方法

labview事件结构使用方法在LabVIEW中,事件结构是一种可以按照事件的发生改变程序流程的数据结构,可以通过人机互动或者事件干预的方式产生事件驱动,在LabVIEW中是一种常用的数据结构,下面我就来讲解一下其具体的使用方法。
一、事件结构的使用目的在LabVIEW中一个重要的概念就是数据流,我们在编程的时候可以来设置某些事件来对数据流进行干预,比如说单击鼠标产生事件,按下键盘按键等,这些都可以被当作为事件结构的条件,进而实现对程序的控制。
二、事件结构的创建方法1.在程序窗口中的空白处单击鼠标右键,在弹出的函数选板中选择<结构>子选板,然后再选择<事件结构>并将其拖到程序框图中即可。
2.最基本的事件结构是由<程序框架>、<子框图标识符>和<事件数据节点>组成。
3.在刚创建事件结构时,会自动的创建一个<超时端口>,<超时端口>用于连接一个数值指定等待事件的毫秒数,如果超过设定的时间没有发生事件的话,程序就会产生一个超时事件。
4.<事件数据节点>用于访问事件的数据值,可以单击节点中的数据项,然后在弹出的菜单中,选择<选择项>,可以进行选择访问哪个事件数据的成员。
5.在事件结构的边框上单击鼠标右键,在弹出的菜单中选择<添加事件分支>,即可完成子框图的添加。
三、对事件进行编辑1.换到要进行编辑的子框图中,在边框上单击鼠标右键,在弹出的快捷菜单中选择<编辑本分支所处理的事件>选项,打开<编辑事件>对话框。
2.在<编辑事件>界面中可以对相应的事件源和事件进行定义,在左侧的<事件说明符>下面点击<添加事件>或者<删除>即可相应的改变事件数量。
在<事件源>和<事件>两个子窗口中分别选中相应的对象,左侧的<事件说明符>下面就会出现两者的组合,点击<确定>,此子事件框图就可以完成编辑。
LabVIEW技巧系列(一)——事件结构

LabVIEW技巧系列(一)——事件结构
事件结构,是LV编程结构的精髓所在。
它类似于单片机的中断功能,优
点在于不占用CPU资源。
比如按键按下串口发送数据,以及设置键盘快捷键
等等功能,事件结构比查询结构要节省很多系统资源。
下面我介绍一下利用事件结构的关键点,基础的自己去看帮助吧。
1,关于事件结构超时连线的问题:事件结构有一个超时事件的输入,当不连接时代表永不超时。
这点要十分注意,因为有时候你的事件就够会和其他结构放在一个while循环里,比如下图:
我们理想的情况是,其他服务程序正常循环运行(小灯闪烁),而鼠标按下后,处理事件结构。
但是如果这样写的话,由于事件结构永不超时,while循
环只会运行一次,只有当鼠标按键按下后,才会开始第二次循环。
这个程序的运行结果是,按一下鼠标,小灯变化一次。
要解决这个问题有两个办法:一个是给事件结构的延时输入处添加延时时间,比如5ms,这样循环就会5ms运行一次,不会影响其他服务程序的正常运行。
二个就是把其他服务程序放到另外一个while循环中,事件结构单独一个循环。
个人建议选择第二个方法。
2,关于事件结构软触发的问题:前面板有一个按钮,按下后触发很简单,
也很常用。
不过有时候要涉及到软触发的问题,就是利用程序(而不是前面板的控件)去触发一个事件。
先看下面这个例子:
“服务程序”软件改变软触发的值,我们的理想目标是,每次改变服务程序的
值为真时,标志小灯会改变一次。
但是实际程序运行结果是,无论按多少次,小灯都不变。
因为直接赋值只能改变变量的值,而不能引起次变量的事件触发。
labview事件结构

最近贴子比较少啊,发个贴子讨论一下基于事件结构的状态机吧,最近好像不少朋友都会有这方面的问题。
有些截图看不清文字的可以单击图片放大来看。
我感觉在LabVIEW中进行程序框架设计,似乎只见到过一种框架,那就是状态机,(并行的算不算?)还有“主/从设计模式”、“生产/消费模式”之类的,但好像也是建立在状态机的基础上的。
如果真是这样的话,状态机就成了唯一的程序框架了?状态机简单一点说就是上一个运行状态决定下一个运行状态,在LabVIEW中有标准的状态机的模板,菜单中选择文件>>“新建…”(是第二个而不是第一个“新建”,注意“新建”二个字后面的省略号,表示会弹出界面来),在弹出来的对话框中的右边树形控件中选择“VI>>基于模板>>框架>>设计模式>>标准状态机。
(还有其它一些设计模式也可以这样打开)新弹出的标准状态机如下图:我一开始的时候看到这种结构不是很好用,感觉有点怪,完全不需要用户进行操作整个程序就运行完了,所以刚听到状态机时感觉这种结构的功能也没有宣传的那么强大,我一般在主程序中都没有使用这种结构,只是偶尔在一些比较底层的子VI里使用一下,因为这种结构跟顺序结构差不多,但在调试、查看时又没有顺序结构直观,要在不同的CASE进行切换比较麻烦,虽然这种结构在错误处理上有一定的优势。
后来又发现,说到状态机的话,是说这样一种编程思想,好些类似的结构似乎都可以归到状态机范畴里面(难怪官方只说这种是标准状态机?)其它状态机如下:第一种我是用得比较多一点——基于事件的状态机这种结构充分发挥了用户与程序的互动,比如上图,用户在点击前面板的“开始采集”按钮后才会开始进行数据采集任务。
我一般在主程序上是用这种结构,一些附加功能,比如用户设置、生成报表等功能都是利用事件结构处理前面板的按钮点击事件来实现的。
第二种跟标准状态机也差不多:这种结构是利用循环结构里面的循环计数器来选择需要执行的下一个状态。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
labview事件结构学习
编程的主要目的是为了实现用户的某种功能,用户通过用鼠标、键盘、程
序内部等触发某种程序动作,从而达到某种结果,这些操作都被称作为事件,LabVIEW 中相应这些事件最常用的结构就是事件结构。
事件结构内容丰富,基
本上大的程序结构都需要用到事件结构,下面将详细介绍事件结构。
事件结构
在程序不能够单独响应各种事件,必须与循环结构一同使用,如下图事件添加
方式很简单,鼠标右键事件框弹出菜单如上图,有添加、删除、复制、编辑事
件等选项,按照操作即可。
如下图,为事件结构添加Stop 事件,布尔控件触发
事件的方式有多种,鼠标按下、经过、离开、进入等,这里我们选择值改变。
确定后,stop 事件就被添加进去了,如下图,当我们运行程序后,点击前面板
的stop 按钮,触发事件使while 循环停止而后程序也停止。
同一事件分支只能
添加一种事件吗?当然不是!有的时候有很多不同操作却会执行相同代码,怎
么编程才不会让代码冗余呢?看个例子,如下图2 个按钮stop1,stop2 点击后
都可以让程序停止,我们怎么为其添加事件呢?我们先添加一个事件stop1 的,方法上面已经描述了。
由于stop2 的执行代码和stop1 一样,我们在事件stop1 上右键->弹出菜单->编辑本事件分支(Edit Event Handled by This Case)会弹出已添加事件stop1 的编辑框,这是左侧有2 个按钮如下截图我们点击Add Event 左侧事件列表会出现如下变化选中这个后,右侧列表选中stop2 的Value Change 事件后,点击确定在看该事件分支如下,2 个事件就添加在同一个分支当中了,运行程序后,点击stop1 或stop2 均可让程序停止。
超时超时是事件结构特有的,看名字就知道是怎么回事,即超过一定时间没有触发事件则执行超时
事件。
如果超时时间设置所以如果程序事件功能不多,又需要定时执行一段代码,可以考虑用此方式来完成;如果程序操作频繁,则不建议用此事件来定时。