84.开发 XControl 1 - 设计
- 格式:pdf
- 大小:65.50 KB
- 文档页数:1
中级 23:Xcontrol 0. 什么是 Xcontrol? XControl 实质上是一个控件 (可以是显示控件,也可以是控制控件),只是这个控件的功能和 Facade 都可以被自定义.在 LabVIEW 中,选择 New…>>Other Files>>XControl 就可以生成 一个 XControl 控件,如图 1 所示.图一:创建 XControl 图二是新创建的 XControl,可以看出包含如下的 2 个 VIs 和 2 个自定义控件. (1) (2) (3) (4) Data.ctl:定义 XControl 的数据类型. State.ctl:定义 XControl 的状态(可以封装内部的数据). Facade.vi:定义 XControl 的 Facade 和功能. Init.vi:定义 XControl 的初始状态.图二:新创建的 XControl 1. XControl 视频讲解 LabVIEW 网络讲坛之名家偶得:XControl 实战(上下集) /wv/app/doc/p/id/wv-2006 本讲引入了 XControl 的概念,阐述其与普通 LabVIEW 控件的区别.着重介绍了构建 XControl 所必须的元素,并演示如何创建一个简单的 XControl. /wv/app/doc/p/id/wv-2007 在上一讲的基础上,本讲通过演示逐一介绍了 XControl 的一些高级功能和调试的 Method. 并且和大家分享一下开发 XControl 中的一些小技巧. 2. XControl 使用方法 2.1 创建 XControl Method XControl Method 允许 XControl 的用户通过编程配置 XControl.通过调用节点调 用 XControlMethod.用户调用自定义的 XControlMethod 后,LabVIEW 将调用 FacadeVI. 如由于调用了 Method 而使显示状态发生改变,则“Facade”VI 将更新显示状态,使 XControl 的 Facade 得到更新.这种情况下,“Facade”VI 将生成显示状态更改事件. 在 XControl 库中,每个 XControl Method 都由 VI 实现.图三:配置 Method 2.2 创建 XControl Property图四:创建 Property 在 XControl 中创建的 Property 和 Method 都可以通过编程调用,这就是 XControl 的一个优势所在,可以自定义控件的属性和方法节点. 2.3 编辑 Façade.vi向“Facade“ VI 添加 LabVIEW 输入控件和显示控件以创建 XControl 的前面板.根 据出现在 XControlFacade 中的输入控件和显示控件,重新调整前面板的大小.图五:Xcontrol 自带控件 Container State 簇用于提供 XControl 的实例信息.Container State 簇包含三个元 素:显示控件?、运行模式?和引用句柄. Indicator?用于确认 XControl 实例是输入控件还是显示控件. Run Mode?用于确认使用 XControl 的 VI 的状态为运行中还是空闲.运行模式?设 为 TRUE 时,所属 VI 的状态为运行中. Refnum 是仅用于查询 XControl 信息的 XControl 实例的引用. “Facade”VI 改变数据或显示状态时,应更新 Action 簇并通知 LabVIEW 上述改变. Action 簇包含三个元素-Data Changed?、State Changed?和 Action Name. Data Changed?设为 TRUE 时“Facade”VI 将改变数据输出显示控件. State Changed?设为 TRUE 时“Facade”VI 将改变显示状态输出显示控件. Action Name 命名正在执行的 Action. Action 的名称在选中 Edit»Undo 选项时出现. 3. XControl 范例——Calculator XControlXcontrol 的界面就是 Façade.vi 的界面,这里提供的范例为 Calculator XControl,其 界面如图六所示:图六 Calculator XControl 界面(Façade.vi) Façade.vi 的程序框图如图七; 采用循环事件结构处理 Xcontrol 和界面控件产生的事件, 当 Display State Change 时,更新 Xcontrol 的输出(Output String); 在其他事件分支中,如点击 Equal,需要设置 State Changed 为真,并且在该分支中更 新 Xcontrol 的输出。
开发XControl 1 - 设计XControl 是LabVIEW 8 开始出现的一个制作LabVIEW 控件的工具。
与之前的用户自定义控件相比,用户自定义控件只能定义控件的界面,而XControl 还允许通过编写代码来定义控件的行为。
因此XControl 功能更加强大。
XControl 的主要优点是可以把界面元素与相关的代码封装在一起,从而方便发布和重用这些界面组件。
XControl 也有比用户自定义控件不足的地方,它开发起来更加困难;设计不合理的XControl会导致程序更加严重的问题。
需要开发一个新的控件之前,首先要考虑一下以何种方式实现这个控件。
如果这个控件极为特殊,只会用在某个特定的程序中,那么也许没有必要将其作为单独的控件;如果这个控件需要被多次使用,那么就应该考虑把它做成可重用的独立控件。
这个控件也许不包含任何特殊行为,比如一个用于表示坐标位置的控件由两个数值控件组成,程序只是使用它的值就可以了;或者一个新型按钮,仅外观与旧按钮不同,其它行为都与传统的按钮一模一样。
这样的控件适合使用用户自定义控件来制作。
如果新的控件需要重用,行为与已有其它控件又有较大差别,那么就要考虑XControl了。
比如:制作一个新按钮,但它比传统按钮多一个状态;或者它的界面带有动画效果;制作数值类控件但是用中国本土度量单位;基于图片控件,专用于绘制某种特殊曲线等。
我们前面提到的黑白棋的控件,既有特殊界面,又有特殊行为,又可以应用于不同软件中,非常适合做成XControl。
我们先来具体设计一下这个XControl 所需的界面和行为。
它的界面部分前面已经设计好了,直接拿来用就可以了。
不过在前文提到的几个设计方案中,我个人觉得Pict Ring 数组控件的那个解决方案,最能简化编程代码,所以我们采用这个界面方案。
XControl 在程序框图上的端点的输入输出数据应该是应用程序最经常需要与XControl交互的数据。
XControl 是LabVIEW 8 中出现的新功能面向组件的编程(Component Oriented Programming ,COP)技术建立在对象技术之上,它是对象技术的进一步发展。
“类”这个概念仍然是组件技术中一个基础的概念,但是组件技术更核心的概念是“接口”。
组件技术的主要目标是复用—粗粒度的复用,组件的核心是接口。
LabVIEW 为我们提供了大量漂亮的控件,可以让我们非常方便地就搭建出一个程序界面来。
然而,对于追求完美的用户而言,LabVIEW 提供的为数有限的控件是远远不够的。
比如图1,是LabVIEW 8.2 的一个新功能—导入导入共享库向导的界面。
在它右上方有四个按钮,这四个按钮有着特殊的外观图标,在LabVIEW 中并没有直接提供这样的按钮。
要拥有这样的按钮,并保存下来以供再次使用,就只能自己来制作这样一个自定义控件。
关于(用户自定义控件可以参考文章《用户自定义控件中Control, Type Def. 和Strict Type Def. 的区别》)图1:LabVIEW 8.2 中Import Shared Library 的界面自定义控件虽然可以定义控件的外观,但无法定义控件的行为。
功能复杂一点的控件,.ctl 文件就爱莫能助了。
还是以图1 为例,它的Include Paths 控件是“一个”功能比较复杂的控件,它比LabVIEW 自带的列表框多了编辑功能。
用户添加或编辑一个路径时,这个控件要为用户在所编辑的路径项目上,显示出供编辑使用的文本框和浏览路径按钮。
实际上这个编辑功能是由三个LabVIEW 提供的标准控件合作完成的:一个Listbox、一个String 和一个Button 控件。
它们的行为(位置、是否可见,值,等等)是在程序运行时决定的:当用户选择编辑控件中某一路径时,程序就把String 和Button 挪到Listbox 上需要编辑的那一项,并遮挡住Listbox 原本的内容。
CompactLogix 体验培训CompactLogix 基础实验◆Lab 1:创建新的处理器程序,组态I/O-----------------------------------------------------------P3⏹打开RSLogix 5000程序⏹RSLogix 5000程序菜单和项目树讲解⏹编辑主例程(交通灯控制程序)⏹检查主任务和主程序⏹组态I/O⏹组态离散量I/O的混合模块⏹观察Tag◆Lab 2:建立通讯,下载程序,建立新任务、新程序----------------------------------------------P16⏹打开RSLinx程序⏹建立RS232-DF1驱动⏹创建新的周期任务⏹创建新的程序⏹创建新的例程⏹创建计数器CompactLogix网络试验◆Lab 3:控制EtherNet/IP网络上Point I/O-------------------------------------------------------P31⏹创建一个L35E项目⏹添加远程1734 Point I/O 以太网适配器及I/O模块⏹添加逻辑程序,下载项目并测试◆Lab 4:控制EtherNet/IP网络上PowerFlex变频器试验------------------------------------P45⏹创建一个CompactLogix项目⏹添加PowerFlex700变频器⏹观察RsLogix5000自动生成的对象数据模型,并构建别名标签⏹添加控制变频器的梯形程序⏹下载程序到L35E中并运行◆Lab 5:通过PanelViewPlus 触摸屏控制PowerFlex70变频器------------------------------P54⏹创建一个RSView ME 程序⏹建立通讯通道⏹创建监控画面并进行数据连接⏹编译项目并模拟运行◆Lab 6:通过EtherNet/IP 实现Producer/Consumer通讯-----------------------------------P62⏹创建一个CompactLogix项目⏹建立Producer标签程序⏹建立Consumer标签程序⏹测试通讯程序,实现CPU对时◆Option Lab 1:学习其他的编程语言--------------------------------------------------------------P80⏹创建顺序功能图⏹创建趋势图观察CTU的累加值⏹测试连续任务⏹测试周期任务◆Option Lab 2:可重用代码------------------------------------------------------------------------P96⏹打开两个应用⏹拷贝主程序,粘贴可重用代码⏹Map标签⏹测试重用代码CompactLogix 动手实验LAB 1. 创建一个新的控制器文件,组态I/O在这个实验里,您将:⏹创建一个新的控制器文件⏹用符号标签名编写梯形图逻辑⏹组态I/O模块⏹将您在梯形图逻辑中创建的标签指向模块标签◆打开RSLogix 5000编程软件在实验的这一部分,打开RSLogix 5000编程软件,您就可以对DEMO箱中的处理器进行编程。
描述当布尔值为F时,字符串为XXXXX,为T时,自动改变为TTTTT。
对应生成的显示控件布尔控件只显示字符串。
步骤新建一个xControl打开LabVIEW,新建—选择XControl,首先保存。
默认名称保存之后保存。
然后打开xControl 的工程进行重命名。
如果在保存的时候就修改名称,会提示一直保存。
图 1 新建图 2 重命名图 3 新工程新建的工程有四部分:初始化、数据、外观、状态。
先从最基本的入手。
打开外观。
控件样式放置一个布尔控件和一个字符串控件(注意是两个分开的控件,不是簇)。
调整好大小。
初次打开“外观.vi”时,会有提示信息告诉你如何设置界面。
本次使用固定大小的控件。
图 4 外观这一步就决定了控件在使用时的外观样式。
完成后保存关闭。
数据类型刚界面放置的是两个控件。
每个控件只能代表一类值,这样如何选择?为了让这个控件能包含布尔和字符串的信息,我们将数据类型设为一个簇。
打开“数据.ctl”,将“外观.vi”里面的两个控件放到一个簇里面,作为本次的“值“。
图 5 数据以上操作就决定了,你的控件在使用时,程序面板上的显示数据类型。
具体操作第一步以上完成之后,再打开“外观.vi”,设计控件的逻辑。
打开“外观.vi”的程序面板后,里面的结构是已经设计好的。
自带以下几个事件:超时、数据更改、显示状态更改、方向更该、执行状态更该。
在下面的具体操作中,将按照我的理解进行描述。
Data In表示的是控件的值传递,注意区别于界面(即自己放置的两个控件)显示。
Container State表示控件是输入控件还是显示控件,这个影响外观状态。
我们知道,同一个类型的控件输入和显示的外观是不一样的。
Action表示的是控件的值改变还是状态改变,这个是要通知LabVIEW进行处理的,很重要的一个输入。
首先添加自定义的事件结构,即布尔值发生变化时字符串的显示改变。
图 6 添加事件结构在添加的事件结构里面,除了要更新自身两个控件的状态,还需更新整个控件的值,即簇的值。
labview深入探索----xcontrolcontrol是LABVIEW8.x新增的功能,LV中的CONTROL我们是再熟悉不过了,这个"X"到底代表什么那,到NI网站上也没找到它的英文定义,可能相当与ACTIVEX中的"X"?虽然无法弄清楚它的定义,但是它的作用是清楚的,我个人理解它更象VC中MFC的控件自画,也具备了一些ACTIVEX的能力,与ACTIVEX的最大区别是ACTIVEX是独立于平台的,可用于各种编程环境,从这点来说,可以把它看做LV内部的activex,MFC 中的控件自画是这样的,当我们要做一个特殊形状的控件时,可以设置它的一个属性是自画,own draw,也就是说,这个控件是用户自己画出来的,比如一个按钮,当鼠标进入它的控制区域,会自动显示凸起状态,还可以自动改变颜色,IE菜单就是这样,当鼠标移入的时候,背景色自动变成兰色,离开后,又自动恢复,实际上,它是在响应两个事件,MOUSE_ENTER 和MOUSE_LEAVE事件.在xcontrol出现以前,我们也可以对一个控件通过属性节点和事件结构实现这种动态变化,但是有着本质的区别,xcontrol通过事件结构判断事件,利用属性节点改变其显示方式是完全在内部实现的,因此它是可以重用的,从使用方法上它和LV一般的控件没有任何区别,我们完全可以把它看成LV又给我们提供了新的控件,我的文章里多次提到AE的概念,有了XCONTROL,我们不但可以保存数据,而且有了显示的能力,所以说,对于基于组件编程的LV,能力有了很大的提高.虽然xcontrol是一个新增的特性,但是它的制作方法实际上我们或多或少地都涉及到了,这就使得制作XCONTROL变得相对容易了.可以看出,我们通过事件结构编程实现了当鼠标移入BOOLEAN控件区域时,BOOLEAN控件的CAPTION和COLOR自动发生了改变,但是所有的控制代码都是在主循环里完成了,是通过控件外部改变的,因此,我们无法重用这个控件,假如我们需要100个这样的控件,我们需要在事件结构中分别对100个控件做类似的编程,这显然是非常麻烦的.最好的办法是让这段代码在控件内部完成,这样对于使用者来说,这和一般的控件没有区别,这样有效地实现了封装,所有的一切从用户的角度看,就象调用一个ACTIVEX.XCONTROL可以轻松实现这个功能我们知道LV的控件是面向对象的层次继承结构,每个控件都继承了它的父类的属性和方法,但是对于一个具体的控件,它的属性和方法都是固定的我们无法删除或者增加这个控件的属性和方法.对于XCONTROL,我们可以简单地理解成继承了一个基本控件,并在此基础上,用户增加的自己的属性和方法,是一个重新定义的,增加的大量功能的新的控件.下面看看制作XCONTROL的具体过程.这样一个基本的XCONTROL的结构就建立起来了,存储并重新命名lv自动生成两个自定义控件,分别是data.ctl和state.ctl,两个VI,分别是Facade.vi和Init.vi这四个部分是任何XCONTROL都必须包括的基本构件。
开发XControl 9 - 使用XControl
关于XControl还有好几个方面的知识点没有介绍到,包括:版本控制、错误处理、得到调用VI的信息、调试、调整界面大小、发布快捷菜单、动画的实现、一些注意事项等。
不过,这些细节问题在这个黑白棋控件中没有体现出来。
所以以后有机会再讨论。
作为这一组XControl话题的结束篇,介绍一下演示使用黑白棋控件的范例。
这是演示程序的界面,只有黑白棋XControl控件和必要的几个控件。
其程序框图如下,这是一个典型的事件处理结构。
首先程序注册必要的事件:一个XControl的事件,在用户走子后通知应用程序;一个用户自定义事件,这里仅用于初始化。
程序初始化,与用户点“New”按钮做的事情相同,都是调用黑白棋控件的New Game方法,开始一盘新的游戏。
之后就等待用户(黑方)在棋盘上走一子。
之后,程序判断应该黑方走还是白
方走。
如果轮到白方走,程序就在所有可以落子的地方随机选出一个位置,走一白子。
(程序没有实现人工智能部分)
黑白都不可走时,程序计算输赢。
某型航空发动机试验监测系统设计胡宝权;许悦;刘振涛;李继华【摘要】为解决某型航空发动机现有模拟式检测设备存在的不足,设计并开发了一套多功能的试验监测系统;该系统硬件由传感器、调理箱、数据采集器、控制柜和工控机等设备组成,软件基于虚拟仪器平台进行开发,将TCP协议、FTP协议、状态机、生产者消费者模式等相关技术混合编程;目前,该系统已成功应用于某型航空发动机的试验监测过程,能够对IPU转速、燃油压力、排气温度、滑油流量等230多种参数进行采集与控制,为该型航空发动机的生产、交付提供了有力保障.【期刊名称】《计算机测量与控制》【年(卷),期】2019(027)008【总页数】5页(P54-58)【关键词】LabVIEW;航空发动机;数据采集;TCP【作者】胡宝权;许悦;刘振涛;李继华【作者单位】西安翔迅科技有限责任公司,西安 710068;西北工业大学自动化学院,西安 710072;西安翔迅科技有限责任公司,西安 710068;西安翔迅科技有限责任公司,西安 710068【正文语种】中文【中图分类】TP2770 引言航空发动机作为飞机的心脏,其性能的优劣直接影响到飞机的飞行安全[1-2]。
因此,航空发动机在交付之前需要反复进行大量运行试验,以验证其性能的优劣。
在试验过程中,需要监测的各种指标多达200多项,其中一些关键指标对航空发动机的工作具有重要的影响,如IPU转速、燃油流量、引气温度、滑油流量、液压泵进口温度等,对这些指标实验数据的精确测量、记录保存、回放分析、分类管理等是航空发动机运行试验的核心任务[3-5]。
由于受研制条件限制,某型航空发动机在前期试验时,使用的是第一代模拟式检测仪表,主要存在以下不足[6-8]:1)采用指针式仪表,受操作人员主观影响大,精度低;2)试验数据缺乏有效管理;3)检测流程复杂,且系统维护性差,功能不易扩展。
针对上述情况,开发了一套先进的航空发动机多功能试验监测系统。
c语言iconv errorno 84摘要:1.引言:介绍Blockshell 的概念和作用2.Blockshell 的发展历程3.Blockshell 的核心技术和应用领域4.Blockshell 的优势和局限性5.Blockshell 的未来发展前景正文:【引言】Blockshell,作为一种分布式计算的模型,旨在解决大规模数据处理和复杂问题求解的问题。
通过将任务分解为多个子任务,并在多个计算节点上并行处理,Blockshell 能够显著提高计算效率,为各种领域的研究和应用提供了强大的支持。
【发展历程】Blockshell 的概念最早源于2009 年,当时比特币的创始人中本聪(Satoshi Nakamoto)提出了工作量证明(Proof of Work,PoW)的概念,以解决比特币网络中的共识问题。
随着比特币的普及,Blockshell 技术逐渐受到了学术界和工业界的关注。
在随后的几年里,Blockshell 技术不断发展,出现了许多新的变体,如权益证明(Proof of Stake,PoS)和委托权益证明(Delegated Proof of Stake,DPoS)等。
这些技术在共识机制、安全性、性能等方面都有所改进,为Blockshell 的广泛应用奠定了基础。
【核心技术和应用领域】Blockshell 技术的核心是分布式账本(Distributed Ledger),它通过多个节点的共识机制来保证数据的安全性和一致性。
Blockshell 的应用领域非常广泛,包括但不限于以下几个方面:1.数字货币:如比特币、以太坊等,它们使用Blockshell 技术来实现去中心化的交易和资产管理。
2.供应链管理:通过将商品的产地、生产过程、物流等信息记录在分布式账本上,实现供应链的透明化管理。
3.版权保护:通过对作品的创作和使用信息进行记录,保护创作者的权益,防止侵权行为。
4.身份认证:利用Blockshell 技术实现去中心化的身份认证,提高安全性和隐私保护水平。
欧姆龙CX-Programmer软件的使用举例在规划一个PLC工程时,在开始制定程序指令以前需要考虑各种项目和CX-Programmer 内部的设置。
例如,要编程的PLC的类型和设置信息对CX-Programmer十分重要,因为只有这样,其才能够和PLC之间建立正确的程序检查和通信。
编程要以将要使用的PLC为目标。
PLC的类型可以随时改变,一旦改变,程序也跟着改变。
按照不成文的约定,在开始的时候最好设置好正确的PLC类型。
1.开始一个新的工程按照以下步骤来建立一个新的工程:(1)选择工具栏中的新建按钮。
(2)定义工程的设备条目。
(3)保存工程当一个新的PLC被添加到工程中的时候,将创建以下空表:1)空的本地符号表;2)全局符号表;3)IO表;4)PLC内存数据;5)PLC设置数据。
2.编写一个梯形图程序下面以一个交通灯次序控制为例说明,该交通灯次序是一个标准的英国交通灯次序,顺序如下:只有红灯→红灯和和黄灯同时→只有绿灯→只有黄灯。
编写一个梯形图程序,包括: 生成符号和地址、创建一个梯形图程序、编译程序。
(1)按照以下步骤来生成符号1)单击图表窗口,在工具栏中选择查看本地符号按钮。
2)从工具栏选择新建符号按钮,符号插入对话框将被显示。
3)在名称栏中键入‘AmberLight’.4)在地址栏中键入’10.01’5)将数据类型栏设置为‘BOOL’,表示一个位(二进制)值6)在注释栏中输入‘准备通行/停止’7)选择确定按钮以继续进行对下表的每一项重复以上操作在CX-Programmer中使用标准地址格式是很重要的。
按照其定义类型,一个地址有两部分,一个通道和一个位号码。
(2)建立一个梯形图程序按照以下步骤来生成一个梯形图程序1)确认在图表工作区中显示梯形图程序。
2)用属性框来给梯级一个注释(将光标移动到梯级,通过内容菜单来使用属性框功能)3)梯级注释占位符可以被插入到编译代码中(如果PLC的包括注释指令属性被设置),注释也可以被保存为一个文件或者文件卡片。
CX-One内含软件简介(王兆贵):1:网络通信配置软件CX-Integrator 主要完成欧姆龙网络(包括以太网控制器网络现场总线DeviceNet、CompNET)和串口通信的配置,设置和调试工作。
并且该软件可以继承设定、启动相关软件。
CX-Protocol 完成PLC使用协议宏功能,与第三方设备通信时第三方设备通信协议的编辑和调试。
CX-FLnet 完成的是Plnet单元的参数编辑和传送也可以监视该网络中的单元状态。
CX-ConfiguratorFDT 主要完成的是Profibus网络和KompoNet 网络的配置、设置、和调试。
Network Configurator for EtherNetIP 主要完成的是EtherNet/IP网络的配置,设置和调试。
2:PLC配置软件CX-Programmer 针对欧姆龙PLC的单机调试主要完成PLC的内存数据区得监控和设定,编辑,调试和监控PLC的程序,继承设定启动其他相关软件。
CX-Simulator可以配套cx-programmer完成某些PLC(cs、cj、cp1h)的模拟仿真调试。
SwitchBox Utility配套PLC模拟仿真调试时对PLC内部数据区得读取和修改。
3:元器件软件CX-Thermo完成对欧姆龙大多数温控器的参数的设置、读取和写入。
4:变频驱动配置软件CX-Motion主要针对运动控制单元MC进行系统参数的设定、编辑和监控可以创建和编辑位置数据并进行G语言程序的编写。
CX-Motion-MCH主要针对运动控制单元MCH进行系统参数的设定、编辑和监控可以创建和编辑位置数据并进行MCH专用语句的编写。
CX-Motion-NCF主要针对运动控制单元NCF进行系统参数的设定、编辑和监控监控可以创建和编辑位置数据.CX-Position对NC单元的参数和数据进行设置、传送以及定位序列的编写。
CX-Drivev编辑和设定变频器和伺服驱动器的参数。
X C o n t r o l技术(总18页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--深入探讨XControlcontrol是新增的功能,LV中的CONTROL我们是再熟悉不过了,这个"X"到底代表什么那,到NI网站上也没找到它的英文定义,可能相当与ACTIVEX中的"X"虽然无法弄清楚它的定义,但是它的作用是清楚的,我个人理解它更象VC中MFC的控件自画,也具备了一些ACTIVEX的能力,与ACTIVEX的最大区别是ACTIVEX是独立于平台的,可用于各种编程环境,从这点来说,可以把它看做LV内部的 activex,MFC中的控件自画是这样的,当我们要做一个特殊形状的控件时,可以设置它的一个属性是自画,own draw,也就是说,这个控件是用户自己画出来的,比如一个按钮,当鼠标进入它的控制区域,会自动显示凸起状态,还可以自动改变颜色,IE菜单就是这样,当鼠标移入的时候,背景色自动变成兰色,离开后,又自动恢复,实际上,它是在响应两个事件,MOUSE_ENTER 和MOUSE_LEAVE事件.在xcontrol出现以前,我们也可以对一个控件通过属性节点和事件结构实现这种动态变化,但是有着本质的区别,xcontrol通过事件结构判断事件,利用属性节点改变其显示方式是完全在内部实现的,因此它是可以重用的,从使用方法上它和LV一般的控件没有任何区别,我们完全可以把它看成LV又给我们提供了新的控件,我的文章里多次提到AE的概念,有了XCONTROL,我们不但可以保存数据,而且有了显示的能力,所以说,对于基于组件编程的LV,能力有了很大的提高.虽然xcontrol是一个新增的特性,但是它的制作方法实际上我们或多或少地都涉及到了,这就使得制作XCONTROL变得相对容易了.可以看出,我们通过事件结构编程实现了当鼠标移入BOOLEAN控件区域时,BOOLEAN控件的CAPTION和COLOR自动发生了改变,但是所有的控制代码都是在主循环里完成了,是通过控件外部改变的,因此,我们无法重用这个控件,假如我们需要100个这样的控件,我们需要在事件结构中分别对 100个控件做类似的编程,这显然是非常麻烦的.最好的办法是让这段代码在控件内部完成,这样对于使用者来说,这和一般的控件没有区别,这样有效地实现了封装,所有的一切从用户的角度看,就象调用一个ACTIVEX.XCONTROL可以轻松实现这个功能我们知道LV的控件是面向对象的层次继承结构,每个控件都继承了它的父类的属性和方法,但是对于一个具体的控件,它的属性和方法都是固定的我们无法删除或者增加这个控件的属性和方法.对于XCONTROL,我们可以简单地理解成继承了一个基本控件,并在此基础上,用户增加的自己的属性和方法,是一个重新定义的,增加的大量功能的新的控件.下面看看制作XCONTROL的具体过程.这样一个基本的XCONTROL的结构就建立起来了,存储并重新命名lv自动生成两个自定义控件,分别是和,两个VI,分别是和这四个部分是任何XCONTROL都必须包括的基本构件。
labview教程之XControl的制作步骤Labview Xcontrol基础实现变色Hover按钮使用Labview自定义控件功能可以轻松定义控件的外观形态,在平时的一些常规应用中,只需要【基础控件+定义外观形态】就够了,不过要实现一些特定需求的控件可能就比较麻烦了。
这一节记录怎么实现一个简单的xcontrol,鼠标进入离开可变色的确定按钮。
实现Hover按钮传统的实现方式使用事件结构就可完成Xcontrol方式实现目的:代码封装重用第一种方式简单实现思路比较简单,使用传统的布尔控件,通过事件结构,分别处理鼠标进入和离开事件,事件处理利用数据节点改变控件的标题属性和颜色属性。
程序框图如图所示:第二种方式 Xcontrol实现第一种方法使用了事件结构和属性节点,实现简单,易于理解,但如果前面板需要多个这样的按钮的时候,就无法重用,还需要重新对按钮编辑,代码重复,程序也不易于管理维护。
使用Xcontrol方式设计,只需要一次设计就想基础控件一样重复使用,缺点就是不那么简单。
创建Xcontrol简单步骤1.新建Xcontrol2.修改数据控件和状态控件3.修改外观VI1.创建属性(没有的话基本就没功能了)2.创建方法(可选)3.设置配置菜单(可选)4.初始化值设置(可选)5.调试Xcontrol1.新建XcontrolLabview自动创建了两个自定义控件,分别是“数据”和“状态”控件;自动创建了两个VI,分别是“外观”VI和“初始化”VI。
创建好Xcontrol之后,选择合适的名称和文件夹,保存后继续编辑XControl。
上面提到的四项是XControl必须的功能,必需功能决定了XControl的外观、数据类型、显示状态和初始化。
XControl包括以下必需功能:数据-数据是一种自定义类型VI,定义了XControl的数据类型。
在状态-状态,也称显示状态,是一种自定义类型VI,定义了所有影响控件外观的信息(除XControl的数据外)。
开发XControl 2 - 创建
在项目浏览器上,点击鼠标右键,选择“新建->XControl”,就可以创建一个新的XControl。
XControl 在结构上是一种特殊的库,他包含一些特定的更能VI,和一些可选的属性、方法VI及其它相关文件。
在新建的XControl 上已经包含了4个必须的功能VI(控件):数据、状态、外观、初始化。
XControl 还有两个可选的功能VI:反初始化和转换状态以保存。
简要介绍这几个功能VI的功能是:
数据:用来定义XControl的数据类型。
状态:定义所有XControl内部使用到的数据。
外观:这是XControl中最主要的功能VI,用以实现XControl的界面和界面上的行为。
初始化:设置XControl的初始状态。
反初始化:负责清理工作。
转换状态以保存:用于把XControl内部的某些数据保存在使用它的VI中。
下面对XControl做一些基础的设置,比如修改它的图标、版本号等,然后保存。
XControl功能VI的文件名并不一定与其功能名相同。
比如,为了方便更多人使用,我使用了英文名称来保存我的XControl:。
开发XControl 5 - 其他功能VI
转换状态以保存功能VI用于保存XControl的状态数据。
默认情况下,XControl外观功能VI中的状态(Display State)全部都会被保存在使用它的VI中。
如果状态数据比较大,无疑会增加VI的大小。
但是,这些状态也许并不需要保存。
有些控件的状态,比如控件颜色,尺寸等信息,需要在VI关闭后仍然记得,在下次打开时,还可以保持上次的修改。
但是有些状态中的数据,只是临时使用的,不需要保存。
比如,我们的黑白棋控件状态中的任何数据,当前颜色,可落子的位置等等都是每次重新计算出来的,不需要保存下来共下次打开VI使用。
所以,在转换状态以保存功能VI中,可以丢弃所有数据,保存一个空数据就可以了。
初始化VI,有两个作用,一是把保存在使用XControl的VI中的状态读取出来,付给XControl的状态。
二是打开或初始化XControl需要使用到的资源。
对于我们的黑白棋控件,由于没有保存任何状态数据在VI中,所以不需要读任何数据出来。
而我们的黑白棋控件使用到了一个用户事件,所以需要在初始化功能VI中创建这个事件。
反初始化功能VI负责关闭XControl中打开的资源,我们在初始化功能VI 中创建了一个事件,所以在这里要销毁它。
开发XControl 1 - 设计
XControl 是LabVIEW 8 开始出现的一个制作LabVIEW 控件的工具。
与之前的用户自定义控件相比,用户自定义控件只能定义控件的界面,而XControl 还允许通过编写代码来定义控件的行为。
因此XControl 功能更加强大。
XControl 的主要优点是可以把界面元素与相关的代码封装在一起,从而方便发布和重用这些界面组件。
XControl 也有比用户自定义控件不足的地方,它开发起来更加困难;设计不合理的XControl会导致程序更加严重的问题。
需要开发一个新的控件之前,首先要考虑一下以何种方式实现这个控件。
如果这个控件极为特殊,只会用在某个特定的程序中,那么也许没有必要将其作为单独的控件;
如果这个控件需要被多次使用,那么就应该考虑把它做成可重用的独立控件。
这个控件也许不包含任何特殊行为,比如一个用于表示坐标位置的控件由两个数值控件组成,程序只是使用它的值就可以了;或者一个新型按钮,进外观与旧按钮不同,其它行为都与传统的按钮一模一样。
这样的控件适合使用用户自定义控件来制作。
如果新的控件需要重用,行为与已有其它控件又有较大差别,那么就要考虑XControl了。
比如:制作一个新按钮,但它比传统按钮多一个状态;或者它的界面带有动画效果;制作数值类控件但是用中国本土度量单位;基于图片控件,专用于绘制某种特殊曲线等。
我们前面提到的黑白棋的控件,既有特殊界面,又有特殊行为,又可以应用于不同软件中,非常适合做成XControl。
我们先来具体设计一下这个XControl所需的界面和行为。
它的界面部分前面已经设计好了,直接拿来用就可以了。
不过在前文提到的几个设计方案中,我个人觉得Pict Ring 数组控件的那个解决方案,最能简化编程代码,所以我们采用这个界面方案。
XControl 在应在程序框图上的端点的输入输出数据应该是应用程序最经常需要与XControl交互的数据。
本例中,应用程序最常使用的数据就是棋盘的布局信息。
因此,这个XControl的数据应当是一个8×8的整型数组,表示棋盘上棋子的布局。
黑白棋控件的属性应当包括:当前该下什么颜色的子、可落子的位置、盘面上每种颜色的子数、上次落子的位置。
它的方法有:落下一子(这个方法需要包含以下具体的操作:在新位置放置一个棋子;翻转被吃掉的棋子;更新数据和所有属性的值)。
它还要在当用户在交互界面上摆下一子之后,发个事件通知应用程序。