我和LabVIEWword版——一个NI工程师十年的编程经验51-9482.一个 XControl 的实例.doc

我和LabVIEWword版——一个NI工程师十年的编程经验51-9482.一个 XControl 的实例.doc

ID:35998264

大小:54.00 KB

页数:3页

时间:2019-05-02

我和LabVIEWword版——一个NI工程师十年的编程经验51-9482.一个 XControl 的实例.doc_第1页
我和LabVIEWword版——一个NI工程师十年的编程经验51-9482.一个 XControl 的实例.doc_第2页
我和LabVIEWword版——一个NI工程师十年的编程经验51-9482.一个 XControl 的实例.doc_第3页
资源描述:

《我和LabVIEWword版——一个NI工程师十年的编程经验51-9482.一个 XControl 的实例.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、一个XControl的实例XControl与.ctl用户定义控件相比,其最大的提高就在于它不但可以定义控件的外观,还可以定义控件的行为。在XControl出现之前,同样可以在程序中编写代码,控制程序的行为。在《用XControl实现面向组件的编程》一文中提到了,这种方法在程序模块划分上有缺陷。如果用户想发布一个带有特定行为的控件也是不可能的,因为控制控件行为的代码,是同其它代码混杂在一起的。利用XControl可以解决上面提到的问题,这里以一个例子说明一下如何利用XControl实现一个有特定行为的控件。Windows风格

2、的工具条上的按钮有一个特点,就是当鼠标移动到按钮上方,按钮就会变亮或浮起。LabVIEW中默认的按钮没有这样的特性,但是实现这一点是很容易的。以鼠标移上,按钮变亮为例:在程序中,当按钮的MouseEnter事件发生时,把按钮的颜色设置为浅颜色;当按钮的MouseLeave事件发生时,把按钮的颜色设置为深色即可。现在把界面上的按钮和控制颜色的代码都封装在一个XControl中。这样,其他人在使用这个XControl时,就无需修改他的代码,而直接获得这种颜色变化的特性了。一、简单行为的XControl首先创建一个空的XCont

3、rol。图1、2:创建一个新的XControl新的XControl中有四个VI。Data.ctl定义XControl的数据类型。比如我们要做一个按钮,数据类型应该是布尔型。如果要作一个工具条,数据类型就应该是布尔型数组了。State.ctl定义XControl内部要用到的一些数据,类似于类的私有变量。我们这个简单的例子用不到任何变量,所以可以不去动它。Init.vi类似于类的构造函数。在我们这个简单的例子中也不需要去改变它。Facade.vi是最主要的VI,XControl的外观和行为都是在这个VI中定义的。Facade.

4、vi的界面就是XControl控件的外观。控制控件行为的代码也是放在这个VI的程序框图上。我们要做的是个按钮,所以就在Facade.vi的前面板上放一个按钮。如果希望用户在使用这个XControl时可以调整它的大小,在我们这个简单例子中,只要设置Facade.vi窗口尺寸属性中的“在窗口尺寸变化时,按比例调整控件大小”这个选项就可以了。对于复杂的XControl控件,要另写代码,在窗口尺寸变化后重新计算每个控件的大小和位置。图3:窗口尺寸属性设置控制按钮颜色的代码也需要放在Facade.vi中:把前文提到的按钮的Mouse

5、Enter和MouseLeave放在这里即可。具体实现方法,可以参考文章结尾给出的范例程序。二、有持续运动的XControlFacade.vi不能够持续运行,只有在有事件发生时,LabVIEW才会调用这个VI。处理完这个事件,Facade.vi就会停止运行。不要试图让Facade.vi持续运行,否则会导致整个LabVIEW被挂起。有时候,需要控件能够循环地或者持续一段时间地作一个动作。比如说,需要做一个不停闪烁的小灯。控制灯光闪烁的代码就不能够放在Facade.vi中。实现这种功能的一个方法是:把定时控制小灯颜色的代码放在

6、一个可重入VI中,通过小灯控件的引用参考来定时更改它的颜色属性。在XControl的Init.vi中把这个定时VI动态加载并以异步方式运行;在XControl的Uninit.vi中再把这个定时VI卸载即可。Uninit.vi不是一个必须的XControl功能定义VI(AbilityVI),新建的XControl没有这个VI。可以在工程浏览窗口,鼠标右击这个XControl来为它添加新的功能定义VI。范例在这里,它只能在LabVIEW8.5下打开。XControl是可以在VI的面板上放多个实例的,每个实例小灯的闪烁频率可能不

7、同。我在这个例子里,每个XControl实例都有自己的一个专用定时VI,因为这些VI是可重入的。定时的方法我采用的是加延时。我做了一下测试,发现现在的XControl有个问题,就是在程序面板上放多个XControl实例之后,定时就变得非常不准确了,小灯闪烁速度明显减慢。这也许是XControl的bug,也许是LabVIEW延时函数的问题。解决这个问题的方法就是使用一个定时VI控制所有的实例,当然这样的实现方法会比较麻烦一些。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。