LABVIEW 中的事件结构杂谈

合集下载

第4章—条件结构、顺序结构、公式节点和事件结构

第4章—条件结构、顺序结构、公式节点和事件结构

49
4.4.4. 事件结构边框上弹出的快捷菜单:
书:P123
50
4.4.5. “编辑事件”对话框:
具体介绍详
选择器标签
书:P114 图6-15 增量按钮
减量按钮
分支选择器
在该分支下执行的 框图程序
条件结构有一个或多个子框图。每个子框图都是一个执行分支, 每一个执行分支都有自己的选择器标签。执行条件结构时,与接入分 9 支选择器数据相匹配的标签对应的框图得到执行。
与C语言Switch语句相比,LabVIEW的选择结构更加灵活。 分支选择器端子的值可以为以下四种:布尔型、整型、字符串型 或者枚举型。
20
4.1.5
条件结构应用举例
目的:求一个数的平方根,若该数≥0,计算该值平方根 并将计算结果输出;若该数<0时,则用弹出式对话框报告 错误,同时输出错误代码“-999.99”。
应该如何写程序?
21
程序框图:
22
运行结果:
23
§4.2 顺序结构
在VI中,程序的运行是靠数据流来驱动的,利用数据流 机制可以实现很多顺序执行的功能。但是只有数据流控制的 顺序执行还不够,在某些复杂的情况下,需要更强的顺序执 行控制结构。引入了“顺序结构”的概念。
对于情况B:执行……
计算表达式值
……. 其他:执行……
...
语句1
语句2
语句n
语句n+1
表达式值= <常量表达式1> 时该开关合上,执行语句1
7
4.1.1 条件结构框图的创建:
创建:在函数选板编程结构中选择“条件结构”, 在程序框图上按住鼠标左键拖出条件结构框图,然 后将在该条件下执行的程序放入相应的条件结构框 图内。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

看下面一个例子。

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

labview事件结构使用方法

labview事件结构使用方法

labview事件结构使用方法在LabVIEW中,事件结构是一种可以按照事件的发生改变程序流程的数据结构,可以通过人机互动或者事件干预的方式产生事件驱动,在LabVIEW中是一种常用的数据结构,下面我就来讲解一下其具体的使用方法。

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

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

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

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

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

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

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

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

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

第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深入探索之布尔控件与事件结构

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

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

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

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

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

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

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

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

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

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

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

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

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

labview学习——生产者消费者(数据)(事件)

labview学习——生产者消费者(数据)(事件)

labview学习——⽣产者消费者(数据)(事件)其主要的模型:主要从以下⼏个⽅⾯理解:1、可重⼊性正常的labview是多线程设计语⾔,⽽我们在执⾏VI时的规则是通过VI的命名来分别调⽤实现的。

打开VI的Highlight调试⼯具,可以看出两个Wait.vi实例的调⽤并不是同时执⾏的,⽽是依次按顺序执⾏的,⾄于哪⼀个实例先执⾏是不确定的。

这是由于LabVIEW本⾝是并⾏设计的,从理论上⽽⾔,两个VI的实例是同步执⾏的,但是如果两个Wait.vi实例同时执⾏必定会产⽣参数赋值紊乱,因为LabVIEW只允许内存中存在⼀个名称的VI。

如果在⼀个顺序结构⾥要同时进⾏两个vi的调⽤,采⽤的⽅法是单击ctrl+I,在新点出来的对话框中选择执⾏框⾥边的可重⼊选择Reentrant execution,这样的话再次运⾏上述实例⽤时长为并⾏执⾏的时间。

事实上,LabVIEW的可重⼊技术相当于在原有VI的基础上产⽣了⼀个相同的副本,打开Wait.vi从标题栏可以看出VI的名称为Wait.vi:1(clone)。

同理这是由于LabVIEW中不允许内存中的VI存在同名,VI的可重⼊技术相当于产⽣了与原VI具有同样功能的新VI并且修改了该VI的命名。

在实际应⽤中,需要根据情况决定是否设置VI的可重⼊属性,灵活使⽤。

并不是需要将所有的VI都设置为可重⼊,那将占据⼤量的内存资源。

2、动态调⽤通常调⽤⼦VI有两种⽅法,⼀种是静态调⽤,直接在控制板⾥选择⼦VI的⽅法,即编译⽣成可执⾏程序后,⼦VI的代码将会被静态链接到可执⾏程序中另⼀种就是动态调⽤,指的是通过程序调⽤另⼀个程序的运⾏、停⽌、赋值和获取值。

通过程序框图-查看(菜单)-函数-编程-应⽤程序控制-通过引⽤调⽤,通过VI引⽤动态调⽤,可以保证VI在需要时才被装⼊内存,与静态调⽤相⽐节约了内存资源。

labview有多种动态调⽤的⽅式,从底层⽽⾔采⽤的是VI Server技术来实现的。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Labview事件结构

Labview事件结构

Labview事件结构例⼦,创建两个按键,当没有按下按键1时,按键2⽆法被按下并显⽰为灰⾊。

