labview控制程序流程——labview事件结构

合集下载

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

第9章_labview的高级应用(事件结构编程技巧)
前面板上所有控件
通过“坐标”获取鼠标的位置,并把该坐标值赋给“鼠标 按下”的控件,从而达到控件被鼠标拖动的视觉效果。
在“鼠标释放”的分支中,通过“非法引用句柄常量”取 消对“鼠标移动”事件的注册,从而实现在鼠标释放后, 控件的位置不再跟随鼠标发生变化。
• 动态注册:动态事件注册与VI服务器相结合,
允许在程序运行时使用控件、VI或应用程序 的引用来动态地指定和改变产生事件。动态 注册在控制LabVIEW产生何种事件和何时产 生事件等方面更为灵活。
用布尔控件制作 的自定义控件
为这个自定义控 件动态注册了 “鼠标按下”事

1:放置“注册事件”函数 2:在“注册事件”函数输入端上连接一个引用 3:在“注册事件”函数事件源,选择该引用所对应的事件
第九章
Labview 的高级应用 ——事件结构之谜
用户界面


外部I/O
程序的其它部分
超时节点
事件结构
事件选择器
动态事件注册
事件数据节点程序代码Step2:处理事件分支程序
事件结构在循环体外, 因此不再执行
Step1:值第一次被改变 Step3:值再次被改变
事件结构编写黄金法则1
将事件结构放入While循环中!
生产者消费者 循环
事件结构
• 通知事件:
如“鼠标移动”、“键按下”等
• 过滤事件:
如“鼠标移动?”、“键按下?”等
数字”0-9” “-“ ”Backspace“
事件过滤节点
事件结构注册模式
• 静态注册:事件结构的每个分支具体处理哪 些事件,一旦VI开始运行,LabVIEW将自动 注册这些事件,并且在VI运行的整个过程中 无法改变事件结构所处理的事件。

LabVIEW虚拟仪器技术第4章-程序结构

LabVIEW虚拟仪器技术第4章-程序结构
第4章 程序结构
基本程序结构
在各编程语言中,基本的程序结构有三种: 顺序结构、条件结构和循环结构。
LabVIEW中,除了具有上述三种程序结构外, 还提供了用于事件处理的事件结构。
此外,还有局部变量,属性节点和调用节点 等功能,为增加程序编写的灵活性提供了保障。
文本语言接口
在LabVIEW的图形化编程环境中,利用上述 程序结构可以解决很多非常复杂的问题。
范例
条件结构的输出隧道。
条件结构的输出方式
条件结构的输出有两种方式:
1.在条件分支内部输出数据
2.通过数据输出隧道,在条件结构外部输出数据
在分支内部输出数据更符合常规编程语言的编 程方式,但是从LabVIEW数据流的观点来看,并 不是最佳选择。
程序求输入数值的平方根,计算之前先判断 输入是否大于等于0。判断为真,结果由显示控件 输出,判断结果为假时,条件为真的分支不执行。
点击右键,在快捷菜单中我们可以添加或删 除每一帧。我们也可以通过拖曳的方式来改变每 一帧的大小。
顺序结构在执行时,会按照帧的顺序,从左 到右,依次执行每一帧。每一帧都有一个帧序号, 最小的帧序号为0,然后是1、2、3依次递增。
平铺式顺序结构因为代码是平铺的,因此代 码更直观,可读性较高。但是它的缺点是占用空 间较大。
针对于此,可以通过调用快捷菜单中的“替 换为层叠式顺序”功能,将平铺式的顺序结构转 换成层叠式的,以使VI看起来更为紧凑。
4.1.2 层叠式顺序结构
从本质上看,层叠式顺序结构和平铺式顺序 结构的功能完全相同,且二者可以相互转换。
层叠式顺序结构的创建
层叠式顺序结构外形类似于条件结构。它包 括一个或多个顺序执行的子程序框图或帧。
在很多情况下,程序员会需要多段代码按照预 先设定的顺序执行,这就需要顺序结构来帮忙了。

labview事件结构使用方法

labview事件结构使用方法

一、事件结构的使用目的在LabVIEW中一个重要的概念就是数据流,我们在编程的时候可以来设置某些事件来对数据流进行干预,比如说单击鼠标产生事件,按下键盘按键等,这些都可以被当作为事件结构的条件,进而实现对程序的控制。

二、事件结构的创建方法在程序窗口中的空白处单击鼠标右键,在弹出的函数选板中选择<结构>子选板,然后再选择<事件结构>并将其拖到程序框图中即可。

最基本的事件结构是由<程序框架>、<子框图标识符>和<事件数据节点>组成。

