0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

講解一下LabVIEW中常見的變量

jf_V8z5L4Nx ? 來源:傳感測控物聯(lián)網(wǎng) ? 2023-07-10 08:53 ? 次閱讀

變量,有別于LabVIEW圖形化編程環(huán)境所倡導(dǎo)的數(shù)據(jù)流(連線)形式,看似簡單,其實(shí)在LabVIEW編程中是一個(gè)高級的話題。使用變量,如果理解不透,處理不好,輕則影響程序執(zhí)行效率,重則產(chǎn)生一些意想不到的后果。

這篇推送里我們講解一下LabVIEW中常見的變量,它們各自的作用范圍、使用方法和使用時(shí)的注意事項(xiàng)。相信你認(rèn)真看完后一定會有所收獲。

LabVIEW里常見的變量類型:局部變量、全局變量、移位寄存器、反饋節(jié)點(diǎn)。

1.局部變量Local Variable 局部變量作用范圍為當(dāng)前VI內(nèi),必須在前面板上有對應(yīng)的控件。 在程序框圖里局部變量用一個(gè)帶小房子的圖標(biāo)表示。

119ad2a0-1e37-11ee-962d-dac502259ad0.png

創(chuàng)建/使用局部變量的方法:

1)程序框圖界面下從Structure分類里選擇Local Variable,放置到代碼框圖里,選擇需要關(guān)聯(lián)的控件。

2)選中前面板或程序框圖中的控件,右鍵彈出快捷菜單,選擇Create->Local Variable,移動鼠標(biāo)把創(chuàng)建的局部變量放置到需要的位置。

11bc70cc-1e37-11ee-962d-dac502259ad0.png

2.全局變量Global Variable

全局變量作用范圍為本地計(jì)算機(jī),可在多個(gè)VI、多個(gè)LabVIEW設(shè)計(jì)的應(yīng)用程序之間共享數(shù)據(jù)。 在程序框圖里全局變量用一個(gè)帶地球的圖標(biāo)表示,global variable。

11d9746a-1e37-11ee-962d-dac502259ad0.png

創(chuàng)建/使用全局變量的方法:

1)程序框圖界面下從Structure分類里選擇Global Variable,放置到代碼框圖里,選擇需要關(guān)聯(lián)的控件。如果沒有可關(guān)聯(lián)控件,則雙擊全局變量打開全局變量前面板,在前面板上放好全局變量對應(yīng)的控件(完成了全局變量的創(chuàng)建)。

2)對于已經(jīng)創(chuàng)建好的全局變量,選擇保存全局變量的VI即可選擇調(diào)用。

不同于局部變量,全局變量需要一個(gè)單獨(dú)的VI保存。多個(gè)全局變量可以保存在一個(gè)VI中。

這個(gè)VI只有前面板(沒有程序框圖),用于保存全局變量對應(yīng)的控件。 我們設(shè)計(jì)兩個(gè)獨(dú)立運(yùn)行的VI,一個(gè)給全局變量寫數(shù)據(jù),另一個(gè)可以把全局變量的數(shù)據(jù)讀取出來。這就通過全局變量實(shí)現(xiàn)了在兩個(gè)小程序之間進(jìn)行數(shù)據(jù)傳遞。

11fac160-1e37-11ee-962d-dac502259ad0.png

121ef40e-1e37-11ee-962d-dac502259ad0.png

3.移位寄存器Shift Register

移位寄存器用于循環(huán)結(jié)構(gòu)多次循環(huán)之間傳遞數(shù)據(jù),將上一次循環(huán)更新的數(shù)據(jù)傳遞到下一次循環(huán),在程序框圖中以上下兩個(gè)箭頭表示。

123d543a-1e37-11ee-962d-dac502259ad0.png

移位寄存器的作用范圍為所在循環(huán)結(jié)構(gòu)。 創(chuàng)建/使用移位寄存器的方法: 在循環(huán)結(jié)構(gòu)的邊框上單擊鼠標(biāo)右鍵,選擇Add Shift Register就創(chuàng)建了一對移位寄存器,循環(huán)結(jié)構(gòu)的左右側(cè)各一個(gè)。

在左側(cè)移位寄存器放置一個(gè)數(shù)值常量/控件,為移位寄存器設(shè)定初始值,同時(shí)LabVIEW會根據(jù)輸入值的類型自動設(shè)定移位寄存器的數(shù)據(jù)類型。

