快好知 kuaihz订阅观点

 

LabVIEW编程技巧:强大的变体数据类型的用法

变体数据类型简介

LabVIEW是一种图形化编程语言,所以也叫G语言,在程序框图上连线时,必须相同类型或者能强制相互转换的类型端口才能连接在一起,例如我们不能将一个数值型的控件连接到布尔型的控件上,也不能将一个数组类型的控件连接到簇类型的控件上。

但是,有时候我们需要设计的子程序具有更强大的灵活性,在一个连接端口上能接入不同的数据类型,在程序内部能自动识别其原始的实际数据类型,然后分别进行不同的处理,这时候变体数据(Variant data)类型就派上用场了。

变体数据类型类似于C语言中的void类型的指针,它可以兼容任何数据类型。LabVIEW提供了一组函数用于操作变体数据,其位于函数面板的“编程”-->“簇、类与变体”-->“变体”子面板中,主要包括了下面几个函数:

在上面函数中,使用“转换为变体”和“变体至数据转换”可以使LabVIEW常规数据与变体之间进行相互转换。

同时,变体除了能兼容任何数据类型外,它还可以通过变体属性的形式保存其它附加信息。变体属性是一些键值对,可以包含任何信息。如在保存采集数据的同时,可以在变体中保存一个“时间”属性,用以保存数据创建的时间。变体的属性值可以是任何LabVIEW支持的数据类型

下面通过两个例子说明在LabVIEW中,如何对变体数据类型进行编程。

示例1:变体基本编程方法

这个例子产生一个幅值为1,点数为128点的正弦波形数据,该数据为double(双精度浮点型)类型的一维数组,然后将其转换为变体数据,为变体数据添加一个“数据长度:”属性,设其值为波形数据数组的长度,然后读取该属性的值在前面板上显示,最后调用“变体至数据转换”函数再转换为一维数组,放到波形图上进行显示。软件前面板如下图所示:

程序框图如下图所示:

需要注意的是,使用“获取变体属性”函数时,除需要属性名称参数外,还需要一个默认值参数,这个参数本身也是个变体类型的数据,可以连接任意类型的数据,这儿存储的是数组的长度值,为I32类型的变量,所以给了一个I32类型的常量值0。

使用“变体至数据转换”函数时,也需要一个类型参数,对应于实际的波形数据类型,这儿给的是一个double型的一维数组,这样才能将变体数据正确转换为一维波形数组进行显示。

示例2:变体的综合应用编程

这个例子的功能是,对于前面板上的任意一种类型控件,要求能够将该控件的名称及其值以字符串的形式输出并显示。如对于某个数值控件,其值为3.14159,则输出的字符串结果为:“a= 3.14159”。为说明该程序能适应任意类型的控件,本例前面板放置了三个不同类型的控件,其字符串结果放到了一个字符串数组里面进行输出,如下图所示:

程序框图如下图所示,其基本思路是将三个不同类型的控件分别转换为变体后组成一个一维数组,在For循环里面对每个变体分别进行解析得到结果字符串,在For循环外得到包含三个结果字符串的一维数组,即为最终的输出结果。

代码的关键地方是,在For循环内部如何自动判断每个变体对应的实际数据类型及其名称。

这儿用到了一个关键函数“GetTypeInfo”,其并未在函数选板中出现,但它是一个非常有用的隐藏函数,其位置为LabVIEW软件安装目录下的“vi.libUtilityVariantDataType”目录中,在这儿可以找到这个函数。该函数最大的功能是可以告诉我们变体内部对应实际数据的名称和类型。其返回的类型是一个枚举类型的值,包含LabVIEW中支持的所有数据类型,如下图所示(仅显示了部分数据类型):

本例中用到的类型分别为“DoubleFloat”、“String”和“Boolean”,根据其数据类型的不同,在选择结构分别转换为对应的数据,然后调用“格式化写入字符串函数”分别进行处理即可。

在上面程序框图中是处理前面板上“a”控件即“Double Float”类型的情况,对于处理其它两个控件对应的“String”和“Boolean”及默认情况的处理代码如下图所示:

通过这种处理方式,就可以在一个子程序里得到任意控件对应的名称及其值了。

总结

本文介绍了变体数据类型的编程及应用方法。从这儿可看到,变体数据类型在LabVIEW中不同于常规的数据类型,其功能非常强大,由于其具有自适应、自兼容性,在很多场合可以大大简化我们的编程代码量,这也是我们应该掌握的关于LabVIEW的高级编程技巧之一。

如果这篇文章对你有用的话,请关注+转发+收藏+点赞吧。

本站资源来自互联网,仅供学习,如有侵权,请通知删除,敬请谅解!
搜索建议:变体  变体词条  编程技巧  编程技巧词条  用法  用法词条  强大  强大词条  LabVIEW  LabVIEW词条