在刚创建事件结构时,会自动的创建一个<超时端口>,<超时端口>用于连接一个数值指定等待事件的毫秒数,如果超过设定的时间没有发生事件的话,程序就会产生一个超时事件。

<事件数据节点>用于访问事件的数据值,可以单击节点中的数据项,然后在弹出的菜单中,选择<选择项>,可以进行选择访问哪个事件数据的成员。

在事件结构的边框上单击鼠标右键,在弹出的菜单中选择<添加事件分支>,即可完成子框图的添加。

三、对事件进行编辑切换到要进行编辑的子框图中,在边框上单击鼠标右键,在弹出的快捷菜单中选择<编辑本分支所处理的事件>选项,打开<编辑事件>对话框。

在<编辑事件>界面中可以对相应的事件源和事件进行定义,在左侧的<事件说明符>下面点击<添加事件>或者<删除>即可相应的改变事件数量。

在<事件源>和<事件>两个子窗口中分别选中相应的对象,左侧的<事件说明符>下面就会出现两者的组合,点击<确定>,此子事件框图就可以完成编辑。

LabVIEW事件结构

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(Laboratory Virtual Instrument Engineering Workbench)是一种图形化编程语言和开发环境,用于测量与控制系统。

在LabVIEW 中,控制结构和循环是实现自动化控制和流程控制的重要组成部分。

一、控制结构1. 顺序结构顺序结构按照程序中的逐行顺序执行。

在LabVIEW中,通过将各个步骤连接起来,即可实现顺序执行。

2. 选择结构选择结构用于根据条件的不同,执行不同的代码块。

在LabVIEW 中,选择结构包括“Case结构”和“Select结构”。

- Case结构:根据条件进行分支选择。

不同的条件对应不同的代码块。

你可以在其中添加多个Case并分别编写代码,这样可以根据不同的条件执行不同的操作。

- Select结构:类似于Case结构,但是它使用数字索引来选择要执行的代码块,而非条件。

3. 循环结构循环结构用于重复执行某个代码块,直到满足退出条件为止。

在LabVIEW中,循环结构包括“For循环”、“While循环”和“Do循环”。

- For循环:用于已知循环次数的情况下重复执行代码块。

你可以设置循环的次数,并且在每次迭代中可以自定义循环变量的起始值、终止值和步长。

- While循环:在满足条件的情况下重复执行代码块。

你可以设置循环的退出条件,并且在每次迭代中可以自定义条件的判定。

- Do循环:先执行代码块,再判断循环条件是否满足。

如果满足,则继续循环执行,直到条件不满足为止。

4. 跳转结构跳转结构用于在程序中实现跳转操作,常见的跳转结构有“跳出循环”和“跳转到指定位置”。

- 跳出循环:当满足特定条件时,可以用于提前终止循环的执行。

一般在循环结构内部设置条件,满足条件时通过跳转结构跳出循环。

- 跳转到指定位置:用于在程序中实现指定位置之间的跳转。

你可以在程序的任意位置插入标记,然后使用跳转结构指定要跳转到的标记位置。

LABVIEW深入探索之布尔控件与事件结构

LABVIEW深入探索之布尔控件与事件结构

LABVIEW的布尔控件是极富特色的,除了丰富的外观设计外,更为重要的是它的六种不同的机械动作,这是其它编程语言不存在的,对于我们正确使用布尔控件是非常重要的,它特别强调布尔值改变的时刻,这和物理世界的许多现象是相符的。

六种不同的机械动作分为上下两组,上面三种布尔控件的值改变时刻之与鼠标的按下和释放有关,也就是说改变的时刻完全是由鼠标决定的。

下面的一组则不同,改变的时刻是由鼠标和软件读取控件的时刻共同决定的。

上图中,m代表鼠标的动作,v代表值改变的时刻,RD代表软件读取的时刻,我们今天要讨论的布尔控件的机械动作和事件结构之间的关系,对于不同机械动作的含义不做详细分析。

一、单击时转换第一行左数第一个图标,单击时转化,每次单击的时刻,就是布尔状态的改变时刻,与鼠标何时释放和软件是否读取布尔控件没有关系,我们常用的灯开关就是这种方式。

事件结构中,对于鼠标动作,提供多种事件,比如鼠标进入、鼠标离开,这两个事件并不影响布尔控件的动作。

我们重点讨论鼠标按下、鼠标释放和值改变事件。

从图标可以推测出,次序应该是这样的,鼠标按下---》布尔值改变---》鼠标释放,我们可以验证一下,下面我们使用了NI公司最新的桌面跟踪工具包(Desktop Execution Trace Toolkit),通过这个工具包,很容易跟踪鼠标动作的次序。

上面的程序框图中,鼠标按下通知事件应该是最先发生的,通过通知事件可以决定鼠标消息是否需要进一步处理,看一下这几个事件的执行次序。

