labview事件结构浅析

labview事件结构浅析
labview事件结构浅析

https://www.360docs.net/doc/4213551453.html,/forum.php?mod=viewthread&tid=207837

使用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循环,无论有多少事件发生只能对第一个发生的事件进行处理,处理完后程序将退出事件结构。

菜单选项事件结构实例

2011-11-11 09:50 上传下载附件(8.79 KB) NI USB-9219是一款4通道通用C系列模块,专为多功能测试而设计。USB-9219能够测量传感器中的多种信号,如压力计、RTD、热电偶、测压元件和其他需要供电的传感器。由于通道接受单独选择,4条通道可以分别进行不同类型的测量。测量范围随测量类型而异,包括±60 V最大电压范围和±25 mA最大电流范围。

第1步、创建一个项目:综合参数测量仪

按照我的设计习惯,首先在桌面上创建一个新的文件夹,命名为《综合参数测量仪》。然后,打开、运行LabVIEW开发环境,并选择开发环境中的:新建》项目。

此后,在“项目浏览器”就可以看到一个新建的项目:"未命名项目1"。单击项目浏览器:文件》保存,并将该项目命名为:“综合参数测量仪”后,存放到桌面上的《综合参数测量仪》文件夹中。

此时,项目创建完毕。

第2步、创建一个主vi:综合参数测量仪.vi

2011-11-11 09:41 上传下载附件(14.71 KB) 打开刚刚新建的“综合参数测量仪”项目,然后用鼠标右击该项目中的”我的电脑“选择:新建》VI,即创建了一个新的vi。

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

主vi即宣告创建完毕。如例图所示。

第3步、设置“综合参数测量仪.vi”的属性

2011-11-11 09:41 上传下载附件(20.2 KB) 打开刚刚创建的“综合参数测量仪.vi”,用鼠标点击:文件》VI属性,该vi的属性对话框弹出,如例图所示。

也就是设置主vi的属性。

2011-11-11 09:41 上传下载附件(19.26 KB) 在“类别”窗口选择属“窗口外观”,设定:“窗口标题”和“自定义”选项,见例图。

2011-11-11 09:41 上传下载附件(28.61 KB) 用鼠标点击上图中的“自定义”按键,进入“自定义窗口外观“对话框。按例所示的方式选择各单元参数设定后,连续点击”确定“按键后,退出”VI属性“设定对话框。

2011-11-11 09:41 上传下载附件(8.63 KB) “综合参数测量仪.vi“的属性基本设定完毕,在该vi的程序框图上,先创建一个While循环,并放置“停止”按键来控制这个While 循环。然后,点击前面版上的运行按钮,程序开始运行,如例图所示。

此时看到“综合参数测量仪”的前面版的上部保留了一个菜单栏,但内容不是我们所期望的。现在,按我们所要求的菜单栏来进行新的设计。

第4步、编辑设计菜单栏

2011-11-11 09:41 上传下载附件(17.75 KB) 在该vi的前面板选择:编辑》运行时菜单,此时系统弹出“菜单编辑器”对话框,选择“自定义”、“用户项”则可以进行自定义的菜单设计。

2011-11-11 09:41 上传下载附件(20.57 KB) 下面就来设计运行时菜单,首先在上图所示的“菜单项名称”一栏添入第一个菜单项目:“直流电压测量”,然后,点击“+”按键。

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

2011-11-11 09:41 上传下载附件(25.15 KB) 下面添置该项目下的子菜单(如果没有子菜单,

那么重复上述步骤进入下一个项目菜单的设计)。

点击“右移”键,进入子菜单选项,在“菜单项名称”一栏添入:

“60V电压测量”,点击“+”

“15V电压测量”,点击“+”

“4V电压测量”,点击“+”

“1V电压测量”,点击“+”

“125mV电压测量”,点击“+”。

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

2011-11-11 09:41 上传下载附件(29.3 KB) 在“菜单项名称”一栏添入:“直流电流测量”。然后点击“+”键以及“右移”键,继续在“菜单项名称”一栏添入子菜单名:“25mA 电流测量”。如图所示。

2011-11-11 09:41 上传下载附件(37.22 KB) 点击“+”键及“左移键”后,在“菜单项名称”一栏添入:“电阻测量”。然后,点击“+”键及“左键”,在“菜单项名称”一栏添入子菜单名:

“两线电阻测量”

“四线电阻测量”两个子菜单。

同样,设定主菜单为:RTD温度测量,子菜单为:

三线RTD温度测量

四线RTD温度测量

同样,设定主菜单为:热电偶温度测量,子菜单为:

K型热电偶温度测量

J型热电偶温度测量

S型热电偶温度测量

同样,设定主菜单为:应变测量,子菜单为:

1/4桥应变测量

半桥应变测量

全桥应变测量

至此,菜单设计完成,见例图。

2011-11-11 09:41 上传下载附件(13.69 KB) 关闭“菜单编辑器”试运行一下程序,状态见例图。

第5步、结合事件结构设计菜单选项的程序

2011-11-11 09:41 上传下载附件(14.24 KB) 首先,在“综合参数测量仪”的程序框图中的While循环里,添加一个”事件“结构。

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

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

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

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

