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

2015-08-21 11:23:53   来源:eefocus   

关键字: labview  数据类型  控件名称

通过分析类型描述符结构,我们已经得到的类型描述符的头部信息,我们知道,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中的数据存储结构都是类似的.

[1] [2]
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

推荐阅读

编辑:什么鱼
本文引用地址: http://www.eeworld.com.cn/Test_and_measurement/2015/0821/article_12879.html
[发表评论]
[加入收藏]
[打印本页]
[关闭窗口]
[返回顶部]
[RSS订阅]
小广播
每日新闻
最热点击
本周热门资源推荐
EEWORLD独家
论坛精华
精选博文