前面我们谈到数据流中的数据源来自输入控件和常量,终点为显示控件。那也就有必要深入了解图形化语言中的数据,包括数据类型和数据结构。

其实,LabVIEW的数据类型和数据结构决不比其它基于文本的编程语言少,甚至更多。因为它应用于工程领域,所以数据类型和数据结构比其它基于文本的编程语言还要多。
 
下面结合基于文本的编程语言的设计方式来对比图形化编程语言间的不同。

基于文本的程序设计,首先要指定变量,然后必须给出变量的数据类型。那图形化语言在设计时,是否也会这样呢?

这里需要解释一下:我不会其它语言,但又没有办法讲的更清楚,所以还得用其它基于文本的语言来类比。不对的地方敬请大家指正。
 
如果对LabVIEW略有了解,就会马上意识到:图形化语言的编程可不是这样的进行的。
 
下面先看一个C语言的例子:

例3-1

#include<stdio.h>

int main(void)

{
    int sum;

    sum=50+25
    printf("The sum of 50 and 25 is %i\n",sum);

     return 0;
}

*敲代码可真费劲!*
 
在C语言中,首先声明sum为类型为整数的变量。

然后将50+25的和放到变量sum中,并打印结果。

我们看看图形化语言如何实现这一操作。
 
我们首先在前面版上放置一个名字为:sum的显示控件,它的数据类型调整为I32(LabVIEW 默认的数据类型,也就是说它不进行数据类型的强制转换)。

然后在放置两个数据类型为I32的常数:50和25;及一个加函数,连好线如下图3-1所示。
 
Picture
图 3-1
图形化代码完成了例子:3-1中与C语言相同的功能,并且对话框显示比C语言的还漂亮(C语言实现的是打印)。

我们应该注意到这样几点:

图形化语言中,没有声明变量sum。

C语言中的“=”号,在图形化语言中被节点间的连线所代替(连线相当于赋值)。

C语言中的“+”号,在图形化语言中被一个标记“+”的小图标代替(被称之为:函数,来自函数选板)。

C语言中的打印语句,在图形化语言中被一个显示控件取代。

图形化代码的简洁性、可视性、直观性远远优于文本语言。

这是一段有头有尾的图形化程序代码,程序运行后,显示控件给出运算结果,参见下图。

Picture
图 3-2
这个例子告诉我们:
图形化语言无须声明变量(名字也不会受到保留字的限制),它使用合适的控件。
图形化语言无须声明数据类型(可以根据需要修改),控件本身就分为不同的类型,控件包含了所使用的数据类型。
图形化语言的程序代码是节点、端子及连线(更直观易懂)。
连线传递数据并构成数据流通道。

高亮看看程序框图试试!

我们再看几个有趣的现象:

1、断开图3-2中任意一个“常数”与“加函数”间的连线
开发环境显然不同意这样的操作,致使运行按钮断裂。如果点击运行按钮会弹出一个报错的对话框。这就说明,数据流运行机制中要求必须给“加函数”指定满足它要求的数据源(可以是不同的数据类型或数据结构)。

Picture
图 3-3
2、断开图3-2中“加函数”与显示控件间的连线
我们发现开发环境允许我们这样操作,程序也可以运行。但是这样的程序没有实质意义,因为我们看不到运算结果。只能说它是一个半成品。

Picture
图 3-4
3、改变常数的数据类型
我们将常数25的数据类型从I32改变为双精度。就会发现在函数的另一个输入端及显示控件的输入端上多了两个小红点。参见下图。

Picture
图 3-5
这是开发环境不满意了,它反对我们这样随意的拉郎配,它要求数据类型最好“门当户对”(都一致),并且它已经实施了数据类型的强制转换(用小红点来提示我们这里发生了数据类型的强制转换)。

这里需要注意的是:强制转换是向上进行的,所以对I32类型的数据进行了强制转换。这样可以保证不丢失运算精度


4、改成统一的数据类型
顾名思义,强制类型转换是开发环境自动完成的,无须我们劳顿当然应该是件好事。可是不然,强制类型转换导致了内存的再分配(保留原数据,再分配一个新数据),增加了内存的使用量。特别是在使用数组时,将耗费大量的内存。没办法还是自己动手改吧(鼠标右键,在快捷菜单中选择:representation)!或许这样“门当户对”的选择还有利于和谐社会的建设。


Picture
图 3-6
这样的小试验还可以做很多,通过这些小试验可以加深我们对新知识的认识和理解,学习就应该是这样学。如果你做到了这点,届时你也可以写出很多东西来!


这里可能给我们留下很多的思考题,就看你是否认真的想过。比如:
图形化语言中的数据在那里?
输入控件和显示控件是变量吗?
图形化语言有变量吗?
......等等。
 





Leave a Reply.