2011-11-11 09:41 上传下载附件(16.07 KB) 此时,在运行该程序后,用鼠标点击“停止”按钮,程序将会停止下来。看来程序已经响应了这个停止运行的“事件”发生。下面我们来设计有关”菜单事件“的程序单元。

2011-11-11 09:41 上传下载附件(26.6 KB) 用鼠标右键单击事件结构的边框,会弹出一个快捷菜单,选择:添加事件分支...后会弹出一个新的“事件编辑”对话框。在此对话框中:

事件源选择:本VI;

事件选择:菜单选择(用户),则创建了用户菜单的事件分支。

在用户菜单的事件分支放置一个case结构,并将所有的子菜单名字写入case选择器标签中。同时,将“分支选择器”与“项标识符”相连。

2011-11-11 09:41 上传下载附件(20.94 KB) 此后,只要在子菜单的相应分支中放置事件处理程序(动态调用相应的子vi)既可实现菜单的事件处理。下面给出调用“60V电压测量“的简单例子。

这里动态调用的子vi,与上一节中介绍的动态调用子vi相同。动态调用的过程也一致。就不多谈了。

2011-11-11 09:41 上传下载附件(18.09 KB) 调用“60V电压测量“子vi。该子vi的程序框图见例图(示意图,只有一个While循环和停止按键)。

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

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

事件结构注意事项:

事件结构最适合人机对话界面的设计,不适合在事件处理过程中运行复杂的程序。比如:我们通过事件结构来进行动态调用复杂的运行程序,此时主程序前面版被“关闭”,直到复杂应用程序运行完成后,返回到主程序才可以响应新的事件发生(事件响应和处理的“握手”关系,换句话说,程序处理时也同时屏蔽了其它菜单事件的响应)。这样可以避免事件的“记忆”和“堆积”。

了解更多labview事件结构请进入:https://www.360docs.net/doc/4213551453.html,/topic-labviewevent.html

PCB打样找华强https://www.360docs.net/doc/4213551453.html, 样板2天出货

LabVIEW编程经验若干则

最近在编写程序时遇到一个错误,检查了很久,终于发现了原因,为了下次不再犯同样的错误,将这个现象记录下来,大家可以引以为戒。 大家都知道,数据类型有整型和浮点型。在串口或者是USB通信中,经常需要将数据强制转换成十六进制数据。笔者在最初写程序时没有注意数据类型,将十进制数据设置成双精度实数,强制转换后一直得不到想要的结果,后来将其改为无符号16位整型,结果是正确的。经过对比发现,双精度实数和无符号16位整型,即使十进制数值相等,强制转换成十六进制后结果相差很大,如图所示。 在labview中,事件结构是一个比较具有特色的一个结构,使用事件结构能够非常容易地实现其他程序运行结构不能实现的功能。一些labview的参考书告诉学习的人一般

事件结构外面要套一个while循环,可是有的时候会发生这样一种情况:在事件结构外面套上while循环后发现点击控制while循环的“退出”按钮没有用。 使用事件结构时,不要忽略事件结构左上角的连线端子。这个是“超时接线端”,是指事件结构等待事件发生的时间,以毫秒为单位,默认值为–1。如果while循环里的事件结构没有设置超时接线端,那么系统就默认为-1,事件结构一直等待事件的发生。这个时候程序就停止在等待事件发生,另外的操作都没有用。所以如果想要通过控制while循环的结束来停止程序,可行的做法是:设置超时时间,如10ms,然后增加一个“超时”的事件分支。 labview中,在字符串控件上单击鼠标右键,会发现有几种显示方式:正常显示、/代码显示、密码显示和十六进制显示。 正常显示和密码显示容易理解,在这里不作解释。笔者就用labview通过串口和USB与下位机通信时得到的一点心得与大家分享。

labview事件结构学习

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 均可让程序停止。超时超时是事件结构特有的,看名字就知道是怎么回事,即超过一定时间没有触发事件则执行超时 事件。如果超时时间设置所以如果程序事件功能不多,又需要定时执行一段代码,可以考虑用此方式来完成;如果程序操作频繁,则不建议用此事件来定时

labview结构的使用

结构的使用 本页关键词:labview labview 下载labview8.2 labview教程labview论坛labview 8.20 labview 7.0 labview 序列号labview7.1 labview 8.0 结构的使用 条件结构 条件结构是执行条件语句的一种方法。这类似于文本编辑语言中常见的If…Then…Else语句。它位于程序框图中,函数→编程→结构→条件结构。如图所示: 条件结构包含有两个或者更多的子框图,每一个子框图包含一段程序代码,由此对应一个程序分支。多个子框图就像一摞卡片重叠在一起,任何时候只有一个是可见的,执行哪一个取决于于选择端子外部接口相连的某个整数,布尔数,字符串或者枚举指,用户也可以直接输入所有可能出现的值。 1.选择端口的输入值 条件结构选择端口的输入值是由与它相连的输入控件对象决定的,数据类型可以是布尔量,整形,字符串型或者枚举型。条件结构顶部中间是各分支的选择标识,它自动调整为输入的数据类型,可以在工具模板上使用标签工具直接键入单个数值或某个数据范围。数值之间用逗号来分开,例如:“..0,2,4..10”表示选择条件为:≤0,2,4,5,6,7,8,9,10。 对于字符型和枚举型数值在条件标识上会自动加上双引号,当键入的选择器标识值与连接选择端口的数值类型不同时,选择器标识变为红色标识有错误。如图:

