新聞中心

EEPW首頁(yè) > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > LabVIEW數(shù)據(jù)流控制方法研究

LabVIEW數(shù)據(jù)流控制方法研究

作者: 時(shí)間:2012-03-22 來(lái)源:網(wǎng)絡(luò) 收藏
引言

  (Laboratory Virtual Instrument Engineering Workbench)是虛擬儀器概念的首創(chuàng)者,是世界上最優(yōu)秀的虛擬儀器軟件開(kāi)發(fā)平臺(tái)。它使用圖形化流編程語(yǔ)言,這種新興的編程方式給編程人員帶來(lái)了新的困難,主要體現(xiàn)于對(duì)流的控制上。

  本文剖析了語(yǔ)言的特點(diǎn),提供了其若干有效控制方法,指出本身即可解決數(shù)據(jù)上的變量沖突、響應(yīng)時(shí)序控制、初始狀態(tài)自適應(yīng)調(diào)整等問(wèn)題并保證其通用性,而不必求助于其它代碼語(yǔ)言(如C語(yǔ)言),這樣,既減輕了程序的復(fù)雜性,提高了效率,還豐富了LabVIEW的應(yīng)用。文中以單選功能按鈕設(shè)計(jì)實(shí)例詳述了變量沖突、響應(yīng)時(shí)序控制、初始狀態(tài)自適應(yīng)調(diào)整等問(wèn)題的具體解決方案,在某型裝備測(cè)試系統(tǒng)的實(shí)際運(yùn)行中驗(yàn)證了該方法可行有效。

  1 數(shù)據(jù)流編程的特點(diǎn)

  數(shù)據(jù)流語(yǔ)言的每個(gè)節(jié)點(diǎn)在執(zhí)行之前需要提供其所有輸入端口的有效數(shù)據(jù),LabVIEW允許用戶在一個(gè)圖表上擁有任意數(shù)量的不同節(jié)點(diǎn),所有的節(jié)點(diǎn)可以并行執(zhí)行。LabVIEW環(huán)境還支持多個(gè)VI并行執(zhí)行,而不管操作系統(tǒng)或者計(jì)算機(jī)的功能如何。這些功能使得用戶無(wú)須做任何特殊編程工作就可以非常自由地同步執(zhí)行各種不同的任務(wù)。

  LabVIEW數(shù)據(jù)流編程克服了文本語(yǔ)言編程內(nèi)存管理中的許多困難。在LabVIEW中,不必給變量分配內(nèi)存,也不必為變量賦值或者從變量取值,只需創(chuàng)建一個(gè)帶有描述數(shù)據(jù)轉(zhuǎn)換關(guān)系的內(nèi)部聯(lián)系的框圖程序。產(chǎn)生數(shù)據(jù)的函數(shù)可以精心地為數(shù)據(jù)分配內(nèi)存,當(dāng)數(shù)據(jù)不再使用時(shí),相應(yīng)的內(nèi)存被釋放。當(dāng)向數(shù)組或字符串添加新數(shù)據(jù)時(shí),管理新數(shù)據(jù)的足夠內(nèi)存資源會(huì)自動(dòng)進(jìn)行分配,這種自動(dòng)的內(nèi)存分配操作是LabVIEW的主要優(yōu)勢(shì)之一。

  2 數(shù)據(jù)流編程的難點(diǎn)及若干解決方案

  LabVIEW程序的內(nèi)存管理是自動(dòng)進(jìn)行的,中間狀態(tài)的捕捉和控制十分困難。例如,實(shí)時(shí)顯示現(xiàn)場(chǎng)采集數(shù)據(jù)串的最大值問(wèn)題、通過(guò)按鈕手動(dòng)控制現(xiàn)場(chǎng)采集數(shù)據(jù)串某一時(shí)刻數(shù)據(jù)作為比較對(duì)象的問(wèn)題以及單選功能按鈕的實(shí)現(xiàn)問(wèn)題等等,似簡(jiǎn)實(shí)難。經(jīng)編程實(shí)踐,總結(jié)方案如下:

  (1)結(jié)構(gòu)控制

  循環(huán)結(jié)構(gòu),如For循環(huán)和while循環(huán)結(jié)構(gòu);順序(Sequence)結(jié)構(gòu),適當(dāng)使用Sequence結(jié)構(gòu)能提高程序可讀性,讓數(shù)據(jù)清晰流動(dòng);分支結(jié)構(gòu)(case Structure);事件結(jié)構(gòu)(Event Structure),允許用戶在前面板的直接干預(yù)或程序不同部分之間的交流影響程序的執(zhí)行;定時(shí)循環(huán)(Timed Loop)結(jié)構(gòu),可創(chuàng)建多采樣率(multi-rate)的、對(duì)時(shí)間要求嚴(yán)格(time-critical)的數(shù)據(jù)采集應(yīng)用程序,并定義不同優(yōu)先級(jí)的循環(huán)。

  (2)移位寄存器(Shift Register)控制

  移位寄存器與While或For循環(huán)結(jié)合能夠保存各種狀態(tài)信息,未初始化的移位寄存器則保留著以前的內(nèi)容。

  (3)變量控制

  變量在這里指局部變量和全局變量。局部變量用來(lái)在一個(gè)VI程序內(nèi)部傳遞數(shù)據(jù),它不僅可以解決連線的困難,而且可以對(duì)同一個(gè)控件多次寫(xiě)入和讀出數(shù)據(jù)。全局變量則可用于在不同程序之間傳遞數(shù)據(jù),全局變量也是用一個(gè)控件的形式存放數(shù)據(jù),但是這個(gè)控件獨(dú)立于調(diào)用它的VI,以一個(gè)特殊的VI作為自己的容器。

  (4)通告(Notifier)和隊(duì)列(Queue)控制

  通告和隊(duì)列的方式有時(shí)可代替變量方式來(lái)傳遞數(shù)據(jù)。使用通告方式傳遞數(shù)據(jù)時(shí),只有寫(xiě)入數(shù)據(jù)并告知后才能讀取數(shù)據(jù)。通告以廣播的方式發(fā)布,收到廣播的用戶都可以去讀數(shù)據(jù)。隊(duì)列方式傳遞數(shù)據(jù)是最先去讀數(shù)據(jù)的用戶讀完數(shù)據(jù)就將它擦掉,只有一個(gè)接收數(shù)據(jù)的用戶。

  單一使用上述某種方案往往力不從心,綜合靈活運(yùn)用才能在編程中產(chǎn)生較好的效果。

  3 實(shí)例分析

  單選功能按鈕的設(shè)計(jì)是許多綜合測(cè)試系統(tǒng)設(shè)計(jì)中的一部分。它要求完成的功能是:

 ?、?某一個(gè)按鈕按下去時(shí),其余按鈕全部處于無(wú)效的工作狀態(tài)。

 ?、?按下去的按鈕要求能無(wú)誤地啟動(dòng)系統(tǒng)的該項(xiàng)功能。

  設(shè)計(jì)中需要解決以下問(wèn)題:

 ?、?變量沖突。程序包含按鈕間的相互控制,其控件及局部變量間的沖突問(wèn)題十分突出;

  ⑵ 響應(yīng)時(shí)序控制。按鈕操作和讀按鈕狀態(tài)的先后次序需進(jìn)行適應(yīng)控制,否則容易產(chǎn)生空檔(按鈕按下卻不啟動(dòng)系統(tǒng)的功能)和幾個(gè)按鈕同時(shí)被按下等異常情況,導(dǎo)致程序紊亂;

 ?、?初始狀態(tài)自適應(yīng)調(diào)整問(wèn)題。

  用LabVIEW設(shè)計(jì)流程圖及流程圖示說(shuō)明如下所示:

  BUTTON ARRAY :按鈕合在一起的數(shù)組;

  SEARCH 1D ARRAY:比較兩數(shù)組的不同,返回不同元素的序號(hào);

  INDEX ARRAY(INDEX,ELEM):數(shù)組ARRAY, INDEX是序號(hào),ELEM是元素。此函數(shù)是找出數(shù)組ARRAY中序號(hào)為INDEX的元素;

  NULL:空操作;

  DIFFERENCES:差異信息;

  D.B.:Digital buttons數(shù)字化按鈕,即用編號(hào)表示不同按鈕。

  總流程為將框圖1所示流程循環(huán)兩次!再進(jìn)行框圖2所示流程,具體步驟詳述如下:

  針對(duì)問(wèn)題⑴,程序遵循“對(duì)操作的按鈕不操作”的原則。如框圖1,用SEARCH 1D ARRAY分辨出被操作的按鈕,對(duì)其它按鈕置“假”。這樣,按鈕間就可不發(fā)生沖突。

