<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 測試測量 > 設(shè)計應(yīng)用 > LABVIEW的深入探索之全局變量的優(yōu)劣

          LABVIEW的深入探索之全局變量的優(yōu)劣

          作者: 時間:2017-01-09 來源:網(wǎng)絡(luò) 收藏

          ------------------------------------------------------------------------------------------------------------------------

          KEVIN:

          我在程序開發(fā)時,習(xí)慣于在多個消費者情況下使用“通告”。通常情況下,只有一個生產(chǎn)者。但是像全局變量情況,可能會有幾個“潛在”的生產(chǎn)者。

          對于使用通告,消費者可以進行選擇。通告可以不管消費這是否已經(jīng)消費了先前的數(shù)據(jù),隨時查詢最新的數(shù)據(jù),這類似于全局變量。通告也可以一直等待,直至有最新更新的數(shù)據(jù),避免不斷的輪詢數(shù)據(jù),加重CPU的負(fù)擔(dān),這個是全局變量無法實現(xiàn)的。

          ----------------------------------------------------------------------------------------------------------------------------

          BEN:

          很抱歉沒能早點參與這個話題的討論。我并非求全責(zé)備,但是全局變量存在下列主要問題:

          1、數(shù)據(jù)拷貝

          2、利用線程

          3、對于一個寫入者,多個讀取者,OK.但是這要求開發(fā)者必須確認(rèn)只有唯一一個寫入者。這對一個擁有800多個VI,有些是動態(tài)載入的情況下,是很難做到的。

          4、靈活性 。如果你使用一個LV2型全局變量,需要的情況下,你可以很安全地添加新的新的寫入者。在編寫大型應(yīng)用時,這的確是令人頭疼的問題。

          5、性能。LV2全局變量可以很容易重用緩存,全局變量不行。

          -----------------------------------------------------------------------------------------------------------------

          RAY:

          我同意大家的看法。我通常用全局變量保持靜態(tài)數(shù)據(jù),比如IP地址。

          -------------------------------------------------------------------------------------------------------------------------

          TST:

          VI之間傳遞數(shù)據(jù)有幾種方法。

          首先,可以通過函數(shù)連接器的端子連線數(shù)據(jù),這是LABVIEW傳遞數(shù)據(jù)最有效的方法,同時也最安全,最容易理解。但是對于一個正在運行的VI,想傳入數(shù)據(jù),這種連線方法無能為力。

          第二,有一種LV內(nèi)置的全局變量(上面討論的),這是VI之間傳遞數(shù)據(jù)最快捷的方法。同時非常易于管理,你很容易可以找到引用它們的位置。主要不利之處在于,多處創(chuàng)建全局變量時,都會生成全局變量的數(shù)據(jù)拷貝。這會引發(fā)數(shù)據(jù)競爭。

          第三,通過LV2全局變量,LV2的命名是根據(jù)變量出現(xiàn)的LABVIEW版本號,也有稱作功能全局變量、函數(shù)全局變量或者USR全局變量。LV2全局變量是由一個僅循環(huán)一次的VI構(gòu)成的,循環(huán)結(jié)構(gòu)中包含未初始化的移位寄存器(USR)--USR用于在多次運行VI之間保持值。如果該VI設(shè)置成不重入方式,那么在不同位置多次調(diào)用這個VI時,USR可以共享數(shù)據(jù)。

          LV2全局變量的優(yōu)點是只存在一個數(shù)據(jù)拷貝,而且是內(nèi)在的鎖定機制。另外的優(yōu)勢在于可以通過添加代碼提高它的性能,因為可以用于擁有自己的存儲值,這是非常有用的。

          第四,利用隊列(高級函數(shù)選板,同其它同步函數(shù)在一起)。隊列的常規(guī)用法是在隊列中保存產(chǎn)生的數(shù)據(jù),但是隊列也有一種特殊的方法,使用隊列作為全局變量。這種方式隊列中只保存一個元素,每次調(diào)用隊列開始時要取出元素,此時其它要使用隊列的地方必須等待,直至正在調(diào)用隊列的VI完成,把元素加入隊列。利用隊列構(gòu)建的全局變量速度高于LV2全局變量,但是比內(nèi)置的全局變量慢。

          使用全局變量時,有幾點必須指出,供參考。

          1、打斷了數(shù)據(jù)流。這是非常重要的一點,因為打斷了數(shù)據(jù)流會導(dǎo)致程序難于理解,難于調(diào)試和排錯。

          2、競爭。當(dāng)有多個位置寫入全局變量時,非常容易導(dǎo)致數(shù)據(jù)丟失。

          ------------------------------------------------------------------------------------------------------------------

          BEN:

          使用全局變量對于大型應(yīng)用程序的開發(fā)和升級非常危險。我再次強調(diào)全局變量是魔鬼,是魔鬼。

          ---------------------------------------------------------------------------------------------------------------------------

          TBOB:

          我再次重復(fù)幾周前說過的話,全局變量不是魔鬼,不恰當(dāng)?shù)厥褂萌肿兞坎攀悄Ч怼?p>我已經(jīng)在測試測量領(lǐng)域開發(fā)了一些大型應(yīng)用程序,我利用全局變量保存所有儀器的GPIB地址和PCI卡的名稱,這些東西絕對不會在運行中寫入,總是在讀取。我就不明白了,這種情況下我用全局變量有錯嗎?

          某些情況下,全局變量對簡化程序是必須的。我使用全局變量類似于C語言的常量定義。

          -----------------------------------------------------------------------------------------------------------------------

          RAY:

          我偶爾會使用全局變量,使用場合與TBOB類似。

          ----------------------------------------------------------------------------------------------------------------------

          TBOB:

          我曾經(jīng)使用INI文件或者配置文件保存配置數(shù)據(jù),但是每次讀取它們非常繁瑣,而且每當(dāng)我需要讀取一個儀器的GPIB地址時,速度很慢。如果使用文件,我通常在程序開始時讀取文件,然后把配置數(shù)據(jù)保存在WORM全局變量(寫一次,讀任意)中,在狀態(tài)機中使用它們。

          --------------------------------------------------------------------------------------------------------------------------

          BEN:

          周末我又考慮一下全局變量的問題。

          WORM GLOBALS(寫一次,讀多次)----------在你是程序開發(fā)者而且只有你是程序開發(fā)者的情況下是安全的。

          ------------------------------------------------------------------------------------------------------------------------------

          TBOB:

          很現(xiàn)實的想法,BEN.我只有在常量的情況或者WORM GLOBALS時才使用全局變量。技巧就是對于我的繼任者,也告誡他們和采用同樣的做法。

          ------------------------------------------------------------------------------------------------------------------------------

          TBOB:

          ------------------------------------------------------------------------------------------------------------------------------


          上一頁 1 2 下一頁

          關(guān)鍵詞: LABVIEW全局變

          評論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();