鼠标事件的相应次序是:鼠标按下--》值变化---》鼠标释放,使用单击时转换机械动作时,采用鼠标按下事件或者值变化事件处理布尔控件是最合适的,但是显然不应该使用鼠标释放事件来处理,因为鼠标释放的时刻由用户决定,与希望改变的时刻是不相符的。

二、释放时转换第一行第二个图标,这种机械模式与单击时转换不同,值改变的时刻由鼠标抬起的时刻决定。

事件的产生次序是:鼠标按下---》鼠标释放---》值改变,所以这种方式的事件处理应该放在在鼠标释放或者值改变事件中。

【LabVIEW】程序结构

【LabVIEW】程序结构

【LabVIEW】程序结构(包括:while循环、For循环、事件结构、条件结构、公式节点)1、while循环LabVIEW 在执⾏While循环时,如果⽤户没有给它设定循环时间间隔,那么它将以CPU的极限速度运⾏。

按下Ctrl+Alt+Delete 快捷键打幵任务管理器,可以看到它⼏乎将CPU全部利⽤,正常情况这样做⽐较危险,因为这样可能会导致整个LabVIEW 程序看上去跟“死掉” ⼀样。

在很多情况下我们没有必要让 While 循环以最⼤的速度运⾏,所以最好给 While 循环加上时间间隔。

有两种⽅法:⼀种是在每个循环中添加⼀个等待时间,只有在等待完毕后才运⾏下⼀个循环。

另⼀种⽅法是使⽤定时循环(Timed Loop)。

2、事件结构Labview 提供了事件结构,即仅当 “事件” 发⽣时,程序才作相应的响应。

通过事件结构,程序可以变得很简单,并降低CPU利⽤率。

当多个事件发⽣时会形成事件队列,直到每个事件对应的代码都被执⾏为⽌,因此不会有事件被漏掉的情况。

注意:事件结构必须放在 While 循环中,否则没有意义,因为当⼀个事件完成后,程序需要去等下⼀个事件的发⽣。

在跟⽤户进⾏交互的时候,尽量使⽤事件结构。

3、条件结构(1)当条件结构有多个分⽀时,必须设置默认分⽀,否则程序⽆法执⾏。

(是条件结构不是层叠顺序时)(2)隧道在条件结构⼀个分⽀的边框上创建输出隧道时,其他分⽀边框上也会出现输出隧道。

只要有⼀个输出隧道没有连线,则条件结构每个分⽀边框上的输出的隧道都显⽰为⽩⾊正⽅形。

隧道可使⽤数据类型的默认值,不是每个速调都必须连线。

在条件结构上右键单击输出隧道,从快捷菜单中选择未连接时使⽤默认,这样所有未连线的隧道都将使⽤隧道数据类型的默认值。

索引隧道,⼀个循环外的数组通过索引隧道连接到循环结构上,隧道在循环内⼀侧会⾃动取出数组的元素,依顺序每次循环取出⼀个元素。

⽤索引隧道传出数据,可以⾃动把循环内的数据组织成数组。

LabVIEW技巧系列(一)——事件结构

LabVIEW技巧系列(一)——事件结构

LabVIEW技巧系列(一)——事件结构
事件结构,是LV编程结构的精髓所在。

它类似于单片机的中断功能,优
点在于不占用CPU资源。

比如按键按下串口发送数据,以及设置键盘快捷键
等等功能,事件结构比查询结构要节省很多系统资源。

下面我介绍一下利用事件结构的关键点,基础的自己去看帮助吧。

1,关于事件结构超时连线的问题:事件结构有一个超时事件的输入,当不连接时代表永不超时。

这点要十分注意,因为有时候你的事件就够会和其他结构放在一个while循环里,比如下图:
我们理想的情况是,其他服务程序正常循环运行(小灯闪烁),而鼠标按下后,处理事件结构。

但是如果这样写的话,由于事件结构永不超时,while循
环只会运行一次,只有当鼠标按键按下后,才会开始第二次循环。

这个程序的运行结果是,按一下鼠标,小灯变化一次。

要解决这个问题有两个办法:一个是给事件结构的延时输入处添加延时时间,比如5ms,这样循环就会5ms运行一次,不会影响其他服务程序的正常运行。

二个就是把其他服务程序放到另外一个while循环中,事件结构单独一个循环。

个人建议选择第二个方法。

2,关于事件结构软触发的问题:前面板有一个按钮,按下后触发很简单,
也很常用。

不过有时候要涉及到软触发的问题,就是利用程序(而不是前面板的控件)去触发一个事件。

先看下面这个例子:
“服务程序”软件改变软触发的值,我们的理想目标是,每次改变服务程序的
值为真时,标志小灯会改变一次。