LabVIEW數(shù)據(jù)流控制方法研究

  框圖1

LabVIEW數(shù)據(jù)流控制方法研究

  框圖2

針對(duì)問(wèn)題⑵,則必須充分考慮程序的數(shù)據(jù)“流”運(yùn)行過(guò)程。分述如下:

 ?、?每次讀BUTTON布爾值時(shí),都要考慮外界面是否有對(duì)按鈕的操作輸入,這在框圖1、2中都體現(xiàn)得很明顯;

 ?、?框圖1要循環(huán)2次很關(guān)鍵??紤]這樣一種情況:外界面對(duì)按鈕的操作在BUTTON ARRAY(1)與BUTTON ARRAY(2)之間,則在循環(huán)的第一次對(duì)按鈕的操作沒(méi)有起作用,但它以反饋機(jī)制把按鈕信息傳給了始端,由于程序運(yùn)行的速度遠(yuǎn)在人工界面上的手動(dòng)操作速度之上,所以循環(huán)的第二次無(wú)外界輸入,這樣對(duì)按鈕的操作在循環(huán)二次后便響應(yīng)了,沒(méi)有掛空。同理,當(dāng)外界面對(duì)按鈕的操作介于BUTTON ARRAY(2)與框圖2的read BUTTONs之間時(shí),外界面對(duì)按鈕的操作會(huì)在下一循環(huán)(對(duì)實(shí)際測(cè)試系統(tǒng)肯定是大范圍循環(huán)操作的)產(chǎn)生作用,由于程序運(yùn)行得很快,操作者看到的是“實(shí)時(shí)”的操作。如果在read BUTTONs之后,那就回到框圖1的始端了。因此,任何時(shí)候按下按鈕,程序皆運(yùn)行正常。

  針對(duì)問(wèn)題⑶,未初始化的移位寄存器能保留原有的狀態(tài)。在程序運(yùn)行前,若出現(xiàn)按鈕異?,F(xiàn)象,由于程序默認(rèn)一個(gè)按鈕按下,異常按鈕會(huì)立即得以糾正。

  對(duì)于數(shù)字化按鈕(見(jiàn)流程圖框圖2)的實(shí)現(xiàn),將按鈕狀態(tài)轉(zhuǎn)化為0、1,用一個(gè)連加運(yùn)算根據(jù)其和的大小便可知道是否同時(shí)有多按鈕或單按鈕或無(wú)按鈕按下,從而將按鈕信號(hào)引出。

LabVIEW數(shù)據(jù)流控制方法研究

  圖2 部分LabVIEW程序示例

  4 結(jié)束語(yǔ)

  單選功能按鈕的設(shè)計(jì)是個(gè)很典型的數(shù)據(jù)實(shí)例,文中給出的用LabVIEW本身解決變量沖突、響應(yīng)時(shí)序控制、初始狀態(tài)自適應(yīng)調(diào)整等問(wèn)題的方法,沒(méi)有使用事件驅(qū)動(dòng)結(jié)構(gòu),避免了在測(cè)試系統(tǒng)中并行使用事件驅(qū)動(dòng)結(jié)構(gòu)產(chǎn)生的沖突。



關(guān)鍵詞: LabVIEW 數(shù)據(jù) 流控制

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