设置默认分支的方法是,选择一个分支结构,在快捷菜单中执行“本分支设置为默认分支”,它的作用是当选择端口的值与选择器标识值没有一个匹配时,就执行默认分支。如图: 2.条件结构的数据通道 条件结构的数据通道就是数据的输入和输出端口。将结构内外的端子相连后,边框上就会出现一个小矩形框,这就是数据通道,用于传输数据。向条件结构的一个分支提供数据时,这个数据对于所有的分支都是有效的,也就是其他分支都可以使用这个输入数据。条件结构的输出通道有些不同,当在一个分支中创建输出通道后,所有分支的同一位置都会出现一个白色小方框,它要求每一个分支都必须为这个通道予以连接,通道变为实心后程序才可以运行。也可以在通道的快捷菜单中选定“未连线时使用默认”为没有连接的分支定义一个默认输出值,这时输出通道变为灰色。如图: 条件结构应用举例 例一:

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

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

Labview执行结构:详细说明

执行结构:详细说明 While循环 与文本编程语言中的Do循环或Repeat-Until循环类似,必须满足特定条件之后,While循环才会执行其内的程序代码,如图1所示。 图1. LabVIEW中的While循环;具备While循环功能的流程图; 还有While循环功能的伪码范例 While 循环位于Structures面板上。从面板上选择While Loop之后,针对所要重复的代码区块,可用鼠标拖拽出矩 形并将之圈住。放开鼠标之后,即会有While循环圈住用户所选的区块。 只要将对象拖拽至While循环中,即可将其新增至While循环中。 只要条件接线端接收特定的布尔值之后,While循环随即执行代码 也可通过While 循环的条件接线端来处理基本错误。若将错误簇连接至条件接线端,则只有Status参数的真或假值传送至接线端。同样,Stop if True和Continue if True快捷菜单项目,将分别变更为Stop if Error和Continue while Error。 计数接线端属于输出端点,其中包含已完成的循环次数。 While循环的循环计数均从零开始。 注意: While循环将至少执行一次。 无限循环 无限循环为常见的程序错误,即无法停止的循环。若条件接线端 i为True时停止,而用户又在While循环外部放置布 尔控件接线端。一旦循环开始,控件值即成为FALSE,就会形成无限循环。

图2.While循环之外的布尔控件 因为在循环开始之前,仅读取该值一次,所以改变控件的值并无法停止无限循环。若要通过控件停止While循环,则必须在循环中配置控件接线端。若要停止无限循环,则按下工具栏上的Abort Execution按钮,即可终止该VI。 在图3中的While 循环将不断执行,直到随机数函数的输出大于或等于10.00,且Enable控件为TRUE时才会停止。当且仅当“与”函数的两个输入都为真时,函数的返回值才为真。否则,与函数将回传FALSE。 在图3中,只要随机函数不产生10.00以上的值,就会成为无限循环。 图3.无限循环 结构隧道 隧道负责为结构传送数据。 While循环边框上的实心区块即为隧道。此区块的颜色与隧道所连接的数据类型的颜色相同。在循环终止之后,随即有数据送回循环。当隧道传送数据进入循环时,只有数据抵达隧道之后,才会执行循环。 图4即以计数接线端连至隧道。直到While 循环执行完毕,隧道中的数值才会传送至Iterations显示控件。计数接线端在Iterations显示控件中只会显示最后的数值。 图4. While循环的隧道

中大型LABVIEW软件三层设计架构