1268ae3c-1e37-11ee-962d-dac502259ad0.png

例如下面這個(gè)代碼,通過移位寄存器實(shí)現(xiàn)N+(N-1)+(N-2)+...+2+1。

12923db0-1e37-11ee-962d-dac502259ad0.png

4.反饋節(jié)點(diǎn)Feedback Node

反饋節(jié)點(diǎn)保存上一次執(zhí)行更新的數(shù)據(jù),可以用于循環(huán)結(jié)構(gòu),也可以用于其它代碼。反饋節(jié)點(diǎn)作用范圍為當(dāng)前VI。 在程序框圖中反饋節(jié)點(diǎn)用下面這個(gè)圖標(biāo)表示,*那里的接線端用于給反饋節(jié)點(diǎn)設(shè)置初始值。與移位寄存器一樣,反饋節(jié)點(diǎn)通過初始值自動確定數(shù)據(jù)類型。

12c36138-1e37-11ee-962d-dac502259ad0.png

例如下面這個(gè)代碼,通過反饋節(jié)點(diǎn)實(shí)現(xiàn)N+(N-1)+(N-2)+...+2+1。

12edf538-1e37-11ee-962d-dac502259ad0.png

反饋節(jié)點(diǎn)和移位寄存器的功能和本質(zhì)完全相同,但是反饋節(jié)點(diǎn)有以下幾個(gè)特點(diǎn):

1、反饋節(jié)點(diǎn)有啟用輸入端,可以設(shè)置啟用條件。 2、反饋節(jié)點(diǎn)可以設(shè)置延時(shí)次數(shù),規(guī)定每多少次迭代反饋一次數(shù)據(jù)。 3、反饋節(jié)點(diǎn)相當(dāng)于為所在VI創(chuàng)建了移位寄存器;而移位寄存器只是為所在循環(huán)結(jié)構(gòu)創(chuàng)建。

5.使用注意事項(xiàng)

1)局部/全局變量必須有控件與之對應(yīng);全局變量的控件需要保存在單獨(dú)的VI文件中。

2)無論哪種形式的變量,使用前都必須初始化。

3)必須考慮競爭對局部/全局變量的影響。

對局部變量來說,要處理好VI內(nèi)可能的并發(fā)訪問。

對全局變量來說,既要處理好VI內(nèi)可能的并發(fā)訪問,也要處理好多線程可能的并發(fā)訪問。

處理的基本方法就是要么避免并發(fā)訪問,設(shè)法改為順序訪問;要么使用信號量等同步機(jī)制。

4)考慮內(nèi)存使用量

每次對變量的讀取,LabVIEW都會創(chuàng)建內(nèi)存緩沖區(qū)保存讀取的數(shù)據(jù)。多次、不同位置、大容量數(shù)據(jù)在使用變量保存時(shí),應(yīng)由其注意。

5)反饋節(jié)點(diǎn)初始化和未初始化差異 下面這個(gè)代碼,VI首次運(yùn)行時(shí)會初始化反饋節(jié)點(diǎn)。所以無論這個(gè)VI自身執(zhí)行多少次,N等于5的時(shí)候結(jié)果都是15。

131084c2-1e37-11ee-962d-dac502259ad0.png

132f3ef8-1e37-11ee-962d-dac502259ad0.png

下面這個(gè)代碼,反饋節(jié)點(diǎn)沒有進(jìn)行初始化。第一次執(zhí)行該VI,反饋節(jié)點(diǎn)使用數(shù)據(jù)類型默認(rèn)初始值0作為初始值,VI執(zhí)行完之后反饋節(jié)點(diǎn)的值為10,加上N(5)后作為本次VI執(zhí)行后的輸出值15。第二次執(zhí)行該VI,反饋節(jié)點(diǎn)使用上一次VI執(zhí)行后的反饋節(jié)點(diǎn)值10作為初始值,循環(huán)執(zhí)行完之后反饋節(jié)點(diǎn)的值為20,加上N(5)后作為第二次VI執(zhí)行后的輸出值25。

1358d5e2-1e37-11ee-962d-dac502259ad0.png

1379f6b4-1e37-11ee-962d-dac502259ad0.png

6)多次調(diào)用含有反饋節(jié)點(diǎn)的VI 注意這里說的是“多次調(diào)用”,不是含有反饋節(jié)點(diǎn)的VI自身多次執(zhí)行(Ctrl+R)。

