- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
labview的数据类型----无所不在的类型描述符 TYPE DESCRIPTOR
LABVIEW的连线颜色,线条粗细代表不同的数据,差别很大的两种类型是无法连接到一起的,可见,LV在任何时刻都知道正在流动的数据类型,它是通过什么实现的那
答案是:类型描述符.TYPE DESCRIPTOR
类型描述符包括那些内容那,我们从最简单地BOOLEAN看一下
LABIEW随时维护一个存储结构,其中包括类型描述符,可以看出,BOOLEAN的存储结构是一个I16数组,目前共有四个元素,
0x08 0x4021 0x0343 0x4243
第一个I16是长度字节:4*2BYTE=8 BYTE
第二个I16是分成高位字节和低位字节两部分:40和21(HEX),其中40是LV保留部分,21是BOOLEAN的类型码,类型码是一一对应的(TYPE CODE)
第三个元素高位字节表示控件名字的长度,低位字节是名字第一个字母的ASCII,接下来是第二个字母和第三个字母.
这里 把长度和类型码合在一起称做类型描述符(TYPE DESCRIPTOR)
TYPE DESCRIPTOR:
所以类型描述符中包括了控件数据的类型和这个存储结构总长度,可以看出,我们例子中的BOOLEAN名称是ABC,对应的ASCII分别是41,42,43.我们知道,BOOLEAN在内存中占一个字节,类型描述符中没有它的值,它的值体现在它所占的内存字节中,该字节为0,则为FALSE,该字节非0,则为TRUE.
在看看标量数值类型
U8: 0X0008 0X4005 0X0255 0X3800
8*2BCODE=052 CAHR 55->U 38->8
U16:0X0008 0X4006 0X355 0X3136
8*2BCODE=063 CAHR 55->U 31->1 36->6
DBL: 0X0008 0X400A 0X0344 0X424C
8*2BCODE=0A3 CAHR 44->D 42->B 4C->L
其他数值标量也完全相似.它的存储结构包括类型描述符(长度和类型码),名称长度和名称的ASCII串.
ENUM和RING本质上也是数值数据类型,不过它包含了复杂的名称,先看看ENUM.
可以看到,数据总长度是0x16,类型码是0x16,0x04表示ENUM共包括四个元素,0x0241中0X02表示第一个元素名称长度是2个字符,分别是0X41,0X41 (AA),依次,第二个元素是0X42 0X42(BB),第三个元素是0X43 0X43(CC),第四个元素是0X44,0X44(DD),最后0X0341中的高字节0X03表示枚举的名称字符传长度是3个字节(字符),分别是0X41,0X42,0X43,就是ABC. [p]
下面给出完整的类型描述符表:
Data Types
The following tables list numeric and nonnumeric data types, type codes, and type descriptors.
Data Type | Type Code (numbers in hexadecimal) | Type Descriptor (numbers in hexadecimal |
8-bit Integer | 01 | 0004xx01 |
16-bit Integer | 02 | 0004xx02 |
32-bit Integer | 03 | 0004xx03 |
64-bit Integer | 04 | 0004xx04 |
Unsigned 8-bit Integer | 05 | 0004xx05 |
Unsigned 16-bit Integer | 06 | 0004xx06 |
Unsigned 32-bit Integer | 07 | 0004xx07 |
Unsigned 64-bit Integer | 08 | 0004xx08 |
Single-Precision Floating-Point Number | 09 | 0004xx09 |
Double-Precision Floating-Point Number | 0A | 0004xx0A |
Extended-Precision Floating-Point Number | 0B | 0004xx0B |
Single-Precision Complex Floating-Point Number | 0C | 0004xx0C |
Double-Precision Complex Floating-Point Number | 0D | 0004xx0D |
Extended-Precision Complex Floating-Point Number | 0E | 0004xx0E |
Enumerated 8-bit Integer | 15 | xx15 |
Enumerated 16-bit Integer | 16 | xx16 |
Enumerated 32-bit Integer | 17 | xx17 |
Single-Precision Physical Quantity | 19 | xx19 |
Double-Precision Physical Quantity | 1A | xx1A |
Extended-Precision Physical Quantity | 1B | xx1B |
Single-Precision Complex Physical Quantity | 1C | xx1C |
Double-Precision Complex Physical Quantity | 1D | xx1D |
Extended-Precision Complex Physical Quantity | 1E | xx1E |
n=length;x=reserved; k=number; k pstrs=number of Pascal strings; k base-exp=number ofbase-exponent pairs. |
Data Type | Type Code (numbers in hexadecimal) | Type Descriptor (numbers in hexadecimal) |
Boolean | 21 | 0004xx21 |
String | 30 | 0008xx30 |
Path | 32 | 0008xx32 |
Picture | 33 | 0008xx33 |
Array | 40 | xx40 |
Cluster | 50 | xx50 |
Waveform | 54 | xx54 |
Refnum | 70 | |
Variant | 53 | xx53 |
n=length;x=reserved; k=number; k pstrs=number of Pascal strings; k base-exp=number of base-exponent pairs. A dim is a 32-bit integer. The following sections provide examples of data and type descriptors. |
OPENG中提供了大量的利用类型描述符的功能节点,并且源代码是完全开放的,仔细跟踪它的程序设计方法对我们更好地理解LABVIEW非常有帮助.
上一篇:labview的深入探索----文件系列之数据记录文件
下一篇:labview的深入探索----如何实现类似C的函数指针调用