通常一个VI若包含三、四十个以上的subVI(不包含LabVIEW本身在Functions中提供的VI)时,就可算是一个中大型的软件计划(software project)了。虽然比起软件工程中的一些作业环境软件(如Windows系列)或大型应用软件(如Word、Excel)等仍算是小工程,但其复杂性亦在一定程度之上,若没有事先想好在撰写程序时的一些规划与方法,想要完成这类中大型的软件绝对不是一件简单的事。尤其这类软件通常不是由一个人,而是由一个团队所共同完成的,因此整个软件的结构,就要能让团队中的每一成员都能清楚的了解,而且要够简单,才算是好的软件结构。以下将参考由Rick Bitter等人所着”LabVIEW Advanced Programming Techniques”,中之第4章的部分内容,介绍所谓软件计划中的三层式结构(the Three-Tiered Structure)的概念及其优点。 需要软件结构的主要原因,是当软件人员发展软件到某一阶段时,若没有计划或无意的创造了许多subVI,但各subVI之间有许多部分其实是重复撰写的;或各VI相互间呼叫时没有一定的纪律,使得在VI Hierarchy中所看到的各VI间的联机是错综复杂,像个盘丝洞一般,这将可能会使多人发展的软件计划增加所耗费的时间和可能出错的机会、减低程序的效率,以及增加debugging时的困难。为了改善上述的情形,所以要提倡三层式结构的概念。 三层式结构由上而下依次为:Main Level、Test Level和Driver Level,这种结构是由经验中得来的,在多人发展的软件计划中显得简单明了,当大家都能遵照这个结构来写程序时,这种结构就可以充分显现出它的优点。那这三个阶层到底如何区别呢?以通俗的比喻来说,假设我们如果要组织一个篮球队参加全国比赛,每个球员要练习基本动作及体能,如何跑、如何跳、手脚该如何放置才是正确位置等,这就相当于系统中Driver Level所做的事情;接下来,将各球员组合练习某一套防守或进攻的战术,如二三区域联防、人盯人防守,每个人该在什么位置才能正确接应等,则像是T est Level中一项项的test了;而最后比赛时,场上的战略运用,包括何时要用什么战术组合、如何更换球员、何时喊暂停、终场前是不是要故意犯规或采拖延战术等等,对照过来,就像是在Main Level中,如何将T est Level中各test 做最有效能的整合与排列组合等的工作。 简单来说,Driver Level包含了程序与所有仪器、组件、马达或其它应用软件的沟通、控制等较低阶的事情,使其可完成某一项基本的动作,例如初始化、马达走到home位置、雷射以设定的能量及频率发射光束???等。可注意到我们在这边所说的driver,并不像一般在别处所称驱动程序的那种driver那么低阶,真正最低阶的工作还是要有现成的VI来帮忙才行;在Test Level中,则是如何连接各个Driver VI的基本动作,使可做完出一套连续、有意义的流程,来执行某项测试,例如让手臂由A点走到B点,下降夹取一个螺丝,再走至C点装到某面板上,然后回到A点等待,类似这样控制一个流程的进行,便是Test VI的工作内容;Main Level则包含了使用者接口(User Interface)或称人机接口(Man-Machine Interface) ,目的是整合各项测试和例外处理(Exception Handling)等,将它们以适当的顺序及流程组合,很容易地让使用者操作。 当一个软件计划严格的遵照上述的三层结构来撰写时,最大的优点是可使程序代码的再使用(code reuse)达到最大化,在不同的T est VI中,可重复使用相同的Driver VI;而在不同程序的Main Level中,又可重复使用相同的T est VI,这将使得程序维护或修改的时间与精力大幅减少;同时当我们已有一个程序的样板(template)后,可增加软件版本更新的速度。另一个很重要的好处是,当我们在撰写某一个level中的程序时,并不需要关心在另一个level中有什么其它的程序是如何执行的,而只要专注在自己的这个level的程序上就可以了,这使得由团队来共同完成一个大型计划的工作变得容易许多。 以下将依Driver Level、Test Level、Main Level的顺序,来介绍在各level写程序时的原

labview的深入探索----labview与回调函数

labview的深入探索----labview与回调函数 回调函数是WINDOWS 编程(API 编程)的核心内容之一,在许多高级编程语 言,如VB,VC(MFC)中已经封装了回调函数,取而代之的是事件响应函数,但是,追 溯其本质,实际就是回调函数.所谓WINDOWS 回调函数,就是按照WINDOWS 的规范,编写的(CALLBACK)函数,当WINDOWS 检测到事件发生时,自动调用的 函数,WINDOWS 是通过函数指针调用的,因此,回调函数的内容是由用户决定的, 而何时调用是由操作系统决定的.我们看一下CVI 中的一般回调函数的定义int callback aaaa(int panel,int control,int event1,int event2,callbackdata *data);回调函数的参数是有操作系统提供的,比如上面的回调函数,panel---表示的哪个面板(窗口) 发生的事件control---表示的面板上哪个控件发生的事件event1 event2 表示事件 的类型和相应数据,比如鼠标坐标等回调函数是一般高级编程语言的基本功能, 但是,在LABVIEW8.X 之前是不支持的,这极大限制了LABVIEW 功能的扩展, 因为ACTIVEX,.NET 都需要回调函数.8.X 中,增加了回调函数的功能,主要用于ACTIVE,.NET 和LABVIEW 自身控件,LABVIEW 例子程序中提供了几个例子, 是有关ACTIVEX 和.NET 调用的,下面,我们通过LABVIEW 自身控件说明一下 回调函数的使用方法.在.NET 摸板中也提供了这个节点,从分类上就可以看出,注 册回调函数主要是用于ACTIVEX 和.NET 的.下面我们做一个简单的回调函数 的程序,有两个功能,返回当前值的变化和记录控件被点击的次数注册回调函数 需要三个参数:控件参考,用户参数和自动生成的回调函数,有了控件参考,我们就 可以选择事件的类型,用户参数主要是用于返回结果,因为回调函数是由操作系 统调用的,没有办法通过数据流返回处理结果.添加了这两个参数后,就可以自动 生成回调函数了回调函数如下图所示简单编程,CONTROL 的值传递给 INDICATOR 这样值变化的回调函数完成了,下面我们通过鼠标UP 事件来记录

LabVIEW事件结构的妙用