当按下按键1后,按键2允许被操作。

继续按下按键2,弹出对话框“”按下按键2“思路:利⽤顺序结构,先禁⽤按键2,并以按下按键1为事件结构的触发事件,按下按键1后,使能按键2。

以按下按键2为条件结构的触发条件,真时弹出对话框。

遇到的难点:事件结构的操作。

⾸先,我们利⽤按键属性节点中的“”禁⽤“,可以编程按键的使能和使能。

创建禁⽤节点如下,共有三个选项可以选择帮助信息:这⾥我们在顺序结构的第⼀帧⾥先失能按键2.然后第⼆帧⾥因为要以按键1按下作为触发事件,所以要⽤到事件结构。

⽽时间结构必须要搭配while循环使⽤。

这⾥要注意这样连线并不意味着就讲“按键1按下”与结束while联系起来了,还必须对本分⽀进⾏编辑!!打开后如下图所⽰我们先添加事件,然后选择事件源。

这⾥我们利⽤按键1的值改变。

这样编辑之后,由于我们没有为事件结构添加等待时间(永不超时),所以只有按下按键1之后,才会退出while循环。

进⼊下⼀帧,我们先使能按键2然后添加条件结构,添加对话框并添加⽂本。

那么整体程序框图如下学习总结:labview中事件结构与wihle循环⼀起使⽤。

由于事件源很丰富,所以事件结构常常使⽤。

在事件结构编辑事件源,并将其连接⾄while循环条件。

可以添加多个事件分⽀,⽽且可以配置结构等待事件的时间作为⼀个分⽀:超时时间等于事件结构等待⼀次事件的时间,在超时时间内没有等到事件则执⾏[超时]事件例如我们单独为超时事件这样设置⼀个分⽀,那么在2s后该分⽀⾃动赋真值给结束按钮。

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

LABVIEW中的事件结构杂谈刚开始接触事件结构时觉得它很好用,所以很喜欢用,但也引起了一些问题,就是前面板很容易就被挂起来了,就是所前面板没有响应了,很郁闷。

之后就不敢用了,很多可以用事件结构的地方都只用CASE结构麻烦的代替了~~今天被师兄那么一指点,觉得完全是委屈了事件结构啊,之前事件结构引起的问题可以很容易的解决。

方法就是设置“超时”(之前一直觉得这个东西没用的):一般情况下,事件结构是会和while循环套用的,通过不断的循环来执行不同事件源激发的事件,但如果不设置超时,也没有事件源发生,那么while循环将一直等待事件的发生而不进行循环,这样就会使得事件结构外的其他程序也不能执行,可能造成的结果就是前面板本该有反应的地方(比如变量值的变化)没有了反应。

而如果设置了超时,比如设置为100(ms),意思就是每隔100ms如果没有事件发生就超时,进行一次循环,那么事件结构外的其他程序也就得到了执行。

总结一下:如果事件结构在while循环中,而事件结构之外又有其他的程序需要执行(可能不依赖于事件的发生),那么就应该设置超时。

在事件处理过程内,如何响应前面板命令控件的命令? 我发现,在一个事件内的处理过程完成之前,系统不能响应前面板的其他命令。

系统是在事件完成之后的等待时期才响应其他前面板命令事件。

编辑事件结构对话框的下边有一个: 锁定前面板在事件分支执行完毕前。

你可这个默认选中的选项取消了,就可以实现你的“在一个事件过程处理中途响应前面板的其他命令"功能。

LabVIEW事件结构使用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开发环境,并选择开发环境中的:新建》项目。

此后,在“项目浏览器”就可以看到一个新建的项目:"未命名项目1"。

单击项目浏览器:文件》保存,并将该项目命名为:“综合参数测量仪”后,存放到桌面上的《综合参数测量仪》文件夹中。

此时,项目创建完毕。

第2步、创建一个主vi:综合参数测量仪.vi打开刚刚新建的“综合参数测量仪”项目,然后用鼠标右击该项目中的”我的电脑“选择:新建》VI,即创建了一个新的vi。

用鼠标点击新vi的:文件》保存(命名为:综合参数测量仪.vi)。

主vi即宣告创建完毕。

如例图所示。

第3步、设置“综合参数测量仪.vi”的属性打开刚刚创建的“综合参数测量仪.vi”,用鼠标点击:文件》VI属性,该vi的属性对话框弹出,如例图所示。

也就是设置主vi的属性。

在“类别”窗口选择属“窗口外观”,设定:“窗口标题”和“自定义”选项,见例图。

用鼠标点击上图中的“自定义”按键,进入“自定义窗口外观“对话框。

按例所示的方式选择各单元参数设定后,连续点击”确定“按键后,退出”VI属性“设定对话框。

“综合参数测量仪.vi“的属性基本设定完毕,在该vi的程序框图上,先创建一个While 循环,并放置“停止”按键来控制这个While循环。

然后,点击前面版上的运行按钮,程序开始运行,如例图所示。