131084c2-1e37-11ee-962d-dac502259ad0.png

上面這個(gè)VI,執(zhí)行一次后反饋節(jié)點(diǎn)等于10。這個(gè)10就作為下次該VI被調(diào)用時(shí)反饋節(jié)點(diǎn)的初始值。所以這個(gè)VI被調(diào)用兩次后,輸出的值為25,三次后輸出的值為35。

13dbe4fa-1e37-11ee-962d-dac502259ad0.png

13fb0326-1e37-11ee-962d-dac502259ad0.png

相比之下,Shift Register因?yàn)獒槍Φ氖撬谘h(huán)結(jié)構(gòu),所以使用Shift Register就不存在這樣的問題。

7)嵌套循環(huán)中Shift Register和Feedback Node的不同

下面這個(gè)代碼,都是計(jì)算5+4+3+2+1,多次執(zhí)行后的終值卻是不一樣的。 使用ShiftRegister的,執(zhí)行三次后終值是15,和單次執(zhí)行一樣。因?yàn)镾hift Register作用范圍為所在循環(huán)結(jié)構(gòu),內(nèi)部For循環(huán)每次執(zhí)行前移位寄存器都被初始化為0,所以三次執(zhí)行后終值還是15。 使用Feedback Node的,執(zhí)行三次后終值是35(你是不是認(rèn)為應(yīng)該是15或者45?)。

因?yàn)镕eedback Node作用范圍為整個(gè)VI,前面說過相當(dāng)于為VI創(chuàng)建了移位寄存器。VI每次執(zhí)行時(shí)都使用上一次執(zhí)行后的反饋節(jié)點(diǎn)值作為初始值。所以執(zhí)行三次后,10+10+10+5 = 35。

1428e7a0-1e37-11ee-962d-dac502259ad0.png

8)如何改變6)和7)中反饋節(jié)點(diǎn)的“異常”表現(xiàn)

Feedback Node之所以會有上面講述的那些“異?!北憩F(xiàn),主要是因?yàn)樗辉谑状螆?zhí)行VI時(shí)執(zhí)行初始化,之后多次調(diào)用都是使用同一塊內(nèi)存區(qū)域保存數(shù)據(jù)。我們改變Feedback Node所在VI的可重入執(zhí)行設(shè)置,讓其變?yōu)镻reallocated clone reentrant execution,這樣每次調(diào)用這個(gè)VI都使用的是不同的內(nèi)存,多次調(diào)用之間就不會再有影響(但是反饋節(jié)點(diǎn)在多次VI調(diào)用之間反饋數(shù)據(jù)的功能也丟失了)。

144e418a-1e37-11ee-962d-dac502259ad0.png

更改之后無論執(zhí)行多少次,結(jié)果都是15。

14734444-1e37-11ee-962d-dac502259ad0.png

6.查看當(dāng)前VI全局/局部變量使用情況

Tools->Profile->VI Metrics,勾選Globals/locals。LabVIEW會自動統(tǒng)計(jì)當(dāng)前VI及其調(diào)用的子VI中全局/局部變量使用情況。

14aafbc8-1e37-11ee-962d-dac502259ad0.png

以上是一些關(guān)于局部變量、全局變量、Shift Register、Feedback Node的知識共享,希望能夠引起大家的思考。有些莫名其妙的Bug就是隱藏在對變量不透徹的理解和運(yùn)用中。感興趣的朋友可以去試一試,一定能夠?qū)σ院蟮拈_發(fā)工作有所幫助。




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • LabVIEW
    +關(guān)注

    關(guān)注

    1958

    文章

    3651

    瀏覽量

    321462
  • 緩沖器
    +關(guān)注

    關(guān)注

    6

    文章

    1905

    瀏覽量

    45398
  • 移位寄存器
    +關(guān)注

    關(guān)注

    2

    文章

    257

    瀏覽量

    22197
  • labview編程
    +關(guān)注

    關(guān)注

    2

    文章

    8

    瀏覽量

    14087

原文標(biāo)題:LabVIEW常見變量類型及使用注意事項(xiàng)