LabVIEW事件结构的妙用 首先,我们回顾一下上期节目:LabVIEW网络讲坛乊悬案迷思中关于事件结构的几个重要知识点。 事件结构的基本组成部分: 事件结构五大基本组成部分 事件结构由——事件选择器、超时接线端、事件数据节点、事件过滤节点和动态事件接线端5个基本部分组成。 事件结构编程的3条黄金原则: 在使用LabVIEW事件结构迚行编程的时候,我们应该注意:1.不要将事件结构放置在while循环乊外,而应该放置在while循环的内部;2.不要在事件结构的内部使用循环处理事件,可选择采用生产者消费者结构,在生产者循环中放置事件结构,在消费者循环中处理事件;3.记得为事件结构添加一个单独处理停止按钮的分支。 遵守以上三条原则将使我们的程序更加健壮,避免在使用事件结构的时候出现前面板死锁等问题。 过滤事件与通知事件:

在LabVIEW中,以问号结束的事件被称为过滤事件,其余的事件被称为通知事件。对于通知事件,程序可以感知事件的发生并且响应该事件,然后再处理在事件结构中定义的任务;而对于过滤事件,程序感知事件发生后,首先处理在事件结构中定义的任务,然后根据事件过滤节点的值(Discard?)来决定是否响应该事件或是否改变事件数据。 因此我们建议,在希望参与处理用户操作时使用过滤事件,因为过滤事件可以放弃事件或修改事件数据。如果仅需要知道并响应用户执行的某一特定操作,则应使用通知事件。 在本期节目中,我们着重介绍动态注册事件的用法。 静态和动态两种事件注册模式: 静态注册指定了事件结构的每个分支具体处理哪些事件。一旦VI开始运行,LabVIEW将自动注册这些事件,并且在VI运行的整个过程中无法改变事件结构所处理的事件。 而动态事件注册与VI服务器相结合,允许在程序运行时使用控件、VI或应用程序的引用来动态地指定和改变产生事件的对象。动态注册在控制LabVIEW产生何种事件和何时产生事件等方面更为灵活。 Demo 1和Demo 2帮助大家更好地理解动态注册事件编程方法。 Demo 1:动态注册事件_阿拉丁神灯.vi Demo概述: 在这个VI中,用严格自定义的方式将一个布尔类型的控件做出神灯的样子,并为这个布尔控件动态注册了”鼠标按下”的事件。这个事件执行的任务是显示神灯神仙,并弹出一个对话框。由于该事件采用的是动态注册的方式,所以可以通过一个按钮取消对该事件的注册。并通过另一个按钮再次注册该事件。这就是动态事件的使用效果,它可以在程序运行的过程中,动态地控制何时注册事件和注册什么样的事件。 程序实现:

labview事件结构浅析

https://www.360docs.net/doc/4213551453.html,/forum.php?mod=viewthread&tid=207837 使用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循环,无论有多少事件发生只能对第一个发生的事件进行处理,处理完后程序将退出事件结构。 菜单选项事件结构实例 2011-11-11 09:50 上传下载附件(8.79 KB) NI USB-9219是一款4通道通用C系列模块,专为多功能测试而设计。USB-9219能够测量传感器中的多种信号,如压力计、RTD、热电偶、测压元件和其他需要供电的传感器。由于通道接受单独选择,4条通道可以分别进行不同类型的测量。测量范围随测量类型而异,包括±60 V最大电压范围和±25 mA最大电流范围。 第1步、创建一个项目:综合参数测量仪 按照我的设计习惯,首先在桌面上创建一个新的文件夹,命名为《综合参数测量仪》。然后,打开、运行LabVIEW开发环境,并选择开发环境中的:新建》项目。 此后,在“项目浏览器”就可以看到一个新建的项目:"未命名项目1"。单击项目浏览器:文件》保存,并将该项目命名为:“综合参数测量仪”后,存放到桌面上的《综合参数测量仪》文件夹中。 此时,项目创建完毕。 第2步、创建一个主vi:综合参数测量仪.vi 2011-11-11 09:41 上传下载附件(14.71 KB) 打开刚刚新建的“综合参数测量仪”项目,然后用鼠标右击该项目中的”我的电脑“选择:新建》VI,即创建了一个新的vi。 用鼠标点击新vi的:文件》保存(命名为:综合参数测量仪.vi)。 主vi即宣告创建完毕。如例图所示。

labview程序结构的使用 (1)

百度文库- 让每个人平等地提升自我! 西安文理学院 机械与材料工程学院实验报告课程名称:虚拟仪器 实验项目:程序结构的使用(一)专业:测控技术与仪器 班级:2012级02班 姓名:罗蒙 学号:0703110217