但是实际程序运行结果是,无论按多少次,小灯都不变。

因为直接赋值只能改变变量的值,而不能引起次变量的事件触发。

LabVIEW的程序结构

LabVIEW的程序结构



在层叠式顺序结构的边框上面右击,选择Add Sequence Local即 可在当前帧创建一个顺序局部变量端口。

将本帧中的数据连接到该局部变量端口,该数据就可传到后面的 帧,该数据不会作用到它前面的帧。
如下图示意了层叠式顺序结构通过局部变量传递数据的 情况。在标识是1号帧的一个数据传递到标识是2号的帧 进行“或”运算,0号帧不能使用该数据。
下面是用移位寄存器(左图)和反馈节点(右图)实现 a++的框图程序。
2 While循环 For循环和While循环的区别:
For循环要执行预先指定的循环次数。
而While循环只有在条件端口接收到的值为 False(or:True)时才停止循环。While循环不必知道循 环次数。 While循环不满足条件也要执行1次。 For循环当N<1时1次都不执行。
在message数据端口新建一个常量,输入“超时或单 击了OK按钮”。
在超时端口连接值为5000的一个数字常量。
运行程序,如果单击了“OK Button”按钮或等待5秒都 会显示出对话框“超时或单击了OK按钮”。
法2:
在事件结构边框的快捷菜单中选择Add Event Case…来 创建事件结构的一个分支 。 在弹出的对话框中,选取“EventSources”事件源窗口 中的“OK Button” 。并在“Event”事件窗口中选择 “Value Change” 。 后面的设置与法1类似。
超时端口,默认
值为-1,表示无 限等待 。
事件数 据端口
结构框
2.事件结构的使用
可有一个或多个子图形代码框,该图形代码框可以设置为响应多 个事件。 右击事件结构边框,从弹出的快捷菜单中选择Edit Events Handled by ThisCase…,这时将弹出编辑事件对话框。 显示当前建立的事件, 默认“Timeout’事件。 增加事件 删除事件

Labview【事件结构】

Labview【事件结构】

Labview【事件结构】
帮助⽂档
1.简单程序例⼦
单击确定,计数加⼀。

单击停⽌,程序停⽌执⾏。

运⾏结果:
2.步骤
创建while循环,添加循环终⽌条件端⼦,添加定时器;检测是否单击了确定按钮;
添加事件结构,给超时端⼦赋值,超时事件中不⽤编辑程序:表⽰超时后不执⾏任何操作;
事件结构框右键“添加事件分⽀”:
选择事件源与事件:
在事件列表中选择事件分⽀进⾏编辑:
值加⼀操作:
给计数值赋初值0,应⽤顺序结构,⼀帧⼀帧的执⾏;
3.创建计数值局部变量⽅法
变量使程序在多个地⽅对同⼀个控件进⾏读写操作。

法⼀:直接右键创建
法⼆:函数选板局部变量
列表选择:。

LabVIEW中的事件驱动编程和状态机设计

LabVIEW中的事件驱动编程和状态机设计

LabVIEW中的事件驱动编程和状态机设计LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种图形化编程环境,用于快速开发测量、控制和监视应用程序。

在LabVIEW中,开发人员可以利用事件驱动编程和状态机设计来构建复杂的应用程序。

事件驱动编程是一种程序设计范型,其中代码的执行是由系统内部或外部事件的发生触发的。

在LabVIEW中,开发人员可以通过将控件的事件与程序的功能绑定在一起,实现事件驱动编程。

例如,当用户单击按钮或更改文本框的值时,相应的事件将被触发,并调用与该事件相关联的代码。

在LabVIEW中,通过使用事件结构,开发人员可以轻松地识别和响应控件的事件。

事件结构是一种用于处理特定事件的结构化编程元素。

通过将控件的事件与事件结构中的不同事件框架关联,在事件发生时,相应的事件框架将被执行。

这种事件驱动的编程方式使得LabVIEW的应用程序可以实时响应用户的操作,提供更好的用户体验。

与事件驱动编程相比,状态机设计是一种用于组织和控制程序行为的方法。

状态机是一种具有不同状态的抽象模型,每个状态都对应于程序的一种行为。

在LabVIEW中,通过创建状态机图表和状态枚举,开发人员可以轻松地实现状态机设计。

状态机图表通常由多个状态框和转换线组成,每个状态框表示一个程序状态,而转换线表示状态之间的转换条件。

在LabVIEW中,状态机图表可以通过使用Case结构和条件程序来实现。

通过将不同状态的代码放置在不同的Case中,并使用合适的条件来控制状态之间的转换,状态机设计可以实现复杂的程序逻辑和流程控制。

