新聞中心

EEPW首頁(yè) > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > Shift Register 與 Function Global

Shift Register 與 Function Global

作者: 時(shí)間:2017-01-09 來(lái)源:網(wǎng)絡(luò) 收藏
先看一段C代碼,該函數(shù)的目的是記錄它本身被調(diào)用的次數(shù),最好的方式當(dāng)然是在該函數(shù)內(nèi)部記錄,這就要求在兩次調(diào)用之間保持上次的記錄,用static 變量最為合理,一是該變量的作用區(qū)域僅在函數(shù)內(nèi),外部無(wú)法直接修改,二是可以自動(dòng)在首次調(diào)用時(shí)對(duì)變量進(jìn)行初始化.

int Record(void)

本文引用地址:http://butianyuan.cn/article/201701/337256.htm

{

static int counter=0; //首次調(diào)用初始化

counter++;

return(counter);

}

類似的功能在labview里是如何實(shí)現(xiàn)的那,我們當(dāng)然可以用一個(gè)全局變量,在SUBVI中對(duì)全局變量執(zhí)行+1的操作,但是這樣做副作用是非常明顯的.

一是因?yàn)闆](méi)有封裝數(shù)據(jù),該全局變量可以在程序任何位置被修改.二是當(dāng)幾個(gè)地方同時(shí)操作該全局變量,因?yàn)闆](méi)有保護(hù)機(jī)制,當(dāng)前結(jié)果無(wú)法預(yù)料.

最好的辦法是利用Function Global,也稱做LV2型全局變量,可能是LABVIEW2以前沒(méi)有內(nèi)置的全局變量,這是唯一的方法.


Function Global核心是Shift Register (未初始化的),大多數(shù)書(shū)籍都強(qiáng)調(diào)Shift Register 初始化的重要性,實(shí)際上未初始化的Shift Register 更為重要.

Shift Register的一般用法就不解釋了,比如在FOR循環(huán)中求平均值的問(wèn)題.我們要考慮的是Shift Register本質(zhì)到底是什麼?實(shí)際上應(yīng)該是開(kāi)辟的一段共享內(nèi)存空間,這段內(nèi)存空間是可讀寫(xiě)的,既然這樣本質(zhì)上和全局變量就沒(méi)有區(qū)別,一個(gè)最基本的Function Global如下圖所示:


更正:上圖中控制循環(huán)的布爾常量應(yīng)為T(mén)RUE,目的使循環(huán)只運(yùn)行一次,目的是使用SHIFT REGISTER

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


這就實(shí)現(xiàn)了全局變量的數(shù)據(jù)交換功能.利用組件編程是LABVIEW的重要編程方法,Funtion Global是它的核心部分.


這段程序存在一個(gè)問(wèn)題,當(dāng)程序啟動(dòng),未進(jìn)行寫(xiě)操作時(shí),那Shift Register的值是什麼那?做為組件編程,應(yīng)該在它的內(nèi)部實(shí)現(xiàn)自我初始化. 這里引入一個(gè)重要的VI,FIRST CALL來(lái)解決這個(gè)問(wèn)題.




關(guān)鍵詞: ShiftRegisterFunctionGloba

評(píng)論


技術(shù)專區(qū)

關(guān)閉