一、程序设计思路 本次实验通过四个程序设计,来完成labview的熟悉以及子基本程序结构的创建和使用方法 1.题目要求: 认识和熟悉while循环:创建一个while循环,每隔一秒产生一个随机数,并用波形图表显示随机数历史值 设计思路: 创建while循环,随机数产生控件,波形图表,连线。 2.题目要求 认识和熟悉 For循环以及移位寄存器:创建一个For循环,产生100个10-100随机数,将数据在博兴图中显示,并求出最小值,最大值,平均值。 设计思路: 创建For循环,设定循环次数,产生随机数,使用移位寄存器存储生成数据,并对其进行比较,输出。 3.题目要求: 认识和熟悉条件结构:创建一个条件vi,要求用户输入口令,口令正确时,显示密码匹配,否则程序立即停止。 设计思路: 创建条件结构,真分支下密码匹配,显示字符串“密码匹配”,假分支下,添加程序跳出指令,程序停止 4.题目要求 创建一个虚拟温度计VI,用0~100的随机数模拟采集实际温度。要求允许用户控制温度采集的开始停止;温度控件显示模式(摄氏温度或华氏温度)有摇杆控制,用户可设置温度报警上限,如果超过报警上限,则点亮报警灯(红色)设计思路: 使用多种语言结构,实现vi的创建,实现虚拟温度计的设计。

二、前面板设计 图1-1-1 图1-2-1 图1-3-1 图1-4-1 三、程序框图设计 图1—1—2 图1—2—2

Labview常见问题及解答

1、Labview如何实现由一个事件引发其他三个事件的顺序发生,且这三次事件间的时间间隔为50ms? A:可以引用状态机来设计程序,将触发事件作为状态机的状态控制参数,后面发生的三个事件依次作为状态机的三个顺序状态,设置状态切换时间间隔为500ms. 2、labview在主程序通过局部变量不能实时看子vi的参数 A:通过局部变量只能得到子vi运行完之后的结果。可以用control reference 方式,在子vi加一个属性节点引出一个reference。 主程序里把需要显示的控件创建一个reference连到子vi的reference输入端口。另外也可以用vi server方式实现。 3、如何在一个graph或chart显示多个Y轴刻度,并且使每个通道对应每个刻度? A:在前面板上,右键点击刻度,然后选择duplicate scales,就会创建一个新的刻度。然后再点击右键,选择swap sides,就可以让刻度显示在图的左边或右边。然后右键右上角的plot legend上的曲线plot,选择Y scales然后就可以选择与该曲线相应的Y轴SCALES。多条曲线对应多条Y轴的刻度时,是同样的方法。 4、如何从labview中打开一个pdf文件? A:最简单的方法:用system exec.vi实现,在system exec.vi的command line 端口创建一个常量,输入adobe reader 的路径,再加上文件名等几个参数就可以实现上述要求。举例如下:如果要拉开位于c盘的1234.pdf文件可以这样写“C:\Program files\Acrobt 7.0\Acrobat\Acrobat.exe”/t “C:\1234.pdf” “username”其中C:\Program files\Adobe\Acrobt 7.0\Acrobat\Acrobat.exe是Adobe Reader 的安装路径,/t是命令参数,C:\1234.pdf则是要打开的文件名,最后的username 是用户的名字。 5、采集数据在graph如何显示系统时间,并且随着采集点数时间不断刷新。A:有两种方式,一种是采集波形数据然后输出给graph,在graph上选择显示绝对时间,并且去掉ignore time stamp选项。第二种是采集数据文件,然后用获取时间的vi获取当前时间,然后把采集的数据文件和当前vibuild成波形文件再给graph.graph的设置和前种方法一样。这样就可以显示出时间虽采集点不断刷新的效果。 6、report generation里的standard和HTML究竟是什么意思? A:STANDARD和HTML是LV本身就有的报表类型,无须安装其他的文本编辑工具就可以打印。STANDARD是LV内建的一种报表格式,可以打印但不能存盘,也就是说我们的报表没有电子版。HTML是网页格式的文件,可以用浏览器打开,其实相当于LV帮我们编写HTML代码,这种格式是不能直接打印的,需要先指定网页路径才能打印出来。还要注意,如果是一段程序是用了report generation的vi,在打包成exe文件或llb文件时,需要加入两个动态vi:_excel dynamic vi和_word dynamic vi。如果生成的报表采样了模板需要自支持文件

LABVIEW 中的事件结构杂谈

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及许多书中都作了详

Labview基本常见问题解答

