大家都知道,LV是基于数据流的图形编程语言.我们在单步监视LV的运行时,在连线的任何一处查看的它的数据都是相同的,确实有点数据流动的意思.
      LABVIEW的连线颜色,线条粗细代表不同的数据,差别很大的两种类型是无法连接到一起的,可见,LV在任何时刻都知道正在流动的数据类型,它是通过什么实现的那?

答案是:类型描述符.TYPE DESCRIPTOR

类型描述符包括那些内容那,我们从最简单地BOOLEAN看一下

Picture
      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.

在看看标量数值类型

Picture
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.

Picture
      可以看到,数据总长度是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 TypesThe following tables list numeric and nonnumeric data types, type codes, and type descriptors.
Data Type                      Type Code (numbers in hex)      Type Descriptor (numbers in hex)
Picture
Picture
Picture
      OPENG中提供了大量的利用类型描述符的功能节点,并且源代码是完全开放的,仔细跟踪它的程序设计方法对我们更好地理解LABVIEW非常有帮助.
Picture



Leave a Reply.