总结来说,LabVIEW中的事件驱动编程和状态机设计为开发人员提供了强大的工具,用于构建灵活、可靠和易于维护的应用程序。

通过合理的利用这些技术,开发人员可以实现高效的应用程序开发,并提供出色的用户体验。

无论是开发测量应用、控制系统还是数据处理应用,LabVIEW都是一个强大的工具,值得开发人员深入学习和应用。

labview的事件结构的用法

labview的事件结构的用法

labview的事件结构的用法
LabVIEW的事件结构是一种特殊的程序结构,它可以让程序在等待用户输入或系统事件时暂停执行,直到事件发生后再继续执行。

事件可以是用户交互、数据输入、系统消息等,都可以被事件结构捕捉。

使用事件结构可以增强程序的交互性和灵活性,使程序能够更好地响应用户操作和外部事件。

事件结构包含一个或多个事件框,每个事件框都可以捕捉一个特定类型的事件。

当事件发生时,事件结构会自动跳转到相应的事件框,执行相应的代码,然后等待下一个事件的到来。

事件结构还可以设置超时时间,当等待事件的时间超过设定的超时时间时,事件结构会自动退出等待状态,进行下一步操作。

LabVIEW的事件结构还支持多个事件的并发处理,不同的事件框可以同时处于等待状态,当事件发生时,相应的事件框会立即响应,执行相应的代码,而不影响其他事件框的等待状态。

在LabVIEW中,事件结构可以用于各种应用场合,比如图形界面、数据采集、通信等。

通过事件结构,程序可以更好地与用户交互,响应外部事件,增强程序的实用性和可靠性。

- 1 -。

labview的事件结构的用法

labview的事件结构的用法

labview的事件结构的用法LabVIEW是一款强大的图形化编程软件,具备强大的数据采集和处理的能力,广泛应用于自动化、监控、控制等领域。

其中,事件结构是LabVIEW中最常见的流程控制结构之一。

本文将围绕事件结构的用法进行详细阐述。

事件结构是LabVIEW中的一种流程控制结构,它的主要功能是在某个事件发生时,执行相关的代码。

在实际应用中,事件结构通常用于响应用户的输入、硬件设备的触发等事件。

具体来说,事件结构可以分为两个主要部分:事件源和事件处理程序。

首先,需要明确的是,事件结构的建立需要先确定事件源,也称为该事件的产生者。

常见的事件源包括面板上的控件、VI的输入和输出、硬件设备和文件等。

选择合适的事件源很关键,因为它决定了事件结构的执行时机。

其次,需要编写相应的事件处理程序,即在事件发生时,要执行的程序段。

LabVIEW提供了许多已经编写好的事件处理程序,也可以根据需要编写自己的事件处理程序。

事件处理程序一般包括以下几个基本步骤:读取事件数据、执行相应的操作、更新界面或数据等。

不同类型的事件处理程序细节略有不同,但总体逻辑相似。

接下来,我们来看一下事件结构的具体用法。

1.使用事件结构实现面板控件的响应使用事件结构可以实现对面板控件的响应。

例如,我们要在按下按钮时执行某个操作,只需要在事件结构中选择该按钮控件作为事件源,然后编写相应的事件处理程序即可。

这样,只要用户按下该按钮,就会自动触发相应的事件处理程序。

2.使用事件结构实现VI的响应除了对面板控件进行响应外,事件结构还可以实现对整个VI的响应。

在新建事件结构时,可以选择VI作为事件源,然后编写响应程序。

这样,只要该VI被调用,就会自动触发相应的事件处理程序。

3.使用事件结构实现硬件设备的响应通过LabVIEW,可以方便地实现与硬件设备的交互。

在新建事件结构时,可以选择硬件设备作为事件源,然后编写响应程序。

这样,当硬件设备产生特定的信号时,就会自动触发相应的事件处理程序。

labview第四讲 程序结构

labview第四讲  程序结构