Labview基本常见问题解答(连载一) 关键字:Labview vi graph 1、Labview如何实现由一个事件引发其他三个事件的顺序发生,且这三次事件间的时间间隔为50ms?回答:可以引用状态机来设计程序,将触发事件作为状态机的状态控制参数,后面发生的三个事件依次作为状态机的三个顺序状态,设置状态切换时间间隔为500ms. 2、labview在主程序通过局部变量不能实时看子vi的参数回答:通过局部变量只能得到子vi运行完之后的结果。可以用control reference 方式,在子vi加一个属性节点引出一个reference。主程序里把需要显示的控件创建一个reference连到子vi的reference输入端口。另外也可以用vi server方式实现。 3、如何在一个graph或chart显示多个Y轴刻度,并且使每个通道对应每个刻度?回答:在前面板上,右键点击刻度,然后选择duplicate scales,就会创建一个新的刻度。然后再点击右键,选择swap sides,就可以让刻度显示在图的左边或右边。然后右键右上角的plot legend上的曲线plot,选择Y scales然后就可以选择与该曲线相应的Y轴SCALES。多条曲线对应多条Y轴的刻度时,是同样的方法。 4、如何从labview中打开一个pdf文件?回答:最简单的方法:用system exec.vi实现,在system exec.vi的command line 端口创建一个常量,输入adobe reader 的路径,再加上文件名等几个参数就可以实现上述要求。举例如下:如果要拉开位于c盘的1234.pdf 文件可以这样写“C:\Program files\Acrobt 7.0\Acrobat\Acrobat.exe”/t “C:\1234.pdf” “username”其中C:\Program files\Adobe\Acrobt 7.0\Acrobat\Acrobat.exe是Adobe Reader 的安装路径,/t是命令参数,C:\1234.pdf则是要打开的文件名,最后的username是用户的名字 5、采集数据在graph如何显示系统时间,并且随着采集点数时间不断刷新。回答:有两种方式,一种是采集波形数据然后输出给graph,在graph上选择显示绝对时间,并且去掉ignore time stamp选项。第二种是采集数据文件,然后用获取时间的vi获取当前时间,然后把采集的数据文件和当前vibuild成波形文件再给graph.graph的设置和前种方法一样。这样就可以显示出时间虽采集点不断刷新的效果。 6、report generation里的standard和HTML究竟是什么意思?回答:STANDARD和HTML是LV本身就有的报表类型,无须安装其他的文本编辑工具就可以打印。STANDARD 是LV内建的一种报表格式,可以打印但不能存盘,也就是说我们的报表没有电子版。HTML 是网页格式的文件,可以用浏览器打开,其实相当于LV帮我们编写HTML代码,这种格式是不能直接打印的,需要先指定网页路径才能打印出来。还要注意,如果是一段程序是用了report generation的vi,在打包成exe文件或llb文件时,需要加入两个动态vi:_excel dynamic vi和_word dynamic vi。如果生成的报表采样了模板需要自支持文件里添加相应模板。 7、如果要将channel名字,测的是什么信号,采样率是多少这样的数据和采得数据一起存入文件应该用什么方式比较好?回答:推荐一种以前基本被忽略的文件结构——TDM

清华版labview教程

第二章程序结构 2.1循环结构 2.1.1While 循环 While 循环可以反复执行循环体的程序,直至到达某个边界 条件。它类似于普通编程语言中的 Do 循环和 Repeat-Until 循 环。While 循环的框图是一个大小可变的方框,用于执行框中的 程序,直到条件端子接收到的布尔值为 FALSE。 ●该循环有如下特点: ●计数从0开始(i=0)。 ●先执行循环体,而后i+1,如果循环只执行一次,那么 循环输出值i=0。 ●循环至少要运行一次。 条件端子 循环变量 图2-1While 循环示意图 练习2-1使用While循环和图表 目的:用 While 循环和图表获得数据,并实时显示。 创建一个可以产生并在图表中显示随机数的VI。前面板有 一个控制旋钮可在0到10秒之间调节循环时间,还有一个开关 可以中止VI的运行。学习怎样改变开关的动作属性,以便不用 每次运行VI时都要打开开关。操作步骤如下: 前面板 图2-2练习2-1的前面板 1.选择FileoNew,打开一个新的前面板。 2.选择ControlsoBoolean,在前面板中放置一个开关。

设置开关的标签为控制开关。 3.使用标签工具创建 ON 和 OFF 的标签,放置于开关旁。 4.选中ControlsoGraph,在前面板中放置一个波形图(是chart,而不是graph)。设置它的标签为随机信号。这个图表用于实时显示随机数。 5.把图表的纵坐标改为0.0 到 1.0。方法是用标签工具把最大值从10.0改为1.0。 6.选择ControlsoNumeric,在前面板中放置一个旋钮。设置旋钮的标签为循环延时。这个旋钮用于控制While 循环的循环时间。 流程图 7.开流程图,按照下图创建流程图。 图2-2练习2-1的流程图 a.从 FunctionsoStructures 中选择 While 循环,把它放置在流程图中。将其拖至适当大小,将相关对象移到循环圈内。 b.从Functionso Numeri c中选择随机数(0-1)功能函数放到循环内。 c.在循环中设置Wait Until Next ms Multiple函数(FunctionsoTime & Dialog),该函数的时间单位是毫秒,按目前面板旋钮的标度,可将每次执行时间延迟0到10毫秒。 d.照上面所示的流程图连线,把随机数功能函数和随机信号图表输入端子连接起来,并把启动开关和While 循环的条件端子连接。 8.返回前面板,调用操作工具后单击垂直开关将它打开。 9.把该 VI 保存为 LabVIEW\Activity目录中的Random Signal.vi。 10.执行该 VI。While循环的执行次数是不确定的,只要设置的条件为真,循环程序就会持续运行。在这个例子中,只要开关打开(TRUE),框图程序就会一直产生随机数,并将其在图表中显示。 11.单击垂直开关,中止该VI。关闭开关这个动作会给循环条件端子发送一个FALSE值,从而中止循环。 12.用鼠标右键单击图表,选择Data

LabVIEW程序设计模式(三)—用户界面事件模式