文章出處:【微信號:傳感測控物聯(lián)網(wǎng),微信公眾號:傳感測控物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    linux系統(tǒng)中常見注冊函數(shù)的使用方法

    大家好,今天給大家分享一下,linux系統(tǒng)中常見的注冊函數(shù)register_chrdev_region()、register_chrdev()、 alloc_chrdev_region()的使用方法。
    發(fā)表于 10-19 09:28 ?483次閱讀
    linux系統(tǒng)<b class='flag-5'>中常見</b>注冊函數(shù)的使用方法

    我想問一下labview使用變量庫與opc連接 與plc的通訊方式

    我想問一下labview使用變量庫與opc連接 與plc的通訊方式
    發(fā)表于 12-13 09:31

    求助一下大神講解一下圖中的電路原理 謝謝

    如題,求助一下大神講解一下圖中的電路原理 謝謝,有報(bào)酬
    發(fā)表于 06-14 21:42

    求大神講解一下labview程序

    附近有labview程序,不難,比較簡單,這個(gè)循環(huán)次數(shù)i/2的余數(shù),i/4的余數(shù)的選擇程序框是什么意思,求大神詳細(xì)講解一下,感激不盡!
    發(fā)表于 05-12 18:34

    講解一下HarmonyOS中的幾個(gè)自定義組件用到的知識

    開發(fā)自定義組件目前還不是很豐富,在開發(fā)過程中常常會有些特殊效果的組件,這就需要我們額外花些時(shí)間實(shí)現(xiàn),這里給大家提供了個(gè) BottomSheet 上拉抽屜的組件,同時(shí)通過這個(gè)組件
    發(fā)表于 03-16 16:05

    視頻監(jiān)控系統(tǒng)中常見故障及其排除

    視頻監(jiān)控系統(tǒng)中常見故障及其排除講解
    發(fā)表于 11-11 17:53 ?149次下載
    視頻監(jiān)控系統(tǒng)<b class='flag-5'>中常見</b>故障及其排除

    LabVIEW局部變量與全局變量

    LabVIEW 是以數(shù)據(jù)流決定程序框圖元素的執(zhí)行順序,但在某些程序框圖中需要消除數(shù)據(jù)流的依賴性,這時(shí)可以考慮使用變量。LabVIEW 中的變量是程序框圖中的元素,通過它可以在另
    發(fā)表于 09-12 10:46 ?54次下載

    Labview之全局變量

    Labview之全局變量,很好的Labview資料,快來下載學(xué)習(xí)吧。
    發(fā)表于 04-19 10:56 ?0次下載

    LabVIEW課程要點(diǎn)講解(2)

    LabVIEW的重點(diǎn)課程講解
    的頭像 發(fā)表于 06-25 10:11 ?1903次閱讀
    <b class='flag-5'>LabVIEW</b>課程要點(diǎn)<b class='flag-5'>講解</b>(2)

    文了解PCB中常見14大錯(cuò)誤

    文了解PCB中常見14大錯(cuò)誤,具體的跟隨小編一起來看一下。
    的頭像 發(fā)表于 07-22 11:29 ?5860次閱讀

    機(jī)電行業(yè)中常見的英文縮寫及其含義分享

    機(jī)電行業(yè)中常見的英文縮寫及其含義分享,具體的跟隨小編起來了解一下。
    的頭像 發(fā)表于 07-23 14:17 ?1.2w次閱讀

    簡單講解一下時(shí)控開關(guān)手動如何打開或者關(guān)閉

    時(shí)控開關(guān)直都是按照設(shè)置好時(shí)間自動定時(shí)控制,如果因?yàn)樾枨笮枰謩犹崆伴_關(guān)或者提前關(guān)閉時(shí)控開關(guān),怎么操作呢?今天簡單講解一下時(shí)控開關(guān)手動怎么打開/關(guān)閉? 根據(jù)當(dāng)前市場上主要使用的兩種時(shí)控開關(guān)(分別
    發(fā)表于 11-19 16:15 ?1.6w次閱讀

    詳解LABVIEW中的局部變量和全局變量

    本文檔的主要內(nèi)容詳細(xì)介紹的是LABVIEW初級教程之局部變量與全局變量的詳細(xì)資料說明。
    發(fā)表于 03-29 15:00 ?26次下載

    基于LabVIEW的虛擬示波器設(shè)計(jì)講解

    基于LabVIEW的虛擬示波器設(shè)計(jì)講解說明。
    發(fā)表于 05-25 11:34 ?119次下載

    基于LabVIEW的溫控系統(tǒng)講解

    基于LabVIEW的溫控系統(tǒng)講解。
    發(fā)表于 05-27 15:22 ?61次下載