优点: 把每个帧平铺开来比较直观,方便代 码阅读,不需借助局部变量这种机制在 帧之间传递数据。 缺点:浪费空间。
例:求循环时间
四、公式节点
通过公式节点,用户可以实现复杂的数学
公式,还可以通过文本编程写一些基本的
逻辑语句,如if…else、case、while循环
之类的语句,弥补了图形化开发语言相对
(三)全局变量 与传统编程语言中的全局变量类似, 可以在不同的VI之间进行数据传递。 1、创建 2、属性:读和写 3、使用(举例)
4、特点 (1)以独立文件的形式存在 (2)一个全局变量中可以包含多个对 象,拥有多种数据库类型 (3)与子VI不同,不能进行编程,只 能用于简单的数据存储。 (4)速度快 (5)其中的数据可以分别访问
Local variaval
3、本地变量的属性: 读(Read)和写(Write) 4、使用 前面板对象的本地变量相当于其端口 的一个拷贝,它的值与该端口同步。
举例: 例1、用一个布尔开关同时控制两个循环
例2、给一个控制赋值,从一个指示中读 出数据。
例3、在顺序结构中的使用:创建一个 VI, 计算生成等于某个给定值的随机数所需 要的时间。
例1:用While循环
创建一个可以产生 并在图表中显示随 机数的VI。 前面板 有一个控制旋钮可 在0到10秒之间调 节循环时间,还有 一个开关可以中止 VI的运行。学习怎 样改变开关的动作 属性,以便不用每 次运行VI时都要打 开开关。
随机信号 1.0 0.8 0.6 0.0 0.4 0.2 0.0 0 1023 10.0 2.0 循环延时 4.0 6.0 8.0
(二)本地(局部)变量 相当于传统编程语言中的局部变量,可以 在同一个程序内使用。 1、引入理由: (1)每个控制或指示的数据端口只有一 个; (2)需要在同一个VI的不同位置多次为 指示赋值;或多次从控制中取出数据;或者 为控制赋值,从指示中取出数据。

labview从入门到出家4--用事件结构实现运算功能

labview从入门到出家4--用事件结构实现运算功能

labview从⼊门到出家4--⽤事件结构实现运算功能使⽤事件结构可以快速定位响应界⾯的操作事件,如按下,拖动,双击的事件。

基本上我们所要实现的所有功能,都可以通过条件结构+事件结构去实现,⽐如后⾯进阶篇将会讲到的状态机就是通过条件结构和事件结构组成的。

⼀个好的状态机可以帮助我们搭建⼀个好的程序框架,这将⾮常有利于我们以后写⼀些⼤型程序。

在此前,我们先⽤之前的加减乘除运算熟悉⼀下事件结构。

1、同样的,按上⼀章节的操作,或者直接拷贝上⼀章的程序。

新建⼯程->新建calc主VI->新建⼦VI,这⾥把主VI打回原型,把之前的条件结构减掉(其实就是⽤事件结构代替⾥⾯的条件结构,但只是介绍事件结构的使⽤,不是说事件结构可以取代条件结构)。

2、添加事件结构我们可以看到事件结构的第⼀个默认事件是超时事件(⽬前只有⼀个事件),左上⾓那个沙漏状的是超时时间设定,相当于单⽚机⾥⾯的定时中断,我们后⾯可以右键新建⼀个数值常量⽤于设定超时时间。

如果没设定超时时间,则在没有其他事件产⽣或触发前,整个while循环就卡在超时事件这边等待超时事件的发⽣,因为没有设定超时时间,所以程序⼀直等待,不响应事件之外的其他操作。

只有⼀个超时事件3、添加“布尔”按键的事件,⿏标移到事件结构上⽅的事件显⽰图标,右键选择“添加事件分⽀”。

选择布尔,选择值改变,点击确定就添加了我们的布尔按键的事件了。

⿏标点击事件结构上⽅的⿊下三⾓,显⽰有超时和布尔值改变两个事件分⽀,我们选中布尔值改变的事件分⽀,在该分⽀添加相关的程序逻辑。

4、将上⼀次章条件结构中的程序直接拷贝或者重新编写⾄事件分⽀中5、运⾏程序试⼀下功能(后⾯会出⼀章讲程序调试操作,我们到时候可以⽤调试⼯具查看事件功能的响应情况)。

我们发现基本功能和上⼀章的⼀致,但是会发现⼀个问题,点击退出按键的时候界⾯不响应退出的功能。

这时因为while循环中我们添加的是事件结构,也就是程序只有识别到事件发⽣时,才会执⾏⼀次while循环,没事件发⽣的话,则不会运⾏其他操作,也就不响应按键的执⾏了。

LabVIEW程序设计模式(四)—状态机和事件结构的结合

LabVIEW程序设计模式(四)—状态机和事件结构的结合

LabVIEW程序设计模式(四)—状态机和事件结构的结合上两节分别解决了基本状态机的第(1~5)个问题,但是是否具备一种模式能够综合队列型状态机模式和用户界面事件型模式的优点呢?这样可以同时避免基本状态机的第(1~5)个问题。

答案是肯定的,本节将介绍如何将状态机与事件结构结合起来形成一种新的、稳定的模式。

状态机模式的基本构成元素是while 循环和case 结构,而事件结构模式的基本构成元素是while 循环和event 结构,因此新的模式应该由while 循环、case 结构和event 结构组成。

而while 循环的目的是为了保证程序的持续运行,因此必须在最外层,这样就只剩下了图20 所示的两种组合方式。

