微波EDA网,见证研发工程师的成长!
首页 > 测试测量 > 测试测量技术文库 > labview深入探索----xcontrol

labview深入探索----xcontrol

时间:01-09 来源:互联网 点击:

将立即退出循环。

这和一般的事件结构使用方法完全不同,一旦循环退出,整个事件检测就结束了,不会再响应其他事件了。而在XCONTROL中,这显然是不能这样做的,因为XCONTROL肯定要不断响应事件,按常规想法,它应该连接的是-1,循环永远不退出。即使永远不退出,持续检测事件,这样也是有问题的,如果有大量的XCONTROL,这将导致数量庞大的事件结构循环,这样会极大地影响程序性能。

仔细分析后,我得出结论,上面的事件结构实际上是个回调函数。

CVI的回调函数是这样定义的:

int CVICALLBACK PlotData (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2);

VC也是类似的。

它的目的是,如果面板或者面板上某个控件发生的事件,比如鼠标按下,值改变等等,将自动调用这个函数,注意是操作系统自动调用这个函数,不是用户调用的。

FACADE.VI正是这个功能,一旦XCONTROL发生任何事件,LABVIEW将自动调用这个回调函数,回调函数响应事件后,因为没有其它事件发生,会立即触发超时,导致循环结束,回调函数退出。具体过程是这样的:

XCONTROL 发生事件----》labview调用FACADE.vi--->响应事件---》超时退出

下次发生事件时重复上面的过程。

LABVIEW除了超时事件外,还自动生成了其它几个事件,可以把它们称做系统事件,对于任何的XCONTROL,这几个事件都是必须存在的。

2:Data Change事件

Data Change 事件是指前面自定义数据类型DATA的值改变了所发生的事件。

事件是如何发生的那,当你用数据流,或者局部变量以及VALUE属性节点改变了XCONTROL的值,则触发该事件。

这一点和一般的事件结构也是不同的,对于一般地控件,用局部变量或者Value属性节点是不会产生事件的,如果改变了同时需要触发事件,我们不得不用VALUE(SIGNAL)事件来人为触发。

当我们在前面板生成这个控件时,DATA CHANGE事件自动触发,尽管我们此时并未改变它的值。

3:DISPLAY STATE CHANGE----显示状态改变事件。

当你在前面板拖入(生成)这个XCONTROL的实例时,或者复制控件,以及用自定义的属节点改变控件时触发这个事件。我们可以利用这个事件来改变XCONTROL的外观特性。

4:方向改变事件

当一个XCONTROL从控制器改变成指示器或者从指示器改变成控制器时产生该事件。

利用这个结构,我们可以把指示器和控制器显示成完全不同的形状。

对于常规的控件,我们可以用鼠标右键的CAHNGE TO CONTROL和CHANGE TO INDICATOR来改变,XCONTROL也是如此。

5:Exec State Change-----执行状态改变

左侧传入的RUN MODE?为真表示运行状态,为假表示编辑状态,这个事件的基本做用是,指示器在编辑状态下是可以更改它的值的,而在运行状态下是不允许用户直接修改的,只能通过数据流或者局部变量来修改,这样,我们必须知道当前是运行还是编辑状态。

另外经过实际测试,当一个XCONTROL被拖入前面板(生成控件实例)的时候,将按照下面的次序产生事件:

调用INIT.VI---->DATA CHANGE EVENT--->STATE CHANDE EVENT

需要注意的是左侧共有四个严格类型的数据传入循环:

DATA IN---它是上面定义的DATA.CTL

DISPLAY STATE IN----它是上面定义的STATE.CTL

Container state-----包容器状态

Action--------------动作

我们看看Container State 和Action的定义


Container State 是一个严格类型定义的簇,有三个元素组成:

.Indicator ? ,boolean 用来表示当前的XCONTROL是控制器还是指示器

.Run Mode? boolean 用来表示当前的XCONTROL是处于运行状态还是编辑状态.

.RefNum refnumxcontrol自身的控件参考.

Action 也是一个严格类型的簇,有三个元素组成:

.Data Changed boolean 如果该项给定TRUE,则触发DATA CHANGE事件

.State Changed boolean 如果该项给定为TRUE,则触发Display StateCHANGE事件.

.Action Name 用户可以自己定义的字符串信息,比如我们可以指明是哪个要求触发DATA CHANGE事件的 .

接下来,我们来制作这个XCONTROL的属性和方法

我们在状态中已经定义了四个属性:1.进入标题,2.离开标题 3.进入颜色 4.离开颜色

这四个属性是子定义的属性,完成后,LV自动在属性节点中增加四个项目.属性节点一般都定义成可读可写的,根据需要,也可以定义成单向的.

当我们打开一个VI,包含XCONTROL时,XCONTROL是不允许编辑的,在调试XCONTROL的过程我们需要频繁切换XCONTROL的设计窗口和使用窗口,用上面的UNLOCK LIBARAY FOR EDITING,可以暂时启动XCONTROL的编辑,这是使用XCONTROL的窗口处于错误中断状态.


编辑完毕后,用APPLAY CHANGES TOI

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top