• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > 测试测量 > Labview 虚拟仪器 > labview的数据类型----通过类型描述符提取控件名称(LABEL)

labview的数据类型----通过类型描述符提取控件名称(LABEL)

录入:edatop.com    点击:
通过分析类型描述符结构,我们已经得到的类型描述符的头部信息,我们知道,LV的存储结构中同时包括了控件的标签信息,看看如何能通过描述符得到控件的标签.OPENG中提供了这个功能,我们跟踪一下看看它实现的方法:



首先根据类型描述符头部信息中的类型码对LV的数据类型进行分类,每个CASE中的数据存储结构都是类似的.

先看看第一个CASE: 条件是:"I8".."CXT", "Boolean", "Variant" ,这说明从I8--->"CXT",包括BOOLEAN VARIANT类型描述符的结构都是类似的.看看I8 和BOOLEAN的类型描述符的内容,我们分析一下.


I8和BOOLEAN除了类型码不同(0X01,0X21),其它结构完全相同.第一个字(两个字节)表示存储结构的长度,*2表示字节数.

0X40是LABVIEW保留的.第三个字的高位字节0X02表示名称包括两个字节(字符,ASCII).可以看出它的标签是aa.

前4个字节(两个字I16)是类型描述符的头部信息,第5个字节0X02表示名称的长度是2个字符,这样,通过把类型描述符的结构转换成U8数组或者16进制字符串,就可以拆分出它的标签信息.




左边的图通过铸模函数,把I16数组转换成16进制字符串,通过一个Get PString(有点类似C指针),提取出标签.

右边的图是Get PString的程序框图,因为以后要经常用到,重点解释一下.

我们前文谈到过,字符串和U8数组在内存中的存储形式是完全相同的,所以操作字符串和操作U8数组是等价的.

表示名称长度信息在第5个字节中,所以首先用索引数组取出第5个字节(索引4,ARRAY从索引0开始)

通过截取字符串函数,字符串长度参数是刚刚从数组中取出的,开始位置是4+1(去掉长度字节),至此,完成了

提取标签信息.


枚举类型的类型描述符结构是不同于I8,U8的,下一个CASE是用于提取ENUM的标签的.首先看看ENUM的类型描述符的组成结构.



类型描述符号的头部信息都是类似的,由长度,类型码组成.重点看第5个字节,这里的0X03表示枚举由3个元素组成,以下分别是第一个元素标签(这里称名称可能更合适)的长度(字符个数)和名称的相应的ASCII,分析可以得到,第一个元素名称包括两个字符,41,41,即AA,第二个元素包括两个字符,42,42,即BB,第三个包括两个字符43,43,既CC.值得注意的是接下来并不是标签的长度,而是用00来填充补位,而下一个字的高位字节才表示标签的长度,长度为2,标签字符6D 6E即mn.

看看OPENG是如何提取ENUM标签的.


CASE的条件是ENUM8..ENUM64说明,ENUM8,16,32,64结构都是相同的

头部信息中的ELEMENTS表示一共三个元素,所以利用一个三次FOR循环,计算出标签的索引,注意有一个加余数的过程,这个就是解决上面的填充0问题,这个0不体现在长度字节中的.然后再次调用Get PString就得到了枚举的标签.实际上,上面的过程也可以得到枚举中的每个元素的名称.

在看string,path 和picture(本质是一系列二进制数据),它们的类型描述符的结构是相同的.

通过分析类型描述符结构,我们已经得到的类型描述符的头部信息,我们知道,LV的存储结构中同时包括了控件的标签信息,看看如何能通过描述符得到控件的标签.OPENG中提供了这个功能,我们跟踪一下看看它实现的方法:




首先根据类型描述符头部信息中的类型码对LV的数据类型进行分类,每个CASE中的数据存储结构都是类似的. [p]

先看看第一个CASE: 条件是:"I8".."CXT", "Boolean", "Variant" ,这说明从I8--->"CXT",包括BOOLEAN VARIANT类型描述符的结构都是类似的.看看I8 和BOOLEAN的类型描述符的内容,我们分析一下.


I8和BOOLEAN除了类型码不同(0X01,0X21),其它结构完全相同.第一个字(两个字节)表示存储结构的长度,*2表示字节数.

0X40是LABVIEW保留的.第三个字的高位字节0X02表示名称包括两个字节(字符,ASCII).可以看出它的标签是aa.

前4个字节(两个字I16)是类型描述符的头部信息,第5个字节0X02表示名称的长度是2个字符,这样,通过把类型描述符的结构转换成U8数组或者16进制字符串,就可以拆分出它的标签信息.



左边的图通过铸模函数,把I16数组转换成16进制字符串,通过一个Get PString(有点类似C指针),提取出标签.

右边的图是Get PString的程序框图,因为以后要经常用到,重点解释一下.

我们前文谈到过,字符串和U8数组在内存中的存储形式是完全相同的,所以操作字符串和操作U8数组是等价的.

表示名称长度信息在第5个字节中,所以首先用索引数组取出第5个字节(索引4,ARRAY从索引0开始)

通过截取字符串函数,字符串长度参数是刚刚从数组中取出的,开始位置是4+1(去掉长度字节),至此,完成了

提取标签信息.

枚举类型的类型描述符结构是不同于I8,U8的,下一个CASE是用于提取ENUM的标签的.首先看看ENUM的类型描述符的组成结构.



类型描述符号的头部信息都是类似的,由长度,类型码组成.重点看第5个字节,这里的0X03表示枚举由3个元素组成,以下分别是第一个元素标签(这里称名称可能更合适)的长度(字符个数)和名称的相应的ASCII,分析可以得到,第一个元素名称包括两个字符,41,41,即AA,第二个元素包括两个字符,42,42,即BB,第三个包括两个字符43,43,既CC.值得注意的是接下来并不是标签的长度,而是用00来填充补位,而下一个字的高位字节才表示标签的长度,长度为2,标签字符6D 6E即mn.

看看OPENG是如何提取ENUM标签的.


头部信息中的ELEMENTS表示一共三个元素,所以利用一个三次FOR循环,计算出标签的索引,注意有一个加余数的过程,这个就是解决上面的填充0问题,这个0不体现在长度字节中的.然后再次调用Get PString就得到了枚举的标签.实际上,上面的过程也可以得到枚举中的每个元素的名称.




结构基本相同,从第9个字符开始是标签长度,接下来是ASCII,所以与U8,BOOLEAN调用除了开始索引位置不同,调用方法完全相同.


其它的,比如数组,簇等,就不多介绍了.

点击浏览:矢量网络分析仪、频谱仪、示波器,使用操作培训教程

上一篇:labview的数据类型----typedecriptorheader
下一篇:labview的软件计数器和FIFO BUFFER

微波射频测量操作培训课程详情>>
射频和天线工程师培训课程详情>>

  网站地图