在第一种方式中,每次循环的运行需要经过一个事件结构才能够实现case 中各个分支的运行,那么到底需要多少个分支呢?一般而言不同的事件都会有不同的事件处理函数(这些函数可以在case 结构中共用),显示这是无法满足要求的,它从本质上而言仍然是一种事件结构。

在第二种方式中,程序的主体是一个状态机结构,不同的是在某一个状态分子中有一个事件结构。

我们可以回忆状态机模式中的空闲Idle 状态,这正是长时间占用CPU 资源的源头,如果在Idle 中加入一个事件结构后就有效地规避了这个问题。

图20 三种结构的组合方式因此图20 中的第二种结构综合了状态机和事件结构的优点,有效地克服了基本状态机的第(1~5)个问题。

此外,在【应用2_自动贩卖机】例程中,按钮1USD、2USD 和5USD 的作用是相同的,唯一不同的是它们的代表的币值不同。

如果我们希望系统共用币值相加这个功能,即当这三个按钮任何一个被按下后都调用同一个函数(该函数的功能是将系统中原来的货币值与新加入的币值相加得到新的值)。

这样,需要有一种途径把1USD、2USD 和5USD 代表的币值作为参数传递给函数。

图21 所示为带参数的状态机结构,在消息队列的状态机模式中,加入了一个变体型的变。

LabVIEW程序设计模式(四)—状态机和事件结构的结合

LabVIEW程序设计模式(四)—状态机和事件结构的结合

LabVIEW程序设计模式(四)—状态机和事件结构的结合LabVIEW程序设计2009-05-04 14:25:19 阅读497 评论0 字号:大中小订阅上两节分别解决了基本状态机的第(1~5)个问题,但是是否具备一种模式能够综合队列型状态机模式和用户界面事件型模式的优点呢?这样可以同时避免基本状态机的第(1~5)个问题。

答案是肯定的,本节将介绍如何将状态机与事件结构结合起来形成一种新的、稳定的模式。

状态机模式的基本构成元素是while循环和case结构,而事件结构模式的基本构成元素是while循环和event结构,因此新的模式应该由while循环、case结构和event结构组成。

而while循环的目的是为了保证程序的持续运行,因此必须在最外层,这样就只剩下了图20所示的两种组合方式。

在第一种方式中,每次循环的运行需要经过一个事件结构才能够实现case中各个分支的运行,那么到底需要多少个分支呢?一般而言不同的事件都会有不同的事件处理函数(这些函数可以在case结构中共用),显示这是无法满足要求的,它从本质上而言仍然是一种事件结构。

在第二种方式中,程序的主体是一个状态机结构,不同的是在某一个状态分子中有一个事件结构。

我们可以回忆状态机模式中的“空闲Idle”状态,这正是长时间占用CPU资源的源头,如果在Idle中加入一个事件结构后就有效地规避了这个问题。

图20 三种结构的组合方式因此图20中的第二种结构综合了状态机和事件结构的优点,有效地克服了基本状态机的第(1~5)个问题。

此外,在【应用2_自动贩卖机】例程中,按钮1USD、2USD和5USD的作用是相同的,唯一不同的是它们的代表的币值不同。

如果我们希望系统共用“币值相加”这个功能,即当这三个按钮任何一个被按下后都调用同一个函数(该函数的功能是将系统中原来的货币值与新加入的币值相加得到新的值)。

这样,需要有一种途径把1USD、2USD和5USD代表的币值作为参数传递给函数。

虚拟仪器-第4章 LabVIEW的程序结构

虚拟仪器-第4章 LabVIEW的程序结构

数据隧道
条件结构内部与外部之间的数据也是通过隧道来交换传递的。 向条件结构边框内输入数据时,各个子程序框图连接或不连接这个数 据的隧道都可以。从条件结构边框向外输出数据时,各个子程序框图都必 须为这个隧道连接数据,否则隧道图标是空的,程序也不能运行。 如果允许没有连线的子程序框图输出默认值,可以在数据隧道上右击, 在弹出的快捷菜单中选择“未连线时使用默认”命令,在这种情况下,程 序执行到没有为输出隧道连线的子程序框图时,就输出相应数据类型的默 认值。
【实训练习】
用条件结构来实现两个数的加、减、乘、除四则运算,要 求用组合框作为条件结构的选择器。
4.3 顺序结构
LabVIEW作为一种图形化的编程语言,有其独特的程序执行顺序——数据 流执行方式,数据流经节点的动作决定了程序框图上VI和函数的执行顺序。 但在实际中希望节点按一定的次序执行,这就需要引入顺序结构执行。 LabVIEW顺序结构的功能是强制程序按一定的顺序执行。
种变量的操作方法
第4章 LabVIEW的程序结构
程序结构对任何一种计算机编程语言来说都是十分重要的,它控制整 个程序语言的执行过程,一个好的程序结构,可以大大提高程序的执行效率。 LabVIEW作为一种图形化的高级程序开发语言,执行的是数据流驱动机制, 在程序结构方面除支持循环、顺序、条件等通用编程语言支持的结构外,还 包含一些特殊的程序结构,如事件结构、使能结构、公式节点等等。
条件接线端是一个布尔变量,接入布尔 值用于控制循环执行。条件接线端有两种 使用状态。
循环框架 为真时停止
计数接线端 条件接线端
为真时继续
与For循环是在执行前检查是否符合条件不同,While循环是在执行后再检查条 件端子,因此,在While循环的执行流程中,循环框架中的代码至少执行一次。

