EDN首页   博客首页

日志档案

发表于 2006-10-13 21:04:09

51

标签: 无标签

LabVIEWABC(3)

                   

        本地变量(local variable)与属性节点(property node)的不同

 

 

 

我们知道在程序框图中,本地变量或属性节点无须与control(控制器)/indicator(指示器)直接连线就可用来传递“控制器”/“指示器”中的数值。

当然,属性节点还有非常多的使用方法,所以对本地变量与属性节点之间不同的讨论也仅限于传递数值这个特性上。

实际上,虽然它们从传递数值这个特性上有相同之处,但本质上还有许多不同的地方,只有充分了解它们之间的差异,才能有效、合理的在程序中使用它们。

 

1、   内存

本地变量:建立本地变量实质就是对“控制器”/“指示器”中数据进行复制(copy),所以要占用内存,当为数组建立多个本地变量时,会占用大量的内存。

          操作行为是读数据(Read)或写数据(Write

 

属性节点:建立属性节点实质上是对“控制器”/“指示器”中数据进行查询或置入,不会占用内存。因为在部件创建时已经为此参数分配好了内存,多少有些像VB中的属性设置。

          操作行为是查询(Query)数据或置入(Set)数据。

 

2、   执行速度

本地变量:由于本地变量是对内存操作,所以运行速度很快。

 

属性节点:相对于本地变量来讲,属性节点的效率是很低的,或者说更占用CPU的资源。

 

下面通过两个测试图来进一步说明二者之间的差异。在图1中,我们使用一个for循环对Numeric的本地变量写10000次数据,并测量运行的时间,探针[1]显示出程序运行时间是:4mS

点击看大图

 图1 本地变量的10000次运行时间

 

然后,我们将图1中的本地变量换成一个属性节点,见图2

我们会看到10000次的操作运行时间是:2472mS

点击看大图

   图2   属性节点的10000次的运行时间

由此可见,在数据频繁操作时属性节点的效率是很低的,或者说更占用CPU的资源。

 

3、   数据竞争

本地变量:容易导致数据竞争,很多LabVIEW的书籍都介绍了这方面的例子。原因是本地变量破坏了数据流的工作方式。这也正是LabVIEW及许多书籍中强调的“慎用”本地变量的原因。

 

属性节点:可以通过“错误簇”来引导数据流,所以不会发生数据竞争现象。注意,当属性节点的错误簇没有使用(与其它vi相互连接),同样可能会导致数据竞争现象发生。

 

 

 

 

 

 

 

声明:未经本人允许,本博客的所有内容不得转载。

 

系统分类: 测试测量   |   用户分类: LabVIEW ABC   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(1847)    回复(4)  

投一票您将和博主都有获奖机会!

  • Labview7.1

    2006-10-13 21:06:05

    数据竞争的小标题应该是: 3

    抱歉!

  • Labview7.1

    2006-10-16 20:20:09

    已经都好了!
    多谢关心!
    最近很忙,望谅解!

  • cocappjj

    2006-10-16 9:42:43

    高工,还是不能修改吗?还是因为想要保留一个版本?

  • 张超

    2006-10-15 22:30:12

    研究问题的态度很细致。

    收益匪浅,谢谢。