此时看到“综合参数测量仪”的前面版的上部保留了一个菜单栏,但内容不是我们所期望的。

现在,按我们所要求的菜单栏来进行新的设计。

第4步、编辑设计菜单栏在该vi的前面板选择:编辑》运行时菜单,此时系统弹出“菜单编辑器”对话框,选择“自定义”、“用户项”则可以进行自定义的菜单设计。

下面就来设计运行时菜单,首先在上图所示的“菜单项名称”一栏添入第一个菜单项目:“直流电压测量”,然后,点击“+”按键。

项目菜单创建完成,在预览栏目中显示出第一个菜单项“直流电压测量”。

下面添置该项目下的子菜单(如果没有子菜单,那么重复上述步骤进入下一个项目菜单的设计)。

点击“右移”键,进入子菜单选项,在“菜单项名称”一栏添入:“60V电压测量”,点击“+”“15V电压测量”,点击“+”“4V电压测量”,点击“+”“1V电压测量”,点击“+”“125mV电压测量”,点击“+”。

然后点击“左移”按键,准备下一个项目菜单的设计。

如例图所示。

在“菜单项名称”一栏添入:“直流电流测量”。

然后点击“+”键以及“右移”键,继续在“菜单项名称”一栏添入子菜单名:“25mA电流测量”。

如图所示。

点击“+”键及“左移键”后,在“菜单项名称”一栏添入:“电阻测量”。

然后,点击“+”键及“左键”,在“菜单项名称”一栏添入子菜单名:“两线电阻测量”“四线电阻测量”两个子菜单。

同样,设定主菜单为:RTD温度测量,子菜单为:三线RTD温度测量四线RTD温度测量同样,设定主菜单为:热电偶温度测量,子菜单为:K型热电偶温度测量J型热电偶温度测量S型热电偶温度测量同样,设定主菜单为:应变测量,子菜单为:1/4桥应变测量半桥应变测量全桥应变测量至此,菜单设计完成,见例图。

关闭“菜单编辑器”试运行一下程序,状态见例图。

第5步、结合事件结构设计菜单选项的程序首先,在“综合参数测量仪”的程序框图中的While循环里,添加一个”事件“结构。

从图中可以看出,目前该事件结构只有一个事件源:”超时“。

用鼠标右键点击事件结构的边框,在弹出的快捷菜单上,选择:“添加事件分支…”,在编辑事件对话框中,事件源选择“控件、停止,鼠标按下事件”。

单击“确定”按键,这时就多了一个“停止”事件源。

此时,我们可以将“超时”事件删除。

并该程序进行修改,首先将“停止”按键的图标移动到While循环外,然后在该事件结构中放入一个“真”的布尔常量,连接到While循环的停止端子上,如下图所示。

此时,在运行该程序后,用鼠标点击“停止”按钮,程序将会停止下来。

看来程序已经响应了这个停止运行的“事件”发生。

下面我们来设计有关”菜单事件“的程序单元。

用鼠标右键单击事件结构的边框,会弹出一个快捷菜单,选择:添加事件分支...后会弹出一个新的“事件编辑”对话框。

在此对话框中:事件源选择:本VI;事件选择:菜单选择(用户),则创建了用户菜单的事件分支。

在用户菜单的事件分支放置一个case结构,并将所有的子菜单名字写入case选择器标签中。

同时,将“分支选择器”与“项标识符”相连。

此后,只要在子菜单的相应分支中放置事件处理程序(动态调用相应的子vi)既可实现菜单的事件处理。

下面给出调用“60V电压测量“的简单例子。

这里动态调用的子vi,与上一节中介绍的动态调用子vi相同。

动态调用的过程也一致。

就不多谈了。

调用“60V电压测量“子vi。

该子vi的程序框图见例图(示意图,只有一个While循环和停止按键)。

所有这些项目和子项目vi,都应保存在项目的目录下。

结合应用项目的设计,运行时菜单事件设计方法已经基本示意完成了(包括子vi的动态调用),只是所有子菜单中的测量程序框图都没有给出,需要读者自行设计(如果有机会可能后边还会继续介绍)。

事件结构注意事项:事件结构最适合人机对话界面的设计,不适合在事件处理过程中运行复杂的程序。

比如:我们通过事件结构来进行动态调用复杂的运行程序,此时主程序前面版被“关闭”,直到复杂应用程序运行完成后,返回到主程序才可以响应新的事件发生(事件响应和处理的“握手”关系,换句话说,程序处理时也同时屏蔽了其它菜单事件的响应)。

这样可以避免事件的“记忆”和“堆积”。

编程的主要目的是为了实现用户的某种功能,用户通过用鼠标、键盘、程序内部等触发某种程序动作,从而达到某种结果,这些操作都被称作为事件,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均可让程序停止。

超时超时是事件结构特有的,看名字就知道是怎么回事,即超过一定时间没有触发事件则执行超时事件。

如果超时时间设置<=-1,则永远也不执行超时事件,循环处于空闲等待状态。

相关文档
最新文档