LabVIEW事件结构

LabVIEW事件结构

事件分支标签
事件数据节点
图 1 事件结构
事件过滤节点
用户界面事件分为消息事件和过滤事件两种。
1
LabVIEW
LabVIEW 中级教程
消息事件
消息事件指一个用户的行为已经发生,使用消息事件来反馈一个已经发生的事件,
并且 LabVIEW 已经对它迚行了处理。例如,“鼠标按下”就是一个消息事件,图

添加事件分支,事件源选择“本 VI”,事件选择“键按下”。
使用一个显示控件查看按下“↑、←、↓、 →”键所分别对应的扫描码。
添加条件结构,为“↑、←、↓、 →”添加不同的条件分支(扫描码作为判 据),设置不同的字符串作为“按键记录”的输出,并删除上个步骤中创建是显示 控件。
3、使用过滤事件,实现程序运行时,前面板一直保持打开的功能。
2 中的事件结构的分支程序实现了用户用鼠标点击停止按钮,按下后停止程序的功
能。这个事件是在用户释放鼠标以后 LabVIEW 迚行处理的。





图 2 消息事件
过滤事件
过滤事件在用户行为发生之后,LabVIEW 处理该事件之前先告知用户,由用户来 决定程序接下来如何处理事件,有可能处理的方式与默认的处理不同。过滤事件有 什么好处?使用过滤事件以后,用户可以随时按需要修改程序对事件的处理,甚至 可以完全放弃该事件,而对程序不产生影响。例如:“前面板关闭?”就是一个过 滤事件(过滤事件后面都有一个?)。图 3 中的事件结构实现放弃对“前面板关 闭?”这一事件的响应,从而将这一事件过滤。
5

“轮询”的方式来检测事件的发生,但这样会大大消耗 CPU 的使用时间,不利于

处理复杂、多线程的程序。因此,事件结构允许将 CPU 的使用降低到最小,但又
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

labview控制程序流程——labview事件结构
1 事件结构及它的图形化表示法事件被用来通知用户有异步活动发生。


形化语言的事件响应包括:用户界面事件、外部I/O 事件和程序其它部分的事件。

对事件的处理程序也被称为:事件驱动程序。

事件驱动程序可以分为若干
个分支,每个分支处理不同的事件响应。

所以对事件的响应结果也可以控制程
序的流程。

事件驱动机制来自于可视化的操系统,可视化操作系统对用户事件
提供了简洁、有效的响应方式,最常见的事件来自于鼠标和键盘。

虚拟仪器借
助于操作系统的事件处理机制实现了图形化语言的事件响应能力。

在没有引入
事件结构之前,LabVIEW 是借助于轮询的方式来查询用户操作,由于轮询的方
式会占用一定的CPU 资源,甚至可能遗漏事件,所以这种处理方式并非理想。

事件结构的出现避免了对CPU 资源的占用,同时也避免了事件的遗漏。

事件
结构在函数选板》编程》结构子选板中可以找到,并可以将其直接拖拽到程序
框图中,图形化表示的事件结构,参见下图。

图 1 图形化的事件结构与Case 结构和循环结构类似,事件结构也包含了一个主框架,这个框架内将用来放置
事件处理的事件驱动程序代码。

如果事件处理任务众多,会有众多事件分支存在,在结构上类似Case 的多帧结构(选择器标签)。

当在程序框图上拖放一个
事件结构时,我们只能看到上图所示的一帧已经预先注册的超时事件(Timeout),超时事件分支。

它具有定时延迟的基本功能(不包括While 循环),参见下图。

图 2 具有定时延迟的基本功能当然也可以采用另一种表示方法,参
见下图。

图 3 利用事件结构内部节点获得中止时间通过这个例子也好理解内部
节点中时间的含义(是事件响应的停止时间)。

超时事件超时事件是一种特殊
的事件,当然也可以看成是默认的事件分支。

如果存在其它事件源时,超时事
件完全可以被忽略或取消。

看下面一个例子。

图 4 仅有的两个事件之一超时事。

相关文档
最新文档