博客首页 | 排行榜 |

csxcs366的博客--LABVIEW CVI

http://labview.weebly.com/ 群:80754347 群:78561268 群:37591940

个人档案
博文分类
labview的数据类型----无所不在的类型描述符 TYPE DESCRIPTOR  2008-04-27 15:20

大家都知道,LV是基于数据流的图形编程语言.我们在单步监视LV的运行时,在连线的任何一处查看的它的数据都是相同的,确实有点数据流动的意思.

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*2B   CODE=05 2 CAHR  55->U 38->8

U16:0X0008 0X4006 0X355 0X3136

 8*2B   CODE=06 3 CAHR  55->U 31->1 36->6

DBL: 0X0008 0X400A 0X0344 0X424C

      8*2B   CODE=0A 3 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.

下面给出完整的类型描述符表:

  

Data Types

The following tables list numeric and nonnumeric data types, type codes, and type descriptors.

Data TypeType Code (numbers in hexadecimal)Type Descriptor (numbers in hexadecimal

8-bit Integer

01

0004 xx01

16-bit Integer

02

0004 xx02

32-bit Integer

03

0004 xx03

64-bit Integer

04

0004 xx04

Unsigned 8-bit Integer

05

0004 xx05

Unsigned 16-bit Integer

06

0004 xx06

Unsigned 32-bit Integer

07

0004 xx07

Unsigned 64-bit Integer

08

0004 xx08

Single-Precision Floating-Point Number

09

0004 xx09

Double-Precision Floating-Point Number

0A

0004 xx0A

Extended-Precision Floating-Point Number

0B

0004 xx0B

Single-Precision Complex Floating-Point Number

0C

0004 xx0C

Double-Precision Complex Floating-Point Number

0D

0004 xx0D

Extended-Precision Complex Floating-Point Number

0E

0004 xx0E

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 of base-exponent pairs.


Data TypeType Code (numbers in hexadecimal)Type Descriptor (numbers in hexadecimal)

Boolean

21

0004 xx21

String

30

0008 xx30

Path

32

0008 xx32

Picture

33

0008 xx33

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的深入探索 |
上一篇:黑色幽默----小村篇 | 下一篇:黑色幽默----股市篇
以下网友评论只代表其个人观点,不代表本网站的观点或立场