LabVIEW程序设计模式(三)—用户界面事件模式 针对基本状态机模式的第(4~5)个问题,需要对模式进行改进。本节将 一一分析这些问题对应的解决方案,并最终形成一种新的状态机模式用户界面 事件模式。程序一直在占用CPU 资源。无法响应更多的前面板事件。熟悉LabVIEW 的工程师应该能够很容易地解决这两个问题,在LabVIEW 7.0 以后的版本中提供的事件结构(Event Structure)能够让我们非常便捷地处理这两类问题。在LabVIEW 中事件结构的使用并不是一件难事,根据事件的发出源, 事件可以抽象地分为用户界面事件和用户自定义事件。相关的基本知识可以参 考有关的书籍,这里不再阐述事件结构的使用方法。图14 所示的结构称为用户界面事件模式,它能够很便捷地响应各种事件并且不占用CPU 的资源,这 是由LabVIEW 中事件结构本身的特性决定的。图14 用户界面事件模式【应用3】本例要模拟一个简单的画图板功能。它有4 个功能选项:点(point)、线(line)、圆(circle)和椭圆(oval),一次完成的绘画过程是:在画布上单击 鼠标开始绘制按住鼠标的同时在画布上拖动鼠标在画布上放开鼠标结束绘制。 程序的前面板如图15 所示,由上下两大部分组成。上面用于选择需要画图的样式,下面是画布,右上方的X 表示程序的结束。图15 画图板前面板由于系统需要响应鼠标在画布上单击、移动和释放事件,因此使用状态机模式是无法 解决的,只能通过事件结构。因此本例将使用用户界面事件模式实现上述的画 图板功能。程序的背面板如图16 所示。共有4 个事件。Panel Close?:响应前面板的X 动作,这是一个过滤性事件,当事件发生时并不真正关闭前面板而只 是停止程序的运行。Picture :表示绘画的开始。Picture :表示绘画的路径和轨迹。Picture :表示绘画的结束,此时一定要加入事件,因为当鼠标移动到画布的外面时就可以认为是绘画结束了,并不需要一定要求鼠标在画布中释放。

LabVIEW程序实例

1、Build a VI that generate a random number between zero and ten,and then divides it by an input number and diaplays the result on the front panel.If the input number is zero,the VI lights an LED to flag a “divide by zero”error 2、3-1,P43 3、Try create a VI to compute n! 4、求500个随机数中的最大值和最小值。 5、3-3,P44 6、3-4,P46 7、3-5,P49 If implement this equation using regular G arithmetic functions,the block diagram looks like the one in the following illustration.Please imolement the same equation using a Formula Node,and add event to control when the VI executes.

8、设计一个简单信号源,能选择正弦波、三角波和方波并用Waveform Graphe显示。 9、4-1,P68 10、4-5,P72 11、(1)显示一个二维数组的行数和列数(2)查找一个二维数组中最大值,以及最大值在数组中的位置。

12、5-2,P89 13、6-1,P100 14、6-3,P103 15、7-4,P120 16、7-5,P121 17、双边傅里叶

labview课程设计模拟计算器事件结构

河北工程大学 《虚拟仪器设计》课程设计报告 课题:计算器模拟 姓名:张振兴 学号: 090030301 班级:测控三班 完成日期:2012 年 6月19日

目录 一、设计思路 (2) 二、实现过程 (2) 1、面板键入感应 (2) 2、运算变量的初始化 (2) 3、无操作时的默认输出 (3) 4、数字的键入1-9的输入 (3) 5、数字0的输入 (4) 6、小数点的键入 (5) 7、结果去零操作 (5) 8、“+/-”键的设计 (7) 9、“+、-、*、/”四则运算 (7) 10、等号键 (8) 11、开方运算 (9) 12、取倒数倒数运算 (9) 13、退格键CE的设计 (10) 14、清零键C (11) 15、停止键OFF (12) 三、整体程序 (12) 四、前面板的设计排版 (12) 五、while循环中寄存器能 (13) 六、此计算器可以实现的功能 (13)

一、设计思路 完成标准型计算器的一般功能。 输入第一个数,进行存储并显示输入运算的类型并存储输入第二个数,存储并显示按“=”或则按其它运算符号“+、-、*、/”进行连续的运算,最后显示运算结果。 二、具体的实现过程 1、面板键入感应 在前面板上建立22个布尔量,其中包括0--9十个数字键,1个小数点键,4个“+、-、*、/”运算键,1个等号键,1个开方键,1个符号转换键,1个倒数键,1个清零键,1个退格键,1个退出键。如下图所示: 2、运算变量的初始化 在运行程序之前,首先对需要用到的变量进行初始化,如图所示

3、无操作时的默认输出 当键盘上的键没有任何一个按下时,系统仅执行顺序结构第一帧,系统处于初始化状态输出。 4、数字1--9的输入 以数字“1”为例,当按下数字“1”后,布尔量为值改变,进入时间结构结构,将1输出到显示中,布尔量再次改变时。(图1.4.1)若再次输入1,为避免出现01这样的字符串,先判断之前显示的数据是否为0,若为0,则直接输出1,(图1.4.2)若不为0,则将这两次输入的数据通过

相关文档
最新文档