×
测量测试 > 测试测量应用 > 详情

Shift Register 与 Function Global

发布时间:2021-01-27 发布时间:
|
先看一段C代码,该函数的目的是记录它本身被调用的次数,最好的方式当然是在该函数内部记录,这就要求在两次调用之间保持上次的记录,用static 变量最为合理,一是该变量的作用区域仅在函数内,外部无法直接修改,二是可以自动在首次调用时对变量进行初始化.

int Record(void)

{

static int counter=0; //首次调用初始化

counter++;

return(counter);

}

类似的功能在labview里是如何实现的那,我们当然可以用一个全局变量,在SUBVI中对全局变量执行+1的操作,但是这样做副作用是非常明显的.

一是因为没有封装数据,该全局变量可以在程序任何位置被修改.二是当几个地方同时操作该全局变量,因为没有保护机制,当前结果无法预料.

最好的办法是利用Function Global,也称做LV2型全局变量,可能是LABVIEW2以前没有内置的全局变量,这是唯一的方法.


Function Global核心是Shift Register (未初始化的),大多数书籍都强调Shift Register 初始化的重要性,实际上未初始化的Shift Register 更为重要.

Shift Register的一般用法就不解释了,比如在FOR循环中求平均值的问题.我们要考虑的是Shift Register本质到底是什麽?实际上应该是开辟的一段共享内存空间,这段内存空间是可读写的,既然这样本质上和全局变量就没有区别,一个最基本的Function Global如下图所示:


更正:上图中控制循环的布尔常量应为TRUE,目的使循环只运行一次,目的是使用SHIFT REGISTER

下面演示一下它的使用方法:


这就实现了全局变量的数据交换功能.利用组件编程是LABVIEW的重要编程方法,Funtion Global是它的核心部分.


这段程序存在一个问题,当程序启动,未进行写操作时,那Shift Register的值是什麽那?做为组件编程,应该在它的内部实现自我初始化. 这里引入一个重要的VI,FIRST CALL来解决这个问题.




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
利用大功率数字源表构建多源测量单元(SMU)系统-连载一